From 3ebfb8c7f631f7f3faca5129b4a29156ce27084e Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Sun, 30 Nov 2025 01:48:31 +0100 Subject: [PATCH] quck --- api/index.php | 8 +- api/result/browser-quick-test.php | 2 +- api/target/browser.quick.test.php | 155 ++++++++++++++++++ .../assets/js/fakecheck/fakecheck.browser.js | 25 ++- 4 files changed, 187 insertions(+), 3 deletions(-) create mode 100644 api/target/browser.quick.test.php diff --git a/api/index.php b/api/index.php index 555f546..41a41cf 100644 --- a/api/index.php +++ b/api/index.php @@ -25,7 +25,13 @@ if ($path === '') { switch ($path) { case '/quickcheck': require __DIR__ . '/target/quickcheck.php'; - $result = quickcheck_handle_request(); // Funktion in quickcheck.php + $result = quickcheck_handle_request(); + echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); + break; + + case '/browser.quick.test': + require __DIR__ . '/target/browser.quick.test.php'; + $result = browser_quick_test_handle_request(); echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); break; diff --git a/api/result/browser-quick-test.php b/api/result/browser-quick-test.php index fb221f4..5a1e9d3 100644 --- a/api/result/browser-quick-test.php +++ b/api/result/browser-quick-test.php @@ -6,7 +6,7 @@ declare(strict_types=1); session_start(); // DB einbinden – bitte Pfad an DEINE Struktur anpassen! -require $_SERVER['DOCUMENT_ROOT']. '/../config/db.php'; // z.B. stellt $pdo (PDO) bereit +require $_SERVER['DOCUMENT_ROOT']. '/../config/fileload.php'; // z.B. stellt $pdo (PDO) bereit header('Content-Type: application/json; charset=utf-8'); diff --git a/api/target/browser.quick.test.php b/api/target/browser.quick.test.php new file mode 100644 index 0000000..3ea19d4 --- /dev/null +++ b/api/target/browser.quick.test.php @@ -0,0 +1,155 @@ + false, + 'error' => 'Invalid JSON payload', + ]; + } + + // 2. Session / User + // (falls index.php evtl. schon session_start() macht, ist das idempotent) + if (session_status() !== PHP_SESSION_ACTIVE) { + session_start(); + } + + $userId = $_SESSION['user_id'] ?? null; + $isLoggedIn = $userId ? 1 : 0; + $sessionId = session_id() ?: null; + + $ipAddress = $_SERVER['REMOTE_ADDR'] ?? null; + $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? null; + + // 3. DB-Verbindung + // Dokumentroot der API-Subdomain zeigt auf /api, + // config liegt ein Level darüber: /config/db.php + require $_SERVER['DOCUMENT_ROOT'] . '/../config/db.php'; // $pdo + + if ($pdo instanceof PDO) { + $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + } + + // 4. Werte aus dem Report aggregieren (minimal) + $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); + } + + // Browser/OS & Stick-Infos – erstmal noch leer, später aus meta/parsing füllen + $browserName = null; + $browserVersion = null; + $osName = null; + $osVersion = null; + + $volumeLabel = null; + $manufacturer = null; + $modelName = null; + $usbType = null; + $filesystem = null; + + $advCapacityBytes = null; + $capacityStatus = 'unknown'; + + // Kompletten Report als JSON-String speichern + $testReportJson = $raw; + + 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); + + $ok = $stmt->execute([ + 'user_id' => $userId, + 'is_logged_in' => $isLoggedIn, + 'usb_device_id' => null, + '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, + ]); + + if (!$ok) { + $info = $stmt->errorInfo(); + throw new RuntimeException($info[2] ?? 'Unknown DB error during insert'); + } + + return [ + 'ok' => true, + 'id' => (int)$pdo->lastInsertId(), + ]; + } catch (Throwable $e) { + http_response_code(500); + return [ + 'ok' => false, + 'error' => 'DB error: ' . $e->getMessage(), + ]; + } +} diff --git a/public/assets/js/fakecheck/fakecheck.browser.js b/public/assets/js/fakecheck/fakecheck.browser.js index 963eadf..ac8cce4 100644 --- a/public/assets/js/fakecheck/fakecheck.browser.js +++ b/public/assets/js/fakecheck/fakecheck.browser.js @@ -885,7 +885,12 @@ // --- Backend-Speicherung ------------------------------------------------ async function saveReportToBackend(report) { - const url = "/api/result/browser-quick-test.php"; + // apiBase kommt aus fakecheck.core.js (detectApiBase) + const apiBase = (cfg && cfg.apiBase) ? cfg.apiBase : ""; + const base = apiBase.replace(/\/+$/, ""); + // Fallback: falls apiBase aus irgendeinem Grund leer ist, lokal auf /api routen + const url = base ? (base + "/browser.quick.test") : "/api/browser.quick.test"; + try { const response = await fetch(url, { method: "POST", @@ -913,6 +918,24 @@ } const data = await response.json().catch(() => null); + + if (!data || data.ok !== true) { + logLine( + tFmt( + "fake_ui.log_backend_save_error_payload", + "Backend: Testergebnis wurde nicht bestätigt{suffix}.", + { + suffix: data && data.error + ? ` (${data.error})` + : "" + } + ), + "warn" + ); + if (saveError) saveError.style.display = "block"; + return; + } + logLine( tFmt( "fake_ui.log_backend_save_ok",