diff --git a/includes/provider.php b/includes/provider.php
index e7bc59052..d2a397ea7 100755
--- a/includes/provider.php
+++ b/includes/provider.php
@@ -16,37 +16,10 @@ function DisplayProviderConfig()
$providerName = getProviderValue($id, "name");
$providerVersion = getProviderVersion($id, $binPath);
$installPage = getProviderValue($id, "install_page");
- $publicIP = get_public_ip();
$serviceStatus = 'down';
$statusDisplay = 'down';
$ctlState = '';
- if (!file_exists($binPath)) {
- $status->addMessage(sprintf(_('Expected %s binary not found at: %s'), $providerName, $binPath), 'warning');
- $status->addMessage(sprintf(_('Visit the installation instructions for %s\'s Linux CLI.'), $installPage, $providerName), 'warning');
- $ctlState = 'disabled';
- $providerVersion = 'not found';
- } elseif (empty($providerVersion)) {
- $status->addMessage(sprintf(_('Unable to execute %s binary found at: %s'), $providerName, $binPath), 'warning');
- $status->addMessage(_('Check that binary is executable and permissions exist in raspap.sudoers'), 'warning');
- $ctlState = 'disabled';
- $providerVersion = 'not found';
- } else {
- // fetch provider status
- $serviceStatus = getProviderStatus($id, $binPath);
- $statusDisplay = $serviceStatus == "down" ? "inactive" : "active";
-
- // fetch provider log
- $providerLog = getProviderLog($id, $binPath, $country);
-
- // fetch account info
- $accountInfo = getAccountInfo($id, $binPath, $providerName);
- $accountLink = getProviderValue($id, "account_page");
-
- // fetch available countries
- $countries = getCountries($id, $binPath);
- }
-
if (!RASPI_MONITOR_ENABLED) {
if (isset($_POST['SaveProviderSettings'])) {
if (isset($_POST['country'])) {
@@ -60,7 +33,11 @@ function DisplayProviderConfig()
} elseif (isset($_POST['StartProviderVPN'])) {
$status->addMessage('Attempting to connect VPN provider', 'info');
$cmd = getCliOverride($id, 'cmd_overrides', 'connect');
- exec("sudo $binPath $cmd", $return);
+ $country = escapeshellarg(trim($_POST['country']));
+ if ($id = 4) { // AdGuard requires country argument on connect
+ $arg = escapeshellarg(trim($_POST['country']));
+ }
+ exec("sudo $binPath $cmd $arg", $return);
$return = stripArtifacts($return);
foreach ($return as $line) {
if (strlen(trim($line)) > 0) {
@@ -83,6 +60,33 @@ function DisplayProviderConfig()
}
}
+ if (!file_exists($binPath)) {
+ $status->addMessage(sprintf(_('Expected %s binary not found at: %s'), $providerName, $binPath), 'warning');
+ $status->addMessage(sprintf(_('Visit the installation instructions for %s\'s Linux CLI.'), $installPage, $providerName), 'warning');
+ $ctlState = 'disabled';
+ $providerVersion = 'not found';
+ } elseif (empty($providerVersion)) {
+ $status->addMessage(sprintf(_('Unable to execute %s binary found at: %s'), $providerName, $binPath), 'warning');
+ $status->addMessage(_('Check that binary is executable and permissions exist in raspap.sudoers'), 'warning');
+ $ctlState = 'disabled';
+ $providerVersion = 'not found';
+ } else {
+ // fetch provider status
+ $serviceStatus = getProviderStatus($id, $binPath);
+ $statusDisplay = $serviceStatus == "down" ? "inactive" : "active";
+
+ // fetch account info
+ $accountInfo = getAccountInfo($id, $binPath, $providerName);
+ $accountLink = getProviderValue($id, "account_page");
+
+ // fetch available countries
+ $countries = getCountries($id, $binPath);
+
+ // fetch provider log
+ $providerLog = getProviderLog($id, $binPath, $country);
+ }
+ $publicIP = get_public_ip();
+
echo renderTemplate(
"provider", compact(
"status",
@@ -193,8 +197,7 @@ function getProviderStatus($id, $binPath)
$cmd = getCliOverride($id, 'cmd_overrides', 'status');
$pattern = getCliOverride($id, 'regex', 'status');
exec("sudo $binPath $cmd", $cmd_raw);
- $cmd_raw = strtolower(stripArtifacts($cmd_raw[0]));
-
+ $cmd_raw = strtolower(($cmd_raw[0]));
if (!empty($cmd_raw[0])) {
if (preg_match($pattern, $cmd_raw, $match)) {
$status = "down";
@@ -318,7 +321,9 @@ function getProviderLog($id, $binPath, &$country)
$providerLog = '';
$cmd = getCliOverride($id, 'cmd_overrides', 'log');
exec("sudo $binPath $cmd", $cmd_raw);
- $output = stripArtifacts($cmd_raw);
+ $output = array_map(function ($line) {
+ return preg_replace('/\x1b\[[0-9;]*[a-zA-Z]/', '', $line);
+ }, $cmd_raw);
foreach ($output as $item) {
if (preg_match('/Country: (\w+)/', $item, $match)) {
$country = $match[1];
@@ -356,6 +361,9 @@ function getAccountInfo($id, $binPath, $providerName)
$cmd = getCliOverride($id, 'cmd_overrides', 'account');
exec("sudo $binPath $cmd", $acct);
+ $acct = array_map(function ($line) {
+ return preg_replace('/\x1b\[[0-9;]*[a-zA-Z]/', '', $line);
+ }, $acct);
foreach ($acct as &$item) {
$item = preg_replace('/^[^\w]+\s*/', '', $item);
}