This commit is contained in:
2025-11-30 02:51:15 +01:00
parent 3ebfb8c7f6
commit 2fb5093c7f
9 changed files with 217 additions and 205 deletions

100
api/router.internal.php Normal file
View File

@@ -0,0 +1,100 @@
<?php
// /api/router.internal.php
declare(strict_types=1);
// *** SICHERHEIT ***
// → Unbedingt User/Pass ändern oder später auf Token/IP-Restriktion umstellen
$validUser = 'usbcheck-internal';
$validPass = 'SwejaFynja050223!';
// Basic-Auth prüfen
if (
!isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) ||
$_SERVER['PHP_AUTH_USER'] !== $validUser ||
$_SERVER['PHP_AUTH_PW'] !== $validPass
) {
header('WWW-Authenticate: Basic realm="USBCheck Internal API"');
http_response_code(401);
echo json_encode([
'ok' => false,
'error' => 'Authentication required',
]);
exit;
}
// Pfad erneut bestimmen
$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
case '/internal/stats.overview':
internal_stats_overview($pdo);
break;
// Beispiel: Wartung / Cleanup
case '/internal/maintenance.cleanup-tests':
internal_cleanup_tests($pdo);
break;
default:
http_response_code(404);
echo json_encode([
'ok' => false,
'error' => 'Unknown internal endpoint',
'path' => $path,
], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
break;
}
/**
* Beispiel: einfache Übersicht für Admin-Dashboard
*/
function internal_stats_overview(PDO $pdo): void
{
// alles nur Beispiel du kannst die Queries anpassen
$totalQuicktests = (int)$pdo->query("SELECT COUNT(*) FROM web_quicktests")->fetchColumn();
$lastTestsStmt = $pdo->query("
SELECT id, created_at, ip_address, measured_capacity_bytes
FROM web_quicktests
ORDER BY created_at DESC
LIMIT 10
");
$lastTests = $lastTestsStmt ? $lastTestsStmt->fetchAll(PDO::FETCH_ASSOC) : [];
echo json_encode([
'ok' => true,
'stats' => [
'total_quicktests' => $totalQuicktests,
'last_quicktests' => $lastTests,
],
], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
}
/**
* Beispiel: alte Tests aufräumen (z.B. älter als 90 Tage)
*/
function internal_cleanup_tests(PDO $pdo): void
{
// je nach Schema musst du Feldnamen anpassen hier: created_at
$stmt = $pdo->prepare("
DELETE FROM web_quicktests
WHERE created_at < (NOW() - INTERVAL 90 DAY)
");
$stmt->execute();
$deleted = $stmt->rowCount();
echo json_encode([
'ok' => true,
'deleted' => $deleted,
'note' => 'Tests älter als 90 Tage wurden entfernt (Beispiel-Implementierung).',
], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
}