Inscription publique — Cloudflare Turnstile¶
Protection anti-spam de l'inscription email/password sur www.essensys.fr
(POST /api/auth/register).
OpenSpec : essensys-turnstile-registration-2026-07-036
Ops détaillée (support-site) : dépôt essensys-support-site → docs/turnstile-registration.md
Compte Cloudflare propriétaire¶
Le widget Turnstile et les clés de vérification (site key + secret) sont gérés dans le compte Cloudflare suivant :
| Champ | Valeur |
|---|---|
| Email du compte | nicolas.rineau@gmail.com |
| Statut | Email Verified (profil Cloudflare → My Profile → Settings) |
| Membre depuis | 20 juillet 2024 |
Ce compte détient :
- le site Turnstile (mode managed) utilisé pour
/register; - les hostnames autorisés (
www.essensys.fr,mon.essensys.fr,test.essensys.fr, etc.) ; - la Site Key (publique, build Vite
VITE_TURNSTILE_SITE_KEY) ; - la Secret Key (serveur uniquement,
TURNSTILE_SECRET_KEYvia SOPS).
Toute rotation de clés, ajout de domaine ou changement de mode de widget doit être faite dans ce compte, puis rejouée dans SOPS / déploiement OVH. Ne pas créer un second widget sous un autre compte Cloudflare sans migrer explicitement les secrets et le build frontend.
Flux applicatif¶
Browser /register
→ widget Turnstile (site key, compte ci-dessus)
→ POST /api/auth/register { …, turnstile_token }
→ rate-limit IP + honeypot
→ siteverify Cloudflare (secret serveur) ──fail──→ 400/403
→ CreateUser
| Couche | Dépôt / composant |
|---|---|
| UI | essensys-support-site — Register.jsx |
| API prod | essensys-user-portal-backend — identity.Register |
| Secrets | essensys-ansible — secrets/cloud/essensys.sops.yaml |
Les créations d'utilisateurs admin (User Manager) ne passent pas par Turnstile.
Le protocole legacy IoT (/api/serverinfos, mystatus, myactions, done) n'est pas concerné.
Secrets (rappel)¶
Dans SOPS cloud, clés acceptées :
TURNSTILE_SECRET_KEYouvault_turnstile_secret_keyVITE_TURNSTILE_SITE_KEYouvault_turnstile_site_key
Jamais de secret en clair dans git. Rotation : dashboard Cloudflare (compte ci-dessus)
→ sops secrets/cloud/essensys.sops.yaml → redeploy cloud-backend + SPA.
Smoke¶
# Sans token → doit échouer (aucun compte créé)
curl -sS -X POST https://www.essensys.fr/api/auth/register \
-H 'Content-Type: application/json' \
-d '{"email":"bot@example.com","password":"test-pass-1234"}' -w '\n%{http_code}\n'
Inscription humaine : https://www.essensys.fr/register (widget Turnstile visible).