This commit is contained in:
2025-12-01 01:47:59 +01:00
parent 5ad9c9327a
commit 4b533f2d8f
3 changed files with 110 additions and 69 deletions

View File

@@ -12,12 +12,19 @@ declare(strict_types=1);
*/
function browser_quick_test_handle_request(): array
{
// Session sicherstellen (sollte über fileload.php schon aktiv sein,
// aber doppelt schadlos)
// Session sicherstellen
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
// ---------------------------------------------------------------------
// 0. client_id sicherstellen (persistent browser identifier)
// ---------------------------------------------------------------------
if (empty($_SESSION['client_id'])) {
$_SESSION['client_id'] = bin2hex(random_bytes(32)); // 64 chars
}
$clientId = $_SESSION['client_id'];
// ---------------------------------------------------------------------
// 1. JSON einlesen
// ---------------------------------------------------------------------
@@ -32,21 +39,21 @@ function browser_quick_test_handle_request(): array
}
// ---------------------------------------------------------------------
// 2. User / Session ermitteln (robust, mehrere Varianten)
// 2. User / Session ermitteln (robust)
// ---------------------------------------------------------------------
$userId = null;
$isLoggedIn = 0;
// A) Klassisch: user_id direkt in der Session
// A) user_id direkt in Session
if (!empty($_SESSION['user_id'])) {
$userId = (int)$_SESSION['user_id'];
}
// B) Dein aktuelles Login verwendet $_SESSION['user']['id']
elseif (!empty($_SESSION['user']) && is_array($_SESSION['user']) && !empty($_SESSION['user']['id'])) {
// B) dein Login: $_SESSION['user']['id']
elseif (!empty($_SESSION['user']['id'])) {
$userId = (int)$_SESSION['user']['id'];
}
// C) Optionaler auth-Block
elseif (!empty($_SESSION['auth']) && is_array($_SESSION['auth']) && !empty($_SESSION['auth']['user_id'])) {
// C) optional auth-Block
elseif (!empty($_SESSION['auth']['user_id'])) {
$userId = (int)$_SESSION['auth']['user_id'];
}
@@ -60,48 +67,44 @@ function browser_quick_test_handle_request(): array
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? null;
// ---------------------------------------------------------------------
// 3. Grobe Auswertung aus dem Report (optional)
// 3. Grobe Auswertung aus dem Report
// ---------------------------------------------------------------------
$modeRequested = $data['mode_requested'] ?? 'unknown';
$meta = $data['meta'] ?? [];
// Browser/OS vorerst leer, später per Parser füllen
$browserName = null;
$browserVersion = null;
$osName = null;
$osVersion = null;
// Gesamtmenge geschriebener/verifizierter Bytes aggregieren
// Byte-Summe aus allen Tests
$measuredBytes = 0;
if (!empty($data['quick']) && is_array($data['quick'])) {
$measuredBytes += (int)($data['quick']['size_bytes'] ?? 0);
if (!empty($data['quick']['size_bytes'])) {
$measuredBytes += (int)$data['quick']['size_bytes'];
}
if (!empty($data['benchmark']) && is_array($data['benchmark'])) {
$measuredBytes += (int)($data['benchmark']['size_bytes'] ?? 0);
if (!empty($data['benchmark']['size_bytes'])) {
$measuredBytes += (int)$data['benchmark']['size_bytes'];
}
if (!empty($data['writeverify']) && is_array($data['writeverify'])) {
$measuredBytes += (int)($data['writeverify']['total_bytes'] ?? 0);
if (!empty($data['writeverify']['total_bytes'])) {
$measuredBytes += (int)$data['writeverify']['total_bytes'];
}
// Kapazitätsstatus vorerst neutral
$capacityStatus = 'unknown';
// Volume-/Stick-Daten aktuell noch nicht separat ermittelt
// noch nicht im Browser ermittelt
$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)
// kompletter Report
$testReportJson = $raw ?: json_encode($data, JSON_UNESCAPED_UNICODE);
// ---------------------------------------------------------------------
// 4. Insert in web_quicktests
// 4. Insert
// ---------------------------------------------------------------------
/** @var PDO $pdo */
global $pdo;
@@ -126,7 +129,8 @@ function browser_quick_test_handle_request(): array
filesystem,
test_report_json,
ip_address,
session_id
session_id,
client_id
)
VALUES (
:user_id,
@@ -146,14 +150,15 @@ function browser_quick_test_handle_request(): array
:filesystem,
:test_report_json,
:ip_address,
:session_id
:session_id,
:client_id
)
";
$stmt = $pdo->prepare($sql);
$stmt->execute([
'user_id' => $userId, // <- hier sollte 1 stehen, wenn eingeloggt
'user_id' => $userId,
'is_logged_in' => $isLoggedIn,
'usb_device_id' => null,
'browser_name' => $browserName,
@@ -171,24 +176,27 @@ function browser_quick_test_handle_request(): array
'test_report_json' => $testReportJson,
'ip_address' => $ipAddress,
'session_id' => $sessionId,
'client_id' => $clientId
]);
$id = (int)$pdo->lastInsertId();
// DEBUG: damit wir im Frontend/NW-Tab sehen, was der Handler glaubt
// DEBUG-Ausgabe nur für STAGING
return [
'ok' => true,
'id' => $id,
'mode' => $modeRequested,
'measured_bytes' => $measuredBytes ?: null,
'ok' => true,
'id' => $id,
'mode' => $modeRequested,
'measured_bytes' => $measuredBytes ?: null,
// Debug-Felder später für PROD wieder rauswerfen
'debug_user_id' => $userId,
'debug_is_logged_in' => $isLoggedIn,
'debug_session_id' => $sessionId,
// Debug-Info
'debug_user_id' => $userId,
'debug_is_logged_in' => $isLoggedIn,
'debug_session_id' => $sessionId,
'debug_client_id' => $clientId,
'debug_session_has_user' => isset($_SESSION['user']),
'debug_session_user' => $_SESSION['user'] ?? null,
'debug_user' => $_SESSION['user'] ?? null
];
} catch (Throwable $e) {
error_log('[usbcheck] web_quicktests insert failed: ' . $e->getMessage());