// ============================================ require_once __DIR__ . '/maintenance-config.php'; function isAdminAuthenticated() { if (!isset($_COOKIE[ADMIN_COOKIE_NAME])) { return false; } $expectedToken = hash('sha256', ADMIN_PASSWORD . ADMIN_COOKIE_SECRET); return hash_equals($expectedToken, $_COOKIE[ADMIN_COOKIE_NAME]); } // Traitement du formulaire de connexion admin (avant le blocage, pour pouvoir s'authentifier) if (MAINTENANCE_MODE && isset($_POST['admin_password'])) { if ($_POST['admin_password'] === ADMIN_PASSWORD) { $token = hash('sha256', ADMIN_PASSWORD . ADMIN_COOKIE_SECRET); setcookie(ADMIN_COOKIE_NAME, $token, [ 'expires' => time() + 86400 * 7, // 7 jours 'path' => '/', 'secure' => true, 'httponly' => true, 'samesite' => 'Lax' ]); header('Location: ' . strtok($_SERVER['REQUEST_URI'], '?')); exit(); } } // Si le mode maintenance est actif ET que le visiteur n'est pas admin → on bloque if (MAINTENANCE_MODE && !isAdminAuthenticated()) { // Cas des appels API (cases.json, player-data.php, etc.) : on renvoie du JSON, pas du HTML $isApiCall = strpos($_SERVER['REQUEST_URI'] ?? '', '/api/') !== false && basename($_SERVER['SCRIPT_NAME']) !== 'google-callback.php'; if ($isApiCall) { http_response_code(503); header('Content-Type: application/json; charset=utf-8'); header('Retry-After: 3600'); die(json_encode(['error' => 'maintenance', 'message' => MAINTENANCE_MESSAGE])); } http_response_code(503); header('Retry-After: 3600'); $wrongPassword = isset($_POST['admin_password']) && $_POST['admin_password'] !== ADMIN_PASSWORD; $errorHtml = $wrongPassword ? '
' . $message . '
Le jeu sera intégré dans cette page.