<?php
// Configuration de sécurité
// IMPORTANT: Remplacez le hash ci-dessous par le hash de votre mot de passe
// Utilisez generate_password_hash.php pour générer le hash
define('ADMIN_PASSWORD_HASH', '$2y$10$5L/rCnFdy8GEXBH85Rce.ujXeb9JC1LH0Uvyltx3p2EtbhxXKJpna'); // Hash de "Toine1990@"
define('ADMIN_USERNAME', 'toine');
define('SESSION_TIMEOUT', 3600); // 1 heure
define('MAX_LOGIN_ATTEMPTS', 5);
define('LOGIN_LOCKOUT_TIME', 900); // 15 minutes

// Configuration de session sécurisée - DOIT être appelé AVANT session_start()
function configureSecureSession() {
    // Paramètres de sécurité pour les sessions
    ini_set('session.cookie_httponly', 1);
    ini_set('session.cookie_secure', isset($_SERVER['HTTPS']));
    ini_set('session.use_strict_mode', 1);
    ini_set('session.cookie_samesite', 'Strict');
}

// Fonction à appeler APRÈS session_start()
function initSecureSession() {
    // Régénérer l'ID de session périodiquement
    if (!isset($_SESSION['last_regeneration'])) {
        $_SESSION['last_regeneration'] = time();
    } elseif (time() - $_SESSION['last_regeneration'] > 300) { // 5 minutes
        session_regenerate_id(true);
        $_SESSION['last_regeneration'] = time();
    }
}

// Fonction pour vérifier les tentatives de connexion
function checkLoginAttempts($ip) {
    $attempts_file = __DIR__ . '/login_attempts.json';
    
    if (!file_exists($attempts_file)) {
        return true;
    }
    
    $attempts_data = file_get_contents($attempts_file);
    $attempts = $attempts_data ? json_decode($attempts_data, true) : [];
    
    if (isset($attempts[$ip])) {
        $last_attempt = $attempts[$ip]['last_attempt'];
        $attempt_count = $attempts[$ip]['count'];
        
        // Si le délai de blocage est écoulé, réinitialiser
        if (time() - $last_attempt > LOGIN_LOCKOUT_TIME) {
            unset($attempts[$ip]);
            file_put_contents($attempts_file, json_encode($attempts));
            return true;
        }
        
        // Si trop de tentatives
        if ($attempt_count >= MAX_LOGIN_ATTEMPTS) {
            return false;
        }
    }
    
    return true;
}

// Fonction pour enregistrer une tentative de connexion
function recordLoginAttempt($ip, $success = false) {
    $attempts_file = __DIR__ . '/login_attempts.json';
    $attempts_data = file_exists($attempts_file) ? file_get_contents($attempts_file) : '{}';
    $attempts = json_decode($attempts_data, true) ?: [];
    
    if ($success) {
        // Supprimer les tentatives en cas de succès
        if (isset($attempts[$ip])) {
            unset($attempts[$ip]);
        }
    } else {
        // Enregistrer la tentative échouée
        $attempts[$ip] = [
            'count' => ($attempts[$ip]['count'] ?? 0) + 1,
            'last_attempt' => time()
        ];
    }
    
    file_put_contents($attempts_file, json_encode($attempts));
}

// Générer un token CSRF
function generateCSRFToken() {
    if (empty($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
    return $_SESSION['csrf_token'];
}

// Vérifier le token CSRF
function verifyCSRFToken($token) {
    return isset($_SESSION['csrf_token']) && hash_equals($_SESSION['csrf_token'], $token);
}

// Vérifier si l'utilisateur est connecté et la session est valide
function isAuthenticated() {
    if (!isset($_SESSION['connected']) || !$_SESSION['connected']) {
        return false;
    }
    
    // Vérifier le timeout de session
    if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity'] > SESSION_TIMEOUT)) {
        session_destroy();
        return false;
    }
    
    // Mettre à jour l'activité
    $_SESSION['last_activity'] = time();
    
    return true;
}

// Nettoyer et valider les données d'entrée
function sanitizeInput($data) {
    return htmlspecialchars(trim($data), ENT_QUOTES, 'UTF-8');
}
?>
