Feature #43
closedFeature #28: Intégrer la gestion des SOUPs dans Pipeliner via Trivy, Dependency-Track et Aggregator
Proxy backend Pipeliner owned_project pour les SOUPs
0%
conversation:21#28
Description
Ajouter un proxy mince `owned_project` dans `api/.../presentation/api/tasks.py` n'appelant QUE l'aggregator (`AGGREGATOR_URL`) pour `/api/projects/{key}/soups` et les téléchargements de rapports. Gardes `_normalize_*` : un aggregator dégradé (down/500) renvoie une enveloppe vide schéma-valide en 200, jamais un 500. Tests unitaires sur le mapping et la dégradation.
## Critères d'acceptation
- Une route dashboard proxifie les données SOUPs depuis l'aggregator (jamais DTracker en direct).
- Aggregator dégradé ⇒ 200 enveloppe vide schéma-valide (champs requis stampés), jamais 500.
- Téléchargement des rapports (PDF/Excel) proxifié via le backend.
- pytest verts ; ruff check . et mypy src passent.
Estimation : M. Dépend de : « Endpoint Aggregator /api/projects/{key}/soups ».
RA Updated by Redmine Admin about 2 months ago
RA Updated by Redmine Admin about 2 months ago
- Status changed from Spec to In development
RA Updated by Redmine Admin about 2 months ago
- Status changed from In development to QA
- branch set to feat/43-soups-proxy
- pr_url set to https://github.com/omdev-tech/PipeLiner-Client/pull/30
Proxy backend SOUPs implémenté (TDD) et passé en QA.
Deux routes `owned_project` minces sur le routeur projet, n'appelant QUE l'aggregator (`AGGREGATOR_URL`) — jamais DTracker/Trivy en direct :
- `GET /projects/{id}/soups` → proxifie `GET /api/projects/{key}/soups` (enveloppe : `risk_level, total_vulnerabilities, by_severity, components[top-10], top_3_critical, suppressions, generated_at, report_url`).
- `GET /projects/{id}/soups/report` → renvoie le rapport (CycloneDX SBOM / findings) en téléchargement, `Content-Type` + `Content-Disposition: attachment` transmis.
Garde de dégradation (gotcha #2) : `_normalize_soups` stampe la `key` demandée et défaute chaque champ (`risk_level="unknown"` — jamais un faux « down », gotcha #6 ; compteurs à 0 ; pas de composants) → `/soups` renvoie une enveloppe vide schéma-valide en 200, jamais un 500. `/soups/report` sur aggregator dégradé renvoie un 404 propre (sans corps), jamais un 500.
Gate vert via `api/.venv` : `pytest -q` 458 passed / 2 skipped (×2 sur pgvector éphémère + `alembic upgrade head`), `ruff check .` OK, `mypy src` OK.
Branche : `feat/43-soups-proxy`
PR (vers `dev`) : https://github.com/omdev-tech/PipeLiner-Client/pull/30
NB : le module frontend « SOUPs Management » est le ticket distinct #44.
RA Updated by Redmine Admin about 2 months ago
- Status changed from QA to Shipped
Shipped en prod (dashboard master #66). Proxy backend owned_project `/api/projects/{id}/soups` + `/soups/report` (aggregator-only, dégradé→200 vide/404). Conteneurs prod recréés 23:14.