diff --git a/app/css/all.css b/app/css/all.css index 15700850..7f07c51f 100644 --- a/app/css/all.css +++ b/app/css/all.css @@ -88,6 +88,8 @@ License: GNU General Public License v3.0 height: 20rem; border: 1px solid #d1d3e2; border-radius: .35rem; + font-family: Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace; + font-size: 0.9rem; } .dhcp-static-leases { diff --git a/includes/provider.php b/includes/provider.php index 7db7631d..521ae7f7 100755 --- a/includes/provider.php +++ b/includes/provider.php @@ -26,17 +26,15 @@ function DisplayProviderConfig() $statusDisplay = $serviceStatus == "down" ? "inactive" : "active"; // fetch provider log - $cmd = getCliOverride($id, 'cmd_overrides', 'status'); - $output = shell_exec("sudo $binPath $cmd"); - $providerLog = stripArtifacts($output); + $providerLog = getProviderLog($id, $binPath, $country); // fetch provider version $providerVersion = shell_exec("sudo $binPath -v"); // fetch account info $cmd = getCliOverride($id, 'cmd_overrides', 'account'); - exec("sudo $binPath $cmd", $output); - $accountInfo = stripArtifacts($output); + exec("sudo $binPath $cmd", $acct); + $accountInfo = stripArtifacts($acct); // fetch available countries $countries = getCountries($id, $binPath); @@ -44,20 +42,27 @@ function DisplayProviderConfig() if (!RASPI_MONITOR_ENABLED) { if (isset($_POST['SaveProviderSettings'])) { - if (isset($_POST['someVar'])) { - $someVar = strip_tags(trim($_POST['someVar'])); + if (isset($_POST['country'])) { + $country = trim($_POST['country']); + if (strlen($country) == 0) { + $status->addMessage('Select a country from the server location list', 'danger'); + } + $return = saveProviderConfig($status, $binPath, $country); } - $return = SaveProviderConfig($status, $someVar); } elseif (isset($_POST['StartProviderVPN'])) { $status->addMessage('Attempting to connect VPN provider', 'info'); $cmd = getCliOverride($id, 'cmd_overrides', 'connect'); exec("sudo $binPath $cmd", $return); + sleep(3); // required for connect delay + $return = stripArtifacts($return); foreach ($return as $line) { $status->addMessage($line, 'info'); } } elseif (isset($_POST['StopProviderVPN'])) { $status->addMessage('Attempting to disconnect VPN provider', 'info'); - exec("sudo $binPath disconnect", $return); + $cmd = getCliOverride($id, 'cmd_overrides', 'disconnect'); + exec("sudo $binPath $cmd", $return); + $return = stripArtifacts($return); foreach ($return as $line) { $status->addMessage($line, 'info'); } @@ -73,6 +78,7 @@ function DisplayProviderConfig() "providerVersion", "accountInfo", "countries", + "country", "providerLog", "publicIP", "ctlState" @@ -86,9 +92,16 @@ function DisplayProviderConfig() * @param object $status * @return string $someVar */ -function SaveProviderConfig($status, $someVar) +function saveProviderConfig($status, $binPath, $country) { - + $status->addMessage('Attempting to connect to '.$country, 'info'); + $cmd = getCliOverride($id, 'cmd_overrides', 'connect'); + exec("sudo $binPath $cmd $country", $return); + sleep(3); // required for connect delay + $return = stripArtifacts($return); + foreach ($return as $line) { + $status->addMessage($line, 'info'); + } } /** @@ -136,11 +149,14 @@ function getCliOverride($id, $group, $item) */ function getProviderStatus($id, $binPath) { - $output = shell_exec("sudo $binPath status"); - $output = strtolower(($lastSpace = strrpos($output, ' ')) ? substr($output, $lastSpace + 1) : $output); - $return = getCliOverride($id, 'status', 'connected'); - $status = strtolower($return) == 'connected' ? "up" : "down"; - return $status; + $cmd = getCliOverride($id, 'cmd_overrides', 'status'); + exec("sudo $binPath $cmd", $cmd_raw); + $cmd_raw = stripArtifacts($cmd_raw[0]); + if (preg_match('/Status: (\w+)/', $cmd_raw, $match)) { + $cli = getCliOverride($id, 'status', 'connected'); + $status = strtolower($match[1]) == $cli ? "up" : "down"; + } + return $status; } /** @@ -157,9 +173,33 @@ function getCountries($id, $binPath) $output = stripArtifacts($output, '\s'); $arrTmp = explode(",", $output); $countries = array_combine($arrTmp, $arrTmp); + $select = array(' ' => 'Select a country...'); + $countries = $select + $countries; foreach ($countries as $key => $value) { $countries[$key] = str_replace("_", " ", $value); } return $countries; } +/** + * Retrieves provider log + * + * @param integer $id + * @param string $binPath + * @param string $country + * @return string $log + */ +function getProviderLog($id, $binPath, &$country) +{ + $cmd = getCliOverride($id, 'cmd_overrides', 'status'); + exec("sudo $binPath $cmd", $cmd_raw); + $output = stripArtifacts($cmd_raw); + foreach ($output as $item) { + if (preg_match('/Country: (\w+)/', $item, $match)) { + $country = $match[1]; + } + $providerLog.= ltrim($item) .PHP_EOL; + } + return $providerLog; +} + diff --git a/templates/provider.php b/templates/provider.php index db334c86..a0f6648c 100755 --- a/templates/provider.php +++ b/templates/provider.php @@ -1,7 +1,7 @@ - class="btn btn-outline btn-primary " name="SaveProviderConfig" value="Save settings" /> - + class="btn btn-outline btn-primary " name="SaveProviderSettings" value="Save settings" /> + class="btn btn-success " name="StartProviderVPN" value="Connect " /> class="btn btn-warning " name="StopProviderVPN" value="Disconnect " /> @@ -57,7 +57,7 @@