render('auth/login.php', ['titel' => 'Anmeldung']); } public function anmelden(): void { $benutzername = $this->post('benutzername'); $passwort = $_POST['passwort'] ?? ''; $benutzer = Benutzer::pruefeAnmeldung($benutzername, is_string($passwort) ? $passwort : ''); if ($benutzer === null) { DebugLog::schreibe('auth', 'Anmeldung fehlgeschlagen', ['benutzername' => $benutzername]); // Bewusst unspezifisch: kein Hinweis darauf, ob der Name existiert. View::redirect('/login', 'Benutzername oder Passwort ist falsch.', 'fehler'); } Auth::anmelden((int)$benutzer['id']); Benutzer::anmeldungVermerken((int)$benutzer['id']); DebugLog::schreibe('auth', 'Anmeldung erfolgreich', ['benutzer_id' => $benutzer['id']]); View::redirect('/'); } public function abmelden(): void { Auth::abmelden(); View::redirect('/login', 'Du bist abgemeldet.'); } /** Ersteinrichtung: legt den ersten Benutzer an. Danach nicht mehr erreichbar. */ public function einrichtungFormular(): void { if (Benutzer::anzahl() > 0) { View::redirect('/login'); } $this->render('auth/einrichtung.php', ['titel' => 'Ersteinrichtung']); } public function einrichtungSpeichern(): void { if (Benutzer::anzahl() > 0) { View::redirect('/login'); } $benutzername = $this->post('benutzername'); $passwort = (string)($_POST['passwort'] ?? ''); $wiederholung = (string)($_POST['passwort_wdh'] ?? ''); $fehler = match (true) { $benutzername === '' => 'Bitte einen Benutzernamen angeben.', mb_strlen($passwort) < 10 => 'Das Passwort muss mindestens 10 Zeichen lang sein.', $passwort !== $wiederholung => 'Die beiden Passwörter stimmen nicht überein.', default => null, }; if ($fehler !== null) { View::redirect('/einrichtung', $fehler, 'fehler'); } $id = Benutzer::anlegen($benutzername, $passwort, $this->post('anzeigename')); Auth::anmelden($id); View::redirect('/', 'Willkommen! Der Zugang ist eingerichtet.'); } }