fix(auth): sérialiser le cycle lecture-login-écriture du jeton QR #9
Reference in New Issue
Block a user
Delete Branch "%!s()"
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?
Constat
Le mode
qr_tokenpersiste correctement les credentials par écriture atomique, mais aucune exclusion mutuelle ne protège la séquence complète :.pronote_auth_state.json;token_login(**credentials);export_credentials();Le document
docs/pronote-auth.mdet l'implémentation indiquent que le token mobile est renouvelé après une connexion réussie. Deux lancements concurrents (appel manuel pendant le timer, seconde machine partageant l'état, double invocation de service) peuvent donc partir du même token : l'un obtient un token plus récent, l'autre échoue ou écrase l'état avec un résultat devenu obsolète. L'atomicité du seul remplacement de fichier évite un JSON tronqué, mais pas cette course logique.Proposition
Introduire un verrou inter-processus associé au fichier d'état, couvrant toute la séquence de renouvellement, et non seulement
save().Le comportement attendu lorsque le verrou est déjà détenu doit être explicite et actionnable :
PronoteAuthRotationError, afin de ne pas demander à tort un nouveau QR code.Conserver la règle actuelle : un vrai token refusé ne déclenche pas automatiquement d'enrôlement QR.
Critères d'acceptation
token_loginsimultanément avec le même état.Périmètre
À réaliser avec la persistance QR/token de PR #6 ou juste après. Le mode
passwordet le cache iCal restent hors périmètre.