Ajoute le mode d'authentification PRONOTE_AUTH_MODE=qr_token comme alternative au mode password pour les instances Pronote utilisant HubEduConnect/EduConnect où l'authentification par mot de passe échoue (CAPTCHA, MFA, flux SAML). Nouveaux éléments : - PronoteSettings : auth_mode, qr_code_file, qr_pin (SecretStr) - PronoteAuthState : persistance du token rotatif dans .pronote_auth_state.json (écriture atomique, permissions 0600, symlink-safe via O_EXCL|O_NOFOLLOW) - PronoteClient._connect_qr_token() : token_login avec creds persistés, qrcode_login pour l'enrôlement initial, export_credentials persisté après chaque login réussi - PronoteAuthRotationError : levée en cas d'échec de rotation du token, propagée sans wrapping à travers PronoteFetcher et fetch_step jusqu'à PipelineRunner.run() qui notifie via XMPP (si canal disponible et dry_run inactif) - _is_pronotepy_configured() mode-aware : qr_token ne requiert que PRONOTE_URL - _collect_auth_secrets() : redaction des secrets explicites (token, PIN, jeton QR) dans tous les logs du chemin d'authentification Documentation : - .env.example : PRONOTE_AUTH_MODE, PRONOTE_QR_CODE_FILE, PRONOTE_QR_PIN - AGENTS.md : contrat d'authentification QR code / token - Wiki GuidePronote : section enrôlement, exécutions suivantes, ré-enrôlement Tests (686 passés, couverture 94.87%) : - 5 tests config QR, 9 tests auth_state, 10 tests client QR, 3 tests propagation, 4 tests intégration rotation end-to-end, 4 tests fallback mode-aware - Tests de non-fuite : sentinelles distinctes pour token, PIN, jeton QR Co-authored-by: coder/litellm/coder <coder@agents.invalid>
69 lines
1022 B
Plaintext
69 lines
1022 B
Plaintext
# --- Python bytecode ---
|
|
__pycache__/
|
|
*.pyc
|
|
*.pyo
|
|
*.pyd
|
|
.Python
|
|
|
|
# --- Virtual environments ---
|
|
.venv/
|
|
venv/
|
|
env/
|
|
ENV/
|
|
|
|
# --- Distribution / build ---
|
|
build/
|
|
dist/
|
|
*.egg-info/
|
|
*.egg
|
|
pip-wheel-metadata/
|
|
|
|
# --- Testing / coverage ---
|
|
.pytest_cache/
|
|
.coverage
|
|
.coverage.*
|
|
htmlcov/
|
|
.tox/
|
|
.mypy_cache/
|
|
.ruff_cache/
|
|
coverage.xml
|
|
|
|
# --- Environment files ---
|
|
.env
|
|
.env.*
|
|
!.env.example
|
|
|
|
# --- IDE files ---
|
|
.vscode/
|
|
.idea/
|
|
*.swp
|
|
*.swo
|
|
*~
|
|
.zvec-grep/
|
|
|
|
# --- OS files ---
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# --- Project-specific state files ---
|
|
.blog_rss_state.json
|
|
.caldav_sync_state.json
|
|
# État d'authentification pronotepy (QR code / token rotation)
|
|
.pronote_auth_state.json
|
|
*.state.json
|
|
|
|
# --- Local scratch / WIP files ---
|
|
FIXME_*
|
|
FEAT_*
|
|
TEST_*
|
|
HANDOFF.md
|
|
.worktrees/
|
|
|
|
# --- Logs ---
|
|
*.log
|
|
|
|
# --- Artefacts iCal temporaires ---
|
|
# Ignorer les exports iCal temporaires (peuvent contenir des jetons ou données scolaires).
|
|
# Les fixtures iCal anonymisées (M13) restent suivies car elles ne correspondent pas au suffixe *.tmp.ics.
|
|
*.tmp.ics
|