diff --git a/docs/23_LISTE-TICKETS.md b/docs/23_LISTE-TICKETS.md index a0996d0..8a4118f 100644 --- a/docs/23_LISTE-TICKETS.md +++ b/docs/23_LISTE-TICKETS.md @@ -1,15 +1,15 @@ # 🎫 Liste Complète des Tickets - Projet P'titsPas -**Version** : 1.7 -**Date** : 25 Mars 2026 +**Version** : 1.9 +**Date** : 23 Avril 2026 **Auteur** : Équipe PtitsPas -**Estimation totale** : ~208h +**Estimation totale** : ~220h --- ## 🔗 Liste des tickets Gitea -**Les numéros de section dans ce document = numéros d’issues Gitea.** Ticket #14 dans le doc = issue Gitea #14, etc. Source : dépôt `jmartin/petitspas` (état au 25 mars 2026 ; #106, #107, #109, #119 fermés via API). +**Les numéros de section dans ce document = numéros d’issues Gitea** (ticket #14 = issue Gitea #14, etc.). Le **numéro d’une nouvelle issue** n’est pas choisi dans ce fichier : il est **attribué par Gitea** (champ `number` dans la réponse JSON du `POST` création d’issue, ou affiché dans l’UI après création). Procédure : [**26_GITEA-API.md**](./26_GITEA-API.md) (§ 2 authentification, § 3.2 issues). Source dépôt : `jmartin/petitspas` (état au 25 mars 2026 ; #106, #107, #109, #119 fermés via API). | Gitea # | Titre (dépôt) | Statut | |--------|----------------|--------| @@ -102,6 +102,7 @@ | 117 | Évolution du cahier des charges | Ouvert | | 119 | Endpoint unifié GET /dossiers/:numeroDossier (AM ou famille) | ✅ Fermé | | 120 | [Full-stack] Inscription AM — photo, API et UX alignés sur les parents (suite #91) | ✅ Fermé | +| 127 | [Full-stack] Mot de passe oublié — flux complet (demande, e-mail, réinitialisation) | Ouvert | *Gitea #1 et #2 = anciens tickets de test (fermés). Liste complète : https://git.ptits-pas.fr/jmartin/petitspas/issues* @@ -118,11 +119,11 @@ | **P0** | 7 tickets | ~5h | Amendements BDD (BLOQUANT) | | **P1** | 7 tickets | ~22h | Configuration système (BLOQUANT) | | **P2** | 18 tickets | ~50h | Backend métier | -| **P3** | 22 tickets | ~71h | Frontend | +| **P3** | 23 tickets | ~83h | Frontend | | **P4** | 4 tickets | ~24h | Tests & Documentation | | **CRITIQUES** | 6 tickets | ~13h | Upload, Logs, Infra, CDC | | **JURIDIQUE** | 1 ticket | ~8h | Rédaction CGU/Privacy | -| **TOTAL** | **65 tickets** | **~184h** | | +| **TOTAL** | **66 tickets** | **~220h** | | --- @@ -913,6 +914,37 @@ Créer l'écran de création de mot de passe (lien reçu par email). --- +### Ticket #127 : [Full-stack] Mot de passe oublié — flux complet (demande, e-mail, réinitialisation) +**Issue Gitea** : https://git.ptits-pas.fr/jmartin/petitspas/issues/127 (créée le 2026-04-23 via API, voir [26_GITEA-API.md](./26_GITEA-API.md)). + +**Estimation** : 12h +**Labels** : `full-stack`, `p2`, `p3`, `auth`, `security`, `cdc` + +**Description** : +Couvrir **tout** le parcours « Mot de passe oublié » : distinct du flux **création** de mot de passe post-inscription (#24 / #43 / `GET verify-token` + `POST create-password`). Aujourd’hui, le lien sur l’écran de connexion (`frontend/lib/screens/auth/login_screen.dart`) envoie vers `/create-password`, ce qui est incorrect pour un utilisateur déjà enregistré qui a oublié son mot de passe. + +**Tâches — Backend** : +- [ ] Analyse : réutiliser `password_reset_token` / `password_reset_expires` (et config type `password_reset_token_expiry_days`) **ou** introduire des champs / flux séparés si le même couple token/expiry sert encore à l’inscription — documenter le choix +- [ ] `POST` (ex.) `/api/v1/auth/forgot-password` : body `{ "email" }` ; toujours réponse **neutre** (ex. 204 ou message identique que l’e-mail existe ou non) pour limiter l’énumération +- [ ] Génération token, persistance, expiration ; invalidation après usage ou rotation +- [ ] Envoi e-mail via MailService (template Handlebars dédié « réinitialisation ») +- [ ] `POST` (ex.) `/api/v1/auth/reset-password` : `{ "token", "password", "password_confirmation" }` — règles de complexité alignées sur `create-password` / changement MDP +- [ ] Rate limiting / throttling par IP et/ou par e-mail +- [ ] Tests unitaires / intégration ; entrées OpenAPI + +**Tâches — Frontend** : +- [ ] Écran ou bottom sheet « Saisir votre e-mail » + appel forgot-password + message générique de confirmation +- [ ] Route dédiée « nouveau mot de passe » (ex. `/reset-password?token=`) **distincte** de `/create-password` ; vérification token si endpoint dédié +- [ ] Corriger le `onPressed` du lien « Mot de passe oublié ? » sur le login : ne plus naviguer vers `/create-password` pour ce cas +- [ ] Gestion erreurs (token expiré / invalide) avec libellés neutres + +**Tâches — transverses** : +- [ ] Mise à jour doc CDC / évolutions si besoin ; E2E ou scénario de test manuel référencé + +**Synchronisation doc** : pour toute **nouvelle** issue à l’avenir, le numéro vient de la réponse Gitea (§ 3.2 [26_GITEA-API.md](./26_GITEA-API.md)) ou du script `bash ./scripts/create-gitea-issue.sh "Titre" "Corps"`. + +--- + ### Ticket #44 : [Frontend] Dashboard Gestionnaire - Structure ✅ **Estimation** : 2h **Labels** : `frontend`, `p3`, `gestionnaire` diff --git a/scripts/create-gitea-issue.sh b/scripts/create-gitea-issue.sh old mode 100644 new mode 100755