Sindbad~EG File Manager

Current Path : /home/copmadinaarea/thecopmadinaarea.org/portal/
Upload File :
Current File : /home/copmadinaarea/thecopmadinaarea.org/portal/forgot-password.php

<?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>&copy; <?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