[Coffre Secrets] Phase 2 — Migration api_keys.json, sauvegarde/restauration KEK, contrat distribution, consommateurs + correctif UI modale #29

Merged
bruno merged 10 commits from feat/coffre-phase2 into main 2026-10-28 00:15:07 -04:00
Owner

Concerne #20, #21 (cote ObsiGate), #22 (cote ObsiGate). Ne ferme aucune issue (fermeture = decision de Bruno, validation sur instance reelle en attente).

Contenu : backend/coffre_migration.py (apercu/import/purge + consommateurs avec octrois) ; routes GET migration/api-keys, POST import, POST purger (refusee sans confirmer: true), POST consommateurs/avec-octrois ; /distribuer accepte aussi le contexte imbrique {type, id} (cas Spark plat existait deja) ; bouton 'Importer l'existant' (admin, apercu -> import -> purge proposee ensuite) + 11 cles coffres.import_* fr/en ; docs COFFRE-sauvegarde-restauration.md (2 fichiers = sauvegarde chiffree, KEK externe hors serveur, perte de KEK = perte d'acces assumee) et COFFRE-contrat-distribution.md (erreurs -> acces_requis Spark) ; section Coffre dans .env.example.

Correctif UI : la modale de creation de secret depassait l'ecran (aucune borne de hauteur ni scroll interne). .obsigate-modal a desormais max-height: calc(100dvh - 32px), display:flex, flex-direction:column, .obsigate-modal-body overflow-y:auto, header/footer flex-shrink:0, padding overlay. Usages verifies sains (seuls coffres.js et ui.js utilisent ces classes).

BLOQUANT D'USAGE A CONNAITRE (pas un blocage de merge) : backend/ai.py et backend/tools/secrets.py lisent encore api_keys.json en clair et ne sont pas branches sur le coffre. Ne pas purger avant ce branchement (branche + PR separee a venir), sinon l'IA et les outils perdraient leurs cles. L'avertissement est dans l'UI et les docs.

Verifie : 35/35 pytest (26 + 9 nouveaux), ruff 0 erreur sur backend/, mypy 0 erreur sur 4 fichiers, py_compile + node --check OK, 10/10 fichiers re-telecharges identiques. Non verifie : CI Gitea de la branche, import/purge reels, restauration reelle sur instance vierge.

Concerne #20, #21 (cote ObsiGate), #22 (cote ObsiGate). Ne ferme aucune issue (fermeture = decision de Bruno, validation sur instance reelle en attente). Contenu : backend/coffre_migration.py (apercu/import/purge + consommateurs avec octrois) ; routes GET migration/api-keys, POST import, POST purger (refusee sans confirmer: true), POST consommateurs/avec-octrois ; /distribuer accepte aussi le contexte imbrique {type, id} (cas Spark plat existait deja) ; bouton 'Importer l'existant' (admin, apercu -> import -> purge proposee ensuite) + 11 cles coffres.import_* fr/en ; docs COFFRE-sauvegarde-restauration.md (2 fichiers = sauvegarde chiffree, KEK externe hors serveur, perte de KEK = perte d'acces assumee) et COFFRE-contrat-distribution.md (erreurs -> acces_requis Spark) ; section Coffre dans .env.example. Correctif UI : la modale de creation de secret depassait l'ecran (aucune borne de hauteur ni scroll interne). .obsigate-modal a desormais max-height: calc(100dvh - 32px), display:flex, flex-direction:column, .obsigate-modal-body overflow-y:auto, header/footer flex-shrink:0, padding overlay. Usages verifies sains (seuls coffres.js et ui.js utilisent ces classes). BLOQUANT D'USAGE A CONNAITRE (pas un blocage de merge) : backend/ai.py et backend/tools/secrets.py lisent encore api_keys.json en clair et ne sont pas branches sur le coffre. Ne pas purger avant ce branchement (branche + PR separee a venir), sinon l'IA et les outils perdraient leurs cles. L'avertissement est dans l'UI et les docs. Verifie : 35/35 pytest (26 + 9 nouveaux), ruff 0 erreur sur backend/, mypy 0 erreur sur 4 fichiers, py_compile + node --check OK, 10/10 fichiers re-telecharges identiques. Non verifie : CI Gitea de la branche, import/purge reels, restauration reelle sur instance vierge.
bruno added 10 commits 2026-10-28 00:14:37 -04:00
bruno merged commit a1f3690085 into main 2026-10-28 00:15:07 -04:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Projets/ObsiGate#29