Upload via GUI (258 Dateien)
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/includes/bootstrap.php';
|
||||
|
||||
if (current_user()) {
|
||||
redirect('/home.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', client_ip(), 3, 15)) {
|
||||
$errors[] = 'Zu viele Anfragen. Bitte versuchen Sie es in einigen Minuten erneut.';
|
||||
} elseif (!rate_limit_check('password_reset_request_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 users WHERE email = ?');
|
||||
$stmt->execute([$email]);
|
||||
$user = $stmt->fetch();
|
||||
|
||||
// Immer dieselbe Erfolgsmeldung anzeigen, unabhängig davon, ob das Konto existiert
|
||||
// (verhindert, dass Angreifer registrierte E-Mail-Adressen erraten können).
|
||||
if ($user) {
|
||||
$token = create_password_reset('customer', $email);
|
||||
$link = base_url() . '/reset_password.php?token=' . urlencode($token);
|
||||
email_send_and_log($email, 'Passwort zurücksetzen', email_password_reset_body($link), null, 'Passwort-zurücksetzen-Mail (Kunde)');
|
||||
}
|
||||
$sent = true;
|
||||
}
|
||||
}
|
||||
|
||||
$pageTitle = 'Passwort vergessen';
|
||||
$activePage = 'login';
|
||||
require __DIR__ . '/includes/header_customer.php';
|
||||
?>
|
||||
<style>.page-content{padding:0!important;margin:0!important}</style>
|
||||
</div><!-- page-content -->
|
||||
<?php $__banner = get_setting('banner_path'); ?>
|
||||
<div class="auth-wrap<?= $__banner ? ' has-image' : '' ?>"<?= $__banner ? ' style="background-image:url(' . e($__banner) . ')"' : '' ?>>
|
||||
<div class="auth-card">
|
||||
<?php require __DIR__ . '/includes/brand_block.php'; ?>
|
||||
<h1>Passwort vergessen</h1>
|
||||
<div class="sub">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 Konto 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="/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>
|
||||
<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="/login.php">← Zur Anmeldung</a></p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="public-footer">Copyright © <?= date('Y') ?> <?= e(get_setting('display_name', config()['site']['name'])) ?> – Alle Rechte vorbehalten.</footer>
|
||||
Reference in New Issue
Block a user