Skip to content

Remember the Ecole Directe trusted device (cn/cv) to skip the QCM and avoid account lockouts - #306

Merged
Giga77 merged 3 commits into
hacf-fr:mainfrom
Vins069:trusted-device
Sep 28, 2026
Merged

Giga77 merged 3 commits into
hacf-fr:mainfrom
Vins069:trusted-device

Conversation

@Vins069

@Vins069 Vins069 commented Sep 28, 2026

Copy link
Copy Markdown
Contributor

Description

Mémorise l'appareil de confiance (couple cn/cv) renvoyé par Ecole Directe après le QCM et le renvoie aux connexions suivantes (champ fa), comme le fait l'application mobile officielle. Sans cela, chaque actualisation est vue par Ecole Directe comme un nouvel appareil (connexion par mot de passe → 250 → QCM), et le compte finit par être bloqué (« tentatives infructueuses de connexion ») après quelques connexions rapprochées, même réussies — voir #305 pour l'analyse complète, les preuves et le journal.

  • api/client.py — EDApiClient : attributs cn / cv ; login() prend le chemin fa quand ils sont connus (cookie_jar = CookieJar() est la condition exigée par la bibliothèque ecoledirecte), retombe une seule fois sur la connexion complète (QCM) si Ecole Directe n'accepte plus l'appareil (code ≠ 200, typiquement 250) et expose le couple éventuellement renouvelé ; close() tolère un ed_client absent (évite l'AttributeError de AttributeError: 'EDApiClient' object has no attribute 'ed_client' après résolution du blocage QCM — présent en v1.1.11 et v1.1.13 #255).
  • coordinator/base.py — le couple est conservé dans le store QCM existant (.storage/ecole_directe_qcm_<entry_id>, clé trusted_device : cn, cv, saved_at), chargé dans _async_setup, passé au client avant login(), réenregistré seulement s'il change.
  • README.md — paragraphe dans « Double autentification ».

Comportement : QCM une seule fois (première connexion après la configuration, comme aujourd'hui), puis plus jamais tant qu'Ecole Directe accepte l'appareil. Pas de migration : les installations existantes n'ont pas encore la clé trusted_device, elles passent une dernière fois par le QCM et le mémorisent.

Related Issue

Fixes #305
Related: #255

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • Documentation update

Checklist

  • I have read the CONTRIBUTING document
  • My code follows the code style of this project (ruff check et ruff format --check avec le .ruff.toml du dépôt : OK)
  • I have updated the documentation accordingly
  • I have updated the translations if needed (aucune chaîne traduite modifiée)

Testing

  • Test hors ligne du client et de la persistance avec une bibliothèque ecoledirecte simulée : premier login sans appareil → QCM puis mémorisation ; logins suivants → fa seul, sans QCM et sans réécriture du store ; appareil refusé (250) → un seul QCM, nouveau couple mémorisé ; exception de connexion (compte bloqué) → rien n'est touché.
  • En production chez moi depuis le 05/09/2026 (variante « fichier JSON » du même correctif sur v1.2.2) : zéro QCM, le même couple est toujours accepté 23 jours plus tard, aucun blocage tant que le correctif est en place ; journal Connection OK - identifiant: [...] à chaque actualisation.
  • Les trois commits ont été déposés via l'interface web (contenu vérifié octet par octet contre une branche locale formatée par ruff).

Part of the trusted-device change (see issue hacf-fr#305): once the QCM is validated, the cn/cv couple is stored and sent back on the next logins, so the QCM is no longer asked and Ecole Directe no longer locks the account.
Load the trusted device from the QCM store, hand it to the client before login() and save it again only when Ecole Directe issued a new couple (see issue hacf-fr#305).
EDApiClient accepts a cn/cv couple: when set, the library goes straight to the "fa" login (no password-only login, no QCM). If Ecole Directe no longer accepts the device, fall back once to a full login and expose the new couple. Also tolerate a missing ed_client in close() (hacf-fr#255). See issue hacf-fr#305.
@Vins069 Vins069 changed the title Trusted device Remember the Ecole Directe trusted device (cn/cv) to skip the QCM and avoid account lockouts Sep 28, 2026

@Giga77 Giga77 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@Giga77
Giga77 merged commit 680d2b1 into hacf-fr:main Sep 28, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants