From 53f4645c2ffea0a6072ba1e91453b2730dec8642 Mon Sep 17 00:00:00 2001 From: billz Date: Mon, 16 Oct 2023 10:44:46 +0200 Subject: [PATCH] Implement CLI overrides, get countries + status functions --- includes/provider.php | 96 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 78 insertions(+), 18 deletions(-) diff --git a/includes/provider.php b/includes/provider.php index f178810e..7db7631d 100755 --- a/includes/provider.php +++ b/includes/provider.php @@ -8,39 +8,38 @@ require_once 'includes/config.php'; function DisplayProviderConfig() { $status = new \RaspAP\Messages\StatusMessage; - $providerName = getProviderValue($_SESSION["providerID"], "name"); - $binPath = getProviderValue($_SESSION["providerID"], "bin_path"); - $public_ip = get_public_ip(); + + $id = $_SESSION["providerID"]; + $providerName = getProviderValue($id, "name"); + $binPath = getProviderValue($id, "bin_path"); + $publicIP = get_public_ip(); if (!file_exists($binPath)) { - $installPage = getProviderValue($_SESSION["providerID"], "install_page"); + $installPage = getProviderValue($id, "install_page"); $status->addMessage('Expected '.$providerName.' binary not found at: '.$binPath, 'warning'); $status->addMessage('Visit the installation instructions for '.$providerName.'\'s Linux CLI.', 'warning'); $ctlState = 'disabled'; $providerVersion = 'not found'; } else { // fetch provider status - $output = shell_exec("sudo $binPath status"); - $serviceStatus = strtolower($output) == 0 ? "inactive" : "active"; - $result = strtolower(($lastSpacePos = strrpos($output, ' ')) ? substr($output, $lastSpacePos + 1) : $output); + $serviceStatus = getProviderStatus($id, $binPath); + $statusDisplay = $serviceStatus == "down" ? "inactive" : "active"; + + // fetch provider log + $cmd = getCliOverride($id, 'cmd_overrides', 'status'); + $output = shell_exec("sudo $binPath $cmd"); $providerLog = stripArtifacts($output); - //echo '
status = '.$result; // fetch provider version $providerVersion = shell_exec("sudo $binPath -v"); // fetch account info - exec("sudo $binPath account", $output); + $cmd = getCliOverride($id, 'cmd_overrides', 'account'); + exec("sudo $binPath $cmd", $output); $accountInfo = stripArtifacts($output); // fetch available countries - $output = shell_exec("sudo $binPath countries"); - $output = stripArtifacts($output, '\s'); - $arrTmp = explode(",", $output); - $countries = array_combine($arrTmp, $arrTmp); - foreach ($countries as $key => $value) { - $countries[$key] = str_replace("_", " ", $value); - } + $countries = getCountries($id, $binPath); } if (!RASPI_MONITOR_ENABLED) { @@ -51,7 +50,8 @@ function DisplayProviderConfig() $return = SaveProviderConfig($status, $someVar); } elseif (isset($_POST['StartProviderVPN'])) { $status->addMessage('Attempting to connect VPN provider', 'info'); - exec("sudo $binPath connect", $return); + $cmd = getCliOverride($id, 'cmd_overrides', 'connect'); + exec("sudo $binPath $cmd", $return); foreach ($return as $line) { $status->addMessage($line, 'info'); } @@ -68,12 +68,13 @@ function DisplayProviderConfig() "provider", compact( "status", "serviceStatus", + "statusDisplay", "providerName", "providerVersion", "accountInfo", "countries", "providerLog", - "public_ip", + "publicIP", "ctlState" ) ); @@ -103,3 +104,62 @@ function stripArtifacts($output, $pattern = null) return $result; } +/** + * Retrieves an override for provider CLI + * + * @param integer $id + * @param string $group + * @param string $item + * @return string $override + */ +function getCliOverride($id, $group, $item) +{ + $obj = json_decode(file_get_contents(RASPI_CONFIG_PROVIDERS), true); + if ($obj === null) { + return false; + } else { + $id--; + if ($obj['providers'][$id][$group][$item] === null) { + return $item; + } else { + return $obj['providers'][$id][$group][$item]; + } + } +} + +/** + * Retreives VPN provider status + * + * @param integer $id + * @param string $binPath + * @return string $status + */ +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; +} + +/** + * Retrieves available countries + * + * @param integer $id + * @param string $binPath + * @return array $countries + */ +function getCountries($id, $binPath) +{ + $cmd = getCliOverride($id, 'cmd_overrides', 'countries'); + $output = shell_exec("sudo $binPath $cmd"); + $output = stripArtifacts($output, '\s'); + $arrTmp = explode(",", $output); + $countries = array_combine($arrTmp, $arrTmp); + foreach ($countries as $key => $value) { + $countries[$key] = str_replace("_", " ", $value); + } + return $countries; +} +