Interfaccia minimale per il totem presenze che si collega a due servizi websocket:
badgesvcper la lettura reale dei badgemock-verificationper associare il codice letto a nome, cognome e classe
index.html: pagina del totemstyle.css: stile del totemscript.js: logica client lato browserserver.js: piccolo server HTTP locale che serve la pagina e la configurazione runtimemock-verification/server.js: mock websocket del servizio di verificamock-verification/data/records.json: database JSON con token autorizzati e anagrafica badge
Il browser fa da orchestratore.
- Si collega al reader websocket esposto da
badgesvc - Si collega al websocket di verifica
- Appena la connessione di verifica si apre, invia un messaggio di autenticazione con token
- Solo dopo autenticazione riuscita il browser invia richieste
verify - Se la verifica va a buon fine, il totem mostra nome, classe e ora
- Se la verifica fallisce, il totem mostra solo l'errore restituito
Il codice del badge non viene mostrato nella UI.
Nel repository badgesvc:
npm run start:readerPer default espone:
- HTTP health:
http://127.0.0.1:25585/health - WebSocket:
ws://127.0.0.1:25585/ws
In questo repository:
npm run start:verifyPer default espone:
- HTTP health:
http://127.0.0.1:25587/health - WebSocket:
ws://127.0.0.1:25587/ws
In questo repository:
npm run start:webLa UI sara disponibile su:
http://127.0.0.1:25586/
La configurazione lato UI viene servita da server.js tramite /config.json.
Variabili ambiente disponibili:
HOST: host del server UI. Default127.0.0.1PORT: porta del server UI. Default25586READER_WS_URL: websocket del reader. Defaultws://127.0.0.1:25585/wsVERIFICATION_WS_URL: websocket del servizio verifica. Defaultws://127.0.0.1:25587/wsVERIFICATION_TOKEN: token usato dalla UI per autenticarsi al websocket di verifica. Defaulttotem-device-01
Esempio:
VERIFICATION_TOKEN="totem-device-01" npm run start:webIl file mock-verification/data/records.json ha questa forma:
{
"authorizedTokens": [
"totem-device-01",
"totem-device-02"
],
"records": {
"CIE-977884595015": {
"name": "Sara",
"surname": "Belli",
"class": "4 A Informatica"
}
}
}Lista dei token ammessi dal servizio websocket di verifica.
Se il token del client non e presente:
- il server risponde con errore di autenticazione
- chiude immediatamente la connessione websocket
Mappa esatta tra codice badge letto e persona associata.
La chiave deve coincidere esattamente con il uuid inviato da badgesvc.
Appena il client si collega, il mock risponde con:
{
"type": "ready",
"timestamp": "2026-05-28T10:00:00.000Z",
"service": "mock-verification",
"recordCount": 5,
"authorizedTokenCount": 2,
"dbPath": "/path/to/records.json"
}Il client invia:
{
"type": "auth",
"token": "totem-device-01"
}{
"type": "auth",
"timestamp": "2026-05-28T10:00:00.000Z",
"success": true
}{
"type": "auth",
"timestamp": "2026-05-28T10:00:00.000Z",
"success": false,
"error": "Unauthorized token"
}Dopo questa risposta il server chiude la connessione.
Solo dopo auth riuscita, il client invia:
{
"type": "verify",
"requestId": "0f7a...",
"code": "CIE-977884595015"
}{
"type": "verification",
"timestamp": "2026-05-28T10:00:00.000Z",
"success": true,
"requestId": "0f7a...",
"code": "CIE-977884595015",
"person": {
"name": "Sara",
"surname": "Belli",
"class": "4 A Informatica"
}
}{
"type": "verification",
"timestamp": "2026-05-28T10:00:00.000Z",
"success": false,
"requestId": "0f7a...",
"code": "CIE-977884595015",
"error": "Code not found"
}La pagina mostra solo:
- logo
- orologio con secondi
- invito a presentare il badge
- stato reader in basso
- stato verify in basso
- overlay di successo con nome, classe e ora
- overlay di errore con solo messaggio errore
Il codice del badge non viene mai mostrato sullo schermo.
curl http://127.0.0.1:25586/healthcurl http://127.0.0.1:25587/healthInstalla le dipendenze una sola volta:
npm installDipendenza usata:
ws
- Se cambi
authorizedTokens, il token configurato nella UI deve corrispondere - Se cambi i record, la chiave deve essere identica al codice prodotto da
badgesvc - Se il token e sbagliato, la UI non riesce a usare il servizio di verifica