-
released this
2026-09-10 14:02:53 +02:00 | 0 commits to main since this releaseAuthentification QR code / token
Cette version ajoute le mode d'authentification
PRONOTE_AUTH_MODE=qr_tokencomme alternative au modepasswordpour les instances Pronote utilisant HubEduConnect/EduConnect où l'authentification par mot de passe échoue (CAPTCHA, MFA, flux SAML modifié).Fonctionnalités
- Enrôlement initial via QR code généré sur le site web Pronote (espace parent → paramètres → QR code)
- Token persistant : le token est sauvegardé dans
.pronote_auth_state.json(permissions0600, écriture atomique, symlink-safe) et réutilisé entre les exécutions - Rotation automatique : le token roté par le serveur Pronote pendant l'exécution est persisté après chaque opération de données réussie et même dans le chemin d'erreur
- Notification XMPP : en cas d'échec de rotation du token, un message actionnable est envoyé via XMPP (si configuré et
dry_runinactif) - Mode-aware fallback :
_is_pronotepy_configured()ne requiert quePRONOTE_URLen modeqr_token - Sécurité : redaction des secrets explicites (token, PIN, jeton QR) dans tous les logs,
PronoteAuthRotationErrorpropagée sans wrapping
Nouvelles variables
Variable Description PRONOTE_AUTH_MODEpassword(défaut) ouqr_tokenPRONOTE_QR_CODE_FILEChemin du fichier JSON QR code (enrôlement initial) PRONOTE_QR_PINPIN à 4 chiffres (SecretStr, enrôlement initial) Corrections
PRONOTE_URLignoré à cause du double préfixeenv_prefix(renommagepronote_url→url)PRONOTE_ENTrendu optionnel pour les connexions pronotepy directes.env.examplecorrigé (eleve.html→parent.html)
Validation
- Instance :
0640036s.index-education.net(Bordeaux, HubEduConnect) - Premier run : enrôlement QR code → 144 événements agenda récupérés → token persisté
- Second run :
token_loginavec token persisté → 144 événements → token roté et persisté - L'erreur 20 « La page a expiré » sur
get_informationsest non bloquante (mode dégradé)
Qualité
- 694 tests passés, couverture 94.93%
ruff check✅ |ruff format✅ |mypy✅ |bandit✅- 35 nouveaux tests QR/token
Issues connues (non bloquantes)
- #20 — Triple authentification pronotepy (double INIT + refresh) lors d'un run
- #21 — Erreur pronotepy 20 « La page a expiré ! (11) » sur
get_informations
Documentation
- Wiki GuidePronote — section authentification QR code / token
AGENTS.md— contrat d'authentification QR code / token.env.example— variablesqr_tokendocumentées
Downloads