[DEMO] Auto-auth SPA demo: demo_jwt nel fragment spa_iframe_url + bootstrap token sincrono in common-bi.js

Chiude il gap auth: la SPA demo si auto-autentica col demo_jwt (token API nis2_access_token + org dal
payload) PRIMA di checkAuth, cross-origin (niente sessionStorage same-origin). spa_iframe_url ora atterra
su /dashboard.html?demo=..#djwt=... DemoController.DEMO_BASE override via env DEMO_BASE_URL (switch a
sottodominio senza codice). USR2 richiesto per DemoController.
This commit is contained in:
DevEnv nis2-agile
2026-06-13 10:00:28 +02:00
parent 4222e827f9
commit 460d435a47
2 changed files with 30 additions and 3 deletions
+15
View File
@@ -176,6 +176,21 @@
(function () {
try {
if (!new URLSearchParams(window.location.search).get('demo')) return;
// Auto-auth SINCRONA: il demo_jwt arriva nel fragment (#djwt=) dello spa_iframe_url.
// Lo impostiamo come token API PRIMA che la pagina chiami checkAuth() (common-bi.js gira
// prima dello script inline della pagina). Origin demo separato → nessuna pollution di sessioni reali.
try {
var h = new URLSearchParams((window.location.hash || '').replace(/^#/, ''));
var djwt = h.get('djwt');
if (djwt && !localStorage.getItem('nis2_access_token')) {
localStorage.setItem('nis2_access_token', djwt);
localStorage.setItem('nis2_user_role', 'compliance_manager');
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));
} catch (e2) { /* jwt opaco: org via credentials */ }
}
} catch (e1) { /* noop */ }
var css = document.createElement('link'); css.rel = 'stylesheet'; css.href = '/css/demo.css'; document.head.appendChild(css);
var inject = function () {
var s1 = document.createElement('script'); s1.src = '/js/demo-selectors.js';