Login operatore: scelta del nome + PIN di 4 cifre #59

Closed
opened 2026-10-07 09:54:59 +00:00 by Adriano · 4 comments
Owner

RICHIESTA: login semplificato, l'operatore sceglie il proprio nome e inserisce un PIN di 4 cifre (riferimento: il login del software GMP). Stesso modo in tutte le schermate che chiedono il login (anche le autorizzazioni del capoturno).
VERIFICATO 06/10 su V3.0.0 a829bf3: assente.
ATTENZIONE: un PIN di 4 cifre va limitato nei tentativi (blocco dopo N errori) e resta solo per il reparto, non per l'admin.
FONTE: UPDATE TIEMEASUREFLOW_180926.docx (Tràfilo via Menoncin, test del 18/09/2026), daitarn:D:\Sorgenti\Clienti\Ricerca_e_Misura\0_REM-Tielogic_SHARED\1_TRAFILO\0_Specifiche\ (16 screenshot nel docx). Raccolta: TieMeasureFlow#44.

RICHIESTA: login semplificato, l'operatore sceglie il proprio nome e inserisce un PIN di 4 cifre (riferimento: il login del software GMP). Stesso modo in tutte le schermate che chiedono il login (anche le autorizzazioni del capoturno). VERIFICATO 06/10 su V3.0.0 a829bf3: assente. ATTENZIONE: un PIN di 4 cifre va limitato nei tentativi (blocco dopo N errori) e resta solo per il reparto, non per l'admin. FONTE: UPDATE TIEMEASUREFLOW_180926.docx (Tràfilo via Menoncin, test del 18/09/2026), daitarn:D:\Sorgenti\Clienti\Ricerca_e_Misura\0_REM-Tielogic_SHARED\1_TRAFILO\0_Specifiche\ (16 screenshot nel docx). Raccolta: TieMeasureFlow#44.
Adriano added the sviluppo label 2026-10-07 09:54:59 +00:00
Author
Owner

ESITO: analisi
COSA: login con scelta del nome + PIN di 4 cifre, anche nelle autorizzazioni del capoturno.
STATO: User senza PIN (BE/models/orm/user.py:15-16); BE/services/auth_service.py:41 authenticate_user, :57 authorise_supervisor; BE/api/routers/auth.py:19; SupervisorAction in BE/models/api/production.py:64 e models/api/measurement.py:74; FE/blueprints/auth.py:62-112, FE/templates/auth/login.html:43-72; modale capoturno task_execute.html:845-910.
DISEGNO: colonne pin_hash (bcrypt come la password), pin_failed_count, pin_locked_until; 5 errori → blocco 15 minuti; PIN solo per utenti non admin. Endpoint: GET /api/auth/pin-users (pubblico: id e nome visualizzato degli utenti attivi con PIN), POST /api/auth/login-pin {user_id, pin} → stessa risposta del login con api_key; PUT /api/users/{id}/pin (admin, reset); SupervisorAction accetta in alternativa {supervisor_user_id, supervisor_pin}. Login con password resta.
MIGRAZIONE: sì (017_user_pin, down 016). PIANO: unità B (backend), unità C (pagina di login); ondata 2 per la modale capoturno e il campo PIN in users.html.
TEST: login PIN ok/errato, blocco al 5° errore e sblocco, admin escluso, supervisore via PIN.
VERIFICATO su V3.0.0 a829bf3 (mappa del 07/10). Percorsi da src/; BE=backend/, FE=frontend/flask_app/.

ESITO: analisi COSA: login con scelta del nome + PIN di 4 cifre, anche nelle autorizzazioni del capoturno. STATO: User senza PIN (BE/models/orm/user.py:15-16); BE/services/auth_service.py:41 authenticate_user, :57 authorise_supervisor; BE/api/routers/auth.py:19; SupervisorAction in BE/models/api/production.py:64 e models/api/measurement.py:74; FE/blueprints/auth.py:62-112, FE/templates/auth/login.html:43-72; modale capoturno task_execute.html:845-910. DISEGNO: colonne `pin_hash` (bcrypt come la password), `pin_failed_count`, `pin_locked_until`; 5 errori → blocco 15 minuti; PIN solo per utenti non admin. Endpoint: GET /api/auth/pin-users (pubblico: id e nome visualizzato degli utenti attivi con PIN), POST /api/auth/login-pin {user_id, pin} → stessa risposta del login con api_key; PUT /api/users/{id}/pin (admin, reset); SupervisorAction accetta in alternativa {supervisor_user_id, supervisor_pin}. Login con password resta. MIGRAZIONE: sì (017_user_pin, down 016). PIANO: unità B (backend), unità C (pagina di login); ondata 2 per la modale capoturno e il campo PIN in users.html. TEST: login PIN ok/errato, blocco al 5° errore e sblocco, admin escluso, supervisore via PIN. VERIFICATO su V3.0.0 a829bf3 (mappa del 07/10). Percorsi da src/; BE=backend/, FE=frontend/flask_app/.
Adriano added the assegnata:daitarn label 2026-10-07 10:21:24 +00:00
Author
Owner

