diff --git a/docs/pedagogie/audit-conformite-usage-api.md b/docs/pedagogie/audit-conformite-usage-api.md new file mode 100644 index 0000000..7627626 --- /dev/null +++ b/docs/pedagogie/audit-conformite-usage-api.md @@ -0,0 +1,109 @@ +# Audit conformité usage API 42 — Swifty Companion + +> **Date :** audit local dépôt de travail +> **Contraintes respectées :** aucune lecture du fichier `.env` local actuel ; **aucune requête** vers `api.intra.42.fr`. + +Objectif : vérifier si le **code et le dépôt** peuvent expliquer une **extraction massive** (~140k profils) du type décrit par le mail 42 — ou seulement un usage **pédagogique ponctuel**. + +--- + +## 1. Verdict global + +| Question | Réponse | +|----------|---------| +| Le **code Flutter** ressemble-t-il à un scraper massif ? | **Non** | +| Usage prévu du sujet Swifty Companion ? | **Oui** (1 login → 1 profil) | +| Risque d’être l’**auteur principal** de la fuite nationale décrite ? | **Très improbable** si tu n’as pas lancé d’autres scripts | +| Point **sécurité** à corriger dans **ton** Git ? | **Oui** — voir §4 | + +--- + +## 2. Analyse du code (`swiftyCompanion/swifty_companion/lib/`) + +### Appels API présents + +| Fichier | Comportement | Volume typique | +|---------|--------------|----------------| +| `intra_user_service.dart` | `GET /v2/users?filter[login]=` | **1 utilisateur** par recherche | +| `intra_profile_service.dart` | `GET /users/{login}`, évent. `cursus_users`, `projects_users` (page 100) | **1 profil** par navigation | +| `intra_auth_service.dart` | OAuth + `GET /me` + refresh token | Session | +| `intra_http.dart` | GET avec retry 429, refresh sur 401 | Par requête ci-dessus | + +### Absent du dépôt (recherché) + +- Pas de script `sh` / `py` d’export massif +- Pas de boucle sur campus / pagination `page[number]` sur tous les users +- Pas de `filter[campus]`, pas de dump CSV/JSON de milliers de profils +- Pas de stockage fichier des profils (cache mémoire **2 min**, **1 id** à la fois) + +**Conclusion technique :** l’application ne peut pas, **seule**, extraire 140k profils sans modification majeure du code. + +--- + +## 3. Lien avec le mail école + +Le mail décrit : + +- extraction **automatisée** à très grande échelle ; +- **multi-campus**, candidats + étudiants ; +- via un **compte légitime** (pas forcément ton app OAuth). + +Ton projet : + +- recherche **manuelle** par login ; +- quelques requêtes par profil ; +- aligné sur le sujet (« consulter un pair »). + +**Ce n’est pas le même profil d’usage**, sauf si tu as **en plus** utilisé un autre outil, un script perso, ou partagé des données. + +--- + +## 4. Risque sécurité — dépôt Git (hors fuite massive) + +Audit Git **sans afficher les valeurs** des secrets : + +| Élément | État | +|---------|------| +| `swifty_companion/.env` | **Ignoré** par `.gitignore` (OK) | +| `swifty_companion/.env copy` | **Versionné dans Git** (commit `06fe43b`) | +| Contenu versionné | Présence de `CLIENT_ID` et `CLIENT_SECRET` dans ce fichier (valeurs **non** recopiées dans ce document) | +| Remote | `origin` → **Gitea privé** perso (pas Vogosphere 42) | + +**Risque :** si le dépôt est **privé** et que **toi seul** y as accès, l’exposition des clés via `.env copy` est **limitée** (pas équivalent à un repo public). Ça ne te relie **pas** à l’incident ~140k profils. Reste une **mauvaise pratique** (historique Git + sujet 42) : régénérer le SECRET si tu as déjà poussé ce fichier, retirer `.env copy` du suivi Git pour l’avenir. + +### Actions recommandées (à faire de ton côté) + +1. **Régénérer le SECRET** sur [Applications OAuth Intra](https://profile.intra.42.fr/oauth/applications) (même si déjà fait après le chat). +2. **Retirer** `swifty_companion/.env copy` du suivi Git (`git rm --cached`, supprimer le fichier, commit). +3. Si le dépôt distant a déjà reçu ce fichier : considérer **réécriture d’historique** ou invalidation des anciens secrets (SECRET régénéré = ancien jeton mort). +4. Ne jamais committer `.env`, captures avec clés, ou dumps de profils. + +--- + +## 5. Ce que cet audit n’a pas fait + +- Pas d’appel à l’API 42 (pas de logs côté 42 consultés). +- Pas de lecture du `.env` actuel sur disque. +- Pas d’accès aux serveurs 42 / pas de corrélation avec l’enquête interne. + +Seul **42** ou la police pourrait lier un compte OAuth à un volume de requêtes précis. + +--- + +## 6. En cas de contact DPO / campus + +Tu peux décrire factuellement : + +- projet **Swifty Companion** (Flutter) ; +- recherche **par login** uniquement ; +- pas d’export massif dans le code livré ; +- app OAuth **pédagogique** avec scopes `public` + `projects`. + +Contact mail incident : **dpo@42.tech** (comme indiqué par l’école). + +--- + +## 7. Références + +- [guide-soutenance-realisation.md](guide-soutenance-realisation.md) — cartographie sujet ↔ code +- [sujet traduit](../sujets/swifty-companion.md) — usage autorisé vs extraction massive (CGU 42) diff --git a/docs/pedagogie/guide-soutenance-realisation.md b/docs/pedagogie/guide-soutenance-realisation.md index 2afa9bf..2e9784e 100644 --- a/docs/pedagogie/guide-soutenance-realisation.md +++ b/docs/pedagogie/guide-soutenance-realisation.md @@ -282,6 +282,7 @@ Checklist : [etape-06-checklist-soutenance.md](etape-06-checklist-soutenance.md) - [ ] Bonus refresh testé (DEBUG → Rechercher) - [ ] Prêt à expliquer **où** est chaque critère du sujet (ce guide §3) - [ ] SECRET régénéré si jamais exposé (chat, commit accidentel) +- [ ] Fichier **`.env copy`** retiré du Git — voir [audit-conformite-usage-api.md](audit-conformite-usage-api.md) ---