feat: API key auth opzionale + sanitizzazione errori + hardening Docker
Automate Italian cadastral registry lookups via SISTER/SPID. AGPL-3.0.
Brought to you by:
zornade
Originally created by: zornade
Diversi fork e operatori in produzione richiedono di esporre visura-api come servizio HTTP autenticato. Attualmente:
/visura, /visura/{id}, /visura/intestati, /sezioni/extract, /shutdown sono pubblici se la porta 8000 è espostadetail=str(e)), in violazione di OWASP A05/A09Dockerfile esegue playwright install come root prima di scendere a appuser, lasciando residui di permessi non necessaridocker-compose.yaml di default monta ./:/app in bind, sovrascrivendo il codice copiato nell'immagine — utile in dev, problematico in prodImportare il pattern già implementato in mycochang/visura-api@c8dfd0b (AGPL-3.0, compatibile upstream):
X-API-Key: si attiva solo se la env var API_KEY è definita (retrocompatibile: vuota → endpoint pubblici come ora). Applicata via Depends(verify_api_key) su tutti gli endpoint mutativi.detail="Errore interno del server. Consulta i log per i dettagli." lato client, logger.error(..., exc_info=True) lato server.playwright install solo come appuser, niente residui root; riordino delle ENV per chiarezza../:/app di default (resta solo il volume per logs/).API_KEY configurata.docker-compose per hot-reload può ripristinare il bind mount tramite docker-compose.override.yaml.Patch già scritta nel fork sopra (autore @mycochang, AGPL-3.0). Da adattare al main corrente (17 commit behind, possibili conflitti minori su main.py).
API_KEY env, /visura risponde 422/500 (input invalido) e mai 403; con API_KEY set, /visura senza header → 403.detail di un 500 non contenga né Traceback né nome del file Python interno.feat/api-hardening HEAD c8dfd0b