🔵 daitarn — preso in carico 2026-10-07T10:21:21Z
ramo: lavoro/daitarn · capacità: build-windows, gpu

🔵 daitarn — **preso in carico** 2026-10-07T10:21:21Z ramo: `lavoro/daitarn` · capacità: build-windows, gpu
Author
Owner

ESITO: analisi — contratto dell'ondata 2 (migrazione 018, task_results, in_loop/at_close/fields, PIN del capoturno) nel commento su gitea:Adriano/TieMeasureFlow#54. Unità: P5 backend (dopo #59 backend), editor-task, esegui-esiti, esegui-pin.

ESITO: analisi — contratto dell'ondata 2 (migrazione 018, task_results, in_loop/at_close/fields, PIN del capoturno) nel commento su gitea:Adriano/TieMeasureFlow#54. Unità: P5 backend (dopo #59 backend), editor-task, esegui-esiti, esegui-pin.
Author
Owner

Soluzione

ESITO: fatto
COSA: login operatore con scelta del nome e PIN di 4 cifre, anche nella modale del capoturno; password sempre disponibile; reset del PIN dall'admin (decisione Adriano 07/10).
FILE: src/backend/models/orm/user.py, services/auth_service.py — pin_hash bcrypt, pin_failed_count, pin_locked_until; 5 errori → blocco 15 min; PIN escluso per admin
FILE: src/backend/api/routers/auth.py, api/routers/users.py — GET /api/auth/pin-users, POST /api/auth/login-pin, PUT /api/users/{id}/pin
FILE: src/backend/models/api/production.py, models/api/measurement.py, api/routers/production.py, api/routers/measurements.py — SupervisorAction accetta supervisor_user_id + supervisor_pin
FILE: src/backend/api/middleware/rate_limit.py — rate limit su login-pin
FILE: src/frontend/flask_app/blueprints/auth.py, templates/auth/login.html, static/js/pin-pad.js — elenco nomi e tastierino
FILE: src/frontend/flask_app/templates/measure/task_execute.html, blueprints/measure.py — modale capoturno in modo PIN (default) o Password
FILE: src/frontend/flask_app/templates/admin/_users_panel.html, _users_script.html, blueprints/admin.py — PIN impostabile e togliibile dall'admin
MIGRAZIONE: 017_user_pin
COMMIT: 07e23b9 c764cf7 3c55550 dc94b2e df1727b b7cb061
PROVA: suite goldrake su b7cb061 → 835 passed 2 skipped (pytest 3.11 backend+frontend), 29 passed (pytest 3.13 vision), docker build vision ok; test src/backend/tests/test_pin.py, test_migrations.py, src/frontend/flask_app/tests/test_auth.py, test_measure_supervisor_pin.py, test_admin_user_pin.py
In V3.0.0 da b7cb061 (ramo lavoro/daitarn-trafilo unito in fast-forward da a829bf3).

**Soluzione** ESITO: fatto COSA: login operatore con scelta del nome e PIN di 4 cifre, anche nella modale del capoturno; password sempre disponibile; reset del PIN dall'admin (decisione Adriano 07/10). FILE: src/backend/models/orm/user.py, services/auth_service.py — pin_hash bcrypt, pin_failed_count, pin_locked_until; 5 errori → blocco 15 min; PIN escluso per admin FILE: src/backend/api/routers/auth.py, api/routers/users.py — GET /api/auth/pin-users, POST /api/auth/login-pin, PUT /api/users/{id}/pin FILE: src/backend/models/api/production.py, models/api/measurement.py, api/routers/production.py, api/routers/measurements.py — SupervisorAction accetta supervisor_user_id + supervisor_pin FILE: src/backend/api/middleware/rate_limit.py — rate limit su login-pin FILE: src/frontend/flask_app/blueprints/auth.py, templates/auth/login.html, static/js/pin-pad.js — elenco nomi e tastierino FILE: src/frontend/flask_app/templates/measure/task_execute.html, blueprints/measure.py — modale capoturno in modo PIN (default) o Password FILE: src/frontend/flask_app/templates/admin/_users_panel.html, _users_script.html, blueprints/admin.py — PIN impostabile e togliibile dall'admin MIGRAZIONE: 017_user_pin COMMIT: 07e23b9 c764cf7 3c55550 dc94b2e df1727b b7cb061 PROVA: suite goldrake su b7cb061 → 835 passed 2 skipped (pytest 3.11 backend+frontend), 29 passed (pytest 3.13 vision), docker build vision ok; test src/backend/tests/test_pin.py, test_migrations.py, src/frontend/flask_app/tests/test_auth.py, test_measure_supervisor_pin.py, test_admin_user_pin.py In V3.0.0 da b7cb061 (ramo lavoro/daitarn-trafilo unito in fast-forward da a829bf3).
Adriano removed the assegnata:daitarn label 2026-10-07 12:37:22 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#59