Log snapshot listing failures
This commit is contained in:
+46
-10
@@ -3,21 +3,37 @@ declare(strict_types=1);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
function urbm_bridge_log(string $level, string $message, array $context = []): void
|
||||
{
|
||||
$entry = array_merge([
|
||||
'time' => gmdate('c'),
|
||||
'level' => $level,
|
||||
'component' => 'webgui',
|
||||
'message' => $message,
|
||||
], $context);
|
||||
@file_put_contents('/var/log/urbm.log', json_encode($entry, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . PHP_EOL, FILE_APPEND | LOCK_EX);
|
||||
}
|
||||
|
||||
function urbm_json_error(int $status, string $message): void
|
||||
{
|
||||
http_response_code($status);
|
||||
echo json_encode(['error' => $message], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
$socket = '/run/urbm/urbm.sock';
|
||||
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
|
||||
$path = $_GET['path'] ?? '/v1/health';
|
||||
$isSnapshotFileRequest = preg_match('#/snapshots/[^/]+/files(?:\?|$)#', $path) === 1;
|
||||
|
||||
if (!preg_match('#^/v1/[A-Za-z0-9_./?=&%:-]*$#', $path) || str_contains($path, '..')) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'invalid API path']);
|
||||
exit;
|
||||
urbm_bridge_log('warn', 'invalid API path', ['path' => $path]);
|
||||
urbm_json_error(400, 'invalid API path');
|
||||
}
|
||||
|
||||
if (!file_exists($socket)) {
|
||||
http_response_code(503);
|
||||
echo json_encode(['error' => 'Der URBM-Daemon läuft nicht']);
|
||||
exit;
|
||||
urbm_bridge_log('warn', 'daemon socket missing', ['path' => $path, 'socket' => $socket]);
|
||||
urbm_json_error(503, 'Der URBM-Daemon läuft nicht');
|
||||
}
|
||||
|
||||
$curl = curl_init();
|
||||
@@ -42,10 +58,30 @@ $error = curl_error($curl);
|
||||
curl_close($curl);
|
||||
|
||||
if ($response === false) {
|
||||
http_response_code(502);
|
||||
echo json_encode(['error' => 'Verbindung zum URBM-Daemon fehlgeschlagen: ' . $error]);
|
||||
exit;
|
||||
$message = 'Verbindung zum URBM-Daemon fehlgeschlagen: ' . $error;
|
||||
urbm_bridge_log('warn', 'daemon request failed', ['path' => $path, 'status' => 502, 'error' => $message]);
|
||||
urbm_json_error(502, $message);
|
||||
}
|
||||
|
||||
http_response_code($status > 0 ? $status : 502);
|
||||
if ($status <= 0) {
|
||||
$message = 'URBM-Daemon lieferte keine HTTP-Antwort';
|
||||
urbm_bridge_log('warn', 'daemon response missing', ['path' => $path, 'status' => 502, 'error' => $message]);
|
||||
urbm_json_error(502, $message);
|
||||
}
|
||||
|
||||
if ($status >= 400) {
|
||||
$decoded = json_decode((string)$response, true);
|
||||
if (is_array($decoded) && isset($decoded['error']) && is_string($decoded['error'])) {
|
||||
$message = $decoded['error'];
|
||||
} else {
|
||||
$message = trim((string)$response);
|
||||
}
|
||||
if ($message === '') {
|
||||
$message = 'URBM-Daemon lieferte HTTP ' . $status . ' ohne Fehlertext';
|
||||
}
|
||||
urbm_bridge_log('warn', 'api request failed', ['path' => $path, 'status' => $status, 'error' => $message]);
|
||||
urbm_json_error($status, $message);
|
||||
}
|
||||
|
||||
http_response_code($status);
|
||||
echo $response;
|
||||
|
||||
Reference in New Issue
Block a user