Merge pull request #1519 from NL-TCH/REST-API

RestAPI installer integrated
This commit is contained in:
Bill Zimmerman
2024-03-09 14:05:30 +01:00
committed by GitHub
32 changed files with 1003 additions and 3 deletions

View File

@@ -9,6 +9,7 @@ $defaults = [
'RASPI_VERSION' => '3.0.9',
'RASPI_CONFIG_NETWORK' => RASPI_CONFIG.'/networking/defaults.json',
'RASPI_CONFIG_PROVIDERS' => 'config/vpn-providers.json',
'RASPI_CONFIG_API' => RASPI_CONFIG.'/api',
'RASPI_ADMIN_DETAILS' => RASPI_CONFIG.'/raspap.auth',
'RASPI_WIFI_AP_INTERFACE' => 'wlan0',
'RASPI_CACHE_PATH' => sys_get_temp_dir() . '/raspap',

View File

@@ -45,6 +45,9 @@
case "/system_info":
DisplaySystem($extraFooterScripts);
break;
case "/restapi_conf":
DisplayRestAPI();
break;
case "/about":
DisplayAbout();
break;

94
includes/restapi.php Normal file
View File

@@ -0,0 +1,94 @@
<?php
require_once 'includes/functions.php';
require_once 'config.php';
/**
* Handler for RestAPI settings
*/
function DisplayRestAPI()
{
// initialize status object
$status = new \RaspAP\Messages\StatusMessage;
// create instance of DotEnv
$dotenv = new \RaspAP\DotEnv\DotEnv;
$dotenv->load();
// set defaults
$apiKey = $_ENV['RASPAP_API_KEY'];
if (!RASPI_MONITOR_ENABLED) {
if (isset($_POST['SaveAPIsettings'])) {
if (isset($_POST['txtapikey'])) {
$apiKey = trim($_POST['txtapikey']);
if (strlen($apiKey) == 0) {
$status->addMessage('Please enter a valid API key', 'danger');
} else {
$return = saveAPISettings($status, $apiKey, $dotenv);
$status->addMessage('Restarting restapi.service', 'info');
exec('sudo /bin/systemctl stop restapi.service', $return);
sleep(1);
exec('sudo /bin/systemctl start restapi.service', $return);
}
}
} elseif (isset($_POST['StartRestAPIservice'])) {
$status->addMessage('Attempting to start restapi.service', 'info');
exec('sudo /bin/systemctl start restapi.service', $return);
foreach ($return as $line) {
$status->addMessage($line, 'info');
}
} elseif (isset($_POST['StopRestAPIservice'])) {
$status->addMessage('Attempting to stop restapi.service', 'info');
exec('sudo /bin/systemctl stop restapi.service', $return);
foreach ($return as $line) {
$status->addMessage($line, 'info');
}
}
}
exec("ps aux | grep -v grep | grep uvicorn", $output, $return);
$serviceStatus = !empty($output) ? "up" : "down";
exec("sudo systemctl status restapi.service", $output, $return);
array_shift($output);
$serviceLog = implode("\n", $output);
if ($serviceStatus == "up") {
$docUrl = getDocUrl();
$faicon = "<i class=\"text-gray-500 fas fa-external-link-alt ml-1\"></i>";
$docMsg = sprintf(_("RestAPI docs are accessible <a href=\"%s\" target=\"_blank\">here%s</a>"),$docUrl, $faicon);
}
echo renderTemplate("restapi", compact(
"status",
"apiKey",
"serviceStatus",
"serviceLog",
"docMsg"
));
}
/**
* Saves RestAPI settings
*
* @param object status
* @param object dotenv
* @param string $apiKey
*/
function saveAPISettings($status, $apiKey, $dotenv)
{
$status->addMessage('Saving API key', 'info');
$dotenv->set('RASPAP_API_KEY', $apiKey);
return $status;
}
// Returns a url for fastapi's automatic docs
function getDocUrl()
{
$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://';
$server_name = $_SERVER['SERVER_NAME'];
$port = 8081;
$url = $protocol . $server_name .':'. $port . '/docs';
return $url;
}

View File

@@ -80,12 +80,17 @@
<a class="nav-link" href="data_use"><i class="fas fa-chart-bar fa-fw mr-2"></i><span class="nav-label"><?php echo _("Data usage"); ?></a>
</li>
<?php endif; ?>
<?php if (RASPI_RESTAPI_ENABLED) : ?>
<li class="nav-item">
<a class="nav-link" href="restapi_conf"><i class="fas fa-puzzle-piece mr-2"></i><span class="nav-label"><?php echo _("RestAPI"); ?></a>
</li>
<?php endif; ?>
<?php if (RASPI_SYSTEM_ENABLED) : ?>
<li class="nav-item">
<a class="nav-link" href="system_info"><i class="fas fa-cube fa-fw mr-2"></i><span class="nav-label"><?php echo _("System"); ?></a>
</li>
<?php endif; ?>
<li class="nav-item">
<li class="nav-item">
<a class="nav-link" href="about"><i class="fas fa-info-circle fa-fw mr-2"></i><span class="nav-label"><?php echo _("About RaspAP"); ?></a>
</li>
<!-- Divider -->