Files
2026-10-24 20:14:39 +00:00

75 lines
3.0 KiB
PHP
Raw Permalink 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
require_once __DIR__ . '/../includes/bootstrap.php';
if (current_staff()) {
redirect('/staff/reports.php');
}
$errors = [];
$sent = false;
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
verify_csrf();
$email = trim($_POST['email'] ?? '');
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'Bitte geben Sie eine gültige E-Mail-Adresse an.';
} elseif (!rate_limit_check('password_reset_request_staff', client_ip(), 3, 15)) {
$errors[] = 'Zu viele Anfragen. Bitte versuchen Sie es in einigen Minuten erneut.';
} elseif (!rate_limit_check('password_reset_request_staff_email', $email, 2, 60)) {
// Gleiche Fehlermeldung – verrät nicht ob die E-Mail bekannt ist
$errors[] = 'Zu viele Anfragen. Bitte versuchen Sie es in einigen Minuten erneut.';
} else {
$stmt = get_db()->prepare('SELECT * FROM staff WHERE LOWER(email) = LOWER(?) AND is_active = 1');
$stmt->execute([$email]);
$staff = $stmt->fetch();
if ($staff) {
$token = create_password_reset('staff', $email);
$link = base_url() . '/staff/reset_password.php?token=' . urlencode($token);
email_send_and_log($email, 'Passwort zurücksetzen (Mitarbeiterbereich)', email_password_reset_body($link), null, 'Passwort-zurücksetzen-Mail (Mitarbeiter)');
}
$sent = true;
}
}
$pageTitle = 'Passwort vergessen';
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Passwort vergessen – 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>Passwort vergessen</h1>
<div class="sub">Mitarbeiterbereich – wir senden Ihnen einen Link zum Zurücksetzen.</div>
<?php foreach ($errors as $err): ?>
<div class="flash error"><?= e($err) ?></div>
<?php endforeach; ?>
<?php if ($sent): ?>
<div class="flash success">Falls ein aktives Mitarbeiterkonto mit dieser E-Mail-Adresse existiert, wurde soeben ein Link zum Zurücksetzen versendet.</div>
<p style="margin-top:18px;font-size:.85rem"><a href="/staff/login.php">← Zur Anmeldung</a></p>
<?php else: ?>
<form method="post">
<?= csrf_field() ?>
<label for="email">E-Mail-Adresse</label>
<input type="email" id="email" name="email" required autofocus autocapitalize="none" autocorrect="off" spellcheck="false">
<div class="btn-row">
<button type="submit" class="btn" style="width:100%">Link anfordern</button>
</div>
</form>
<p style="margin-top:18px;font-size:.85rem"><a href="/staff/login.php">← Zur Anmeldung</a></p>
<?php endif; ?>
</div>
</div>
</body>
</html>