Enrichir GuidePronote : section ENT obligatoire (EduConnect/HubEduConnect), exemple Bordeaux, correction .env.example
202
GuidePronote.md
Normal file
202
GuidePronote.md
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
# Guide-Pronote
|
||||||
|
|
||||||
|
Ce guide pratique explique comment configurer les variables spécifiques à **Pronote** pour le pipeline `pronote-sync`.
|
||||||
|
Pour un tableau complet des variables disponibles, consultez la page [Configuration](Configuration).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Obtenir l'URL iCal (`PRONOTE_ICAL_URL`)
|
||||||
|
|
||||||
|
L'URL iCal est le flux d'export du calendrier Pronote. Elle contient un **token `icalsecurise`** sensible et doit être traitée comme un mot de passe.
|
||||||
|
|
||||||
|
### Étapes pour obtenir l'URL iCal :
|
||||||
|
1. Se connecter à l'espace **parent** Pronote.
|
||||||
|
2. Aller dans la vue **Emploi du temps** (souvent accessible via *Vie scolaire* ou le widget calendrier).
|
||||||
|
3. Chercher l'icône d'export agenda / synchronisation calendrier (généralement en haut à droite de l'emploi du temps, libellée **« Exporter »** ou **« Synchroniser avec un agenda »**).
|
||||||
|
4. Une fenêtre modale affiche l'**URL d'abonnement iCal**.
|
||||||
|
|
||||||
|
### Format attendu :
|
||||||
|
```text
|
||||||
|
https://<instance>.index-education.net/pronote/ical/Edt_Prenom.ics?icalsecurise=<token>&version=2024
|
||||||
|
```
|
||||||
|
|
||||||
|
### Avertissements :
|
||||||
|
- Le token `icalsecurise` est **sensible** : il est stocké en `SecretStr` et masqué dans les logs.
|
||||||
|
- Certaines instances Pronote **ne proposent pas** d'export iCal. Si la page d'agenda ne montre que les options **« Personnaliser »** et **« Générer un PDF pour impression »**, l'iCal n'est pas disponible. Dans ce cas, laissez `PRONOTE_ICAL_URL` vide et utilisez `pronotepy` comme source unique.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Obtenir l'URL de connexion (`PRONOTE_URL`)
|
||||||
|
|
||||||
|
`PRONOTE_URL` est l'URL de la page Pronote utilisée par [`pronotepy`](https://github.com/bain3/pronotepy) pour la connexion API.
|
||||||
|
|
||||||
|
### Contraintes :
|
||||||
|
- C'est l'URL **visible dans le navigateur** sur la page de connexion Pronote, **sans paramètres de requête**.
|
||||||
|
- **Format** :
|
||||||
|
```text
|
||||||
|
https://<instance>.index-education.net/pronote/parent.html
|
||||||
|
```
|
||||||
|
- Retirez **tout paramètre de query string** (ex. `?identifiant=...`). `pronotepy` ne supporte pas les paramètres de requête dans cette URL.
|
||||||
|
|
||||||
|
### Note importante :
|
||||||
|
`PRONOTE_URL` et `PRONOTE_ICAL_URL` sont **deux contrats distincts** : l'un ne doit **jamais** être déduit de l'autre.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Type de compte (`PRONOTE_ACCOUNT_TYPE`)
|
||||||
|
|
||||||
|
- **Valeur par défaut** : `parent`.
|
||||||
|
- Le projet utilise :
|
||||||
|
- `pronotepy.ParentClient` pour un compte **parent**.
|
||||||
|
- `pronotepy.Client` pour un compte **élève**.
|
||||||
|
- Pour un compte parent, conservez la valeur par défaut.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Identifiants (`PRONOTE_USERNAME` et `PRONOTE_PASSWORD`)
|
||||||
|
|
||||||
|
- **`PRONOTE_USERNAME`** : Identifiant de connexion à l'espace parent Pronote.
|
||||||
|
- **`PRONOTE_PASSWORD`** : Mot de passe associé.
|
||||||
|
- Le mot de passe est stocké en `SecretStr` et **masqué dans les logs et les erreurs**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ENT (`PRONOTE_ENT`)
|
||||||
|
|
||||||
|
Si votre collège utilise un **ENT** (Espace Numérique de Travail) pour la connexion à Pronote, renseignez le **slug** correspondant.
|
||||||
|
|
||||||
|
### Fonctionnement :
|
||||||
|
- Le projet résout ce slug vers une fonction de `pronotepy.ent` via une **liste fermée**.
|
||||||
|
- Si la connexion est **directe** (pas de redirection ENT), laissez `PRONOTE_ENT` **vide ou absent**.
|
||||||
|
|
||||||
|
### Quand l'ENT est obligatoire
|
||||||
|
|
||||||
|
De nombreuses instances Pronote délèguent l'authentification à un fournisseur d'identité externe (EduConnect, HubEduConnect, SSO SAML). Dans ce cas, `pronotepy` ne peut pas s'authentifier directement avec uniquement un nom d'utilisateur et un mot de passe : il a besoin du résolveur ENT pour gérer le flux d'authentification et fournir les cookies de session nécessaires.
|
||||||
|
|
||||||
|
**Comment savoir si votre instance nécessite un ENT :**
|
||||||
|
- Si vous obtenez l'erreur `Page html is different than expected. Be sure that pronote_url is the direct url to your pronote page.`, cela signifie presque certainement que votre instance Pronote redirige vers un portail d'authentification (EduConnect/HubEduConnect) et que vous devez configurer `PRONOTE_ENT`.
|
||||||
|
- Essayez d'ouvrir votre `PRONOTE_URL` dans un navigateur en mode navigation privée/incognito. Si vous êtes redirigé vers une page de connexion EduConnect ou ENT, vous devez configurer l'ENT.
|
||||||
|
|
||||||
|
**Académie de Bordeaux (HubEduConnect) :**
|
||||||
|
- L'académie de Bordeaux utilise HubEduConnect (via EduConnect) pour l'authentification.
|
||||||
|
- Configuration : `PRONOTE_ENT=bordeaux`
|
||||||
|
- Le résolveur `bordeaux` gère le flux HubEduConnect sur `hubeduconnect.index-education.net`.
|
||||||
|
|
||||||
|
**Autres instances EduConnect :**
|
||||||
|
- De nombreuses académies utilisent EduConnect. Si votre instance redirige vers `educonnect.education.gouv.fr` ou `hubeduconnect.index-education.net`, recherchez le slug correspondant dans le tableau ci-dessous.
|
||||||
|
- Si votre académie n'est pas listée, la connexion peut ne pas être supportée par `pronotepy` pour le moment.
|
||||||
|
|
||||||
|
> **Note** : Si l'authentification via ENT échoue (en raison de CAPTCHA, de MFA ou d'un flux d'authentification modifié), `pronotepy` prend également en charge la connexion par code QR/token comme alternative. Cela n'est pas encore implémenté dans `pronote-sync`.
|
||||||
|
|
||||||
|
### Slugs ENT supportés :
|
||||||
|
|
||||||
|
| Slug | ENT |
|
||||||
|
|------|-----|
|
||||||
|
| `monbureaunumerique` | Mon Bureau Numérique |
|
||||||
|
| `ent_elyco` | ENT Elyco |
|
||||||
|
| `bordeaux` | ENT Bordeaux |
|
||||||
|
| `ent_creuse` | ENT Creuse |
|
||||||
|
| `occitanie_montpellier` | Occitanie Montpellier |
|
||||||
|
| `paris_classe_numerique` | Paris Classe Numérique |
|
||||||
|
| `ile_de_france` | Île-de-France |
|
||||||
|
| `ent_hdf` | ENT Hauts-de-France |
|
||||||
|
| `ac_orleans_tours` | Académie Orléans-Tours |
|
||||||
|
| `ac_poitiers` | Académie Poitiers |
|
||||||
|
| `ac_rennes` | Académie Rennes |
|
||||||
|
| `laclasse_educonnect` | LaClasse (EduConnect) |
|
||||||
|
| `ent77` | ENT 77 |
|
||||||
|
| `ent_ecollege78` | eCollège 78 |
|
||||||
|
| `ent_essonne` | ENT Essonne |
|
||||||
|
| `val_doise` | Val d'Oise |
|
||||||
|
| `val_de_marne` | Val de Marne |
|
||||||
|
| `ent_var` | ENT Var |
|
||||||
|
| `atrium_sud` | Atrium Sud |
|
||||||
|
| `laclasse_lyon` | LaClasse Lyon |
|
||||||
|
| `eclat_bfc` | ÉCLAT Bourgogne-Franche-Comté |
|
||||||
|
| `cas_arsene76` | CAS Arsène 76 |
|
||||||
|
| `cas_ent27` | CAS ENT 27 |
|
||||||
|
| `cas_kosmos` | CAS Kosmos |
|
||||||
|
| `ent_creuse_educonnect` | ENT Creuse (EduConnect) |
|
||||||
|
| `ent_mayotte` | ENT Mayotte |
|
||||||
|
| `ent_somme` | ENT Somme |
|
||||||
|
| `ent_94` | ENT 94 |
|
||||||
|
| `extranet_colleges_somme` | Extranet Collèges Somme |
|
||||||
|
| `ac_reunion` | Académie Réunion |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Choix des sources (`PRONOTE_AGENDA_SOURCE`, `PRONOTE_HOMEWORK_SOURCE`, `PRONOTE_MESSAGES_SOURCE`)
|
||||||
|
|
||||||
|
Le pipeline propose trois modes pour récupérer les données Pronote :
|
||||||
|
|
||||||
|
### Modes disponibles :
|
||||||
|
- **`auto`** (par défaut) :
|
||||||
|
Essaye d'abord **iCal**, puis bascule vers `pronotepy` **uniquement si iCal lève une exception**.
|
||||||
|
- **`ical`** :
|
||||||
|
Utilise **uniquement iCal**, sans bascule silencieuse.
|
||||||
|
**Requiert** `PRONOTE_ICAL_URL`.
|
||||||
|
- **`pronotepy`** :
|
||||||
|
Utilise **uniquement `pronotepy`**, sans bascule silencieuse.
|
||||||
|
**Requiert** `PRONOTE_URL`, `PRONOTE_USERNAME`, `PRONOTE_PASSWORD`, et `PRONOTE_ENT` (si applicable).
|
||||||
|
|
||||||
|
### Comportements :
|
||||||
|
- En mode `auto`, si **iCal et `pronotepy` échouent** → **erreur critique explicite**.
|
||||||
|
- Une **liste vide** est un **succès valide** : elle ne doit pas être assimilée à une panne.
|
||||||
|
- Les **messages** ne sont disponibles que via `pronotepy` (absents du flux iCal).
|
||||||
|
**`PRONOTE_MESSAGES_SOURCE` est toujours `pronotepy`**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Exemple sans iCal (pronotepy uniquement)
|
||||||
|
|
||||||
|
Si votre instance Pronote ne propose pas d'export iCal, utilisez `pronotepy` comme source unique :
|
||||||
|
|
||||||
|
```ini
|
||||||
|
PRONOTE_URL=https://0640036s.index-education.net/pronote/parent.html
|
||||||
|
PRONOTE_ACCOUNT_TYPE=parent
|
||||||
|
PRONOTE_USERNAME=parent.dupont
|
||||||
|
PRONOTE_PASSWORD=ton_mot_de_passe
|
||||||
|
PRONOTE_ENT=bordeaux
|
||||||
|
|
||||||
|
# Sources : pronotepy uniquement (pas de repli iCal)
|
||||||
|
PRONOTE_AGENDA_SOURCE=pronotepy
|
||||||
|
PRONOTE_HOMEWORK_SOURCE=pronotepy
|
||||||
|
PRONOTE_MESSAGES_SOURCE=pronotepy
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Exemple avec iCal et pronotepy (mode auto)
|
||||||
|
|
||||||
|
Si votre instance Pronote propose l'export iCal, vous pouvez utiliser le mode `auto` pour basculer automatiquement entre les sources :
|
||||||
|
|
||||||
|
```ini
|
||||||
|
PRONOTE_ICAL_URL=https://<instance>.index-education.net/pronote/ical/Edt_Prenom.ics?icalsecurise=<token>&version=2024
|
||||||
|
PRONOTE_URL=https://<instance>.index-education.net/pronote/parent.html
|
||||||
|
PRONOTE_ACCOUNT_TYPE=parent
|
||||||
|
PRONOTE_USERNAME=parent.dupont
|
||||||
|
PRONOTE_PASSWORD=ton_mot_de_passe
|
||||||
|
PRONOTE_ENT=bordeaux
|
||||||
|
|
||||||
|
PRONOTE_AGENDA_SOURCE=auto
|
||||||
|
PRONOTE_HOMEWORK_SOURCE=auto
|
||||||
|
PRONOTE_MESSAGES_SOURCE=pronotepy
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tester la configuration
|
||||||
|
|
||||||
|
Pour valider votre configuration Pronote, exécutez le pipeline en mode **simulation** :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pronote-sync --dry-run --log-level DEBUG
|
||||||
|
```
|
||||||
|
|
||||||
|
- Le mode `--dry-run` valide la connexion et le pipeline **sans écrire** dans CalDAV/XMPP.
|
||||||
|
- Le niveau de log `DEBUG` affiche les **étapes détaillées** pour diagnostiquer d'éventuels problèmes.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
→ [Configuration](Configuration) — tableau des variables
|
||||||
|
→ [Sécurité](Sécurité) — gestion des secrets
|
||||||
Reference in New Issue
Block a user