EduWireApps / ecoledirecte-api-docs

70 stars 15 forks source link

Enlevé X-Token inutile #20

Closed MrBeam89 closed 7 months ago

MrBeam89 commented 7 months ago

Après avoir analysé la documentation, la section concernant le X-Token ne semble pas (ou plus) nécessaire.

J'ai réalisé un test (en Python) qui prouve qu'il n'est plus obligatoire :

# X-Token test
import requests
import json

X_TOKEN = True # A changer

header = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',
            'content-type': 'application/x-www-form-urlencoded'
        }

def login(identifiant:str, motdepasse:str):
    url = "https://api.ecoledirecte.com/v3/login.awp?v=4.44.0"
    login_request = f'data={{"uuid": "", "identifiant": "{identifiant}", "isRelogin": false, "motdepasse": "{motdepasse}"}}'
    login_response = requests.post(url=url, data=login_request, headers=header)

    return login_response

# Cela fonctionne avec la timeline, alors cela fonctionne aussi avec les autres requêtes
def timeline(eleve_id:int, token:str, x_token:bool):
    if x_token:
        header["X-Token"] = token

    print(f"Header : {header}")
    url = f"https://api.ecoledirecte.com/v3/eleves/{eleve_id}/timeline.awp?verbe=get&v=4.44.1"
    timeline_requete = f'data={{"token": "{token}"}}'
    timeline_reponse = requests.post(url=url, data=timeline_requete, headers=header)

    return timeline_reponse

identifiant = input("Identifiant : ")
motdepasse = input("Mot de passe : ")

login_json = login(identifiant, motdepasse).json()
token = login_json["token"] 
eleve_id = login_json["data"]["accounts"][0]["id"]

print(f"Création du fichier \"timeline.json\"")
file = open("timeline.json", "w")
file.close()
file = open("timeline.json", "w")

timeline_json = json.dumps(timeline(eleve_id, token, X_TOKEN).json(), indent=4)
file.write(timeline_json)
print("Terminé!")

Résultat sans X-Token :

{
    "code": 200,
    "token": "token-secret",
    "host": "HTTP140",
    "data": [
        {
            "date": "2024-01-04",
            "typeElement": "Note",
            "idElement": 0,
            "titre": "Nouvelle \u00e9valuation",
            "soustitre": "ANGLAIS Expression Ecrite",
            "contenu": "Plickers dec 2023 du 04/01/2024"
        },
        {
            "date": "2023-12-29",
            "typeElement": "Note",
            "idElement": 0,
            "titre": "Nouvelle \u00e9valuation",
            "soustitre": "ENSEIGN.SCIENTIFIQUE",
            "contenu": "activit\u00e9 ch 5 du 29/12/2023"
        }, 
        // ...
    ]
}

Résultat avec X-Token :

{
    "code": 200,
    "token": "token-secret",
    "host": "HTTP114",
    "data": [
        {
            "date": "2024-01-04",
            "typeElement": "Note",
            "idElement": 0,
            "titre": "Nouvelle \u00e9valuation",
            "soustitre": "ANGLAIS Expression Ecrite",
            "contenu": "Plickers dec 2023 du 04/01/2024"
        },
        {
            "date": "2023-12-29",
            "typeElement": "Note",
            "idElement": 0,
            "titre": "Nouvelle \u00e9valuation",
            "soustitre": "ENSEIGN.SCIENTIFIQUE",
            "contenu": "activit\u00e9 ch 5 du 29/12/2023"
        },
        // ...
    ]
}
equalisysdev commented 7 months ago

Pour le coup, je pense que ce X-Token est gardé dans la doc à des fins de postérité.. En effet, toute cette documentation est non officielle et à été "retro-engineered". Toute information doit donc être gardée, même au cas ou...

MrBeam89 commented 7 months ago

C'est vrai.

kekaaafm commented 7 months ago

Je me permet de commenter pour vous informer que je n'ai pas pu reproduire une requête sans x_token. Sans ce token, impossible de différencier un utilisateur d'un autre. Le x_token est donc toujours necessaire