docs(pronote-auth): reconstruire le source LaTeX et régénérer le PDF

Les fichiers de chapitres référencés par docs/pronote-auth.tex (preamble, frontmatter, ch-*, annex-*) n'avaient jamais été committés, rendant le PDF non reproductible. Reconstitution fidèle depuis docs/pronote-auth.md, correction des instructions de compilation (TEXINPUTS + -output-directory), ajout de l'Annexe C, du Glossaire et de l'Historique des révisions, PDF régénéré (27 pages).
This commit is contained in:
2026-09-12 21:17:23 +02:00
parent 8efac8645b
commit 423a32f220
18 changed files with 1018 additions and 2 deletions
+90
View File
@@ -0,0 +1,90 @@
% =============================================================================
% CHAPITRE : MÉTHODE 2 — CONNEXION DIRECTE
% =============================================================================
\chapter{Méthode 2 : Connexion directe (identifiant / mot de passe + ENT)}
\label{ch:method2}
\section{Principe général}
Connexion via le protocole propriétaire de Pronote (JSON sur HTTPS), avec
\textbf{chiffrement AES-CBC utilisant une clé dérivée par MD5 (16 octets, soit AES-128)} comme
implémenté dans pronotepy 2.15.7 et mécanisme de défi-réponse. Utilisé par l'interface web.
\begin{infobox}
\textbf{Statut} : {\emojiinfo\ Observé dans le code local} (délégable à pronotepy via
\texttt{ParentClient} ou \texttt{Client}).
\end{infobox}
\section{Flux d'authentification}
\begin{enumerate}
\item \textbf{Initialisation} : Requête GET vers \texttt{/pronote/\{espace\}.html} (ex.
\texttt{parent.html}).
\begin{itemize}
\item Récupère \texttt{h} (ID de session), \texttt{a} (ID espace), \texttt{sCrA}/\texttt{sCoA}
(drapeaux chiffrement/compression).
\end{itemize}
\item \textbf{Échange de clés} : Requête POST vers
\texttt{/pronote/appelfonction/\{a\}/\{h\}/\{numeroOrdre\}}.
\item \textbf{Identification} : Soumission de \texttt{identifiant},
\texttt{genreConnexion=0}, \texttt{genreEspace=\{a\}}.
\item \textbf{Résolution du défi} :
\begin{itemize}
\item Calcul de \texttt{mtp = MAJUSCULE(HEX(SHA256(alea + mot\_de\_passe)))}.
\item Dérivation de \texttt{key\_challenge = MD5(nom\_utilisateur + mtp)}.
\item Déchiffrement du \texttt{challenge} avec
\textbf{AES-CBC utilisant une clé dérivée par MD5 (16 octets, soit AES-128)}.
\end{itemize}
\item \textbf{Authentification} : Soumission de la réponse au défi.
\end{enumerate}
\begin{infobox}
\textbf{Source} : {\emojiinfo\ Observé dans le code local de \texttt{pronotepy} 2.15.7} (module
\texttt{clients.py} et \texttt{pronoteAPI.py}, vérifié le 2026-09-12).
\end{infobox}
\section{Intégration dans \texttt{pronote-sync}}
\begin{itemize}
\item \textbf{Paramètres} :
\begin{itemize}
\item \texttt{PRONOTE\_URL} (ex. \texttt{.env.example} ligne 3).
\item \texttt{PRONOTE\_USERNAME}, \texttt{PRONOTE\_PASSWORD}.
\item \texttt{PRONOTE\_ENT} (slug dans \texttt{\_ENT\_NAMES}).
\item \texttt{PRONOTE\_ACCOUNT\_TYPE} (ex. \texttt{parent}).
\end{itemize}
\item \textbf{Comportement} :
\begin{itemize}
\item Utilise \texttt{pronotepy.ParentClient} pour les comptes parents.
\item \textbf{Repli} : Si iCal échoue en mode \texttt{auto}, \texttt{pronotepy} est utilisé.
\item \textbf{Pas de repli} si \texttt{PRONOTE\_AGENDA\_SOURCE=pronotepy} (échec explicite).
\end{itemize}
\end{itemize}
\begin{infobox}
\textbf{Source} : {\emojiinfo\ \texttt{pronote\_sync/sources/pronote/client.py}} (méthode
\texttt{\_connect\_password}).
\end{infobox}
\section{ENT supportés}
Liste \textbf{fermée} des \textbf{30 ENT} résolubles (lignes 5283 de
\texttt{pronote\_sync/sources/pronote/client.py}) :
\begin{lstlisting}[language=Python, caption=Liste des ENT supportés, label=lst:ent-list]
_monbureaunumerique, ent_elyco, bordeaux, ent_creuse, occitanie_montpellier, ...
\end{lstlisting}
\begin{warningbox}
\textbf{Hypothèse à valider} : Les ENT non listés nécessitent une contribution à
\texttt{pronotepy}.
\end{warningbox}
\begin{infobox}
\textbf{Source} : {\emojiinfo\ Code source local de \texttt{pronote-sync}} (2026-09-12).
\end{infobox}
% =============================================================================
% FIN DU CHAPITRE
% =============================================================================