EduWireApps / ecoledirecte-api-docs

70 stars 15 forks source link

Help Wanted: code=225 /Paramètres spécifiés incorrects sur /v3/connexion/doubleauth.awp #31

Closed Thierry-LUX closed 4 months ago

Thierry-LUX commented 4 months ago

bonjour à tous,

Un grand bravo pour tout ce travail, génial. Je bloque sur cette nouvelle authentification QCM depuis plusieurs jours, je ne comprends pas. Pas un très bon niveau, et seulement en PowerShell en plus. Je précise qu'il n'y a pas de soucis avec le projet, mais j'ai un soucis de syntaxe sous PowerShell.

Depuis plusieurs année, j'ai un script, qui s'authentifie avec mon user/pass (en tant que parents), et qui ensuite utilise le token récupérer pour boucler sur mes enfants et aller chercher les nouvelles notes et me notifier sur Telegram.

Tout marchait jusqu'à implementation du QCM. J'ai gagné quelques semaines en utilisant l'userAgent qui allait bien, mais la c'est de nouveau mort. Pas le choix il faut que j'implémente la gestion du QCM :-)

La doc est très bien faite, je comprends les réponses que je devrais avoir, j'ai bien compris ce que je devrais renvoyer, etc....

Mon soucis est dès le début, je ne reçois pas les questions/réponses, mais à chaque fois un: @{code=225; data=; message=Paramètres spécifiés incorrects !; host=HTTP67}

Pour passer le user/password initial je fais:

$body = 'data={
    "uuid": "",
    "identifiant": "user",
   "motdepasse": "password",
    "isReLogin": false
}'
$headers = @{
    'Content-Type'= 'application/x-www-form-urlencoded'
}

$userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
$response = Invoke-restmethod 'https://api.ecoledirecte.com/v3/login.awp' -Method 'POST' -Headers $headers -Body $body -UserAgent $userAgent

Write-Host  "Initial Token: ", $response.token

J'obtient bien le token (depuis des années et c'est ce token que je passe à tous mes calls suivants pour mes boucles avec les enfants et récuperer leur notes.).

J'obtiens également ce nouveau code 250; donc 2eme étape: récupérer les questions/réponses du QCM, je fais

$body = 'data={   }'
$response = Invoke-restmethod   'https://api.ecoledirecte.com/v3/connexion/doubleauth.awp' -Headers $headers -Body $body -UserAgent $userAgent

j'ai aussi éssayé

$response = Invoke-WebRequest 'https://api.ecoledirecte.com/v3/connexion/doubleauth.awp' -Headers $headers -Body $body -UserAgent $userAgent

J'ai tourné cela dans tous les sens, avec et sans headers, avec et sans Body, avec et sans UserAgent, en passant le token et sans, en faisant un GET ou un POST; mais rien n'y fait , j'ai toujours cette erreur 225

D'apres la doc il faut faire un GET avec simplement Data vide.

meme avec CURL ça passe pas:

curl https://api.ecoledirecte.com/v3/connexion/doubleauth.awp

{"code":225,"data":null,"message":"Paramètres spécifiés incorrects !","host":"HTTP134"}

Quelqu'un pourrait svp me pointer sur la commande à envoyer en Powershell pour récuperer ces questions/réponses ? ou bien la commande curl équivalente et je la porterais.

D'avance un GRAND merci !

mdeverdelhan commented 4 months ago

Si jamais cela peut aider je l'ai implémenté dans ecoledirecte-client : https://github.com/mdeverdelhan/ecoledirecte-client/blob/ecoledirecte-client-1.3/src/main/java/eu/verdelhan/ecoledirecte/EcoleDirecteClient.java#L142

Normalement un POST sur https://api.ecoledirecte.com/v3/connexion/doubleauth.awp?verbe=get en fournissant un en-tête X-Token (comportant le jeton obtenu au login, sur code 250) et le corps data vide ({}) doit suffire. Attention : ne pas oublier le verbe=get en paramètre de requête (et verbe=post pour envoyer la réponse choisie).

Thierry-LUX commented 4 months ago

Un GRAND merci @mdeverdelhan ! ->tes explications, ton code source et quelques recherches supplémentaires m'ont apporté la solution.

Pour les autres utilisant PowerShell, voici comment je faisais avant l'ajout du QCM

$body = 'data={
    "uuid": "",
    "identifiant": "user",
   "motdepasse": "password",
    "isReLogin": false
}'
$headers = @{
    'Content-Type'= 'application/x-www-form-urlencoded'
}

$userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"

$url_doubleauth = 'https://api.ecoledirecte.com/v3/connexion/doubleauth.awp?verbe=get'
$url_login = 'https://api.ecoledirecte.com/v3/login.awp'
$url_enfant = 'https://api.ecoledirecte.com/v3/eleves/xxxx/notes.awp?verbe=get'

$response = Invoke-restmethod -Uri $url_login  -Method 'POST' -Headers $headers -Body $body -UserAgent $userAgent
$token=$response.token

le token obtenu était alors injecté au Body suivant le format ci dessous

$body = "data={`n   `"token`": `"$token`"`n}"
$response = Invoke-RestMethod -Uri $url_enfant -Method 'POST' -Headers $headers -Body $body -UserAgent $userAgent

Et toute la suite fonctionnait sans soucis.

Depuis l'introduction du QCM, j'éssayais à tord d'utiliser ce token via la meme manière (dans le body)

$qcm = Invoke-restmethod -Uri $url_doubleauth -Method 'POST' -Headers $headers -Body 'data={}' -UserAgent $userAgent Mais à chaque fois j'avais un code 225 - Paramètres spécifiés incorrects !"

Il s'avère, que contrairement à leurs autres URLs, celle de doubleauth.awp n'accepte pas le token sous format token: xxxx dans le Body mais a besoin du Token dans le Header sous format X_Token = xxx

donc ceci ne fonctionne pas pour doubleauth.awp (mais fonctionne pour toutes les autres URLs)

$body = "data={`n   `"token`": `"$token`"`n}"
$qcm = Invoke-restmethod -Uri $url_doubleauth -Method 'POST' -Headers $headers -Body 'data={}' -UserAgent $userAgent

alors que ceci fonctionne:

$headers = @{"X-Token" = "$token"}
$qcm = Invoke-restmethod -Uri $url_doubleauth -Method 'POST' -Headers $headers -Body 'data={}' -UserAgent $userAgent

Voila, si ça peux en dépanner d'autres :-)

Encore merci!

Thierry-LUX commented 4 months ago

je ferme l'issue :-)