diff --git a/api/index.php b/api/index.php index c24e1be..484b014 100644 --- a/api/index.php +++ b/api/index.php @@ -3,7 +3,7 @@ // Optional: zentrale Config laden (wenn du magst) declare(strict_types=1); -require __DIR__ . '/../config/fileload.php'; +require $_SERVER['DOCUMENT_ROOT']. '/../config/fileload.php'; // Basis-Header (CORS, JSON) header('Content-Type: application/json; charset=utf-8'); @@ -40,12 +40,12 @@ if ($path === '/') { // Routing nach Bereich if (str_starts_with($path, '/v1/')) { - require __DIR__ . '/router.v1.php'; + require __DIR__ . '/router/router.v1.php'; exit; } if (str_starts_with($path, '/internal/')) { - require __DIR__ . '/router.internal.php'; + require __DIR__ . '/router/router.internal.php'; exit; } diff --git a/api/router.v1.php b/api/router.v1.php deleted file mode 100644 index d67e4ee..0000000 --- a/api/router.v1.php +++ /dev/null @@ -1,43 +0,0 @@ - false, 'error' => 'Handler quickcheck_handle_request not found']); - exit; - } - - $result = quickcheck_handle_request(); - echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); - break; - - case '/v1/browser.quick.test': - require __DIR__ . '/v1/result/browser.quick.test.php'; - if (!function_exists('browser_quick_test_handle_request')) { - http_response_code(500); - echo json_encode(['ok' => false, 'error' => 'Handler browser_quick_test_handle_request not found']); - exit; - } - - browser_quick_test_handle_request(); - break; - - default: - http_response_code(404); - echo json_encode([ - 'ok' => false, - 'error' => 'Unknown v1 endpoint', - 'path' => $path, - ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); - break; -} diff --git a/api/router.internal.php b/api/router/router.internal.php similarity index 95% rename from api/router.internal.php rename to api/router/router.internal.php index 589a701..6541455 100644 --- a/api/router.internal.php +++ b/api/router/router.internal.php @@ -27,9 +27,6 @@ if ( $uri = parse_url($_SERVER['REQUEST_URI'] ?? '/', PHP_URL_PATH); $path = rtrim($uri, '/'); -// DB einbinden (für interne Tools brauchen wir oft DB) -require $_SERVER['DOCUMENT_ROOT'] . '/../config/db.php'; - // interne Routen switch ($path) { // Beispiel: Aggregierte Stats diff --git a/api/router/router.v1.php b/api/router/router.v1.php new file mode 100644 index 0000000..c4a8b00 --- /dev/null +++ b/api/router/router.v1.php @@ -0,0 +1,109 @@ + false, + 'error' => 'No endpoint specified for v1', + ], JSON_UNESCAPED_UNICODE); + return; + } + + $endpoint = $segments[0]; // z.B. "browser.quick.test" oder "quickcheck" + + switch ($endpoint) { + case 'quickcheck': + $file = require_once $_SERVER['DOCUMENT_ROOT'] . '/../config/db.php'; // stellt $pdo (PDO) bereit + '/v1/target/quickcheck.php'; + $handler = 'quickcheck_handle_request'; + break; + + case 'browser.quick.test': + $file = require_once $_SERVER['DOCUMENT_ROOT'] . '/../config/db.php'; // stellt $pdo (PDO) bereit + '/v1/result/browser.quick.test.php'; + $handler = 'browser_quick_test_handle_request'; + break; + + default: + http_response_code(404); + echo json_encode([ + 'ok' => false, + 'error' => 'Unknown v1 endpoint', + 'endpoint'=> $endpoint, + ], JSON_UNESCAPED_UNICODE); + return; + } + + if (!file_exists($file)) { + http_response_code(500); + echo json_encode([ + 'ok' => false, + 'error' => 'Endpoint file not found', + 'file' => basename($file), + ], JSON_UNESCAPED_UNICODE); + return; + } + + require_once $file; + + if (!function_exists($handler)) { + http_response_code(500); + echo json_encode([ + 'ok' => false, + 'error' => 'Handler not found', + 'handler' => $handler, + ], JSON_UNESCAPED_UNICODE); + return; + } + + try { + $result = $handler(); + + // Falls der Handler mal kein Array zurückgibt + if (!is_array($result)) { + $result = [ + 'ok' => false, + 'error' => 'Handler did not return array', + 'raw' => $result, + 'handler'=> $handler, + ]; + } + + // HTTP-Status aus Ergebnis ableiten (optional) + if (isset($result['ok']) && $result['ok'] === false) { + // Bei Fehler eher 400 als 200, außer du willst es anders + if (!http_response_code()) { + http_response_code(400); + } + } else { + if (!http_response_code()) { + http_response_code(200); + } + } + + echo json_encode($result, JSON_UNESCAPED_UNICODE); + } catch (Throwable $e) { + http_response_code(500); + error_log('[usbcheck] router_v1_dispatch error: ' . $e->getMessage()); + + echo json_encode([ + 'ok' => false, + 'error' => 'Unhandled exception in endpoint', + 'debug' => $e->getMessage(), // später ggf. entfernen + ], JSON_UNESCAPED_UNICODE); + } +} diff --git a/api/v1/result/browser.quick.test.php b/api/v1/result/browser.quick.test.php index 4eb1b13..dc8388d 100644 --- a/api/v1/result/browser.quick.test.php +++ b/api/v1/result/browser.quick.test.php @@ -20,11 +20,6 @@ function browser_quick_test_handle_request(): array session_start(); } - // DB einbinden – Pfad abhängig vom VHost: - // api.{staging.}usbcheck.it → DocumentRoot = .../api - // config liegt eine Ebene darüber: ../config/db.php - require_once $_SERVER['DOCUMENT_ROOT'] . '/../config/db.php'; // stellt $pdo (PDO) bereit - // --------------------------------------------------------------------- // 1. JSON einlesen // ---------------------------------------------------------------------