75 lines
3.0 KiB
PHP
75 lines
3.0 KiB
PHP
<?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>
|