2.2 KiB
title, area, horizon, tags, flag, src
| title | area | horizon | tags | flag | src |
|---|---|---|---|---|---|
| Socle de stockage — URL d'envoi signée et ingestion serveur | backend manager | v2 | manager-service, manager-app, Studio IA, sécurité | warn | Code fait le 13/09, infra à faire | v2/studio-plan.md — §8 lot 0, décisions 14, 18, 20 |
🛠️ Code livré le 13/09 (branche studio) : URL signée, ResourceIngestionService, ImageSharp, upload avec progression dans manager-app, SDK Firebase retiré. Reste l'infra ci-dessous, puis la checklist du §8.
IResourceBlobService n'expose que DeleteAsync : tout l'upload est fait par le navigateur en direct, à deux endroits de resources_screen.dart. Or le Studio et le TTS pré-généré produiront côté serveur.
⚠️ Trou de sécurité actuel, indépendant du Studio. manager-app n'a pas de Firebase Auth (firebase_storage sans firebase_auth) et écrit pourtant dans le bucket : les règles Storage sont très probablement ouvertes en écriture. Aucun storage.rules dans le repo — à relever dans la console.
✅ Tranché le 13/09 : URL signée + ingestion. L'API délivre une URL V4 signée (15 min, un objet, taille bornée), le navigateur envoie directement chez Google dans incoming/, puis POST /ingest : un ResourceIngestionService unique — le même pour le Studio et le TTS — mesure la taille réelle, applique quota et plafond, post-traite les images (2 à la fois au plus) et range sous pictures/. Les vidéos, 360 et GLB sont copiés côté Google, jamais lus par le VPS. Les écritures clientes sont ensuite fermées dans les règles.
Infra : CORS du bucket pour le PUT, règle de cycle de vie à 1 jour sur incoming/, et fermeture des règles après le déploiement du nouveau manager-app. À caser dans le même lot : suppression de la route upload morte et d'ImageHelper, Firebase:StorageBucket renseigné, et LB (luxembourgeois).