Commit Graph

31 Commits

Author SHA1 Message Date
Colin Maudry 8cd5bfe821 fix(csrf): supprimer prevent_initial_call=True sur _fill_csrf_inputs
Avec prevent_initial_call=True, le callback ne s'exécutait pas lors de
la chaîne initiale (_generate_csrf_token → csrf-token), laissant le champ
csrf_token vide au premier chargement direct de /connexion → erreur 400.

Ajoute des tests comportementaux avec CSRF activé (comme en production) et
un test architectural qui vérifie que le callback reste appelable initialement.
Corrige aussi les assertions de redirection post-login (/compte/abonnement).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 15:46:30 +02:00
Colin Maudry aac3753226 feat(auth): bouton Connexion avec LinkedIn sur connexion/inscription (#88)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 23:18:41 +02:00
Colin Maudry 9f10f1c4de feat(auth): routes /auth/linkedin et callback OIDC (#88)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 23:14:29 +02:00
Colin Maudry d79e990c04 feat(auth): init Authlib + provider LinkedIn (config env) (#88)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 23:11:26 +02:00
Colin Maudry d72cad90ec feat(auth): resolve_oauth_user (liaison/création de compte OIDC) (#88)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 23:07:46 +02:00
Colin Maudry 44031efcd5 feat(auth): oauth_identities table + password_hash nullable (#88)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-24 23:04:18 +02:00
Colin Maudry ff7aaa54cd fix(auth): vérification promote_pending_email, purge tokens change-email, fallback login (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 22:25:34 +02:00
Colin Maudry 6144e3c18d feat(auth): route delete-account avec confirmation par mot de passe (#73) 2026-06-24 18:49:52 +02:00
Colin Maudry 558df9627b feat(auth): routes change-email + confirm-email-change (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 18:48:08 +02:00
Colin Maudry 90261d4f31 feat(auth): email de confirmation de changement d'adresse (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 18:45:37 +02:00
Colin Maudry f301a0a336 feat(auth): email en attente (pending_email) + migration (#73)
Adds pending_email column to users table with idempotent migration.
Implements set_pending_email() and promote_pending_email() for email-change workflow.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 18:43:04 +02:00
Colin Maudry 3f1c39d5a6 fix(brevo): passer X-Sib-Sandbox dans le body email, pas en header HTTP (#87)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 16:22:42 +02:00
Colin Maudry c3408ecc3c refactor(brevo): utiliser DEVELOPMENT pour le mode sandbox Brevo (#87)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 15:40:46 +02:00
Colin Maudry c0927c718d test(brevo): test d'intégration sandbox optionnel (#87)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 15:35:23 +02:00
Colin Maudry e4c291a785 feat(brevo): envoyer les emails transactionnels via l'API Brevo v5 (#87)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 15:33:14 +02:00
Colin Maudry c228f7be55 fix(auth): corriger le lien de validation email et l'isolation des tests
Le lien de vérification pointait vers la page Dash /verification-email
(qui se contente de rediriger vers /connexion) au lieu de la route
backend /auth/verify-email qui consomme réellement le token et marque
l'email comme vérifié. Conséquence : l'email n'était jamais validé et le
login renvoyait email_not_verified en boucle.

Ajoute aussi MAIL_SUPPRESS_SEND=true au bloc env de pytest : sans cela,
le load_dotenv() de src.app injectait MAIL_SUPPRESS_SEND=false depuis le
.env local, désactivant la suppression d'envoi et faisant échouer les
tests d'auth qui envoient un email (selon l'ordre d'import).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 03:55:52 +02:00
Colin Maudry 5151b32f3e tests/auth/test_csrf.py : vérifie que CSRF est actif (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 22:56:58 +02:00
Colin Maudry 49bd1b3036 src/auth/routes.py : route /auth/change-password (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 22:51:40 +02:00
Colin Maudry 6b78abb7fd src/auth/routes.py : routes de réinitialisation du mot de passe (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 22:50:20 +02:00
Colin Maudry ff9b3a6092 src/auth/routes.py : routes /auth/login et /auth/logout (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 17:39:59 +02:00
Colin Maudry 4d9a300e0c src/auth/routes.py : route /auth/verify-email (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 17:38:13 +02:00
Colin Maudry e275f10dbd src/auth/routes.py : route /auth/signup (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 17:37:15 +02:00
Colin Maudry 1c0fb0a960 src/auth/routes.py : blueprint auth et fixtures de test (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 17:35:06 +02:00
Colin Maudry 8896726e09 src/app.py : initialisation de l'authentification au démarrage (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 17:34:12 +02:00
Colin Maudry a02a9df081 src/auth/setup.py : init_auth et helper safe_next (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 17:32:32 +02:00
Colin Maudry 7976257029 src/auth/mailer.py : envoi d'emails HTML+texte (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 17:31:00 +02:00
Colin Maudry 72fd495c5b src/auth/models.py : classe User Flask-Login (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 17:25:56 +02:00
Colin Maudry 92fe76d072 src/auth/tokens.py : génération et validation des tokens (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 17:24:49 +02:00
Colin Maudry 1a07e5ac0f src/auth/db.py : CRUD tokens de vérification et reset (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 17:23:02 +02:00
Colin Maudry ae4a206de7 src/auth/db.py : CRUD users (#73) 2026-04-20 17:19:52 +02:00
Colin Maudry 5c6e75e3d3 src/auth/db.py : schéma SQLite et connexion (#73) 2026-04-20 17:15:26 +02:00