Files
bolsa/php/forgot_password.php

117 lines
5.2 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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 nest 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'; ?>