#!/usr/bin/env bash # Connexion à l'API Boti Education d'une école (variante Green Wood School) # et mise en cache de la clé de session. # Les identifiants sont lus dans boti.ini de $XDG_CONFIG_HOME (~/.config par # défaut), jamais codés en dur. # # Format de boti.ini : # [boti] # login = 0600000000 # password = motdepasse # set -euo pipefail BASE="https://boti.education/p/greenwood/botiapi/" CONF="${XDG_CONFIG_HOME:-$HOME/.config}/boti.ini" CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/boti-key" if [[ ! -f "$CONF" ]]; then echo "fichier $CONF manquant (format : voir l'en-tête de ce script)" >&2 exit 1 fi login=$(awk -F= '/^login/{gsub(/[[:space:]]/,"",$2); print $2}' "$CONF") password=$(awk -F= '/^password/{gsub(/[[:space:]]/,"",$2); print $2}' "$CONF") reponse=$(curl -sS -m 20 "$BASE/login" \ -F "login=$login" \ -F "password=$password" \ -F "privacy=true" \ -F "remembreMe=false") if ! grep -q '"error":false' <<<"$reponse"; then echo "échec de connexion : $(head -c 200 <<<"$reponse")" >&2 exit 1 fi cle=$(sed -n 's/.*"keyToken":"\([0-9a-f]*\)".*/\1/p' <<<"$reponse") if [[ -z "$cle" ]]; then echo "keyToken absent de la réponse" >&2 exit 1 fi umask 077 printf '%s' "$cle" > "$CACHE" echo "clé de session enregistrée dans $CACHE (40 caractères hex)" echo "usage : curl \"$BASE/?user_id=&key=$(cat "$CACHE")\""