Files
swift_companion/docs/pedagogie/audit-conformite-usage-api.md
2026-10-21 08:21:56 +02:00

110 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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]=<un 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)