Mot de passe (primaire) — détails techniques
Description et fonctionnalités de ce module : Mot de passe (primaire).
Fonctionnalité portée par les modules auth et directory d'entcore (fork open-ent,
versions -patched). Premier degré uniquement.
Architecture
Feature 1 — Demande de l'élève depuis la page de connexion
- Endpoint public
POST /auth/forgot/teacher-request(AuthController.teacherForgotPasswordRequest). Sans session. Garde le flag de configprimary-assisted-password-reset. Répond toujours 200 générique (anti-énumération) ; ne notifie que sur la branche succès. - Service
UserAuthAccount.requestTeacherPasswordReset(DefaultUserAuthAccount) : valide que le login est un élève activé non fédéré d'une classe ayant un enseignant, pose les flags Neo4jpasswordResetRequested/passwordResetRequestDatesur le nœudUser, et retourne les enseignant·e·s de la classe ({id, email}). - Notification :
TimelineHelper.notifyTimelineavec le typepassword-reset-request.password-reset-request(template enregistré côtédirectory:view/notify/password-reset-request/, i18ni18n/timeline/). Anti-spam : pas de re-notification dans la fenêtrepassword-reset-request-debounce-ms(défaut 1 h). - E-mail :
DefaultUserAuthAccount.sendPasswordResetRequestMail(templateview/email/passwordResetRequestTeacher.html). - Page de connexion (AngularJS) : détection 1er degré (
is1D, thème parentpanda/openent1d) danslogin.ts; lien adapté à l'âge danslogin-form.html; route#/teacher-request+ écran convivialforgot-teacher-request-form.html(forgot.ts).
Feature 2 — Réinitialisation par l'enseignant (paramétrage de la classe)
- Endpoint
POST /auth/reset/student-temp-password(AuthController.resetStudentTempPassword), sécurisé commesendResetPassword:AuthResourcesProvider.isClassTeacherByUserLoginvérifie que l'appelant est enseignant de la classe de l'élève (form attributelogin). - Service
UserAuthAccount.resetPasswordToTempValue: génère un mot de passe provisoire lisible (StringValidation.generateRandomCode, alphabet sans caractères ambigus, longueurprimary-temp-password-length, validé contrepasswordRegex), l'applique (BCrypt viaupdatePassword), force le changement (changePw = true) et efface les flags de demande. Retourne le mot de passe en clair au seul enseignant autorisé. - Roster :
DefaultClassService.findUsersexposepasswordResetRequested/passwordResetRequestDate(routeGET /directory/class/:classId/users). - Class-admin (AngularJS) : badge « Mot de passe oublié » (
user-list.html), bouton 1er degré « Créer un nouveau mot de passe » (user-infos.html) →service.resetStudentPasswordOnScreen→ lightbox affichant le mot de passe provisoire (actions/temp-password.html). Le second degré conserve le flux code-par-e-mail existant.
Paramètres (bloc auth de ent-core.yaml)
| Paramètre | Défaut | Rôle |
|---|---|---|
primary-assisted-password-reset | false | Active les deux endpoints 1er degré |
primary-temp-password-length | 6 | Longueur du mot de passe provisoire |
password-reset-request-debounce-ms | 3600000 | Anti-spam des notifications |
Couverture de tests
Scénarios e2e — dossier apps/open-ent-e2e/src/modules/47_mot_de_passe_1d (enseignant) et
apps/open-ent-e2e/src/public/02_mot_de_passe_1d_demande.spec.ts (élève, anonyme).
Tests e2e — voir le détail
Élève — demande (anonyme) public/02_mot_de_passe_1d_demande.spec.ts
- lien adapté à l'âge sur la page de connexion 1er degré
- soumission de la demande + écran de confirmation
Enseignant — réinitialisation modules/47_mot_de_passe_1d/01_enseignant_reinitialise.spec.ts
- liste des élèves + demandes en attente
- création d'un mot de passe provisoire affiché à l'écran
Les scénarios s'exécutent sur une instance 1er degré (thème
openent1d, ex. cd16-primaire) : le lien de connexion, le badge et le bouton « à l'écran » ne s'affichent que sur ce thème. Les captures de la fiche fonctionnelle en sont issues.
Conformité
| Maillon de la chaîne qualité | Référence |
|---|---|
| 🎯 Fonctionnalités attendues | fiche fonctionnelle |
| 🧪 Tests réalisés | dossiers e2e 47_mot_de_passe_1d + public/02_mot_de_passe_1d_demande |