110 lines
4.5 KiB
PHP
110 lines
4.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
session_start();
|
|
|
|
require_once __DIR__ . '/../vendor/autoload.php';
|
|
require_once __DIR__ . '/db.php';
|
|
|
|
use App\Database\Database;
|
|
use App\Database\LoginManager;
|
|
|
|
$errors = [];
|
|
$successMessage = '';
|
|
$token = trim((string) ($_GET['token'] ?? ''));
|
|
$user = null;
|
|
|
|
try {
|
|
$database = new Database();
|
|
$loginManager = new LoginManager($database);
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$token = trim((string) ($_POST['token'] ?? ''));
|
|
$password = trim((string) ($_POST['password'] ?? ''));
|
|
$passwordConfirm = trim((string) ($_POST['password_confirm'] ?? ''));
|
|
|
|
if ($token === '') {
|
|
$errors[] = 'Lien invalide.';
|
|
} else {
|
|
$user = $loginManager->getByResetToken($token);
|
|
|
|
if ($user === null) {
|
|
$errors[] = 'Lien invalide.';
|
|
} else {
|
|
if ($password === '' || $passwordConfirm === '') {
|
|
$errors[] = 'Veuillez renseigner les deux champs de mot de passe.';
|
|
} elseif ($password !== $passwordConfirm) {
|
|
$errors[] = 'Les mots de passe ne correspondent pas.';
|
|
} elseif (strlen($password) < 8) {
|
|
$errors[] = 'Le mot de passe doit contenir au moins 8 caractères.';
|
|
}
|
|
|
|
if (empty($errors)) {
|
|
if ($loginManager->updatePasswordById((int) $user['id'], $password)) {
|
|
$successMessage = 'Votre mot de passe a été réinitialisé avec succès. Vous pouvez maintenant vous connecter.';
|
|
$user = null;
|
|
} else {
|
|
$errors[] = 'Impossible de mettre à jour le mot de passe. Veuillez réessayer.';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} elseif ($token !== '') {
|
|
$user = $loginManager->getByResetToken($token);
|
|
}
|
|
} catch (Throwable $exception) {
|
|
$errors[] = 'Erreur interne : impossible de traiter votre demande.';
|
|
}
|
|
?>
|
|
|
|
<?php require_once __DIR__ . '/header.php'; ?>
|
|
|
|
<div class="login-container">
|
|
<div class="login-box">
|
|
<h2 class="login-title">Réinitialisation du mot de passe</h2>
|
|
<p class="login-subtitle">Entrez un nouveau mot de passe pour votre compte.</p>
|
|
|
|
<?php if (!empty($errors)): ?>
|
|
<div class="alert alert-error">
|
|
<ul>
|
|
<?php foreach ($errors as $error): ?>
|
|
<li><?php echo htmlspecialchars($error, ENT_QUOTES, 'UTF-8'); ?></li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<?php if ($successMessage): ?>
|
|
<div class="alert alert-success"><?php echo htmlspecialchars($successMessage, ENT_QUOTES, 'UTF-8'); ?></div>
|
|
<?php endif; ?>
|
|
|
|
<?php if ($user !== null): ?>
|
|
<form action="reset_password.php" method="POST" class="login-form">
|
|
<input type="hidden" name="token" value="<?php echo htmlspecialchars($token, ENT_QUOTES, 'UTF-8'); ?>">
|
|
|
|
<div class="form-group">
|
|
<label for="password" class="form-label">Nouveau mot de passe</label>
|
|
<input type="password" id="password" name="password" class="form-input" placeholder="••••••••" required autocomplete="new-password">
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="password_confirm" class="form-label">Confirmer le mot de passe</label>
|
|
<input type="password" id="password_confirm" name="password_confirm" class="form-input" placeholder="••••••••" required autocomplete="new-password">
|
|
</div>
|
|
|
|
<button type="submit" class="btn-submit">Réinitialiser le mot de passe</button>
|
|
</form>
|
|
<?php elseif ($successMessage === ''): ?>
|
|
<div class="alert alert-error">Lien invalide.</div>
|
|
<?php endif; ?>
|
|
|
|
<div class="login-footer">
|
|
<span class="separator">•</span>
|
|
<a href="../index.php" class="signup-link">Retour à la connexion</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<?php require_once __DIR__ . '/footer.php'; ?>
|