Enhance API error handling, add lastError tracking, and implement admin home template

This commit is contained in:
marc-go committed 2026-10-11 14:37:56 +02:00
1 parent ce0777bb33
commit 205f2e2f73
9 files changed
+257 -33

No files matched your search

+42 -10
View File
@@ -16,6 +16,7 @@ class gbAPI {
private $config;
private $internal;
private $response;
private $lastError;
private function b64url_encode($data) {
return rtrim(strtr(base64_encode($data), "+/", "-_"), "=");
@@ -40,6 +41,8 @@ class gbAPI {
"error_text" => "Authentication failed."
];
$this->lastError = $data;
$this->answer($status, $data, true);
}
}
@@ -52,17 +55,25 @@ class gbAPI {
try {
$input = json_decode(file_get_contents("php://input"), true);
} catch (JsonException $error) {
$this->answer(400, [
$error_payload = [
"error" => "invalid_body",
"error_text" => "Can not read request body: " . $error
]);
];
$this->lastError = $error_payload;
$this->answer(400, $error_payload, true);
}
return $input;
}else{
$this->answer(400, [
$error_payload = [
"error" => "false_request_method",
"error_text" => "Only POST allowed"
], true);
];
$this->lastError = $error_payload;
$this->answer(400, $error_payload, true);
}
}
@@ -191,6 +202,14 @@ class gbAPI {
}
}
function returnLastError() {
if (isset($this->lastError)) {
return $this->lastError;
}else{
return NULL;
}
}
function getAnswer() {
if (!isset($this->response)) {
$error = [
@@ -199,6 +218,8 @@ class gbAPI {
"error_text" => "API Returned nothing."
];
$this->lastError = $error;
return $error;
}
@@ -218,17 +239,25 @@ class gbAPI {
$db_path = APP_PATH . $db_name;
if (!is_file($db_path)) {
$api->answer(500, [
$error_payload = [
"error" => "database_not_found",
"error_text" => "The Database was not found."
], true);
];
$this->lastError = $error_payload;
$api->answer(500, $error_payload, true);
}
if (!is_writeable($db_path)) {
$this->answer(500, [
$error_payload = [
"error" => "database_not_writeable",
"error_text" => "The Database is not writeable."
]);
];
$this->lastError = $error_payload;
$this->answer(500, $error_payload, true);
return;
}
@@ -250,11 +279,14 @@ class gbAPI {
$command = "SELECT name, value FROM settings WHERE name = :name";
$value = $this->dbCommand($command, true, true, [":name" => $key]);
if (isset($value[0]["value"])) {
return $value[0]["value"];
}else{
return;
$this->answer(500, [
"error" => "query_returned_nothing",
"error_text" => "The SQL Query Returned nothing usable. Check Database Permissions."
]);
}
}
}
+17 -4
View File
@@ -9,7 +9,20 @@ if (!isset($internal)) {
require_once API_DIR . "api.php";
$api = new gbAPI(true, $internal);
$api->answer(200, [
"login" => true,
"username" => $api->username
]);
$auth = $api->checkAuth();
$lastError = $api->returnLastError();
if ($lastError == NULL) {
if ($auth) {
$api->answer(200, [
"login" => true,
"username" => $api->username
]);
}else{
$api->answer(401, [
"login" => false,
"username" => ""
]);
}
}
+5 -4
View File
@@ -10,7 +10,8 @@ $api = new gbAPI(false, $internal);
// Get Template
$template = $api->getSetting("template");
$api->answer(200, [
"template_name" => $template
]);
if ($template !== NULL) {
$api->answer(200, [
"template_name" => $template
]);
}