feat: FASE 7 - Polish & Testing (security, i18n, test suite, docs)

Security hardening: CORS lockdown, rate limiting middleware con sliding
window e eviction IP stale, security headers (CSP, HSTS, X-Frame-Options),
session cookie hardening, filename sanitization upload.

i18n completion: internazionalizzati barcode.js e csv-export.js con bridge
window.BARCODE_I18N/CSV_I18N, aggiornati .po IT/EN con 27 nuove stringhe.

Tablet UX: touch target 44px per dispositivi coarse pointer.

Test suite: 101 test totali (76 server + 25 client), copertura completa
di tutti i router API, autenticazione, ruoli, CRUD, SPC, file upload,
security integration. Infrastruttura SQLite async in-memory con fixtures.

Fix critici: MissingGreenlet in recipe_service (selectinload eager),
route ordering tasks.py, auth_service bcrypt diretto, Measurement.id
Integer per SQLite.

Documentazione: API.md (riferimento completo 40+ endpoint),
DEPLOYMENT.md (guida produzione con Docker/Nginx/SSL),
USER_GUIDE.md (manuale utente per ruolo).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Adriano
2026-02-07 17:10:24 +01:00
parent 26e5b9343d
commit dd2ebf863a
46 changed files with 6322 additions and 90 deletions
@@ -1048,3 +1048,77 @@ msgstr "Measurements Report"
msgid "Errore nella generazione del report"
msgstr "Error generating report"
# Barcode Scanner i18n
msgid "Libreria scanner non caricata"
msgstr "Scanner library not loaded"
msgid "Nessuna fotocamera disponibile"
msgstr "No camera available"
msgid "Impossibile accedere alla fotocamera"
msgstr "Unable to access camera"
# CSV Export i18n
msgid "Subtask ID"
msgstr "Subtask ID"
msgid "Nome Sottotask"
msgstr "Subtask Name"
msgid "Valore Misurato"
msgstr "Measured Value"
msgid "Valore Nominale"
msgstr "Nominal Value"
msgid "Tolleranza +"
msgstr "Tolerance +"
msgid "Tolleranza -"
msgstr "Tolerance -"
msgid "Scarto"
msgstr "Deviation"
msgid "Metodo Input"
msgstr "Input Method"
msgid "Data Misurazione"
msgstr "Measurement Date"
msgid "RIEPILOGO ESECUZIONE TASK"
msgstr "TASK EXECUTION SUMMARY"
msgid "Task ID"
msgstr "Task ID"
msgid "Nome Task"
msgstr "Task Name"
msgid "Data Inizio"
msgstr "Start Date"
msgid "Data Fine"
msgstr "End Date"
msgid "Stato"
msgstr "Status"
msgid "STATISTICHE"
msgstr "STATISTICS"
msgid "Totale Misure"
msgstr "Total Measurements"
msgid "Passate"
msgstr "Passed"
msgid "Fallite"
msgstr "Failed"
msgid "Percentuale Successo"
msgstr "Pass Rate"
msgid "DETTAGLIO MISURE"
msgstr "MEASUREMENT DETAILS"