Setup riusabile dopo il primo setup: reset-db, manage-user e seed senza API key #9
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
GRAVITÀ: alta
FILE: src/backend/api/routers/setup.py:81-94, :144 (reset-db), :273 (seed)
COSA: finché
SETUP_PASSWORDè in.envrestano attivireset-db(drop_all),manage-user(crea admin),change-user-password,seed(utenti con password note). Nessun controllo "setup già completato". Confronto password con!=, non a tempo costante./api/setup/statuselenca le tabelle senza password.INPUT:
POST /api/setup/reset-db {"password":...,"confirm":true}su installazione in produzione.VERIFICATO: lettura di setup.py:81-94: l'unica guardia è
settings.setup_passwordnon vuota.ORIGINE: revisione fable del 21/09/2026 su ramo
V3.0.0, commit8cc5e82. Documento completo:_output/2026-09-21-TieMeasureFlow-revisione.mdsu Wasabi.⚡ jeeg — preso in carico 2026-09-21T20:22:18Z
ramo:
lavoro/jeeg· capacità: docker, gpu, systemdANALISI (passo 1) — ramo
lavoro/jeeg, worktree~/lavoro/TieMeasureFlowsu jeeg, lotto A2MODIFICHE: src/backend/api/routers/setup.py — (a)
_check_passwordconhmac.compare_digest; (b) nuova guardia_require_not_initialised(db): se esiste almeno un utente admin, gli endpoint distruttivi o privilegiati (reset-db,seed,manage-user,change-user-password,init-db) rispondono 403 «setup already completed» a meno chesettings.setup_allow_after_init(nuovo, env SETUP_ALLOW_AFTER_INIT, default False) sia True; (c)/api/setup/statussenza password restituisce solo{initialised: bool}, l'elenco tabelle solo con password valida; (d) i path/api/setup/con password entrano nel secchio «login» del rate limit (coordina con l'analisi di #8, stesso file rate_limit.py, stesso lotto).TEST: con un admin presente reset-db/seed/manage-user → 403; con SETUP_ALLOW_AFTER_INIT=true → come prima; status senza password non elenca tabelle. Adegua i test esistenti del setup.
NON TOCCARE: src/backend/templates/setup/setup.html salvo ciò che serve a mostrare il 403.
Soluzione
ESITO: fatto
COSA: Con un admin presente
reset-db,seed,manage-user,change-user-password,init-dbrispondono 403 salvoSETUP_ALLOW_AFTER_INIT=true. Password confrontata conhmac.compare_digest./api/setup/statussenza password dà soloinitialised.COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a
d483fa1): 4384c48;78970c6PROVA:
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).