[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 {
|
try {
|
||||||
var h = new URLSearchParams((window.location.hash || '').replace(/^#/, ''));
|
var h = new URLSearchParams((window.location.hash || '').replace(/^#/, ''));
|
||||||
var djwt = h.get('djwt');
|
var djwt = h.get('djwt');
|
||||||
if (djwt && !localStorage.getItem('nis2_access_token')) {
|
if (djwt) {
|
||||||
localStorage.setItem('nis2_access_token', djwt);
|
localStorage.setItem('nis2_access_token', djwt);
|
||||||
localStorage.setItem('nis2_user_role', 'compliance_manager');
|
localStorage.setItem('nis2_user_role', 'compliance_manager');
|
||||||
|
var orgv = null;
|
||||||
try {
|
try {
|
||||||
var pl = JSON.parse(atob(djwt.split('.')[1].replace(/-/g, '+').replace(/_/g, '/')));
|
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 */ }
|
} 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 */ }
|
} catch (e1) { /* noop */ }
|
||||||
var css = document.createElement('link'); css.rel = 'stylesheet'; css.href = '/css/demo.css'; document.head.appendChild(css);
|
var css = document.createElement('link'); css.rel = 'stylesheet'; css.href = '/css/demo.css'; document.head.appendChild(css);
|
||||||
|
|||||||
@@ -159,8 +159,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function boot() {
|
function boot() {
|
||||||
loadCredentials()
|
// HMAC_ENFORCE=false (canale runtime-avatar origin-verified): seed/chiave NON necessari.
|
||||||
.then(function () { if (!state.jwt || !state.seed) throw new Error('demo creds mancanti'); return deriveKey(); })
|
// 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 () {
|
.then(function () {
|
||||||
banner();
|
banner();
|
||||||
w.addEventListener('message', onMessage, false);
|
w.addEventListener('message', onMessage, false);
|
||||||
|
|||||||
Reference in New Issue
Block a user