117 lines
5.2 KiB
PHP
117 lines
5.2 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;
|
||
use PHPMailer\PHPMailer\Exception;
|
||
use PHPMailer\PHPMailer\PHPMailer;
|
||
|
||
$errors = [];
|
||
$successMessage = '';
|
||
$email = '';
|
||
|
||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||
$email = trim((string) filter_input(INPUT_POST, 'mail', FILTER_SANITIZE_EMAIL));
|
||
|
||
if ($email === '' || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||
$errors[] = 'Veuillez saisir une adresse e-mail valide.';
|
||
} else {
|
||
try {
|
||
$database = new Database();
|
||
$loginManager = new LoginManager($database);
|
||
|
||
if (!$loginManager->existsByEmail($email)) {
|
||
$errors[] = 'Aucun compte n’est associé à cette adresse e-mail.';
|
||
} else {
|
||
$resetToken = bin2hex(random_bytes(32));
|
||
|
||
if (!$loginManager->setResetTokenByEmail($email, $resetToken)) {
|
||
$errors[] = 'Erreur interne : impossible de générer le token de réinitialisation.';
|
||
} else {
|
||
$resetLink = sprintf(
|
||
'https://www.giraud-finance.com/php/reset_password.php?token=%s',
|
||
urlencode($resetToken)
|
||
);
|
||
|
||
try {
|
||
$mailer = new PHPMailer(true);
|
||
$mailer->isSMTP();
|
||
$mailer->Host = 'mx.giraud-finance.com';
|
||
$mailer->SMTPAuth = true;
|
||
$mailer->Username = 'jfgiraud@giraud-finance.com';
|
||
$mailer->Password = 'azertyQSDFGH123456+-';
|
||
$mailer->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
|
||
$mailer->Port = 587;
|
||
$mailer->CharSet = 'UTF-8';
|
||
$mailer->Encoding = 'base64';
|
||
|
||
$mailer->setFrom('postmaster@giraud-finance.com', 'Giraud Finance');
|
||
$mailer->addAddress($email);
|
||
$mailer->Subject = 'Réinitialisation de votre mot de passe - Giraud Finance';
|
||
$mailer->isHTML(true);
|
||
$mailer->Body = sprintf(
|
||
'<p>Bonjour,</p><p>Pour réinitialiser votre mot de passe, veuillez cliquer sur le lien suivant :</p><p><a href="%1$s">%1$s</a></p><p>Ce lien est valide pendant 30 minutes.</p><p>Si vous n\'avez pas demandé cette réinitialisation, ignorez ce message.</p>',
|
||
htmlspecialchars($resetLink, ENT_QUOTES, 'UTF-8')
|
||
);
|
||
$mailer->AltBody = "Bonjour,\n\nPour réinitialiser votre mot de passe, veuillez utiliser ce lien : $resetLink\n\nCe lien est valide pendant 30 minutes.\n\nSi vous n\'avez pas demandé cette réinitialisation, ignorez ce message.";
|
||
|
||
$mailer->send();
|
||
$successMessage = 'Nous avons bien pris en compte votre demande. Un lien de réinitialisation a été envoyé si votre adresse existe.';
|
||
} catch (Exception $mailException) {
|
||
$errors[] = 'Impossible d\'envoyer l\'e-mail de réinitialisation : ' . $mailException->getMessage();
|
||
}
|
||
}
|
||
}
|
||
} catch (Throwable $exception) {
|
||
$errors[] = 'Erreur interne : impossible de traiter la demande pour le moment.';
|
||
}
|
||
}
|
||
}
|
||
|
||
?>
|
||
|
||
<?php require_once __DIR__ . '/header.php'; ?>
|
||
|
||
<div class="login-container">
|
||
<div class="login-box">
|
||
<h2 class="login-title">Mot de passe oublié</h2>
|
||
<p class="login-subtitle">Renseignez votre adresse e-mail pour réinitialiser votre mot de passe.</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; ?>
|
||
|
||
<form action="forgot_password.php" method="POST" class="login-form">
|
||
<div class="form-group">
|
||
<label for="mail" class="form-label">Adresse e-mail</label>
|
||
<input type="email" id="mail" name="mail" class="form-input" placeholder="exemple@email.com" required autocomplete="email" value="<?php echo htmlspecialchars($email, ENT_QUOTES, 'UTF-8'); ?>">
|
||
</div>
|
||
|
||
<button type="submit" class="btn-submit">Envoyer la demande</button>
|
||
</form>
|
||
|
||
<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'; ?>
|