Files: un Maker cancella qualunque file sotto uploads, compresi i CSV di statistica #21

Closed
opened 2026-09-21 20:14:46 +00:00 by Adriano · 3 comments
Owner

GRAVITÀ: media
FILE: src/backend/api/routers/files.py:204-222 (delete), :191 (get)
COSA: nessun legame fra file e ricetta/proprietario. DELETE copre statistics/*.csv, i disegni di versioni storiche, il logo. GET con qualunque ruolo legge i CSV di tutte le produzioni.
INPUT: DELETE /api/files/statistics/production_1_<ts>.csv da Maker.
VERIFICATO: script pytest → "DELETE statistica da Maker -> 204 esiste ancora: False".

ORIGINE: revisione fable del 21/09/2026 su ramo V3.0.0, commit 8cc5e82. Documento completo: _output/2026-09-21-TieMeasureFlow-revisione.md su Wasabi.

GRAVITÀ: media FILE: src/backend/api/routers/files.py:204-222 (delete), :191 (get) COSA: nessun legame fra file e ricetta/proprietario. DELETE copre `statistics/*.csv`, i disegni di versioni storiche, il logo. GET con qualunque ruolo legge i CSV di tutte le produzioni. INPUT: `DELETE /api/files/statistics/production_1_<ts>.csv` da Maker. VERIFICATO: script pytest → "DELETE statistica da Maker -> 204 esiste ancora: False". ORIGINE: revisione fable del 21/09/2026 su ramo `V3.0.0`, commit 8cc5e82. Documento completo: `_output/2026-09-21-TieMeasureFlow-revisione.md` su Wasabi.
Adriano added the bug label 2026-09-21 20:14:46 +00:00
Adriano added the assegnata:jeeg label 2026-09-21 20:22:56 +00:00
Author
Owner

⚡ jeeg — preso in carico 2026-09-21T20:22:57Z
ramo: lavoro/jeeg · capacità: docker, gpu, systemd

⚡ jeeg — **preso in carico** 2026-09-21T20:22:57Z ramo: `lavoro/jeeg` · capacità: docker, gpu, systemd
Author
Owner

ANALISI (passo 1) — ramo lavoro/jeeg, worktree ~/lavoro/TieMeasureFlow su jeeg, lotto A3

MODIFICHE: src/backend/api/routers/files.py — DELETE: vietato sotto statistics/, reports/, logos/ (403; il logo si cambia dalle impostazioni); per i file di ricetta (<recipe_id>/<version_id>/... e images/, pdfs/) rifiuta 409 se il percorso è referenziato da una versione non corrente o con misure (cerca image_path/file_path in Recipe, RecipeVersion, RecipeTask, RecipeSubtask: guarda i modelli ORM). GET di statistics/* e reports/* richiede Metrologist, Supervisor o admin.
TEST: Maker DELETE statistics/x.csv → 403 e il file esiste ancora; MeasurementTec GET statistics → 403; DELETE di immagine non referenziata → 204.

ANALISI (passo 1) — ramo `lavoro/jeeg`, worktree `~/lavoro/TieMeasureFlow` su jeeg, lotto A3 MODIFICHE: src/backend/api/routers/files.py — DELETE: vietato sotto `statistics/`, `reports/`, `logos/` (403; il logo si cambia dalle impostazioni); per i file di ricetta (`<recipe_id>/<version_id>/...` e `images/`, `pdfs/`) rifiuta 409 se il percorso è referenziato da una versione non corrente o con misure (cerca `image_path`/`file_path` in Recipe, RecipeVersion, RecipeTask, RecipeSubtask: guarda i modelli ORM). GET di `statistics/*` e `reports/*` richiede Metrologist, Supervisor o admin. TEST: Maker DELETE statistics/x.csv → 403 e il file esiste ancora; MeasurementTec GET statistics → 403; DELETE di immagine non referenziata → 204.
Author
Owner

Soluzione

ESITO: fatto
COSA: DELETE vietato sotto statistics/, reports/, logos/ (403) e sui file referenziati da versioni non correnti o con misure (409). GET di statistics/ e reports/ richiede Metrologist, Supervisor o admin.
COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): e8a8aee
PROVA: uv run --extra server --extra client --extra dev pytest -q → 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).

**Soluzione** ESITO: fatto COSA: DELETE vietato sotto statistics/, reports/, logos/ (403) e sui file referenziati da versioni non correnti o con misure (409). GET di statistics/ e reports/ richiede Metrologist, Supervisor o admin. COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): e8a8aee PROVA: `uv run --extra server --extra client --extra dev pytest -q` → 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).
Adriano removed the assegnata:jeeg label 2026-09-21 21:56:26 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#21