Project

General

Profile

Actions

Feature #43

closed
RA

Feature #28: Intégrer la gestion des SOUPs dans Pipeliner via Trivy, Dependency-Track et Aggregator

Proxy backend Pipeliner owned_project pour les SOUPs

Feature #43: Proxy backend Pipeliner owned_project pour les SOUPs

Added by Redmine Admin about 2 months ago. Updated about 2 months ago.

Status:
Shipped
Priority:
Normal
Assignee:
-
Start date:
06/11/2026
Due date:
% Done:

0%

Estimated time:
spec_ref:

conversation:21#28

build_status:
build_number:
ci_run_url:
scan_status:
scan_report_url:
deploy_status:
preprod_url:
deployed_at:
branch:
feat/43-soups-proxy
pr_url:
https://github.com/omdev-tech/PipeLiner-Client/pull/30
security_key:
severity:
paused:

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 Actions #1

  • Status changed from Submitted to Spec
  • spec_ref updated (diff)

Spec dev-ready (spec_ref posé). Proxy backend mince `owned_project` pour les SOUPs (appelle UNIQUEMENT l'aggregator ; gardes _normalize_* → 200 enveloppe vide jamais 500). Dépend de #42.

RA Updated by Redmine Admin about 2 months ago Actions #2

  • Status changed from Spec to In development

RA Updated by Redmine Admin about 2 months ago Actions #3

  • 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 Actions #4

  • 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.

Actions

Also available in: PDF Atom