diff --git a/public/js/common-bi.js b/public/js/common-bi.js index 1228454..1f39313 100644 --- a/public/js/common-bi.js +++ b/public/js/common-bi.js @@ -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); diff --git a/public/js/demo-mode.js b/public/js/demo-mode.js index b1c7339..0ae1f29 100644 --- a/public/js/demo-mode.js +++ b/public/js/demo-mode.js @@ -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);