Coffre : endpoint de liste des secrets distribuables pour un consommateur (métadonnées seules) #43

Open
opened 2026-10-28 13:41:50 -04:00 by bruno · 2 comments
Owner

Besoin (demande de Bruno, 2026-10-28, via la console Spark)

La console Spark (agent-commun) doit proposer, dans une liste déroulante, les secrets du coffre ObsiGate octroyés au consommateur « spark », pour choisir la clé d'API d'un fournisseur LLM sans taper de nom de variable.

Constat vérifié (main ObsiGate, backend/routers/coffres.py)

  • POST /api/coffres/distribuer existe (Bearer consommateur, octroi actif exigé, contexte obligatoire, audit sans valeur) et accepte tout contexte_type non vide — le flux fournisseur utilisera contexte_type="fournisseur".
  • En revanche, AUCUN endpoint de liste n'est accessible par jeton consommateur : GET /api/coffres et GET /api/coffres/{slug}/secrets exigent une session utilisateur (require_auth). Le serveur agent n'a pas de session ObsiGate : il ne peut pas alimenter la liste.

Périmètre

Nouvel endpoint, par exemple GET /api/coffres/distribuables :

  • Auth : Bearer jeton consommateur, même vérification que /distribuer (hash + statut actif ; 401 consommateur invalide, 403 consommateur révoqué).
  • Retour : MÉTADONNÉES SEULES des secrets pour lesquels ce consommateur a un octroi ACTIF (ni révoqué, ni expiré) : reference canonique coffre:<slug>/<nom>, coffre, nom, version courante, dates — JAMAIS la valeur.
  • Anti-énumération : un consommateur ne voit que ses propres octrois ; un consommateur sans octroi reçoit une liste vide (pas d'erreur révélatrice).
  • Coffres désactivés / secrets expirés : exclus de la liste.
  • Réutiliser les helpers existants (statut_octroi_consommateur, métadonnées de secret) ; tests : liste vide sans octroi, exclusion révoqué/expiré, absence totale de valeur dans la réponse, 401/403 conformes à /distribuer.

Consommateur

Spark (agent-commun) : l'endpoint est appelé côté serveur par la route proxy GET /api/v1/coffre/secrets (issue agent-commun liée), jamais directement par le navigateur.

## Besoin (demande de Bruno, 2026-10-28, via la console Spark) La console Spark (agent-commun) doit proposer, dans une liste déroulante, les secrets du coffre ObsiGate octroyés au consommateur « spark », pour choisir la clé d'API d'un fournisseur LLM sans taper de nom de variable. ## Constat vérifié (main ObsiGate, backend/routers/coffres.py) - `POST /api/coffres/distribuer` existe (Bearer consommateur, octroi actif exigé, contexte obligatoire, audit sans valeur) et accepte tout `contexte_type` non vide — le flux fournisseur utilisera `contexte_type="fournisseur"`. - En revanche, AUCUN endpoint de liste n'est accessible par jeton consommateur : `GET /api/coffres` et `GET /api/coffres/{slug}/secrets` exigent une session utilisateur (`require_auth`). Le serveur agent n'a pas de session ObsiGate : il ne peut pas alimenter la liste. ## Périmètre Nouvel endpoint, par exemple `GET /api/coffres/distribuables` : - **Auth** : Bearer jeton consommateur, même vérification que `/distribuer` (hash + statut actif ; 401 consommateur invalide, 403 consommateur révoqué). - **Retour** : MÉTADONNÉES SEULES des secrets pour lesquels ce consommateur a un octroi ACTIF (ni révoqué, ni expiré) : `reference` canonique `coffre:<slug>/<nom>`, coffre, nom, version courante, dates — JAMAIS la valeur. - **Anti-énumération** : un consommateur ne voit que ses propres octrois ; un consommateur sans octroi reçoit une liste vide (pas d'erreur révélatrice). - **Coffres désactivés / secrets expirés** : exclus de la liste. - Réutiliser les helpers existants (`statut_octroi_consommateur`, métadonnées de secret) ; tests : liste vide sans octroi, exclusion révoqué/expiré, absence totale de valeur dans la réponse, 401/403 conformes à `/distribuer`. ## Consommateur Spark (agent-commun) : l'endpoint est appelé côté serveur par la route proxy `GET /api/v1/coffre/secrets` (issue agent-commun liée), jamais directement par le navigateur.
Author
Owner

Implémenté (sans merger) : PR #45 (branche coffre-distribuables). Consommateur : PR agent-commun #15 (issue #14).

Implémenté (sans merger) : PR #45 (branche coffre-distribuables). Consommateur : PR agent-commun #15 (issue #14).
Author
Owner

Mergé et publié sur décision de Bruno du 2026-10-28 : PR #45 mergée (merge 564f2a7b), v2.82.0 publiée (release 12680, tag v2.82.0, VERSION au tag = 2.82.0, sans binaires ; fichiers dérivés alignés : package.json, desktop/tauri.conf.json, desktop/Cargo.toml, desktop/Cargo.lock, docs/ROADMAP.md, CHANGELOG.md). Issue laissée OUVERTE en attente de la validation déployée par Bruno, avec agent-commun 0.58.0.

Mergé et publié sur décision de Bruno du 2026-10-28 : PR #45 mergée (merge 564f2a7b), v2.82.0 publiée (release 12680, tag v2.82.0, VERSION au tag = 2.82.0, sans binaires ; fichiers dérivés alignés : package.json, desktop/tauri.conf.json, desktop/Cargo.toml, desktop/Cargo.lock, docs/ROADMAP.md, CHANGELOG.md). Issue laissée OUVERTE en attente de la validation déployée par Bruno, avec agent-commun 0.58.0.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Projets/ObsiGate#43