auth : un utilisateur change son propre mot de passe (#21) #210
No reviewers
Labels
No labels
Compat/Breaking
EC01
EC02
EC03
EC04
EC05
EC06
Kind/BDD
Kind/Back
Kind/Bug
Kind/CICD
Kind/Cloud
Kind/Contenu
Kind/Data
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Front
Kind/IA
Kind/Infra
Kind/Monitoring
Kind/Security
Kind/Testing
Portée/Post-jury
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
ops/alerte
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision!210
Loading…
Reference in a new issue
No description provided.
Delete branch "marvin/21-changer-mot-de-passe"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ce que la PR fait
La page de profil (#21) etait un stub : identite de l'appelant, rien de plus,
alors que le critere d'acceptation du ticket est le changement de mot de passe.
Aucun endpoint d'auto-service n'existait — seul
PATCH /auth/users/{id},reserve aux admins et sans verification du mot de passe actuel.
API —
POST /auth/me/passwordAuthentifie,
{current_password, new_password}.verrouiller le compte.
une session pour l'appelant — ses cookies
ev_access/ev_refreshremplacent les anciens. L'onglet courant reste connecte, les autres appareils
sont deconnectes.
403si l'actuel est faux,422si le nouveau est < 8 caracteres ouidentique a l'actuel. Journalise
password_changed/password_change_ko.repository:revoke_user_sessionsexistait deja.Dashboard
changerMotDePasse()dans la couche d'appel, aux noms du contrat.MotDePasseFormulaire, monte sur la page de profil : actuel + nouveau +confirmation. Confirmation, longueur et « different de l'actuel » verifies
cote client. Succes : champs vides, « vos autres appareils ont ete
deconnectes » (
role=status) ; erreurs viaAlerteFormulaire(role=alert).Docs
docs/api/authentification.md(endpoint, codes) etdocs/api/decisions.md(l'auto-service partiel remplace « pas d'auto-service »).
Verification
pytest tests/unit/api/: 224 passent (11 nouveaux) ;ruff+mypyclean.npm run test:unit(dashboard) : 383 passent (10 nouveaux) ;npm run buildok.Limite connue
Pas de limite de debit sur les tentatives de mot de passe actuel : l'attaquant
aurait deja une session valide, et les echecs sont audites.
La page de profil était un stub : elle affichait l'identité et rien de plus, alors que le critère d'acceptation du ticket est le changement de mot de passe. Aucun endpoint d'auto-service n'existait — seul `PATCH /auth/users/{id}`, réservé aux admins et sans vérification du mot de passe actuel. API — `POST /auth/me/password` (`{current_password, new_password}`, authentifié) : vérifie le mot de passe actuel (un jeton d'accès volé ne suffit pas), le remplace, coupe toutes les sessions de l'utilisateur, puis réémet une session pour l'appelant — ses cookies remplacent les anciens dans la réponse. 403 si l'actuel est faux, 422 si le nouveau est trop court ou identique. Journalisé : `password_changed` / `password_change_ko`. Dashboard — `MotDePasseFormulaire`, monté sur la page de profil : actuel + nouveau + confirmation, la confirmation vérifiée côté client. Succès : champs vidés, « vos autres appareils ont été déconnectés ». Docs d'auth mises à jour (endpoints, codes, décisions). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EL8Yw5fQMitWWyKR4FugX3Approuvé. Quelques remarques mineures, non bloquantes :
services/dashboard/src/components/MotDePasseFormulaire.vue:75: tout 422 dePOST /auth/me/passwordest affiché comme "le nouveau mot de passe doit différer de l'actuel", alors que l'API renvoie aussi 422 pour d'autres erreurs de validation (ex. longueur > max_length côté Pydantic) — message potentiellement trompeur dans ces cas.services/dashboard/src/api/authentification.js:121:changerMotDePasse()rejette toujours en 403 en mode démo, ce qui affiche "mot de passe actuel incorrect" même si aucune vérification n'a réellement eu lieu — trompeur pour un compte de démo.services/api/enervision_api/auth/service.py:148:change_own_password()refait un SELECT surops.usersalors queget_current_useravait déjà récupéré la même ligne (avecpassword_hash) plus tôt dans la requête — requête dupliquée, pas bloquant.New commits pushed, approval review dismissed automatically according to repository settings