101 lines
2.7 KiB
PHP
101 lines
2.7 KiB
PHP
<?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);
|
||
}
|