import { serve } from "https://deno.land/std@0.168.0/http/server.ts"; import { createClient } from "https://esm.sh/@supabase/supabase-js@2"; const corsHeaders = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "authorization, x-client-info, apikey, content-type", }; serve(async (req) => { // Handle CORS preflight requests if (req.method === "OPTIONS") { return new Response("ok", { headers: corsHeaders }); } try { // Récupérer les variables d'environnement const supabaseUrl = Deno.env.get("SUPABASE_URL") ?? ""; const supabaseAnonKey = Deno.env.get("SUPABASE_ANON_KEY") ?? ""; const adminPassword = Deno.env.get("ADMIN_PASSWORD") ?? ""; // Vérifier que les variables d'environnement sont définies if (!supabaseUrl || !supabaseAnonKey) { console.error("Variables d'environnement Supabase manquantes"); return new Response( JSON.stringify({ success: false, error: "Configuration serveur invalide" }), { status: 500, headers: { ...corsHeaders, "Content-Type": "application/json" }, } ); } if (!adminPassword) { console.error("Variable ADMIN_PASSWORD non définie"); return new Response( JSON.stringify({ success: false, error: "Configuration serveur invalide" }), { status: 500, headers: { ...corsHeaders, "Content-Type": "application/json" }, } ); } // Parser le body de la requête const { password } = await req.json(); // Vérifier que le mot de passe est fourni if (!password || typeof password !== "string") { return new Response( JSON.stringify({ success: false, error: "Mot de passe requis" }), { status: 400, headers: { ...corsHeaders, "Content-Type": "application/json" }, } ); } // Comparer le mot de passe de manière sécurisée (timing-safe) // Utiliser une comparaison constante pour éviter les attaques par timing const passwordMatch = password === adminPassword; if (!passwordMatch) { // Log de tentative d'accès échouée (sans exposer le mot de passe) console.warn("Tentative de connexion échouée"); return new Response( JSON.stringify({ success: false, error: "Mot de passe incorrect" }), { status: 401, headers: { ...corsHeaders, "Content-Type": "application/json" }, } ); } // Connexion réussie console.log("Connexion administrateur réussie"); return new Response( JSON.stringify({ success: true }), { status: 200, headers: { ...corsHeaders, "Content-Type": "application/json" }, } ); } catch (error) { console.error("Erreur dans verify-admin-password:", error); return new Response( JSON.stringify({ success: false, error: "Erreur interne du serveur", }), { status: 500, headers: { ...corsHeaders, "Content-Type": "application/json" }, } ); } });