Coffre : endpoint de liste des secrets distribuables pour un consommateur (issue #43) #45

Merged
bruno merged 2 commits from coffre-distribuables into main 2026-10-28 13:57:18 -04:00
Owner

Besoin

La console Spark doit proposer, dans une liste déroulante, les secrets du coffre ObsiGate octroyés au consommateur « spark » (demande de Bruno du 2026-10-28, issue #43, liée à l'issue agent-commun #14). Aucun endpoint de liste n'était accessible par jeton consommateur : GET /api/coffres et GET /api/coffres/{slug}/secrets exigent une session utilisateur.

Changement

Nouvel endpoint GET /api/coffres/distribuables, placé avant la route GET /api/coffres/{slug} :

  • Auth : Bearer jeton consommateur, même vérification que /distribuer (401 consommateur invalide, 403 consommateur révoqué). Une session utilisateur ne suffit pas.
  • Retour : métadonnées seules — {reference: "coffre:<slug>/<nom>", coffre, nom, version} — des secrets pour lesquels ce consommateur a un octroi ACTIF (coffre actif, secret non expiré, octroi ni révoqué ni expiré, octrois coffre-wide inclus via statut_octroi_consommateur).
  • Anti-énumération : un consommateur ne voit que ses propres octrois ; sans octroi, liste vide, pas d'erreur révélatrice. Jamais de valeur dans la réponse (le retour est construit champ par champ, pas via secret_metadata).

Tests

tests/test_coffre_secrets.py::TestDistribuables (4 tests) : seuls les octrois actifs listés, métadonnées seules (aucune valeur dans le texte), octroi expiré exclu, coffre-wide inclus, auth consommateur uniquement, consommateur révoqué → 403, flag désactivé → 503. Vérifiés localement : 39 passent (35 existants + 4 nouveaux).

Validation demandée (déployée, par Bruno)

Après merge + redéploiement ObsiGate (et merge de la PR agent-commun liée) : dans ObsiGate, octroyer un secret de clé LLM au consommateur « spark », puis dans la console Spark, vue Fournisseurs, la liste « secret du coffre ObsiGate » doit proposer coffre:<slug>/<nom>.

## Besoin La console Spark doit proposer, dans une liste déroulante, les secrets du coffre ObsiGate octroyés au consommateur « spark » (demande de Bruno du 2026-10-28, issue #43, liée à l'issue agent-commun #14). Aucun endpoint de liste n'était accessible par jeton consommateur : `GET /api/coffres` et `GET /api/coffres/{slug}/secrets` exigent une session utilisateur. ## Changement Nouvel endpoint `GET /api/coffres/distribuables`, placé avant la route `GET /api/coffres/{slug}` : - **Auth** : Bearer jeton consommateur, même vérification que `/distribuer` (401 consommateur invalide, 403 consommateur révoqué). Une session utilisateur ne suffit pas. - **Retour** : métadonnées seules — `{reference: "coffre:<slug>/<nom>", coffre, nom, version}` — des secrets pour lesquels ce consommateur a un octroi ACTIF (coffre actif, secret non expiré, octroi ni révoqué ni expiré, octrois coffre-wide inclus via `statut_octroi_consommateur`). - **Anti-énumération** : un consommateur ne voit que ses propres octrois ; sans octroi, liste vide, pas d'erreur révélatrice. Jamais de valeur dans la réponse (le retour est construit champ par champ, pas via `secret_metadata`). ## Tests `tests/test_coffre_secrets.py::TestDistribuables` (4 tests) : seuls les octrois actifs listés, métadonnées seules (aucune valeur dans le texte), octroi expiré exclu, coffre-wide inclus, auth consommateur uniquement, consommateur révoqué → 403, flag désactivé → 503. Vérifiés localement : 39 passent (35 existants + 4 nouveaux). ## Validation demandée (déployée, par Bruno) Après merge + redéploiement ObsiGate (et merge de la PR agent-commun liée) : dans ObsiGate, octroyer un secret de clé LLM au consommateur « spark », puis dans la console Spark, vue Fournisseurs, la liste « secret du coffre ObsiGate » doit proposer `coffre:<slug>/<nom>`.
bruno added 2 commits 2026-10-28 13:49:08 -04:00
Test : distribuables (octrois actifs, métadonnées seules, auth consommateur)
CI / lint (pull_request) Failing after 0s
CI / security (pull_request) Failing after 0s
CI / test (pull_request) Skipped
CI / build (pull_request) Skipped
CI / e2e (pull_request) Skipped
5154afed01
bruno merged commit 564f2a7b11 into main 2026-10-28 13:57:18 -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#45