Feature #69
closedFeature #28: Intégrer la gestion des SOUPs dans Pipeliner via Trivy, Dependency-Track et Aggregator
Aggregator — SOUPs report download proxy (report_url) via Dependency-Track export API
0%
conversation:21#28
Description
**Parent :** #28 · **Surface :** `../aggregator` · **Dépend de :** #42 (endpoint /soups)
## Objectif
Exposer le **rapport SOUPs téléchargeable** via l'aggregator (DTracker étant localhost-only, son URL n'est pas linkable). Permet un lien exposable + une colonne Grafana + un bouton "Télécharger le rapport" côté dashboard (#43/#44).
- Nouvel endpoint `GET /api/projects/{key}/soups/report` : proxifie l'API d'export de Dependency-Track (`GET /api/v1/bom/cyclonedx/project/{uuid}` pour le SBOM CycloneDX, ou `/api/v1/finding/project/{uuid}/export` pour le rapport de findings) et le **renvoie en flux avec `Content-Disposition: attachment`** (filename = `<project_key>-sbom.json`). Le lien est celui de l'aggregator, jamais l'URL loopback de DTracker.
- Ajouter un champ **`report_url`** à la réponse `/api/projects/{key}/soups` ET au slice projet de `/api/overview` (chemin vers l'endpoint ci-dessus), pour que le dashboard et Grafana puissent rendre un lien.
- Dégradé : DTracker indisponible/non configuré ou clé inconnue → 404/204 propre (pas de 500) ; `report_url` = `null` dans l'enveloppe vide.
## Critères d'acceptation
- `GET /api/projects/{key}/soups/report` renvoie le SBOM CycloneDX (ou findings) en téléchargement (`Content-Disposition`), via l'API DTracker.
- `report_url` présent dans `/soups` et dans le slice `/api/overview` du projet.
- Dégradé → pas de 500 ; `report_url` null quand pas de données.
- Réutilise le client DTracker (`app/adapters/dtrack.py`) + le pattern aggregator. Gate vert : `python -m pytest -q` + `ruff check .`. Doc mise à jour dans `docs/SBOM.md`.