[DEMO] Fix 2 bug SPA-side trovati al collaudo browser headless (auth in-memory + boot seed)
Il collaudo curl validava il backend ma non l'esecuzione JS nel browser. Con google-chrome --dump-dom: 1) common-bi.js: sync api.token/orgId IN-MEMORY (api.js crea l'istanza prima leggendo localStorage vuoto → checkAuth vedeva token null → redirect a login). Ora la SPA si auto-autentica. 2) demo-mode.js boot(): non bloccare sul seed quando HMAC_ENFORCE=false (cross-origin il seed non arriva; non serve, HMAC off) → il runtime (banner/listener/ready) ora parte. Verificato headless su dashboard/risks/incidents: login:0, banner+nis2-demo-on presenti.
This commit is contained in:
@@ -182,13 +182,18 @@
|
||||
try {
|
||||
var h = new URLSearchParams((window.location.hash || '').replace(/^#/, ''));
|
||||
var djwt = h.get('djwt');
|
||||
if (djwt && !localStorage.getItem('nis2_access_token')) {
|
||||
if (djwt) {
|
||||
localStorage.setItem('nis2_access_token', djwt);
|
||||
localStorage.setItem('nis2_user_role', 'compliance_manager');
|
||||
var orgv = null;
|
||||
try {
|
||||
var pl = JSON.parse(atob(djwt.split('.')[1].replace(/-/g, '+').replace(/_/g, '/')));
|
||||
if (pl && pl.org_id) localStorage.setItem('nis2_org_id', String(pl.org_id));
|
||||
if (pl && pl.org_id) { orgv = String(pl.org_id); localStorage.setItem('nis2_org_id', orgv); }
|
||||
} catch (e2) { /* jwt opaco: org via credentials */ }
|
||||
// CRITICO: api.js ha già creato l'istanza `api` leggendo localStorage VUOTO al load
|
||||
// (api.js è incluso PRIMA di common-bi.js). Senza questo sync in-memory, checkAuth()
|
||||
// vede api.token=null e redirige a login. Aggiorniamo l'istanza viva.
|
||||
try { if (typeof api !== 'undefined' && api) { api.token = djwt; if (orgv) api.orgId = orgv; } } catch (e3) { /* noop */ }
|
||||
}
|
||||
} catch (e1) { /* noop */ }
|
||||
var css = document.createElement('link'); css.rel = 'stylesheet'; css.href = '/css/demo.css'; document.head.appendChild(css);
|
||||
|
||||
@@ -159,8 +159,13 @@
|
||||
}
|
||||
|
||||
function boot() {
|
||||
loadCredentials()
|
||||
.then(function () { if (!state.jwt || !state.seed) throw new Error('demo creds mancanti'); return deriveKey(); })
|
||||
// HMAC_ENFORCE=false (canale runtime-avatar origin-verified): seed/chiave NON necessari.
|
||||
// Cross-origin il widget non può scrivere il seed in sessionStorage e /credentials non lo
|
||||
// restituisce → NON bloccare il boot sul seed, altrimenti il runtime (banner/listener) non parte.
|
||||
var pre = HMAC_ENFORCE
|
||||
? loadCredentials().then(function () { if (!state.jwt || !state.seed) throw new Error('demo creds mancanti'); return deriveKey(); })
|
||||
: Promise.resolve();
|
||||
pre
|
||||
.then(function () {
|
||||
banner();
|
||||
w.addEventListener('message', onMessage, false);
|
||||
|
||||
Reference in New Issue
Block a user