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
+112
View File
@@ -0,0 +1,112 @@
% =============================================================================
% CHAPITRE : MÉTHODE 1 — URL ICAL SÉCURISÉE
% =============================================================================
\chapter{Méthode 1 : URL iCal sécurisée (\texttt{icalsecurise})}
\label{ch:method1}
\section{Principe général}
Pronote expose un flux de calendrier en lecture seule conforme à la norme
\textbf{iCalendar (RFC 5545)}. L'accès est contrôlé par un \textbf{jeton secret} intégré dans
l'URL sous forme de paramètre de requête \texttt{icalsecurise}.
\begin{infobox}
\textbf{Statut} : {\emojiinfo\ Observé localement} (fonctionnalité native de Pronote, version non spécifiée).
\end{infobox}
\section{Obtention du jeton}
\begin{enumerate}
\item Se connecter à Pronote (Espace Parents ou Élève) via n'importe quelle méthode.
\item Accéder à la vue \guillemotleft Emploi du temps \guillemotright.
\item Utiliser la fonction \guillemotleft Export iCal \guillemotright ou \guillemotleft Exporter \guillemotright.
\item Pronote génère une URL contenant un jeton secret \texttt{icalsecurise}.
\item \textbf{Copier cette URL} : elle constitue une crédentiale unique sensible qui doit être
protégée comme un mot de passe.
\end{enumerate}
\begin{infobox}
\textbf{Source} : {\emojiinfo\ Observé localement dans les interfaces Pronote} (version non spécifiée,
hypothèse à valider).
\textbf{Note} : Les étapes dépendent de l'instance et du type de compte. L'exemple ci-dessus est
non fonctionnel et ne contient aucun secret.
\end{infobox}
\section{Format de l'URL}
\begin{lstlisting}[language=bash, caption=Format d'URL iCal Pronote, label=lst:ical-url]
https://{etablissement}.index-education.net/pronote/ical/Edt_{prenom}.ics?icalsecurise={jeton}&version={version}&param={param}
\end{lstlisting}
\begin{itemize}
\item \texttt{icalsecurise} : \textbf{Jeton secret} (crédentiale).
\item \texttt{version} : Version de Pronote (ex. \texttt{2024}).
\item \texttt{param} : Paramètres optionnels.
\end{itemize}
\begin{infobox}
\textbf{Source} : {\emojiinfo\ Analysé via \texttt{pronote\_sync/sources/ical.py}}.
\end{infobox}
\section{Cycle de vie}
\begin{itemize}
\item \textbf{Pérennité} : Le jeton reste valide jusqu'à :
\begin{itemize}
\item Révocation manuelle par l'utilisateur dans Pronote.
\item Régénération par l'établissement (ex. à la rentrée scolaire).
\end{itemize}
\item {\warningicon\ \textbf{Hypothèse à valider}} : La durée exacte dépend des politiques
de l'établissement (non documentée officiellement).
\end{itemize}
\begin{infobox}
\textbf{Source} : {\warningicon\ Comportement variable selon les instances} (à tester localement).
\end{infobox}
\section{Sécurité}
\begin{enumerate}
\item \textbf{Surface d'attaque} : Le jeton est encodé dans l'URL \rightarrow risque d'exposition via :
\begin{itemize}
\item Logs serveur/proxy.
\item En-tête \texttt{Referer}.
\item Historique du navigateur.
\end{itemize}
\item \textbf{Recommandations} :
\begin{itemize}
\item \textbf{Ne jamais versionner} l'URL (ex. dans \texttt{.env} ou Git).
\item Utiliser \textbf{HTTPS} (obligatoire).
\item Masquer l'URL dans les logs (ex. via \texttt{redact\_url()} dans
\texttt{pronote-sync}).
\end{itemize}
\end{enumerate}
\begin{infobox}
\textbf{Source} : {\warningicon\ Recommandation du projet} (inspirée des bonnes pratiques générales
de sécurité).
\end{infobox}
\section{Intégration dans \texttt{pronote-sync}}
\begin{itemize}
\item \textbf{Paramètre} : \texttt{PRONOTE\_ICAL\_URL} (ex. \texttt{.env.example} ligne 2).
\item \textbf{Comportement} :
\begin{itemize}
\item Prioritaire en mode \texttt{PRONOTE\_AGENDA\_SOURCE=auto}.
\item Si l'URL est invalide ou expire, repli automatique vers \texttt{pronotepy} (si
\texttt{PRONOTE\_AGENDA\_SOURCE=auto}).
\item \textbf{Aucun repli} si \texttt{PRONOTE\_AGENDA\_SOURCE=ical} (échec explicite).
\end{itemize}
\end{itemize}
\begin{infobox}
\textbf{Source} : {\emojiinfo\ \texttt{pronote\_sync/config/settings.py} +
\texttt{pronote\_sync/sources/ical.py}}.
\end{infobox}
% =============================================================================
% FIN DU CHAPITRE
% =============================================================================