From 337f65205dd6bcac11b5abdb831b3d697839ed96 Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Sun, 30 Nov 2025 03:11:24 +0100 Subject: [PATCH] asd --- api/v1/result/browser.quick.test.php | 333 ++++++++++-------- .../assets/js/fakecheck/fakecheck.serial.js | 8 +- 2 files changed, 189 insertions(+), 152 deletions(-) diff --git a/api/v1/result/browser.quick.test.php b/api/v1/result/browser.quick.test.php index 972bfb4..4eb1b13 100644 --- a/api/v1/result/browser.quick.test.php +++ b/api/v1/result/browser.quick.test.php @@ -1,158 +1,189 @@ false, - 'error' => 'Invalid JSON payload', - ]); - exit; -} - -// --------------------------------------------------------------------- -// 2. User / Session ermitteln -// --------------------------------------------------------------------- -$userId = $_SESSION['user_id'] ?? null; // abhängig von deiner Login-Implementierung -$isLoggedIn = $userId ? 1 : 0; -$sessionId = session_id() ?: null; - -$ipAddress = $_SERVER['REMOTE_ADDR'] ?? null; -$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? null; - -// --------------------------------------------------------------------- -// 3. Grobe Auswertung aus dem Report (optional) -// --------------------------------------------------------------------- - -$modeRequested = $data['mode_requested'] ?? 'unknown'; -$meta = $data['meta'] ?? []; - -// Browser/OS-Parsing kannst du später ergänzen -$browserName = null; -$browserVersion = null; -$osName = null; -$osVersion = null; - -// Gesamtmenge geschriebener/verifizierter Bytes aggregieren -$measuredBytes = 0; - -if (!empty($data['quick']) && is_array($data['quick'])) { - $measuredBytes += (int)($data['quick']['size_bytes'] ?? 0); -} -if (!empty($data['benchmark']) && is_array($data['benchmark'])) { - $measuredBytes += (int)($data['benchmark']['size_bytes'] ?? 0); -} -if (!empty($data['writeverify']) && is_array($data['writeverify'])) { - $measuredBytes += (int)($data['writeverify']['total_bytes'] ?? 0); -} - -// Kapazitätsstatus vorerst neutral -$capacityStatus = 'unknown'; - -// Volume-/Stick-Daten aktuell noch nicht separat: -$volumeLabel = null; -$manufacturer = null; -$modelName = null; -$usbType = null; -$filesystem = null; - -// advertised_capacity_bytes kennen wir im Browser noch nicht: -$advCapacityBytes = null; - -// test_report_json = kompletter Report -$testReportJson = $raw; // direkt als JSON-String speichern - -// --------------------------------------------------------------------- -// 4. Insert in web_quicktests -// --------------------------------------------------------------------- -try { - $sql = " - INSERT INTO web_quicktests ( - user_id, - is_logged_in, - usb_device_id, - browser_name, - browser_version, - os_name, - os_version, - volume_label, - manufacturer, - model_name, - usb_type, - advertised_capacity_bytes, - measured_capacity_bytes, - capacity_status, - filesystem, - test_report_json, - ip_address, - session_id - ) - VALUES ( - :user_id, - :is_logged_in, - :usb_device_id, - :browser_name, - :browser_version, - :os_name, - :os_version, - :volume_label, - :manufacturer, - :model_name, - :usb_type, - :adv_capacity, - :measured_capacity, - :capacity_status, - :filesystem, - CAST(:test_report_json AS JSON), - :ip_address, - :session_id - ) - "; - - $stmt = $pdo->prepare($sql); - - $stmt->execute([ - 'user_id' => $userId, - 'is_logged_in' => $isLoggedIn, - 'usb_device_id' => null, // Browser-Test ist erstmal nicht an gespeicherten Stick gekoppelt - 'browser_name' => $browserName, - 'browser_version' => $browserVersion, - 'os_name' => $osName, - 'os_version' => $osVersion, - 'volume_label' => $volumeLabel, - 'manufacturer' => $manufacturer, - 'model_name' => $modelName, - 'usb_type' => $usbType, - 'adv_capacity' => $advCapacityBytes, - 'measured_capacity' => $measuredBytes ?: null, - 'capacity_status' => $capacityStatus, - 'filesystem' => $filesystem, - 'test_report_json' => $testReportJson, - 'ip_address' => $ipAddress, - 'session_id' => $sessionId, - ]); - - $id = (int)$pdo->lastInsertId(); - - echo json_encode([ - 'ok' => true, - 'id' => $id, - ]); -} catch (Throwable $e) { - http_response_code(500); - echo json_encode([ - 'ok' => false, - 'error' => 'DB error', - // 'debug' => $e->getMessage(), // nur zum Debuggen aktivieren - ]); + // --------------------------------------------------------------------- + // 1. JSON einlesen + // --------------------------------------------------------------------- + $raw = file_get_contents('php://input'); + $data = json_decode($raw, true); + + if (!is_array($data)) { + // Kein gültiges JSON → wir geben nur das Ergebnis zurück, + // HTTP-Status-Code kann der Router setzen, wenn er mag. + return [ + 'ok' => false, + 'error' => 'Invalid JSON payload', + ]; + } + + // --------------------------------------------------------------------- + // 2. User / Session ermitteln + // --------------------------------------------------------------------- + $userId = $_SESSION['user_id'] ?? null; // abhängig von deiner Login-Implementierung + $isLoggedIn = $userId ? 1 : 0; + $sessionId = session_id() ?: null; + + $ipAddress = $_SERVER['REMOTE_ADDR'] ?? null; + $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? null; + + // --------------------------------------------------------------------- + // 3. Grobe Auswertung aus dem Report (optional) + // --------------------------------------------------------------------- + $modeRequested = $data['mode_requested'] ?? 'unknown'; + $meta = $data['meta'] ?? []; + + // Hier könntest du später Browser/OS parsen + $browserName = null; + $browserVersion = null; + $osName = null; + $osVersion = null; + + // Beispiel: Gesamtmenge geschriebener/verifizierter Bytes aggregieren + $measuredBytes = 0; + + if (!empty($data['quick']) && is_array($data['quick'])) { + $measuredBytes += (int)($data['quick']['size_bytes'] ?? 0); + } + if (!empty($data['benchmark']) && is_array($data['benchmark'])) { + $measuredBytes += (int)($data['benchmark']['size_bytes'] ?? 0); + } + if (!empty($data['writeverify']) && is_array($data['writeverify'])) { + $measuredBytes += (int)($data['writeverify']['total_bytes'] ?? 0); + } + + // Kapazitätsstatus vorerst neutral + $capacityStatus = 'unknown'; + + // Volume-/Stick-Daten hast du aktuell im Browser noch nicht separat, + // darum bleiben diese Felder (erstmal) NULL: + $volumeLabel = null; + $manufacturer = null; + $modelName = null; + $usbType = null; + $filesystem = null; + + // advertised_capacity_bytes kennen wir im Browser noch nicht: + $advCapacityBytes = null; + + // test_report_json = kompletter Report (roher JSON-String) + $testReportJson = $raw ?: json_encode($data, JSON_UNESCAPED_UNICODE); + + // --------------------------------------------------------------------- + // 4. Insert in web_quicktests + // --------------------------------------------------------------------- + /** @var PDO $pdo */ + global $pdo; + + try { + $sql = " + INSERT INTO web_quicktests ( + user_id, + is_logged_in, + usb_device_id, + browser_name, + browser_version, + os_name, + os_version, + volume_label, + manufacturer, + model_name, + usb_type, + advertised_capacity_bytes, + measured_capacity_bytes, + capacity_status, + filesystem, + test_report_json, + ip_address, + session_id + ) + VALUES ( + :user_id, + :is_logged_in, + :usb_device_id, + :browser_name, + :browser_version, + :os_name, + :os_version, + :volume_label, + :manufacturer, + :model_name, + :usb_type, + :adv_capacity, + :measured_capacity, + :capacity_status, + :filesystem, + :test_report_json, + :ip_address, + :session_id + ) + "; + + $stmt = $pdo->prepare($sql); + + $stmt->execute([ + 'user_id' => $userId, + 'is_logged_in' => $isLoggedIn, + 'usb_device_id' => null, // Browser-Test ist erstmal nicht an gespeicherten Stick gekoppelt + 'browser_name' => $browserName, + 'browser_version' => $browserVersion, + 'os_name' => $osName, + 'os_version' => $osVersion, + 'volume_label' => $volumeLabel, + 'manufacturer' => $manufacturer, + 'model_name' => $modelName, + 'usb_type' => $usbType, + 'adv_capacity' => $advCapacityBytes, + 'measured_capacity' => $measuredBytes ?: null, + 'capacity_status' => $capacityStatus, + 'filesystem' => $filesystem, + // WICHTIG: KEIN CAST(... AS JSON) → kompatibel mit TEXT / LONGTEXT + 'test_report_json' => $testReportJson, + 'ip_address' => $ipAddress, + 'session_id' => $sessionId, + ]); + + $id = (int)$pdo->lastInsertId(); + + return [ + 'ok' => true, + 'id' => $id, + 'mode' => $modeRequested, + 'measured_bytes' => $measuredBytes ?: null, + ]; + } catch (Throwable $e) { + // Fehler ins Error-Log schreiben (nur Server-seitig sichtbar) + error_log('[usbcheck] web_quicktests insert failed: ' . $e->getMessage()); + + // Auf STAGING kannst du dir die Detailmeldung im JSON anzeigen lassen, + // in PROD würdest du das "debug" eher weglassen oder per env-Flag steuern. + return [ + 'ok' => false, + 'error' => 'DB error', + 'debug' => $e->getMessage(), // zum Debuggen – ggf. später entfernen + ]; + } } diff --git a/public/assets/js/fakecheck/fakecheck.serial.js b/public/assets/js/fakecheck/fakecheck.serial.js index 241065d..3b25940 100644 --- a/public/assets/js/fakecheck/fakecheck.serial.js +++ b/public/assets/js/fakecheck/fakecheck.serial.js @@ -23,7 +23,13 @@ const pidInput = rootSc.querySelector("#sc-pid"); const serialInput = rootSc.querySelector("#sc-serial"); - const apiUrl = cfg.apiBase.replace(/\/+$/, "") + "/quickcheck"; + // API-Basis: + // - cfg.apiBase kommt aus fakecheck.core.js (z.B. https://api.usbcheck.it) + // - wir hängen /v1/quickcheck dran + // - Fallback: /api/v1/quickcheck auf demselben Host + const apiBaseRaw = (cfg && cfg.apiBase) ? cfg.apiBase : ""; + const apiBase = apiBaseRaw.replace(/\/+$/, ""); + const apiUrl = apiBase ? (apiBase + "/v1/quickcheck") : "/api/v1/quickcheck"; // ------------------------------------------------------- // Fehleranzeige