mediaDrop
+Connectez-vous pour déposer des fichiers médias.
+]` | session | Dépôt direct d'un fichier `multipart/form-data`, champ `file` |
-| `POST /upload/init` | session | Démarre un upload fragmenté → `{ id, chunkSize, chunkCount }` |
-| `PUT /upload/:id/:index` | session | Envoie un morceau (corps brut `application/octet-stream`) |
-| `POST /upload/:id/complete` | session | Assemble et finalise → `201` + métadonnées |
-| `DELETE /upload/:id` | session | Abandonne (supprime le fichier partiel) |
+| Route | Auth | Rôle |
+| -------------------------------------- | ------- | ------------------------------------------------------------------------------- |
+| `GET /` | non | Page de connexion (`login.html`), ou de dépôt (`upload.html`) si session valide |
+| `GET /health` | non | Sonde : `{ "status": "ok", "uptime": 12.3 }` |
+| `GET /auth/login` | non | Démarre le flux OIDC (redirige vers le fournisseur) |
+| `GET /auth/callback` | non | Fin du flux : ouvre la session, redirige vers `/` |
+| `POST /auth/logout` | session | Ferme la session (+ déconnexion RP si disponible) |
+| `GET /auth/me` | non | `{ "authenticated": bool, "name"?: string }` |
+| `GET /config` | non | Réglages client : `{ "chunkPoolSize": number }` |
+| `GET /targets` | session | Cibles : `[{ "name", "label", "allowDirectories", "allowedMimeTypes" }]` |
+| `POST /upload?target= ]` | session | Dépôt direct d'un fichier `multipart/form-data`, champ `file` |
+| `POST /upload/init` | session | Démarre un upload fragmenté → `{ id, chunkSize, chunkCount }` |
+| `PUT /upload/:id/:index` | session | Envoie un morceau (corps brut `application/octet-stream`) |
+| `POST /upload/:id/complete` | session | Assemble et finalise → `201` + métadonnées |
+| `DELETE /upload/:id` | session | Abandonne (supprime le fichier partiel) |
+
+`GET /` décide **côté serveur**, à chaque requête : sans session valide, `login.html`
+(rien d'autre que le bouton **Se connecter**, aucune zone de dépôt dans le HTML) ;
+avec une session valide, `upload.html` avec le nom d'utilisateur injecté (échappé) et
+`Se déconnecter`. Une session qui expire pendant l'utilisation de la page (401 sur
+`/targets` ou `/upload*`) renvoie le navigateur sur `/?login=expired`.
`POST /upload` — `?target= Connectez-vous pour déposer des fichiers médias. Connectez-vous, puis glissez des fichiers médias pour les déposer. Glissez des fichiers médias pour les déposer.mediaDrop
+ mediaDrop
-