Skip to content

2 Funzionamento

Valentino Aglianรณ edited this page May 26, 2026 · 36 revisions

โš™๏ธ Capitolo 2: Architettura e Funzionamento (Sotto il cofano)

Il funzionamento del motore Panzer v7 si basa su tre pilastri architetturali rigidi progettati per la massima resilienza.


๐ŸŒ 1. Scope Globale (sw.js nella Root)

Il file del Service Worker (sw.js) รจ posizionato chirurgicamente nella cartella radice (root) del dominio tramite la costante CONFIG.ROOT (derivata dinamicamente da self.location.pathname). Questo permette al software di intercettare ogni singola richiesta di rete dell'intera applicazione, agendo come un proxy locale installato nel browser dell'utente.


โšก 2. Strategia di Fetch: Network-First con Profilazione Dinamica e Autorigenerazione

Il motore adotta un algoritmo avanzato di tolleranza ai guasti di rete per scongiurare il blocco dell'interfaccia in caso di connettivitร  degradata (fenomeno della "Lie-Fi"), orchestrato dai parametri configurati in CONFIG.networkResilient:

  1. Profilazione Dinamica della Rete (getNetworkProfile): Il sistema non si limita a verificare lo stato online/offline. Calcola in tempo reale un punteggio di efficienza basato sui parametri navigator.connection (downlink e RTT), mappando dinamicamente i limiti estratti dall'oggetto CONFIG.networkResilient.profiles secondo la tabella sottostante:
Profilo Rete Limite Download Simultanei (limit) Timeout di Connessione (timeout) Comportamento Bunker
Ultrafast 12 file 15 secondi Sincronizzazione aggressiva
Fast 8 file 20 secondi Sincronizzazione standard
Medium 4 file 45 secondi Sincronizzazione standard
Low 2 file 90 secondi Controllo HEAD esteso
Verylow 1 file 120 secondi Blocco preventivo del Sync
  1. Network-First con Race Condition: Ogni richiesta dinamica intercetta la rete per garantire la massima freschezza del dato, applicando i secondi di timeout definiti dal profilo di rete attivo all'interno di CONFIG.networkResilient.profiles. Se la rete fallisce, il sistema effettua fino a un massimo di CONFIG.networkResilient.maxRetries tentativi distanziati da CONFIG.networkResilient.timeWaitSec secondi.
  2. Cache Fallback & Hot Update: In caso di timeout o fallimento dei tentativi, il Service Worker rilascia immediatamente la risorsa locale memorizzata nel Bunker. Se invece la rete risponde entro i limiti, il sistema aggiorna la cache in background (Hot Update).
  3. Radar degli Aggiornamenti (ver_site): Il sistema monitora le variazioni dell'HTML principale tracciando la versione globale. Se viene rilevato un disallineamento di versione, il Service Worker esegue autonomamente una tabula rasa delle vecchie cache per prevenire conflitti logici o disallineamenti tra i moduli core.

๐Ÿ”„ 3. Ciclo di Sincronizzazione Intelligente (sync)

Quando il sistema rileva il ripristino della connettivitร  o riceve un evento di sincronizzazione, si attiva la logica di popolamento/allineamento controllata:

  1. Controllo dei Vincoli del Profilo: Il motore interroga getNetworkProfile. Se il profilo รจ Verylow, il ciclo impone un blocco preventivo (syncAbortController.abort()) per non saturare la banda degradata dell'utente.
  2. Download in Parallelo Limitato: Se il profilo lo consente, il motore avvia lo scaricamento delle risorse core rispettando rigorosamente il tetto massimo di file simultanei (limit) definito per quel profilo, evitando crash del browser o congestioni di rete.

๐Ÿ” 4. Validazione Strict via SW Forensics (isValidBlob)

Per evitare attacchi informatici (come il Cache Poisoning), pagine di login di hotspot Wi-Fi (captive portal) o file corrotti, ogni risorsa subisce una validazione rigorosa prima dell'ingresso nello storage:

  1. Controllo Dimensionale: Verifica della dimensione minima del file iniettando come sbarramento la mappa delle specifiche interne definita in CONFIG.minSizeMap.
  2. Firma Magica (DNA del File): Analisi dei primi byte binari (i Magic Numbers) per verificare la reale identitร  e integritร  del dato prima di elaborarlo, rifiutando file con estensioni falsificate.

๐Ÿ“ฆ Gestione dei Magazzini e della Memoria (Crittografia AES-GCM)

