Create stripAnsiSequence()

This commit is contained in:
billz 2024-11-27 23:19:41 -08:00
parent 50d0e0be82
commit 66f5cd4183

View File

@ -20,6 +20,7 @@ function DisplayProviderConfig()
$statusDisplay = 'down'; $statusDisplay = 'down';
$ctlState = ''; $ctlState = '';
// handle page actions
if (!RASPI_MONITOR_ENABLED) { if (!RASPI_MONITOR_ENABLED) {
if (isset($_POST['SaveProviderSettings'])) { if (isset($_POST['SaveProviderSettings'])) {
if (isset($_POST['country'])) { if (isset($_POST['country'])) {
@ -162,6 +163,18 @@ function stripArtifacts($output, $pattern = null)
return implode("\n", $lines); return implode("\n", $lines);
} }
/**
* Removes ANSI escape sequences and preserves CLI return values
*
* @param array $output
*/
function stripAnsiSequence($output)
{
return array_map(function ($line) {
return preg_replace('/\x1b\[[0-9;]*[a-zA-Z]/', '', $line);
}, $output);
}
/** /**
* Retrieves an override for provider CLI * Retrieves an override for provider CLI
* *
@ -265,7 +278,7 @@ function getCountries($id, $binPath)
$countries[$value] = str_replace("_", " ", $value); $countries[$value] = str_replace("_", " ", $value);
} }
break; break;
case 4: // AdGuard case 4: // adguard
$raw_countries = []; $raw_countries = [];
$totalLines = count($output); $totalLines = count($output);
foreach ($output as $index => $item) { foreach ($output as $index => $item) {
@ -273,7 +286,6 @@ function getCountries($id, $binPath)
// exclude first and last lines // exclude first and last lines
continue; continue;
} }
// $item = preg_replace($pattern, $replace, $item);
preg_match($pattern, $item, $matches); preg_match($pattern, $item, $matches);
$item_country = trim($matches[1]); $item_country = trim($matches[1]);
$item_city = trim($matches[2]); $item_city = trim($matches[2]);
@ -292,7 +304,7 @@ function getCountries($id, $binPath)
foreach ($raw_countries as $country => $cities) { foreach ($raw_countries as $country => $cities) {
sort($raw_countries[$country]); // Trier les villes par ordre alphabétique sort($raw_countries[$country]); // Trier les villes par ordre alphabétique
} }
// display results sorted by country, then by city // sort results by country, then by city
foreach ($raw_countries as $country => $cities) { foreach ($raw_countries as $country => $cities) {
foreach ($cities as $city) { foreach ($cities as $city) {
$item_key = str_replace(" ", "_", $city); $item_key = str_replace(" ", "_", $city);
@ -321,9 +333,7 @@ function getProviderLog($id, $binPath, &$country)
$providerLog = ''; $providerLog = '';
$cmd = getCliOverride($id, 'cmd_overrides', 'log'); $cmd = getCliOverride($id, 'cmd_overrides', 'log');
exec("sudo $binPath $cmd", $cmd_raw); exec("sudo $binPath $cmd", $cmd_raw);
$output = array_map(function ($line) { $output = stripAnsiSequence($cmd_raw);
return preg_replace('/\x1b\[[0-9;]*[a-zA-Z]/', '', $line);
}, $cmd_raw);
foreach ($output as $item) { foreach ($output as $item) {
if (preg_match('/Country: (\w+)/', $item, $match)) { if (preg_match('/Country: (\w+)/', $item, $match)) {
$country = $match[1]; $country = $match[1];
@ -360,10 +370,7 @@ function getAccountInfo($id, $binPath, $providerName)
{ {
$cmd = getCliOverride($id, 'cmd_overrides', 'account'); $cmd = getCliOverride($id, 'cmd_overrides', 'account');
exec("sudo $binPath $cmd", $acct); exec("sudo $binPath $cmd", $acct);
$acct = stripAnsiSequence($acct);
$acct = array_map(function ($line) {
return preg_replace('/\x1b\[[0-9;]*[a-zA-Z]/', '', $line);
}, $acct);
foreach ($acct as &$item) { foreach ($acct as &$item) {
$item = preg_replace('/^[^\w]+\s*/', '', $item); $item = preg_replace('/^[^\w]+\s*/', '', $item);
} }