Files
deskhub/DeskHub-Webseite/staff/login_alert.php
T
2026-10-30 21:50:04 +00:00

69 lines
3.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Ziel des Links „Das war ich nicht“ in der Warn-Mail des Anmelde-Wächters. Öffentlich erreichbar (der Link kommt per Mail),
* geschützt durch das einmalige, 7 Tage gültige Token. Ein Aufruf ändert nichts; erst der Knopf sichert das Konto.
*/
require_once __DIR__ . '/../includes/bootstrap.php';
$pdo = get_db();
$token = (string) ($_GET['t'] ?? $_POST['t'] ?? '');
$event = $token !== '' ? login_guard_find_alert($pdo, $token) : null;
$done = false;
$errors = [];
if ($event && $_SERVER['REQUEST_METHOD'] === 'POST') {
verify_csrf();
if (!rate_limit_check('login_alert_use', client_ip(), 10, 15)) {
$errors[] = 'Zu viele Versuche. Bitte warten Sie einige Minuten.';
} elseif (login_guard_revoke($pdo, $event)) {
$done = true;
} else {
$errors[] = 'Das Konto wurde nicht gefunden.';
}
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex">
<title>Konto sichern – Mitarbeiterbereich</title>
<link rel="stylesheet" href="/assets/css/style.css?v=<?= @filemtime(__DIR__ . "/../assets/css/style.css") ?: time() ?>">
<?= site_icon_links() ?>
</head>
<body>
<?= i18n_switcher_html('floating') ?>
<div class="auth-wrap">
<div class="auth-card">
<?php require __DIR__ . '/../includes/brand_block.php'; ?>
<h1>Konto sichern</h1>
<?php foreach ($errors as $err): ?><div class="flash error"><?= e($err) ?></div><?php endforeach; ?>
<?php if ($done): ?>
<div class="flash success">Ihr Konto ist gesichert. Das Passwort ist ungültig, alle App-Anmeldungen wurden beendet und die Administratoren wurden informiert.</div>
<p style="margin-top:14px;font-size:.9rem">Setzen Sie jetzt über „Passwort vergessen?“ ein neues Passwort.</p>
<div class="btn-row"><a class="btn" href="/staff/forgot_password.php" style="width:100%;text-align:center">Neues Passwort anfordern</a></div>
<?php elseif (!$event): ?>
<div class="flash error">Dieser Link ist ungültig, abgelaufen oder wurde schon verwendet.</div>
<p style="margin-top:18px;font-size:.85rem"><a href="/staff/login.php">← Zur Anmeldung</a></p>
<?php else: ?>
<div class="sub">Diese Anmeldung wurde von Ihrem Konto gemeldet:</div>
<table style="margin:14px 0;font-size:.9rem">
<tr><td style="padding:2px 14px 2px 0;color:var(--muted)">Zeit</td><td><?= e(date('d.m.Y H:i', strtotime((string) $event['created_at']))) ?></td></tr>
<tr><td style="padding:2px 14px 2px 0;color:var(--muted)">Gerät</td><td><?= e((string) $event['device']) ?></td></tr>
<tr><td style="padding:2px 14px 2px 0;color:var(--muted)">Ort</td><td><?= e((string) $event['place']) ?></td></tr>
<tr><td style="padding:2px 14px 2px 0;color:var(--muted)">IP-Adresse</td><td><?= e((string) $event['ip']) ?></td></tr>
</table>
<p style="font-size:.9rem">Waren Sie das nicht? Dann sichern Sie Ihr Konto: Das Passwort wird ungültig, alle App-Anmeldungen und gemerkten Geräte werden beendet und die Administratoren erfahren davon. Danach legen Sie ein neues Passwort fest.</p>
<form method="post">
<?= csrf_field() ?>
<input type="hidden" name="t" value="<?= e($token) ?>">
<div class="btn-row"><button type="submit" class="btn danger" style="width:100%">Das war ich nicht – Konto sichern</button></div>
</form>
<p style="margin-top:18px;font-size:.85rem">Waren Sie es doch? Dann schließen Sie diese Seite einfach.</p>
<?php endif; ?>
</div>
</div>
</body>
</html>