69 lines
3.5 KiB
PHP
69 lines
3.5 KiB
PHP
<?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>
|