Il sistema opera una separazione netta dello storage logico, tracciato nei log di console con marcatori specifici e protetto da cifratura hardware-assisted:

  • ๐Ÿ“ฆ๐Ÿ›ก (Bunker) (mappato in CONFIG.cacheName : Area protetta e isolata per gli asset Core + Manifest asset, di sistema. Se lo sblocco del Vault ha esito positivo, le risorse destinate a questa stiva subiscono una cifratura simmetrica AES-GCM a 256 bit. In fase di lettura offline, il Service Worker estrae l'ArrayBuffer, esegue la decrittazione al volo via Web Crypto API e serve la risorsa iniettando l'header personalizzato X-PWA-Source: Bunker-Decrypted.
  • ๐Ÿ“ฆ๐Ÿ”“ (Magazzino) (mappato in CONFIG.userCacheName : Area sussidiaria per le risorse utente dinamiche, volatili e non cifrate, vincolate a una data di scadenza controllata dal Time-To-Live definito in CONFIG.userCacheTTL (pari a 7 giorni).
pie title Allocazione Logica dello Storage nel Client
    "๐Ÿ“ฆ๐Ÿ›ก๏ธ CONFIG.cacheName (Bunker Core - Cifrato AES-GCM)" : 45
    "๐Ÿ“ฆ๐Ÿ”“ CONFIG.userCacheName (Magazzino Asset Volatili - TTL 7d)" : 35
    "๐Ÿšจ Buffer di Sicurezza (QuotaExceededError Emergency Reserve)" : 20
Loading

๐Ÿงฌ Routine di Factory Reset, Messaggistica Frontend e Re-Installazione Totale (Canary Check)

Il motore implementa una logica di tolleranza ai guasti di tipo distruttivo-rigenerativo sincronizzata con l'interfaccia utente:

  1. Canary Vault Check (deepVaultValidation): All'attivazione del Service Worker, viene eseguito un test crittografico di controllo sul vettore statico binario (Canary Data). Se l'operazione fallisce o le chiavi logiche risultano manomesse, il sistema solleva un blocco di sicurezza immediato (ACTIVATION_ABORTED_SECURITY_BREACH) ed esegue un wipe preventivo dell'IndexedDB PWA_Vault.
  2. Tabula Rasa Immediata: Se il database del Vault o le chiavi logiche in IndexedDB risultano corrotti durante i cicli operativi, il Service Worker cancella istantaneamente tutte le istanze di cache attive legate a CONFIG.cacheName e CONFIG.userCacheName.
  3. Notifica di Emergenza via postMessage: Il Service Worker invia immediatamente un segnale di notifica broadcast a tutte le finestre aperte del frontend per segnalare lo stato di emergenza.
  4. Forzatura del Refresh e Re-Installazione: Il frontend forza un ricaricamento immediato. Se l'applicazione si satura o solleva un QuotaExceededError, si attiva la routine d'emergenza ๐Ÿšจ SW: Storage Pieno! Emergency Clean... che avvia la pulizia automatica del magazzino volatile (CONFIG.userCacheName) per salvaguardare i file vitali custoditi nel Bunker di sistema (CONFIG.cacheName).

In assenza dei prerequisiti minimi di sicurezza o delle chiavi logiche in IndexedDB, il sistema si isola in modalitร  protetta (VAULT_LOCKED_NO_KEY), restituendo risposte di errore o intercettando i file multimediali mancanti per sostituirli con il fallback binario configurato in CONFIG.fallbackImage.

graph LR
    A[Avvio PWA / SW] --> B(deepVaultValidation)
    B --> C{Canary Check: KANARY}
    
    C -->|VALIDATO| D[Vault Sbloccato]
    D --> E[Erogazione e Decrittazione AES-GCM]
    
    C -->|FALLITO / MANOMESSO| F[๐Ÿšจ SECURITY BREACH]
    F --> G[Wipe di PWA_Vault & Caches]
    G --> H[postMessage Broadcast ai Frontend]
    H --> I[Forzatura Refresh / Re-Installazione Totale]
    I --> J[Riscaricamento Asset Puliti dal Server]

    style D fill:#70ad47,stroke:#fff,color:#fff
    style F fill:#c00000,stroke:#fff,color:#fff
    style G fill:#ffc000,stroke:#000,color:#000
Loading

๐Ÿ› ๏ธ Diagramma Globale (Fetch & Sync Engine)

graph TD
    subgraph FLUSSO_FETCH [1. Evento Fetch: Gestione Richieste Client]
        A[Richiesta Utente / Browser] --> B[Proxy SW CONFIG.ROOT]
        B --> C[getNetworkProfile]
        C -->|Rete Rilevata| D{checkRealOnline: C'รˆ RETE?}
        
        D -->|SรŒ| E[Fetch con Timeout e Retries]
        E -->|Risposta Server OK| F[RILASCIO IMMEDIATO al Frontend]
        E -->|Risposta Server OK| G[Operazione Asincrona in BACKGROUND]
        
        G --> H_async{isValidBlob Check via CONFIG.minSizeMap}
        H_async -->|Superato| I{shouldBeEncrypted: Asset Core?}
        I -->|SรŒ| J[Cifratura AES-GCM + Salva in CONFIG.cacheName ๐Ÿ“ฆ๐Ÿ›ก๏ธ]
        I -->|NO| K[Salva in CONFIG.userCacheName ๐Ÿ“ฆ๐Ÿ”“]
        H_async -->|Fallito/Corrotto| L[Ignora Risposta / Non Salvare]

        D -->|NO / Timeout Rete / 404| M[Bunker Mode Fallback]
        M --> N{Match in Cache trovato?}
        N -->|SรŒ| O{X-PWA-Encrypted == true?}
        O -->|SรŒ| P[verifyVaultIntegrity + decryptBuffer]
        P -->|Successo| Q[Rilascia file decifrato Bunker-Decrypted]
        P -->|Errore/Manomissione| R[Wipe CONFIG.cacheName & CONFIG.userCacheName]
        O -->|NO| S[Rilascia file in chiaro da CONFIG.userCacheName]
        N -->|NO| T{Richiesta Immagine o HTML?}
        T -->|SรŒ| U[Eroga CONFIG.fallbackImage o Error Page 503]
        T -->|NO| V[Ritorna Errore Plain Text Offline 503]
    end

    subgraph FLUSSO_SYNC [2. Evento Sync: Allineamento e Pre-Cache]
        X[Trigger Event: sync / Connessione Ripristinata] --> Y[getNetworkProfile]
        Y --> Z{Profilo == Verylow?}
        Z -->|SรŒ| AA[syncAbortController.abort: Blocco Preventivo Sync]
        Z -->|NO| AB[Estrae limiti e parallelizzazione download]
        AB --> AC[Download asincrono controllato dei file core]
        AC --> H_async
    end

    style B fill:#1f4e79,stroke:#fff,stroke-width:2px,color:#fff
    style F fill:#2e75b6,stroke:#fff,stroke-width:2px,color:#fff
    style G fill:#7f7f7f,stroke:#fff,stroke-width:1px,stroke-dasharray: 5 5,color:#fff
    style M fill:#c00000,stroke:#fff,stroke-width:2px,color:#fff
    style AA fill:#a5a5a5,stroke:#000,stroke-width:1px,color:#000
    style J fill:#70ad47,stroke:#fff,stroke-width:1px,color:#fff
Loading

โ†ฉ Torna alla Home

๐Ÿ—‚๏ธ Indice Rapido Wiki

  • ๐Ÿ  Home
    ๐Ÿ“‘ Pagina principale del Progetto

  • ๐Ÿ“„ Capitolo 1: Introduzione
    ๐Ÿ‘จโ€โš–๏ธ Requisiti legali e conformitร  CAD (Art. 68/69) ๐Ÿ“œ

  • โš™๏ธ Capitolo 2: Architettura
    ๐Ÿ›ก๏ธ๐Ÿ“ฆ Bunker Mode e crittografia AES-GCM del Vault ๐Ÿ”‘๐Ÿ—„๏ธ

  • ๐Ÿ’ก Capitolo 3: Note Finali
    โš’๏ธ Esempi di utilizzo pratico nella PA ๐Ÿ›๏ธ

  • ๐Ÿ›๏ธ Perchรฉ ๐Ÿช– Panzer v7+
    ๐Ÿ—ฝ Indipendenza ed eliminazione del Vendor Lock-in ๐Ÿšซ๐Ÿ”’

  • ๐Ÿ”ฅ Capitolo 4: Collaudo
    ๐Ÿฅ Battesimo di Fuoco, Debug e Log ๐Ÿž๐Ÿ“Š

  • ๐Ÿ›ก๏ธ Capitolo 5: Paradigma Difensivo
    Logiche di ๐Ÿšซ๐Ÿ’ฅ anti-tampering e Zeroization ๐Ÿงฝ

  • ๐Ÿ“‘ Capitolo 6: Determina
    ๐Ÿ–จ๏ธ Modello pronto ed esecutivo per i dirigenti ๐Ÿ’ผ

  • ๐Ÿงž Capitolo 7: Estensione Zero-Trust ๐Ÿ”
    ๐ŸŒ€๐Ÿงช Concept: Architetturale e Framework di Sicurezza per le PA ๐Ÿ›๏ธ

  • ๐Ÿ›๏ธ๐Ÿšจ Capitolo 8: Protezione PA
    ๐Ÿ“– Disciplinare Tecnico di Tutela dell'Ente con linee guida per Affidamenti Esterni. ๐Ÿข

  • ๐Ÿš€โ˜ข๏ธ Capitolo 9: La Difesa Oltre il Confine
    ๐ŸŒ€๐Ÿงช Concept: di un sistema di difesa attiva per operare in modalitร  Out-of-Sandbox ๐Ÿ”๐Ÿซ™

  • ๐Ÿ›๏ธ๐Ÿ”ฎ PA Futuro Digitale
    ๐ŸŒ๐Ÿš€ Concept: Manifesto tecnologico e linee guida d'architettura per l'Iper Cloud PA ๐ŸŒฉ๏ธ


LOGO

Clone this wiki locally