84 lines
3.8 KiB
PHP
84 lines
3.8 KiB
PHP
<?php
|
|
require_once __DIR__ . '/includes/bootstrap.php';
|
|
|
|
if (current_user()) {
|
|
redirect('/home.php');
|
|
}
|
|
|
|
$errors = [];
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
verify_csrf();
|
|
check_honeypot();
|
|
if (!rate_limit_check('register', client_ip(), 5, 60)) {
|
|
$errors[] = 'Zu viele Registrierungsversuche. Bitte warten Sie eine Stunde.';
|
|
} else {
|
|
$name = trim($_POST['name'] ?? '');
|
|
$email = trim($_POST['email'] ?? '');
|
|
$pass = $_POST['password'] ?? '';
|
|
$pass2 = $_POST['password2'] ?? '';
|
|
|
|
if ($name === '') $errors[] = 'Bitte geben Sie Ihren Namen an.';
|
|
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors[] = 'Bitte geben Sie eine gültige E-Mail-Adresse an.';
|
|
$pwError = validate_password_strength($pass);
|
|
if ($pwError) $errors[] = $pwError;
|
|
if ($pass !== $pass2) $errors[] = 'Die Passwörter stimmen nicht überein.';
|
|
|
|
if (!$errors) {
|
|
$pdo = get_db();
|
|
$stmt = $pdo->prepare('SELECT id FROM users WHERE email = ?');
|
|
$stmt->execute([$email]);
|
|
if ($stmt->fetch()) {
|
|
$errors[] = 'Für diese E-Mail-Adresse existiert bereits ein Konto.';
|
|
} else {
|
|
$stmt = $pdo->prepare('INSERT INTO users (name, email, password_hash, created_at) VALUES (?,?,?,?)');
|
|
$stmt->execute([$name, $email, password_hash($pass, PASSWORD_DEFAULT), db_now()]);
|
|
$user = ['id' => $pdo->lastInsertId(), 'name' => $name, 'email' => $email];
|
|
customer_login($user);
|
|
flash('success', 'Willkommen! Ihr Konto wurde erstellt.');
|
|
redirect('/home.php');
|
|
}
|
|
}
|
|
} // end else
|
|
} // end POST
|
|
|
|
$pageTitle = 'Konto erstellen';
|
|
$activePage = 'register';
|
|
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>Konto erstellen</h1>
|
|
<div class="sub">Erstellen Sie ein Kundenkonto, um Tickets zu verfolgen.</div>
|
|
<?php foreach ($errors as $err): ?>
|
|
<div class="flash error"><?= e($err) ?></div>
|
|
<?php endforeach; ?>
|
|
<form method="post">
|
|
<?= csrf_field() ?>
|
|
<div style="position:absolute;left:-9999px;top:-9999px;width:1px;height:1px;overflow:hidden" aria-hidden="true">
|
|
<input type="text" name="hp_website" tabindex="-1" autocomplete="off" value="">
|
|
</div>
|
|
<label for="name">Name</label>
|
|
<input type="text" id="name" name="name" value="<?= e($_POST['name'] ?? '') ?>" required>
|
|
<label for="email">E-Mail-Adresse</label>
|
|
<input type="email" id="email" name="email" value="<?= e($_POST['email'] ?? '') ?>" required>
|
|
<label for="password">Passwort</label>
|
|
<input type="password" id="password" name="password" required minlength="10"
|
|
placeholder="mind. 10 Zeichen, Groß-/Klein, Ziffer, Sonderzeichen">
|
|
<p style="font-size:.75rem;color:var(--muted);margin:4px 0 0">Mindestens 10 Zeichen mit Groß- und Kleinbuchstaben, einer Ziffer und einem Sonderzeichen.</p>
|
|
<label for="password2">Passwort wiederholen</label>
|
|
<input type="password" id="password2" name="password2" required>
|
|
<div class="btn-row">
|
|
<button type="submit" class="btn">Konto erstellen</button>
|
|
</div>
|
|
</form>
|
|
<p style="margin-top:18px;font-size:.85rem">Bereits registriert? <a href="/login.php">Jetzt anmelden</a></p>
|
|
</div>
|
|
</div>
|
|
|
|
<footer class="public-footer">Copyright © <?= date('Y') ?> <?= e(get_setting('display_name', config()['site']['name'])) ?> – Alle Rechte vorbehalten.</footer>
|