Adminbereich
Konfiguration sichern
Logge dich mit den statischen Zugangsdaten aus der JSON-Config ein.
start(); $configRepository = app_config_repository(); $message = null; $messageType = 'success'; $rawConfigText = null; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? ''; if ($action === 'login') { $success = $auth->login( trim((string) ($_POST['username'] ?? '')), (string) ($_POST['password'] ?? '') ); if ($success) { app_redirect(app_url('/admin/')); } $message = 'Login fehlgeschlagen. Bitte Zugangsdaten prüfen.'; $messageType = 'error'; } if ($action === 'save_config' && $auth->isAuthenticated()) { try { $config = $configRepository->getConfig(); $newPassword = trim((string) ($_POST['admin_password'] ?? '')); $config['app'] = [ 'name' => trim((string) ($_POST['app_name'] ?? 'Getränkeautomat Monitor')), 'timezone' => trim((string) ($_POST['timezone'] ?? 'Europe/Berlin')), 'dashboard_refresh_seconds' => max(5, (int) ($_POST['dashboard_refresh_seconds'] ?? 15)), 'default_from_email' => trim((string) ($_POST['default_from_email'] ?? 'monitor@example.local')), 'base_path' => app_normalize_base_path((string) ($_POST['base_path'] ?? '')), ]; $config['api'] = [ 'bearer_token' => trim((string) ($_POST['bearer_token'] ?? 'change-me-token')), ]; $config['admin'] = [ 'username' => trim((string) ($_POST['admin_username'] ?? 'admin')), 'password_hash' => $newPassword !== '' ? password_hash($newPassword, PASSWORD_BCRYPT) : (string) ($config['admin']['password_hash'] ?? ''), ]; $config['alerts'] = [ 'webhooks' => normalizeWebhooks($_POST['webhooks'] ?? []), 'emails' => normalizeEmails($_POST['emails'] ?? []), ]; $config['machines'] = normalizeMachines($_POST['machines'] ?? []); $configRepository->saveConfig($config); $message = 'Konfiguration gespeichert.'; $messageType = 'success'; } catch (Throwable $exception) { $message = 'Konfiguration konnte nicht gespeichert werden: ' . $exception->getMessage(); $messageType = 'error'; } } if ($action === 'save_raw_config' && $auth->isAuthenticated()) { $rawConfigText = (string) ($_POST['raw_config'] ?? ''); try { $decoded = json_decode($rawConfigText, true, 512, JSON_THROW_ON_ERROR); if (!is_array($decoded) || array_is_list($decoded)) { throw new JsonException('Die JSON-Config muss ein JSON-Objekt sein.'); } $configRepository->saveConfig($decoded); $message = 'JSON-Config gespeichert.'; $messageType = 'success'; $rawConfigText = encodeConfigForEditor($decoded); } catch (Throwable $exception) { $message = 'JSON-Config ist ungültig: ' . $exception->getMessage(); $messageType = 'error'; } } } $config = $configRepository->getConfig(); $rawConfigText ??= encodeConfigForEditor($config); if (!$auth->isAuthenticated()) { renderLogin($message, $messageType); exit; } renderAdmin($config, $rawConfigText, $message, $messageType); function renderLogin(?string $message, string $messageType): void { ?>
Adminbereich
Logge dich mit den statischen Zugangsdaten aus der JSON-Config ein.
Adminpanel
Hier werden API-Token, Zugangsdaten, Fächer und Alarmwege direkt in der JSON-Config gepflegt.
Die komplette Konfiguration kann hier als Klartext angezeigt und direkt als JSON gespeichert werden.
Fächer können direkt darunter verwaltet werden.