requireLogin(); $db = Database::getInstance(); $user = $auth->getCurrentUser(); $appTitle = $db->getSetting('app_title', 'UniFi Voucher System'); $error = ''; $success = ''; $backupCodes = []; // nur direkt nach Erzeugung gefüllt $hasPassword = !empty($user['password_hash']); $totpEnabled = !empty($user['totp_enabled']); $setupRequired = isset($_GET['setup_required']); // 2FA aktivieren (Code bestaetigen) if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['enable_totp'])) { if (!$auth->validateCsrfToken($_POST['csrf_token'] ?? '')) { $error = 'Ungültiges Sicherheits-Token'; } else { $secret = $_SESSION['totp_setup_secret'] ?? ''; $code = trim($_POST['code'] ?? ''); if ($secret === '') { $error = 'Setup abgelaufen, bitte erneut starten.'; } elseif (!Totp::verify($secret, $code)) { $error = 'Code ungültig. Bitte erneut versuchen.'; } else { $backupCodes = $auth->enableTotp($user['id'], $secret); unset($_SESSION['totp_setup_secret']); $totpEnabled = true; $user = $auth->getCurrentUser(); $success = 'Zwei-Faktor-Authentifizierung wurde aktiviert. Bitte Recovery-Codes sicher speichern!'; } } } // Überall abmelden (andere Sessions beenden) if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['logout_others'])) { if (!$auth->validateCsrfToken($_POST['csrf_token'] ?? '')) { $error = 'Ungültiges Sicherheits-Token'; } else { $auth->logoutOtherSessions(); $success = 'Alle anderen Sitzungen wurden beendet.'; } } // Recovery-Codes neu erzeugen if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['regen_codes'])) { if (!$auth->validateCsrfToken($_POST['csrf_token'] ?? '')) { $error = 'Ungültiges Sicherheits-Token'; } elseif (!empty($user['totp_enabled'])) { $backupCodes = $auth->regenerateBackupCodes($user['id']); $user = $auth->getCurrentUser(); $success = 'Neue Recovery-Codes erzeugt. Die alten sind jetzt ungültig.'; } } // 2FA deaktivieren if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['disable_totp'])) { if (!$auth->validateCsrfToken($_POST['csrf_token'] ?? '')) { $error = 'Ungültiges Sicherheits-Token'; } else { $auth->disableTotp($user['id']); $totpEnabled = false; $success = 'Zwei-Faktor-Authentifizierung wurde deaktiviert.'; } } // Für die Setup-Ansicht ein Secret erzeugen (in Session halten bis bestätigt) $setupSecret = ''; $otpUri = ''; if (!$totpEnabled && $hasPassword) { $setupSecret = $_SESSION['totp_setup_secret'] ?? Totp::generateSecret(); $_SESSION['totp_setup_secret'] = $setupSecret; $otpUri = Totp::provisioningUri($setupSecret, $user['email'], $appTitle); } $csrf = $auth->getCsrfToken(); $dbSessions = $db->getSetting('session_driver', 'php') === 'db'; $activeSessions = $dbSessions ? $auth->activeSessionCount() : 0; ?>
Konto: = htmlspecialchars($user['email']) ?>
Bewahren Sie diese sicher auf. Jeder Code funktioniert einmal, falls Sie keinen Zugriff auf Ihre App haben.
Ihr Konto meldet sich über Microsoft 365 an. 2FA wird dort in Ihrem Microsoft-Konto verwaltet.
Bei jeder Anmeldung wird zusätzlich ein Code aus Ihrer Authenticator-App abgefragt.
Verbleibende Recovery-Codes: = (int)$auth->backupCodesRemaining($user) ?>
Aktive Sitzungen: = (int)$activeSessions ?>