diff --git a/application/config/nis2_sources.php b/application/config/nis2_sources.php index 84503ad..b781e95 100644 --- a/application/config/nis2_sources.php +++ b/application/config/nis2_sources.php @@ -52,16 +52,25 @@ return [ 'full' => 'Determinazione del Direttore generale dell\'Agenzia per la Cybersicurezza Nazionale n. 164179 del 14 aprile 2025, in attuazione del D.Lgs. 138/2024, che stabilisce modalita e specifiche di base per gli obblighi di cui agli articoli 23, 24, 25, 29 e 32 (incluse classificazione e notifica degli incidenti significativi: Allegato 3 = soggetti IMPORTANTI, Allegato 4 = soggetti ESSENZIALI).', 'file' => 'docs/nis2/Determina164179_apr2025.pdf', 'authority' => 'Agenzia per la Cybersicurezza Nazionale (ACN)', - 'url' => 'https://www.acn.gov.it/', + 'url' => 'https://www.acn.gov.it/portale/w/nis-avviata-la-seconda-fase', ], 'determina_333017_2025' => [ 'key' => 'determina_333017_2025', - 'short' => 'Determina ACN 333017/2025', - 'citation' => 'Determinazione ACN n. 333017 del settembre 2025', - 'full' => 'Determinazione del Direttore generale ACN n. 333017 (settembre 2025): termini, modalita e procedimenti di utilizzo e accesso alla piattaforma digitale ACN, ulteriori informazioni che i soggetti devono fornire e designazione dei rappresentanti NIS sul territorio nazionale.', + 'short' => 'Determina ACN 333017/2025 (storica, superata)', + 'citation' => 'Determinazione ACN n. 333017 del 22 settembre 2025 (SUPERATA dalla n. 379887/2025)', + 'full' => 'Determinazione del Direttore generale ACN n. 333017 del 22 settembre 2025 [data-giorno da confermare sul testo ufficiale]: termini, modalita e procedimenti di utilizzo e accesso alla piattaforma digitale ACN, ulteriori informazioni che i soggetti devono fornire e designazione dei rappresentanti NIS sul territorio nazionale. NOTA: citazione STORICA, SUPERATA dalla Determinazione ACN n. 379887/2025 (efficace dal 31 dicembre 2025); per piattaforma/registrazione/designazioni fare riferimento alla 379887.', 'file' => 'docs/nis2/Determina333017_sett2025.pdf', 'authority' => 'Agenzia per la Cybersicurezza Nazionale (ACN)', - 'url' => 'https://www.acn.gov.it/', + 'url' => 'https://www.acn.gov.it/portale/w/nis-avviata-la-seconda-fase', + ], + 'determina_379887_2025' => [ + 'key' => 'determina_379887_2025', + 'short' => 'Determina ACN 379887/2025 (vigente)', + 'citation' => 'Determinazione ACN n. 379887/2025, efficace dal 31 dicembre 2025', + 'full' => 'Determinazione del Direttore generale ACN n. 379887/2025 (adozione 19 dicembre 2025 [da confermare sul testo ufficiale], efficacia dal 31 dicembre 2025) che SOSTITUISCE la n. 333017/2025: disciplina il Portale ACN e i Servizi NIS per il ciclo di registrazione 2026 (registrazione, aggiornamento dei dati entro 10 giorni dalla presentazione, designazioni incluso il referente CSIRT). Fonte VIGENTE per piattaforma/registrazione/designazioni.', + 'file' => null, + 'authority' => 'Agenzia per la Cybersicurezza Nazionale (ACN)', + 'url' => 'https://www.acn.gov.it/portale/w/nis-avviata-la-seconda-fase', ], 'ambiti_nis2' => [ 'key' => 'ambiti_nis2', diff --git a/public/stakeholder-activities.html b/public/stakeholder-activities.html index defac52..1b29143 100644 --- a/public/stakeholder-activities.html +++ b/public/stakeholder-activities.html @@ -61,10 +61,13 @@ + + + @@ -417,17 +420,20 @@ planned_date: el('act-planned').value || null, due_date: el('act-due').value || null, policy_ids: getMulti('act-proc'), }; + const indIds = mode === 'individual' ? getMulti('act-stakeholders') : []; + if (mode === 'individual' && !indIds.length) { el('act-err').textContent = 'Seleziona almeno uno stakeholder.'; return; } const btn = el('act-save'); btn.disabled = true; try { let actId; if (id) { await api.stkActUpdate(parseInt(id, 10), payload); actId = parseInt(id, 10); } - else { const r = await api.stkActCreate(payload); actId = r.id; } - // assegnazione immediata - if (mode === 'individual') { - const ids = getMulti('act-stakeholders'); - if (ids.length) await api.stkActAssign(actId, { stakeholder_ids: ids }); - } else { - await api.stkActAssign(actId, {}); + else { const r = await api.stkActCreate(payload); actId = r.id; el('act-id').value = actId; } // evita create duplicati su retry + // assegnazione immediata; se fallisce, l'attività esiste già: NON ricreare + try { + await api.stkActAssign(actId, mode === 'individual' ? { stakeholder_ids: indIds } : {}); + } catch (assignErr) { + await saLoadAll(); + el('act-err').textContent = 'Attività salvata, ma assegnazione destinatari non riuscita: ' + (assignErr.message || '') + ' — riprova o assegna dal dettaglio.'; + return; } showNotification(id ? 'Attività aggiornata.' : 'Attività creata e destinatari assegnati.', 'success'); actClose(); await saLoadAll(); diff --git a/public/sw.js b/public/sw.js index a998db3..dea13ca 100644 --- a/public/sw.js +++ b/public/sw.js @@ -13,7 +13,7 @@ * Il nome cache include la release: va BUMPATO ad ogni rilascio (vedi version.json), * cosi' activate elimina automaticamente la shell vecchia. */ -const CACHE = 'nis2-shell-v1.21.1'; +const CACHE = 'nis2-shell-v1.21.2'; const PRECACHE = [ '/offline.html', diff --git a/public/version.json b/public/version.json index c038b49..1ac0aba 100644 --- a/public/version.json +++ b/public/version.json @@ -1 +1 @@ -{"version": "1.21.1", "build": "2026-06-16-v1.21.1", "date": "2026-06-16", "changelog": "Epic C / C5 hardening (post-verifica flotta): upload allegati con ALLOWLIST estensioni (no html/svg/js same-origin) + nome file random; scadenza magic-link (mig.054 token_expires_at, 410 TOKEN_EXPIRED) + rate-limit endpoint portale + guard scritture su attivita' chiuse; send() non azzera piu' i destinatari gia' responded/acknowledged; assign individuale con semantica replace + guard lista vuota; update conserva assign_mode esistente; editor opzioni per domande a scelta singola/multipla; etichette stato localizzate; risposte mostrate inline (no alert); ARIA su modali/tab; escAttr nel portale; voce sidebar in common.js. Additivo."} +{"version": "1.21.2", "build": "2026-06-16-v1.21.2", "date": "2026-06-16", "changelog": "Epic C / C5 — fix open-item post-verifica: upload allegati RIPRISTINATO in prod (ACL host www-data su public/uploads; risolve anche evidence/visure) — collaudato. UI: create+assign attività non lascia più attività orfane su errore (no duplicati, messaggio chiaro) e richiede destinatari per assegnazione individuale; blocco PWA di stakeholder-activities allineato (favicon-16, status-bar, application-name). Additivo."}