62 lines
2.5 KiB
PHP
62 lines
2.5 KiB
PHP
<?php
|
|
session_start();
|
|
require_once 'db/config.php';
|
|
require_once 'mail/MailService.php';
|
|
|
|
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
|
$email = trim($_POST['email']);
|
|
$message = '';
|
|
$message_type = 'danger';
|
|
|
|
if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
|
$message = 'A valid email is required.';
|
|
} else {
|
|
try {
|
|
$pdo = db();
|
|
$stmt = $pdo->prepare("SELECT id FROM users WHERE email = ?");
|
|
$stmt->execute([$email]);
|
|
$user = $stmt->fetch();
|
|
|
|
if ($user) {
|
|
$token = bin2hex(random_bytes(50));
|
|
$expires = date("U") + 1800; // 30 minutes
|
|
|
|
$stmt = $pdo->prepare("INSERT INTO password_resets (email, token, expires) VALUES (?, ?, ?)");
|
|
$stmt->execute([$email, $token, $expires]);
|
|
|
|
$reset_link = "http://" . $_SERVER['HTTP_HOST'] . "/reset_password_form.php?token=" . $token;
|
|
|
|
$subject = "Password Reset Request";
|
|
$body = "<p>Hello,</p>";
|
|
$body .= "<p>You requested a password reset. Click the link below to reset your password:</p>";
|
|
$body .= "<p><a href='" . $reset_link . "'>" . $reset_link . "</a></p>";
|
|
$body .= "<p>This link will expire in 30 minutes.</p>";
|
|
$body .= "<p>If you did not request a password reset, please ignore this email.</p>";
|
|
|
|
// Use MailService to send the email
|
|
$mail_result = MailService::sendMail($email, $subject, $body, strip_tags($body));
|
|
|
|
if (!empty($mail_result['success'])) {
|
|
$message = 'A password reset link has been sent to your email address.';
|
|
$message_type = 'success';
|
|
} else {
|
|
$message = 'Could not send the password reset email. Please try again later.';
|
|
error_log("MailService Error: " . ($mail_result['error'] ?? 'Unknown error'));
|
|
}
|
|
} else {
|
|
$message = 'No user found with that email address.';
|
|
}
|
|
} catch (PDOException $e) {
|
|
$message = "Database error: " . $e->getMessage();
|
|
error_log($message);
|
|
} catch (Exception $e) {
|
|
$message = "An error occurred: " . $e->getMessage();
|
|
error_log($message);
|
|
}
|
|
}
|
|
$_SESSION['message'] = $message;
|
|
$_SESSION['message_type'] = $message_type;
|
|
header("Location: forgot_password.php");
|
|
exit;
|
|
}
|