Commit Graph

941 Commits

Author SHA1 Message Date
Colin Maudry 9d4280f69d Ajoute spec sauvegarde des vues #95
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 15:57:44 +02:00
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 f8112274cf Gestion abonnement existant : ajout PM et résiliation avec confirmation #90
- Page /compte/abonnement affiche la vue de gestion si une subscription existe (pending, trial, active, cancelled), pas les offres
- Status pending : alerte + bouton "Ajouter une méthode de paiement"
- Status trial/active : bouton "Me désabonner" ouvrant une modale de confirmation
- Route add-payment crée une recurring session Frisbii (checkout-api.frisbii.com)
- Callback add-payment/callback récupère l'id du PM créé et l'associe à la subscription via POST /v1/subscription/{handle}/pm

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 14:34:30 +02:00
Colin Maudry 98b4d13f94 Petites améliorations sur la facturation #90 2026-06-29 13:35:52 +02:00
Colin Maudry b5f529c789 Formulaire d'infos de facturation avant paiement (#abonnement)
- Nouvelle page /compte/abonnement/mes-infos avec formulaire deux
  colonnes (prénom, nom, SIRET, entreprise, adresse, CP, ville, pays)
- Lookup SIRET via l'annuaire des entreprises pour pré-remplissage
- Cases à cocher obligatoires : renonciation rétractation + CGU (modale)
- Le bouton Valider est désactivé tant que les deux cases ne sont pas cochées
- Pays : liste déroulante des 20 pays de la zone euro, France par défaut
- Le SIRET est stocké dans users.siret (migration 0002) pour pré-remplissage
- Pré-remplissage des infos Frisbii (GET customer) si déjà client
- Côté Frisbii : update_customer si client existant, create_customer sinon
- Les URLs accept/cancel sont désormais transmises dans le body Frisbii
- Mise à jour des CGU : distinction données decp.info vs Frisbii

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 13:21:10 +02:00
Colin Maudry 5e5c5170a7 Page erreur 500 2026-06-26 18:29:04 +02:00
Colin Maudry 0eb2807630 Merge branch 'dev2' into dev
# Conflicts:
#	CHANGELOG.md
#	pyproject.toml
#	src/assets/css/style.css
#	src/pages/_apropos_shell.py
#	uv.lock
2026-06-26 18:27:24 +02:00
Colin Maudry b6a95e5464 Premier jet des CGU #93 2026-06-26 18:25:12 +02:00
Colin Maudry 401bf5e204 Ajoute spec et plan d'implémentation TOUS_ABONNES
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 18:23:42 +02:00
Colin Maudry 8faeaa5804 Bandeau TOUS_ABONNES et boutons S'abonner désactivés
Affiche un bandeau d'info sur /compte/abonnement et grise les boutons
S'abonner quand l'accès gratuit pour tous est activé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 18:12:58 +02:00
Colin Maudry 2bdcfdeb1a Ajoute le drapeau TOUS_ABONNES pour l'accès gratuit
Ouvre les fonctionnalités d'abonné à tout utilisateur connecté tant que
Frisbii n'a pas validé la réception de paiements.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 18:06:27 +02:00
Colin Maudry 57dd4d22eb Lien a propos direct, ordre section, mini erreur dans marche.py 2026-06-26 15:46:10 +02:00
Colin Maudry b25150faa3 orjson pour sérialiser les sorties API 2026-06-26 12:24:47 +02:00
Colin Maudry 8926c5b02c Layout fluide (pleine largeur) pour /a-propos 2026-06-26 12:24:15 +02:00
Colin Maudry b4f7e94800 Redesign de a-propos 2026-06-26 12:24:07 +02:00
Colin Maudry e229caf320 Fix affichage jours d'essai 2026-06-25 22:41:48 +02:00
Colin Maudry 5bd7029066 Wrap les erreurs httpx du client Frisbii en FrisbiiError 2026-06-25 22:34:29 +02:00
Colin Maudry 1bd15f627f Mise un place d'un système DIY de migrations DB 2026-06-25 22:15:31 +02:00
Colin Maudry 6e0722e2d7 S'assure que src/ n'est pas dans le path au démarrage 2026-06-25 21:56:10 +02:00
Colin Maudry 89bcd9f161 Merge branch 'feature/90_subscriptions' into dev 2026-06-25 21:14:47 +02:00
Colin Maudry e932c66af0 Corrections des bugs de la connexion à Frisbii #90 2026-06-25 21:14:35 +02:00
Colin Maudry 5f500a1aa8 fix(abonnement): garde active→pending, datetime parse, resolve_handle vide (#90)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRGb8NAMwaTZxUszSbaj4N
2026-06-25 19:26:15 +02:00
Colin Maudry d3025e323b feat(abonnement): page /compte/abonnement + accès premium réel (#90)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRGb8NAMwaTZxUszSbaj4N
2026-06-25 19:08:22 +02:00
Colin Maudry 3d1cb69463 feat(abonnement): routes subscribe/cancel/webhook + câblage app (#90) 2026-06-25 19:00:53 +02:00
Colin Maudry 4b1d8bf5c3 feat(abonnement): signature + mapping des webhooks Frisbii (#90) 2026-06-25 18:56:26 +02:00
Colin Maudry 4f90184ddd feat(abonnement): catalogue de plans + durée d'essai dynamique (#90) 2026-06-25 18:53:41 +02:00
Colin Maudry b7a79d8d86 feat(abonnement): table subscriptions + état (#90) 2026-06-25 18:50:50 +02:00
Colin Maudry 007cb28b21 feat(abonnement): client HTTP Frisbii (#90)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRGb8NAMwaTZxUszSbaj4N
2026-06-25 18:47:21 +02:00
Colin Maudry b0543c0c03 docs(abonnement): mention explicite 'sans période d'essai' si essai déjà utilisé (#90)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRGb8NAMwaTZxUszSbaj4N
2026-06-25 18:43:51 +02:00
Colin Maudry a18d43dae4 docs(abonnement): anti-abus essai (trial_used + no_trial) (#90)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRGb8NAMwaTZxUszSbaj4N
2026-06-25 18:41:31 +02:00
Colin Maudry 421750957f docs(abonnement): plan d'implémentation Frisbii (#90)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRGb8NAMwaTZxUszSbaj4N
2026-06-25 18:36:25 +02:00
Colin Maudry 78aea4a69a docs(abonnement): durée d'essai lue depuis le plan Frisbii (non codée en dur) (#90)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRGb8NAMwaTZxUszSbaj4N
2026-06-25 18:29:22 +02:00
Colin Maudry 3f12e6e210 docs(abonnement): essai gratuit de 2 jours (config plan Frisbii) (#90)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRGb8NAMwaTZxUszSbaj4N
2026-06-25 18:06:37 +02:00
Colin Maudry 3528924857 docs(abonnement): spec Frisbii (souscription, résiliation, webhooks) (#90)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRGb8NAMwaTZxUszSbaj4N
2026-06-25 18:03:33 +02:00
Colin Maudry 6d07dcb0bb orjson pour sérialiser les sorties API 2026-06-25 13:04:24 +02:00
Colin Maudry 06fad7ec2d Changelog 2.8.1 v2.8.1 2026-06-25 09:54:45 +02:00
Colin Maudry 3eec248dab Fix tokens_cli est maintenant autonome pour récupérer l'env 2026-06-25 09:50:19 +02:00
Colin Maudry 2701eb0422 Layout fluide (pleine largeur) pour /compte et /a-propos 2026-06-25 09:37:06 +02:00
Colin Maudry b93aca9005 feat(ux): refonte barre latérale /compte et fix CLI tokens
- Déconnexion déplacée dans la sidebar (lien discret) et retirée du dropdown navbar
- Email utilisateur connecté = lien simple vers /compte/admin (sans dropdown)
- Hover orange pâle sur les nav-links des sidebars
- fix(cli): load_dotenv() dans tokens_cli pour charger .env hors contexte app

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRGb8NAMwaTZxUszSbaj4N
2026-06-25 02:11:28 +02:00
Colin Maudry 82999ef056 Redesign de a-propos 2026-06-25 01:19:36 +02:00
Colin Maudry 590b927e31 fix(auth): corrections runtime LinkedIn OAuth (#88)
- Workaround nonce OIDC LinkedIn (non-conformité) : capture MissingClaimError après échange de code réussi et fetch userinfo séparément
- Ajout token_endpoint_auth_method: client_secret_post (requis par LinkedIn)
- suppress_callback_exceptions=True pour corriger les erreurs Dash multi-pages
- Suppression bouton déconnexion redondant sur /compte/admin et style hover incorrect sur la navbar

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 00:38:01 +02:00
Colin Maudry 5a702ac77e fix(auth): null password_hash pour utilisateurs OAuth (#88)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 23:27:15 +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 8037f2733e docs(auth): plan d'implémentation connexion LinkedIn
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 22:58:28 +02:00
Colin Maudry 6038b44fa8 docs(auth): spec connexion LinkedIn (OIDC)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 22:51:56 +02:00
Colin Maudry ccdf476c4f fix(compte): styles nav sidebar, zone danger et bouton déconnexion (#73)
- Nav sidebar : indicateur bordure gauche rouge au lieu du pill rouge plein
- Zone danger : couleur rouge directe (#d9230f) au lieu de Bootstrap danger (violet en Simplex)
- Bouton Déconnexion : outline pour le rendre clairement stylisé

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 22:38:28 +02:00