const VERIFY_URL = "https://challenges.cloudflare.com/turnstile/v0/siteverify"; // Vérifie le jeton Cloudflare Turnstile envoyé par le front dans // `captchaToken`. Sans TURNSTILE_SECRET_KEY, la vérification est ignorée // (même logique que googleEnabled dans config/passport.js). // À placer AVANT validate() : zod retire les clés inconnues de req.body. const verifyCaptcha = async (req, res, next) => { const secret = process.env.TURNSTILE_SECRET_KEY; if (!secret) return next(); const token = req.body?.captchaToken; if (!token) { return res.status(400).json({ message: "Veuillez confirmer que vous n'êtes pas un robot." }); } try { const response = await fetch(VERIFY_URL, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ secret, response: token, remoteip: req.ip }), }); const data = await response.json(); if (!data.success) { return res.status(400).json({ message: "Vérification anti-robot échouée, veuillez réessayer." }); } return next(); } catch (error) { console.error("Erreur vérification Turnstile :", error); return res.status(503).json({ message: "Service de vérification indisponible, réessayez plus tard." }); } }; module.exports = verifyCaptcha;