[DEPLOY] Migrazione a subdomain nis2.certisource.it

Rimozione prefisso /nis2/ da tutti i path frontend e router:
- index.php: basePath '' (da '/nis2')
- api.js: baseUrl '/api' (da '/nis2/api')
- Tutti i file HTML: path assoluti senza prefisso /nis2/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile 2026-02-19 14:05:08 +01:00
parent 92f9366ef4
commit ba21534e6a
14 changed files with 73 additions and 73 deletions

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pannello Amministrazione - NIS2 Agile</title> <title>Pannello Amministrazione - NIS2 Agile</title>
<link rel="stylesheet" href="/nis2/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<style> <style>
.admin-stats-grid { .admin-stats-grid {
display: grid; display: grid;
@ -268,7 +268,7 @@
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="quick-links-grid"> <div class="quick-links-grid">
<a href="/nis2/admin/organizations.html" class="quick-link-card"> <a href="/admin/organizations.html" class="quick-link-card">
<div class="quick-link-icon"> <div class="quick-link-icon">
<svg viewBox="0 0 20 20" fill="currentColor"><path d="M4 4a2 2 0 012-2h8a2 2 0 012 2v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"/></svg> <svg viewBox="0 0 20 20" fill="currentColor"><path d="M4 4a2 2 0 012-2h8a2 2 0 012 2v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"/></svg>
</div> </div>
@ -277,7 +277,7 @@
<p>Visualizza e gestisci tutte le organizzazioni registrate sulla piattaforma.</p> <p>Visualizza e gestisci tutte le organizzazioni registrate sulla piattaforma.</p>
</div> </div>
</a> </a>
<a href="/nis2/admin/users.html" class="quick-link-card"> <a href="/admin/users.html" class="quick-link-card">
<div class="quick-link-icon"> <div class="quick-link-icon">
<svg viewBox="0 0 20 20" fill="currentColor"><path d="M9 6a3 3 0 11-6 0 3 3 0 016 0zM17 6a3 3 0 11-6 0 3 3 0 016 0zM12.93 17c.046-.327.07-.66.07-1a6.97 6.97 0 00-1.5-4.33A5 5 0 0119 16v1h-6.07zM6 11a5 5 0 015 5v1H1v-1a5 5 0 015-5z"/></svg> <svg viewBox="0 0 20 20" fill="currentColor"><path d="M9 6a3 3 0 11-6 0 3 3 0 016 0zM17 6a3 3 0 11-6 0 3 3 0 016 0zM12.93 17c.046-.327.07-.66.07-1a6.97 6.97 0 00-1.5-4.33A5 5 0 0119 16v1h-6.07zM6 11a5 5 0 015 5v1H1v-1a5 5 0 015-5z"/></svg>
</div> </div>
@ -293,9 +293,9 @@
</main> </main>
</div> </div>
<script src="/nis2/js/api.js"></script> <script src="/js/api.js"></script>
<script src="/nis2/js/common.js"></script> <script src="/js/common.js"></script>
<script src="/nis2/js/i18n.js"></script> <script src="/js/i18n.js"></script>
<script> <script>
// ── Auth check ─────────────────────────────────────────── // ── Auth check ───────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
@ -308,12 +308,12 @@
const me = await api.getMe(); const me = await api.getMe();
if (!me.success || !me.data || me.data.role !== 'super_admin') { if (!me.success || !me.data || me.data.role !== 'super_admin') {
showNotification('Accesso non autorizzato. Solo gli amministratori possono accedere a questa pagina.', 'error'); showNotification('Accesso non autorizzato. Solo gli amministratori possono accedere a questa pagina.', 'error');
setTimeout(() => { window.location.href = '/nis2/dashboard.html'; }, 1500); setTimeout(() => { window.location.href = '/dashboard.html'; }, 1500);
return; return;
} }
loadAdminStats(); loadAdminStats();
} catch (e) { } catch (e) {
window.location.href = '/nis2/dashboard.html'; window.location.href = '/dashboard.html';
} }
})(); })();

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gestione Organizzazioni - NIS2 Agile</title> <title>Gestione Organizzazioni - NIS2 Agile</title>
<link rel="stylesheet" href="/nis2/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<style> <style>
.entity-type-badge { .entity-type-badge {
display: inline-flex; display: inline-flex;
@ -111,7 +111,7 @@
<div class="content-body"> <div class="content-body">
<!-- Breadcrumb --> <!-- Breadcrumb -->
<div class="admin-breadcrumb"> <div class="admin-breadcrumb">
<a href="/nis2/admin/index.html">Amministrazione</a> <a href="/admin/index.html">Amministrazione</a>
<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"/></svg> <svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"/></svg>
<span>Organizzazioni</span> <span>Organizzazioni</span>
</div> </div>
@ -128,9 +128,9 @@
</main> </main>
</div> </div>
<script src="/nis2/js/api.js"></script> <script src="/js/api.js"></script>
<script src="/nis2/js/common.js"></script> <script src="/js/common.js"></script>
<script src="/nis2/js/i18n.js"></script> <script src="/js/i18n.js"></script>
<script> <script>
// ── Auth check ─────────────────────────────────────────── // ── Auth check ───────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
@ -145,12 +145,12 @@
const me = await api.getMe(); const me = await api.getMe();
if (!me.success || !me.data || me.data.role !== 'super_admin') { if (!me.success || !me.data || me.data.role !== 'super_admin') {
showNotification('Accesso non autorizzato.', 'error'); showNotification('Accesso non autorizzato.', 'error');
setTimeout(() => { window.location.href = '/nis2/dashboard.html'; }, 1500); setTimeout(() => { window.location.href = '/dashboard.html'; }, 1500);
return; return;
} }
loadOrganizations(1); loadOrganizations(1);
} catch (e) { } catch (e) {
window.location.href = '/nis2/dashboard.html'; window.location.href = '/dashboard.html';
} }
})(); })();

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gestione Utenti - NIS2 Agile</title> <title>Gestione Utenti - NIS2 Agile</title>
<link rel="stylesheet" href="/nis2/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<style> <style>
.role-badge { .role-badge {
display: inline-flex; display: inline-flex;
@ -131,7 +131,7 @@
<div class="content-body"> <div class="content-body">
<!-- Breadcrumb --> <!-- Breadcrumb -->
<div class="admin-breadcrumb"> <div class="admin-breadcrumb">
<a href="/nis2/admin/index.html">Amministrazione</a> <a href="/admin/index.html">Amministrazione</a>
<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"/></svg> <svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"/></svg>
<span>Utenti</span> <span>Utenti</span>
</div> </div>
@ -148,9 +148,9 @@
</main> </main>
</div> </div>
<script src="/nis2/js/api.js"></script> <script src="/js/api.js"></script>
<script src="/nis2/js/common.js"></script> <script src="/js/common.js"></script>
<script src="/nis2/js/i18n.js"></script> <script src="/js/i18n.js"></script>
<script> <script>
// ── Auth check ─────────────────────────────────────────── // ── Auth check ───────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
@ -165,12 +165,12 @@
const me = await api.getMe(); const me = await api.getMe();
if (!me.success || !me.data || me.data.role !== 'super_admin') { if (!me.success || !me.data || me.data.role !== 'super_admin') {
showNotification('Accesso non autorizzato.', 'error'); showNotification('Accesso non autorizzato.', 'error');
setTimeout(() => { window.location.href = '/nis2/dashboard.html'; }, 1500); setTimeout(() => { window.location.href = '/dashboard.html'; }, 1500);
return; return;
} }
loadUsers(1); loadUsers(1);
} catch (e) { } catch (e) {
window.location.href = '/nis2/dashboard.html'; window.location.href = '/dashboard.html';
} }
})(); })();

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Inventario Asset - NIS2 Agile</title> <title>Inventario Asset - NIS2 Agile</title>
<link rel="stylesheet" href="/nis2/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<style> <style>
/* ── Stats Cards ────────────────────────────────────────── */ /* ── Stats Cards ────────────────────────────────────────── */
.asset-stats { .asset-stats {
@ -348,10 +348,10 @@
</main> </main>
</div> </div>
<script src="/nis2/js/api.js"></script> <script src="/js/api.js"></script>
<script src="/nis2/js/common.js"></script> <script src="/js/common.js"></script>
<script src="/nis2/js/i18n.js"></script> <script src="/js/i18n.js"></script>
<script src="/nis2/js/help.js"></script> <script src="/js/help.js"></script>
<script> <script>
// ── Auth & Init ───────────────────────────────────────── // ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gestione Incidenti - NIS2 Agile</title> <title>Gestione Incidenti - NIS2 Agile</title>
<link rel="stylesheet" href="/nis2/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<style> <style>
/* ── Filters Bar ─────────────────────────────────────── */ /* ── Filters Bar ─────────────────────────────────────── */
.filters-bar { .filters-bar {
@ -334,10 +334,10 @@
</main> </main>
</div> </div>
<script src="/nis2/js/api.js"></script> <script src="/js/api.js"></script>
<script src="/nis2/js/common.js"></script> <script src="/js/common.js"></script>
<script src="/nis2/js/i18n.js"></script> <script src="/js/i18n.js"></script>
<script src="/nis2/js/help.js"></script> <script src="/js/help.js"></script>
<script> <script>
// ── Auth & Init ────────────────────────────────────────────── // ── Auth & Init ──────────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NIS2 Agile - Piattaforma Compliance NIS2</title> <title>NIS2 Agile - Piattaforma Compliance NIS2</title>
<link rel="stylesheet" href="/nis2/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<style> <style>
.landing { display: flex; flex-direction: column; min-height: 100vh; background: var(--gray-50, #f8fafc); } .landing { display: flex; flex-direction: column; min-height: 100vh; background: var(--gray-50, #f8fafc); }
.landing-header { background: white; border-bottom: 1px solid #e2e8f0; padding: 1rem 2rem; display: flex; justify-content: space-between; align-items: center; } .landing-header { background: white; border-bottom: 1px solid #e2e8f0; padding: 1rem 2rem; display: flex; justify-content: space-between; align-items: center; }
@ -33,8 +33,8 @@
<header class="landing-header"> <header class="landing-header">
<div class="landing-logo">NIS2 <span>Agile</span></div> <div class="landing-logo">NIS2 <span>Agile</span></div>
<nav class="landing-nav"> <nav class="landing-nav">
<a href="/nis2/login.html" class="btn-login">Accedi</a> <a href="/login.html" class="btn-login">Accedi</a>
<a href="/nis2/register.html" class="btn-register">Registrati</a> <a href="/register.html" class="btn-register">Registrati</a>
</nav> </nav>
</header> </header>
@ -42,7 +42,7 @@
<div class="hero-content"> <div class="hero-content">
<h1>Compliance <span>NIS2</span> semplificata</h1> <h1>Compliance <span>NIS2</span> semplificata</h1>
<p>Piattaforma integrata per guidare la tua azienda alla conformita con la Direttiva NIS2 (EU 2022/2555). Gap analysis, risk assessment, gestione incidenti, policy e formazione - tutto in un unico strumento con AI integrata.</p> <p>Piattaforma integrata per guidare la tua azienda alla conformita con la Direttiva NIS2 (EU 2022/2555). Gap analysis, risk assessment, gestione incidenti, policy e formazione - tutto in un unico strumento con AI integrata.</p>
<a href="/nis2/register.html" class="cta">Inizia gratuitamente</a> <a href="/register.html" class="cta">Inizia gratuitamente</a>
</div> </div>
</section> </section>

View File

@ -3,7 +3,7 @@
* NIS2 Agile - Front Controller / Router * NIS2 Agile - Front Controller / Router
* *
* Tutte le richieste API passano da qui. * Tutte le richieste API passano da qui.
* URL Pattern: /nis2/api/{controller}/{action}/{id?} * URL Pattern: /api/{controller}/{action}/{id?}
*/ */
// ═══════════════════════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════════════════════
@ -37,7 +37,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
// ═══════════════════════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════════════════════
$requestUri = $_SERVER['REQUEST_URI'] ?? '/'; $requestUri = $_SERVER['REQUEST_URI'] ?? '/';
$basePath = '/nis2'; $basePath = '';
$path = parse_url($requestUri, PHP_URL_PATH); $path = parse_url($requestUri, PHP_URL_PATH);
$path = preg_replace("#^{$basePath}#", '', $path); $path = preg_replace("#^{$basePath}#", '', $path);

View File

@ -5,7 +5,7 @@
*/ */
class NIS2API { class NIS2API {
constructor(baseUrl = '/nis2/api') { constructor(baseUrl = '/api') {
this.baseUrl = baseUrl; this.baseUrl = baseUrl;
this.token = localStorage.getItem('nis2_access_token'); this.token = localStorage.getItem('nis2_access_token');
this.refreshToken = localStorage.getItem('nis2_refresh_token'); this.refreshToken = localStorage.getItem('nis2_refresh_token');
@ -103,7 +103,7 @@ class NIS2API {
logout() { logout() {
this.post('/auth/logout', {}).catch(() => {}); this.post('/auth/logout', {}).catch(() => {});
this.clearTokens(); this.clearTokens();
window.location.href = '/nis2/login.html'; window.location.href = '/login.html';
} }
getMe() { return this.get('/auth/me'); } getMe() { return this.get('/auth/me'); }

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Policy - NIS2 Agile</title> <title>Policy - NIS2 Agile</title>
<link rel="stylesheet" href="/nis2/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<style> <style>
/* ── Policy Page Styles ──────────────────────────────────── */ /* ── Policy Page Styles ──────────────────────────────────── */
.filters-bar { .filters-bar {
@ -316,10 +316,10 @@
</main> </main>
</div> </div>
<script src="/nis2/js/api.js"></script> <script src="/js/api.js"></script>
<script src="/nis2/js/common.js"></script> <script src="/js/common.js"></script>
<script src="/nis2/js/i18n.js"></script> <script src="/js/i18n.js"></script>
<script src="/nis2/js/help.js"></script> <script src="/js/help.js"></script>
<script> <script>
// ── Auth & Init ───────────────────────────────────────── // ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Audit e Report - NIS2 Agile</title> <title>Audit e Report - NIS2 Agile</title>
<link rel="stylesheet" href="/nis2/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<style> <style>
/* ── Tab Navigation ─────────────────────────────────────── */ /* ── Tab Navigation ─────────────────────────────────────── */
.tab-nav { .tab-nav {
@ -405,10 +405,10 @@
</main> </main>
</div> </div>
<script src="/nis2/js/api.js"></script> <script src="/js/api.js"></script>
<script src="/nis2/js/common.js"></script> <script src="/js/common.js"></script>
<script src="/nis2/js/i18n.js"></script> <script src="/js/i18n.js"></script>
<script src="/nis2/js/help.js"></script> <script src="/js/help.js"></script>
<script> <script>
// ── Auth & Init ───────────────────────────────────────── // ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gestione Rischi - NIS2 Agile</title> <title>Gestione Rischi - NIS2 Agile</title>
<link rel="stylesheet" href="/nis2/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<style> <style>
/* ── View Toggle ─────────────────────────────────────── */ /* ── View Toggle ─────────────────────────────────────── */
.view-toggle { .view-toggle {
@ -416,10 +416,10 @@
</main> </main>
</div> </div>
<script src="/nis2/js/api.js"></script> <script src="/js/api.js"></script>
<script src="/nis2/js/common.js"></script> <script src="/js/common.js"></script>
<script src="/nis2/js/i18n.js"></script> <script src="/js/i18n.js"></script>
<script src="/nis2/js/help.js"></script> <script src="/js/help.js"></script>
<script> <script>
// ── Auth & Init ────────────────────────────────────────────── // ── Auth & Init ──────────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Impostazioni - NIS2 Agile</title> <title>Impostazioni - NIS2 Agile</title>
<link rel="stylesheet" href="/nis2/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<style> <style>
.settings-tabs { .settings-tabs {
display: flex; display: flex;
@ -483,10 +483,10 @@
</main> </main>
</div> </div>
<script src="/nis2/js/api.js"></script> <script src="/js/api.js"></script>
<script src="/nis2/js/common.js"></script> <script src="/js/common.js"></script>
<script src="/nis2/js/i18n.js"></script> <script src="/js/i18n.js"></script>
<script src="/nis2/js/help.js"></script> <script src="/js/help.js"></script>
<script> <script>
// ── Auth check ─────────────────────────────────────────── // ── Auth check ───────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
@ -716,7 +716,7 @@
}; };
try { try {
const response = await fetch('/nis2/api/auth/profile', { const response = await fetch('/api/auth/profile', {
method: 'PUT', method: 'PUT',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -792,7 +792,7 @@
btn.textContent = 'Aggiornamento...'; btn.textContent = 'Aggiornamento...';
try { try {
const response = await fetch('/nis2/api/auth/change-password', { const response = await fetch('/api/auth/change-password', {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -809,7 +809,7 @@
showNotification('Password modificata. Verrai disconnesso...', 'success'); showNotification('Password modificata. Verrai disconnesso...', 'success');
setTimeout(() => { setTimeout(() => {
api.clearTokens(); api.clearTokens();
window.location.href = '/nis2/login.html'; window.location.href = '/login.html';
}, 2000); }, 2000);
} else { } else {
showNotification(result.message || 'Errore nel cambio password.', 'error'); showNotification(result.message || 'Errore nel cambio password.', 'error');

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Supply Chain - NIS2 Agile</title> <title>Supply Chain - NIS2 Agile</title>
<link rel="stylesheet" href="/nis2/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<style> <style>
/* ── Supply Chain Page Styles ─────────────────────────── */ /* ── Supply Chain Page Styles ─────────────────────────── */
.filters-bar { .filters-bar {
@ -457,10 +457,10 @@
</main> </main>
</div> </div>
<script src="/nis2/js/api.js"></script> <script src="/js/api.js"></script>
<script src="/nis2/js/common.js"></script> <script src="/js/common.js"></script>
<script src="/nis2/js/i18n.js"></script> <script src="/js/i18n.js"></script>
<script src="/nis2/js/help.js"></script> <script src="/js/help.js"></script>
<script> <script>
// ── Auth & Init ───────────────────────────────────────── // ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Formazione - NIS2 Agile</title> <title>Formazione - NIS2 Agile</title>
<link rel="stylesheet" href="/nis2/css/style.css"> <link rel="stylesheet" href="/css/style.css">
<style> <style>
/* ── Tab Navigation ─────────────────────────────────────── */ /* ── Tab Navigation ─────────────────────────────────────── */
.tab-nav { .tab-nav {
@ -275,10 +275,10 @@
</main> </main>
</div> </div>
<script src="/nis2/js/api.js"></script> <script src="/js/api.js"></script>
<script src="/nis2/js/common.js"></script> <script src="/js/common.js"></script>
<script src="/nis2/js/i18n.js"></script> <script src="/js/i18n.js"></script>
<script src="/nis2/js/help.js"></script> <script src="/js/help.js"></script>
<script> <script>
// ── Auth & Init ───────────────────────────────────────── // ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');