Sindbad~EG File Manager
<?php
require_once 'config/config.php';
require_once 'classes/EmailService.php';
$message = '';
$error = '';
$success = false;
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$email = sanitize($_POST['email'] ?? '');
if (empty($email)) {
$error = 'Please enter your email address';
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$error = 'Please enter a valid email address';
} else {
$db = Database::getInstance()->getConnection();
// Check if member exists
$stmt = $db->prepare("SELECT member_id, username, email, full_name FROM member_accounts WHERE email = ?");
$stmt->execute([$email]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user) {
// Generate reset token
$token = bin2hex(random_bytes(32));
$expires = date('Y-m-d H:i:s', strtotime('+1 hour'));
// Store token in database
$userId = $user['member_id'];
// Check if password_resets table exists, if not create it
try {
$stmt = $db->prepare("
INSERT INTO password_resets (user_id, user_type, email, token, expires_at)
VALUES (?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE token = ?, expires_at = ?, created_at = NOW()
");
$stmt->execute([$userId, 'member', $email, $token, $expires, $token, $expires]);
} catch (PDOException $e) {
// Table might not exist, create it
$db->exec("
CREATE TABLE IF NOT EXISTS password_resets (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
user_type ENUM('admin', 'member') NOT NULL,
email VARCHAR(255) NOT NULL,
token VARCHAR(255) NOT NULL,
expires_at DATETIME NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
used TINYINT(1) DEFAULT 0,
UNIQUE KEY unique_user (user_id, user_type),
INDEX idx_token (token),
INDEX idx_expires (expires_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
");
// Try again
$stmt = $db->prepare("
INSERT INTO password_resets (user_id, user_type, email, token, expires_at)
VALUES (?, ?, ?, ?, ?)
");
$stmt->execute([$userId, 'member', $email, $token, $expires]);
}
// Send reset email
$emailService = new EmailService();
// Check if email service is enabled
if (!$emailService->isEnabled()) {
$error = 'Email service is not configured. Please contact system administrator.';
error_log("Password reset failed: Email service not enabled");
} else {
$emailSent = $emailService->sendPasswordResetEmail(
$user['email'],
$user['full_name'] ?? $user['username'],
$token,
'member'
);
if ($emailSent) {
$message = 'Password reset instructions have been sent to your email address. Please check your inbox.';
$success = true;
} else {
$error = 'Failed to send reset email. Please check SMTP settings or contact support.';
error_log("Password reset email failed for member: " . $user['email']);
}
}
} else {
// Don't reveal if email exists or not (security)
$message = 'If an account exists with this email, password reset instructions have been sent.';
$success = true;
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Member Forgot Password - <?php echo APP_NAME; ?></title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<style>
* {
font-family: 'Inter', sans-serif;
}
.gradient-bg {
background: linear-gradient(135deg, #3B82F6 0%, #60A5FA 50%, #FCD34D 100%);
}
.reset-card {
backdrop-filter: blur(10px);
background: rgba(255, 255, 255, 0.95);
}
</style>
</head>
<body class="gradient-bg min-h-screen flex items-center justify-center p-4">
<div class="reset-card w-full max-w-md rounded-2xl shadow-2xl p-8">
<!-- Logo & Title -->
<div class="text-center mb-8">
<div class="inline-block p-4 bg-gradient-to-r from-blue-500 to-purple-600 rounded-full mb-4">
<i class="fas fa-key text-4xl text-white"></i>
</div>
<h1 class="text-3xl font-bold text-gray-800 mb-2">Member Password Reset</h1>
<p class="text-gray-600">Enter your member email to receive reset instructions</p>
</div>
<?php if ($success): ?>
<!-- Success Message -->
<div class="bg-green-100 border border-green-400 text-green-800 px-4 py-3 rounded-lg mb-6 flex items-start">
<i class="fas fa-check-circle mt-1 mr-3 text-xl"></i>
<div>
<p class="font-semibold">Success!</p>
<p class="text-sm"><?php echo htmlspecialchars($message); ?></p>
</div>
</div>
<!-- Back to Login -->
<a href="login.php" class="block w-full bg-gradient-to-r from-blue-500 to-blue-600 hover:from-blue-600 hover:to-blue-700 text-white font-semibold py-3 rounded-lg transition duration-200 transform hover:scale-105 shadow-lg text-center">
<i class="fas fa-sign-in-alt mr-2"></i>Back to Member Login
</a>
<?php else: ?>
<!-- Error Message -->
<?php if (!empty($error)): ?>
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded-lg mb-6 flex items-center">
<i class="fas fa-exclamation-circle mr-2"></i>
<span><?php echo htmlspecialchars($error); ?></span>
</div>
<?php endif; ?>
<!-- Reset Form -->
<form method="POST" action="" class="space-y-6" id="resetForm">
<div>
<label for="email" class="block text-sm font-medium text-gray-700 mb-2">
<i class="fas fa-envelope mr-2 text-blue-500"></i>Email Address
</label>
<input type="email"
id="email"
name="email"
required
class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition"
placeholder="Enter your email address">
</div>
<button type="submit"
class="w-full bg-gradient-to-r from-blue-500 to-purple-600 hover:from-blue-600 hover:to-purple-700 text-white font-semibold py-3 rounded-lg transition duration-200 transform hover:scale-105 shadow-lg">
<i class="fas fa-paper-plane mr-2"></i>Send Reset Link
</button>
</form>
<!-- Back Links -->
<div class="mt-6 text-center text-sm">
<a href="login.php" class="text-blue-600 hover:text-blue-700 font-medium inline-flex items-center">
<i class="fas fa-arrow-left mr-2"></i>Back to Member Login
</a>
</div>
<?php endif; ?>
<!-- Home Link -->
<div class="mt-4 text-center">
<a href="index.php" class="text-gray-600 hover:text-gray-800 font-medium inline-flex items-center">
<i class="fas fa-home mr-2"></i>Back to Home
</a>
</div>
<!-- Footer -->
<div class="mt-8 text-center text-sm text-gray-600">
<p>© <?php echo date('Y'); ?> <?php echo APP_NAME; ?>. All rights reserved.</p>
</div>
</div>
</body>
</html>
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists