/*
  X-Frame-Options: DENY
  X-Content-Type-Options: nosniff
  Referrer-Policy: strict-origin-when-cross-origin
  Permissions-Policy: geolocation=(), microphone=(self), camera=(self), payment=()
  # HSTS: mancava in produzione (verificato dal vivo su brigata.app). Senza, alla PRIMA visita un
  # attaccante di rete può tentare l'SSL-strip e servire la pagina in HTTP. 180 giorni.
  # NB volutamente SENZA includeSubDomains/preload: l'hub on-premise può servire su un sottodominio
  # (hub-*.local.brigata.app) o in HTTP sulla LAN, e un impegno esteso ai sottodomini lo romperebbe.
  # Sull'HTTP del box l'header è comunque ignorato dai browser (HSTS vale solo su HTTPS).
  Strict-Transport-Security: max-age=15552000
  Content-Security-Policy: default-src 'self'; script-src 'self' https://challenges.cloudflare.com; script-src-attr 'none'; object-src 'none'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; img-src 'self' data: blob: https:; connect-src 'self' wss: https://challenges.cloudflare.com; frame-src https://challenges.cloudflare.com; frame-ancestors 'none'; base-uri 'self'; form-action 'self'

# /app è l'ENTRY DEDICATA del guscio nativo Android (webview Capacitor con server.url remoto):
# il guscio inietta il bridge nativo come <script> inline nella pagina, quindi SOLO qui la CSP
# concede 'unsafe-inline' a script-src. Il resto del sito resta blindato (regola /* sopra).
# `! Content-Security-Policy` stacca l'header ereditato da /* per evitare il doppio header
# (due CSP si sommano in AND → vincerebbe la più severa e il bridge resterebbe bloccato).
#
# `unsafe-inline` qui NON si può togliere: il bridge lo inietta il guscio nativo, quindi non
# possiamo né conoscerne l'hash né aggiungergli un nonce (l'attributo lo scriverebbe Capacitor,
# non noi). Sparirà quando l'app passerà al bundle locale invece di server.url remoto.
# Nel frattempo si toglie il vettore che contava davvero: `script-src-attr 'none'` blocca gli
# HANDLER INLINE negli attributi — `<svg onload=…>`, `<img onerror=…>`, cioè la forma che prende
# quasi sempre un'iniezione HTML — continuando a permettere il <script> del bridge. I due
# permessi sembrano uno solo ma non lo sono, ed è la differenza che serve.
/app
  ! Content-Security-Policy
  Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' https://challenges.cloudflare.com; script-src-attr 'none'; object-src 'none'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; img-src 'self' data: blob: https:; connect-src 'self' wss: https://challenges.cloudflare.com; frame-src https://challenges.cloudflare.com; frame-ancestors 'none'; base-uri 'self'; form-action 'self'

# ── Rotte con la MAPPA (Ondata 3) ────────────────────────────────────────────
# MapKit JS non gira sotto la policy generale: gli servono il CDN di Apple, 'wasm-unsafe-eval'
# (il rendering della mappa è WebAssembly), i worker e i blob. Invece di allentare la CSP di
# tutto il sito si apre SOLO dove la mappa serve davvero — stessa tecnica già in produzione per
# /app, con `! Content-Security-Policy` che stacca l'header ereditato da /* (due CSP si sommano
# in AND: senza staccarla vincerebbe la più severa e la mappa resterebbe nera).
#
# `Permissions-Policy: geolocation=()` sulla regola generale spegne la geolocalizzazione su
# TUTTO il sito: senza l'override qui sotto l'app del fattorino non otterrebbe mai una posizione.
# È il motivo per cui /fattorino/* ha un blocco tutto suo.
/ordine/*
  ! Content-Security-Policy
  Content-Security-Policy: default-src 'self'; script-src 'self' 'wasm-unsafe-eval' https://cdn.apple-mapkit.com https://*.apple-mapkit.com; script-src-attr 'none'; object-src 'none'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; img-src 'self' data: blob: https:; connect-src 'self' wss: https://*.apple-mapkit.com https://*.ls.apple.com blob:; worker-src 'self' https://*.apple-mapkit.com blob:; frame-src https://*.apple-mapkit.com; frame-ancestors 'none'; base-uri 'self'; form-action 'self'

# App del fattorino: come sopra, PIÙ la geolocalizzazione (è tutto il suo mestiere).
# Fotocamera concessa per la prova di consegna; microfono e pagamenti restano chiusi.
/fattorino/*
  ! Content-Security-Policy
  Content-Security-Policy: default-src 'self'; script-src 'self' 'wasm-unsafe-eval' https://cdn.apple-mapkit.com https://*.apple-mapkit.com; script-src-attr 'none'; object-src 'none'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; img-src 'self' data: blob: https:; connect-src 'self' wss: https://*.apple-mapkit.com https://*.ls.apple.com blob:; worker-src 'self' https://*.apple-mapkit.com blob:; frame-src https://*.apple-mapkit.com; frame-ancestors 'none'; base-uri 'self'; form-action 'self'

# Permissions-Policy in un BLOCCO A PARTE, e non insieme alla CSP qui sopra: verificato in
# produzione che Pages onora UN SOLO `!` per blocco di regola — con due `!` il primo (la CSP)
# passava e il secondo veniva ignorato, lasciando `geolocation=()` ereditato da /*. Risultato:
# la CSP giusta ma il GPS spento, cioè l'app del fattorino che non funziona senza dire perché.
# Una regola, un header da staccare.
/fattorino/*
  ! Permissions-Policy
  Permissions-Policy: geolocation=(self), microphone=(), camera=(self), payment=()

# Console consegne dello staff: mappa sì, geolocalizzazione no (chi smista sta al banco).
/consegne
  ! Content-Security-Policy
  Content-Security-Policy: default-src 'self'; script-src 'self' 'wasm-unsafe-eval' https://cdn.apple-mapkit.com https://*.apple-mapkit.com; script-src-attr 'none'; object-src 'none'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; img-src 'self' data: blob: https:; connect-src 'self' wss: https://*.apple-mapkit.com https://*.ls.apple.com blob:; worker-src 'self' https://*.apple-mapkit.com blob:; frame-src https://*.apple-mapkit.com; frame-ancestors 'none'; base-uri 'self'; form-action 'self'
