6.0 KiB
Accettazione di shell e autenticazione
Questa matrice è un gate di rilascio, non una dichiarazione che le prove server siano già state eseguite. Registrare ambiente, data, SHA ThothII/portale, immagini, modalità effettive e risultato di ogni caso. Usare account di prova autorizzati; non incollare token, cookie, password o dati clinici nelle evidenze.
Configurazione prima della prova
- Full/local: descrittore
shell.mode: full, default en,auth.yamllocal;AUTH_MODEnon impostato. Scegliere browser/origin coerenti conpublicUrl. - Full/OIDC: full, configurazione OIDC valida e callback esatta
PUBLIC_URL/api/auth/oidc/callback;AUTH_MODEnon impostato. - Embedded/Omics: embedded/omics-portal, core upstream senza auth.yaml/runtime projection, sessione portale e capability; API attraverso il solo proxy fidato.
- Config pubblico caricato prima del modulo React, no-store e senza segreti; connessioni private del core non raggiungibili da client non fidati.
Full, senza documento Omics
| Prova | Risultato atteso |
|---|---|
| Primo accesso con preferenze browser assenti | Header ThothII; inglese e light; nessun errore per elementi Omics mancanti |
| Login locale valido/errato | Identità verificata nel primo caso; errore generico e nessun contenuto protetto nel secondo |
| Remember me | Sessione persistente secondo TTL local; senza Remember me cookie non persistente |
| OIDC con provider raggiungibile | Redirect, callback validata, nome e permessi dall'identità verificata |
| OIDC con claim gruppi invalido | Login rifiutato; nessuna informazione sensibile nel browser |
| OIDC con gruppi validi ma non mappati | Nessun ruolo, accesso alle route protette negato |
| Nome → Log out | Sessione ThothII revocata; una nuova richiesta protetta con quella sessione non accede |
| Nuovo login OIDC dopo logout | Può riusare SSO provider; nessuna promessa di logout globale |
| Disabilitazione/ruolo/password/logout-all locale | La sessione precedente viene invalidata al controllo server |
| Cambio lingua e tema | Etichette aggiornate, preferenze ricordate, leggibilità anche di popup e griglie |
| Fullscreen, Esc, rifiuto del browser | Stato/icona coerenti; errore visibile su rifiuto, nessun falso fullscreen |
| Schermo stretto/largo | Margini simmetrici almeno 20px; header adattivo; nessuna rotellina amministrativa |
Embedded, dal portale reale
| Prova | Risultato atteso |
|---|---|
| Utente già autenticato e autorizzato → Datamart Builder | Nessun secondo login e un solo header, quello Omics |
| Utente senza capability o sessione scaduta | Pagina/API protette rifiutate, non UI autenticata ottenuta da eventi DOM |
/datamart-builder/api/me autorizzato |
Issuer portal, subject stabile, ruoli attesi; session/CSRF ThothII null |
| Utente normale vs amministratore | Azioni amministrative protette server-side; flag admin non controllabile dal client |
| Header identità inventati dal client, anche admin | Non concedono accesso né elevazione; il proxy usa soltanto la verifica Django |
| Richiesta cross-origin a un'operazione di prova | Rifiutata senza modificare dati; testare con risorse fittizie in ambiente isolato |
| IT/EN selezionato prima dell'apertura | Locale iniziale uguale a quello Django confermato |
| Cambio lingua dal form Omics | Reload normale con CSRF/next; selezione sessione conservata, nessuna generazione automatica |
| Cambio tema con menu/form aperti | UI, popup e griglia seguono Omics, senza controlli locali duplicati |
| Fullscreen dall'header e uscita con Esc | Stato reale sincronizzato anche dentro ThothII |
| Logout Omics e ritorno in una seconda scheda | Al ricontrollo /me lo stato protetto viene rimosso; rientro tramite Omics |
| Riconnessione SSE dopo scadenza | Verifica accesso prima di riprendere; nessun aggiramento del proxy |
403 su una sola operazione con /me ancora valido |
Errore operativo, non logout indiscriminato |
| Contesto host mancante/tema invalido | Errore d'integrazione; niente fallback full o login autonomo |
| API, config e asset dopo rebuild | Prefissi corretti, config no-store, manifest aggiornato dopo la sua cache di 30 s |
Le prove con header inventati devono attraversare l'ingresso pubblico protetto, non certificare la sicurezza inviando header direttamente al core che per contratto si fida del proxy. L'isolamento di rete del core va verificato a parte. Non promettere che il logout chiuda immediatamente tutti gli SSE già aperti: il proxy autorizza all'apertura e i ricontrolli avvengono sulle nuove richieste.
Continuità del workflow, entrambe le modalità
| Prova | Risultato atteso |
|---|---|
| Nuova sessione con UI italiana/inglese | interaction_language acquisita alla creazione; domande e scelte nella lingua salvata |
| Cambio UI dopo creazione e ripresa | La lingua della sessione resta invariata |
| Vecchio manifest senza lingua | Prima ripresa fissa la lingua workspace secondo il criterio di compatibilità |
| Bozza/modifica amministrativa e navigazione | Conferma prima della perdita; annullamento conserva la modifica |
| Reload con selezione esistente | Riapre documenti senza avviare Pi/generazione automaticamente |
| Cambio utente | Nessuno stato protetto della precedente identità riutilizzato |
| SQL, identificatori, Evidence e Memory | Contenuti originali non tradotti/riscritti dal cambio UI |
Copertura automatica e limiti
Frontend: AuthGate.test.tsx, authState.test.ts, OmicsPortalAdapter.test.ts,
AppShell.host.test.tsx, test di stream/sessioni e
e2e/ui-visual-review.spec.ts. Backend: test di auth, principal, route e
isolamento della configurazione. CLI: normalizzazione shell e proiezioni.
I test Omics isolati sono descritti nel suo docs/thothii-integration.md.
I test automatici con API/IdP simulati non sostituiscono callback reali, sessioni Omics, permessi di rete, TLS, cookie reali e interazioni fra schede sul server. Prima di chiudere il rilascio indicare esplicitamente prove superate, non eseguite e motivi del rinvio. Procedure e rollback: shell e deploy.