Skip to content

softwarevo/evo2ed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

106 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 evo2ED - Bridge EcoleDirecte

License: AGPL v3 Built with Cloudflare Workers

evo2ED est le moteur (bridge) qui permet à evoMoyenne de communiquer avec EcoleDirecte. Il est totalement libre d'utilisation si vous l'hébergez vous-même, n'hésitez pas à l'utiliser !

Pour l'instant il ne récupère que les infos suivantes :

  • Prénom, nom de l'élève
  • Photo de profil (convertie en Base64 Data URI)
  • Notes de l'élève

Nous en ajouterons plus en fonction de nos besoins/temps. N'hésitez pas à faire des pull requests pour nous aider à avancer !

Important

L'instance officielle tournant sur ed.api.evosuite.qzz.io est principalement destinée aux services evoSuite. Il est libre d'utilisation, mais nous pouvons vous demander d'arrêter de l'utiliser si vous envoyez trop de requêtes. Si vous souhaitez utiliser ce bridge pour votre propre projet, nous vous recommandons plutôt d'héberger votre propre instance (voir ci-dessous).


🛠️ Crédits & Origines

Ce projet utilise une version modifiée et adaptée de la bibliothèque api-ecoledirecte (sous licence ISC) créée par Louis Legrain. Un immense merci à lui pour son travail.

Modifications apportées pour ce projet :

  • Conversion en ES Modules pour compatibilité Cloudflare.

⚙️ Fonctionnement de l'API

L'authentification s'effectue en deux étapes pour contourner la double authentification (2FA) obligatoire d'EcoleDirecte.

1. Initialisation (Étape 1)

Envoyez les identifiants au bridge pour déclencher la question de sécurité.

Requête : POST /

{
  "identifiant": "votre_login",
  "motdepasse": "votre_mdp"
}

Réponse (Si 2FA requise) : Le bridge renvoie la question et deux listes de propositions.

Caution

Pour répondre à l'étape suivante, vous devez utiliser l'élément correspondant dans rawPropositions (la valeur encodée en Base64) et non le texte en clair de propositions. L'envoi d'une valeur non encodée peut entraîner un blocage du compte (qui peut être débloqué dans votre boîte mail).

{
  "status": "2FA_REQUIRED",
  "qcm": {
    "question": "Quel est votre mois de naissance ?", 
    "propositions": ["août", "janvier", "novembre"],
    "rawPropositions": ["YW/Du3Q=", "amFudmllcg==", "bm92ZW1icmU="]
  },
  "token": "...",
  "2faToken": "...",
  "deviceUUID": "..."
}

2. Validation (Étape 2)

Renvoyez les identifiants, les tokens de session récupérés à l'étape 1, et le code Base64 de la réponse choisie dans le champ qcmResponse.

Requête : POST /

{
  "identifiant": "votre_login",
  "motdepasse": "votre_mdp",
  "qcmResponse": "YW/Du3Q=", 
  "tokens": { 
    "token": "...", 
    "2faToken": "...",
    "deviceUUID": "..."
  }
}

Réponse (Success) : Si la réponse est correcte, le bridge renvoie les données complètes.

{
  "status": "SUCCESS",
  "identity": {
    "nom": "NOM",
    "prenom": "Prenom",
    "photo": "data:image/jpeg;base64,...",
    "classe": { "nom": "...", "id": "..." },
    "etablissement": "..."
  },
  "notes": {
   0: Object
   codeMatiere: "0"
   codePeriode: "0"
   codeSousMatiere: ""
   coef: 0
   commentaire: ""
   date: ""
   dateSaisie: ""
   devoir: ""
   elementsProgramme: Array(1)
   0: Object
   afc: 0
   cdt: false
   descriptif: ""
   idCompetence: 1
   idConnaissance: 0
   idElemProg: 1
   libelleCompetence: ""
   valeur: ""
   length: 1
   enLettre: false
   id: 1
   libelleMatiere: ""
   nonSignificatif: false
   noteSur: ""
   typeDevoir: ""
   uncCorrige: ""
   uncSujet: ""
   valeur: ""
   valeurisee: false,
  "token": "...",
  "2faToken": "...",
  "deviceUUID": "...",
  "accountId": "..."
  }
}

3. Rafraîchissement Silencieux (Silent Check)

Pour maintenir une session active sans redemander la 2FA à chaque fois, vous pouvez utiliser le flux de rafraîchissement silencieux. Le bridge tentera d'abord de récupérer les données avec les tokens existants avant de fallback sur un login complet.

Requête : POST /

{
  "tokens": {
    "token": "...",
    "2faToken": "...",
    "deviceUUID": "...",
    "accountId": "...",
    "identity": { "nom": "NOM", "prenom": "Prenom" }
  },
  "identifiant": "votre_login",
  "motdepasse": "votre_mdp"
}

Tip

Le deviceUUID est crucial : il doit être généré une seule fois par le bridge (reçu lors du premier login) et stocké par le client. Le renvoyer systématiquement permet à EcoleDirecte de reconnaître l'appareil et d'éviter de déclencher la 2FA à chaque session.


🚀 Déployer votre propre instance

Vous voulez utiliser ce bridge pour votre propre projet ?

1. Forker le projet

  • Cliquez sur le bouton Fork en haut à droite de ce repo pour en avoir une copie sur votre compte GitHub.

2. Connecter Cloudflare Workers

  1. Créez un compte gratuit sur Cloudflare.
  2. Allez dans Workers & Pages > Créer une application.
  3. Cliquez sur Continue with GitHub.
  4. Sélectionnez votre fork d'evo2ed.
  5. Laissez la commande de build vide.
  6. Cliquez sur Déployer.

3. Mises à jour

L'avantage d'un fork est qu'il ne se met pas à jour silencieusement. Vous pouvez donc préparer votre projet à la mise à jour avant de synchroniser votre fork (Sync fork > Update branch apparaîtra automatiquement dans votre fork).

⚖️ Licence

Ce projet est la propriété de evoSoftware et est distribué sous licence AGPLv3. Voir le fichier LICENSE pour plus de détails.

About

Bridge web pour communiquer avec l’API d’EcoleDirecte

Topics

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •