# config/initializers/content_security_policy.rb
#
# Content Security Policy (CSP) — defesa em profundidade contra XSS,
# clickjacking e injeção de recursos externos.
#
# ✅ MODO ENFORCING (bloqueia de verdade)
# A política abaixo BLOQUEIA recursos fora da allowlist. Foi validada no
# ambiente de teste (o login não gera violações de CSP no console) e a allowlist
# cobre todos os CDNs usados pelo app: mapa (Leaflet + tiles ArcGIS/OSM),
# gráficos (Chart.js), date-picker (Flatpickr), Tailwind e Google Fonts.
#
# ⚠️ APÓS PUBLICAR, VALIDE LOGADO: abra /operacoes (painel com mapa/gráficos),
# o dashboard e as telas de motorista, com o console (F12) aberto. Se algum
# recurso for "Refused to load", adicione o host ao diretivo correspondente
# abaixo. Para reverter rapidamente sem remover a política, volte a última linha
# para `= true` (modo report-only, que só avisa e não bloqueia).
#
Rails.application.configure do
  config.content_security_policy do |p|
    p.default_src     :self
    p.base_uri        :self
    p.object_src      :none
    p.frame_ancestors :self          # anti-clickjacking (reforça X-Frame-Options)
    p.form_action     :self

    # Scripts do app (self/inline) + CDNs usados:
    #   cdn.tailwindcss.com → Tailwind (Play CDN, precisa de eval p/ o JIT)
    #   cdn.jsdelivr.net    → Chart.js, Flatpickr
    #   unpkg.com           → Leaflet, Leaflet.heat
    p.script_src :self, :unsafe_inline, :unsafe_eval,
                 "https://cdn.tailwindcss.com",
                 "https://cdn.jsdelivr.net",
                 "https://unpkg.com"

    # Estilos inline (Tailwind/estilos embutidos) + Google Fonts + CSS dos CDNs
    p.style_src :self, :unsafe_inline,
                "https://fonts.googleapis.com",
                "https://cdn.jsdelivr.net",
                "https://unpkg.com"

    p.font_src :self, :data, "https://fonts.gstatic.com"

    # Imagens: data/blob (QR base64, canvas dos gráficos), ícones do Leaflet,
    # tiles do mapa (ArcGIS World Imagery + OpenStreetMap) e as FOTOS DA FACHADA
    # do popup do mapa de operações — hospedadas no S3 do SimpliRoute
    # (ex.: simpli-visit-images.s3.amazonaws.com). Sem o host da Amazon o CSP
    # enforcing bloqueava a foto ("Refused to load the image ... img-src").
    p.img_src :self, :data, :blob,
              "https://unpkg.com",
              "https://cdn.jsdelivr.net",
              "https://server.arcgisonline.com",
              "https://*.tile.openstreetmap.org",
              "https://*.amazonaws.com"

    p.connect_src :self
  end

  # Bloqueio ativo. Para reverter para "apenas reportar" (sem bloquear), volte
  # para `= true` — veja as instruções no topo deste arquivo.
  config.content_security_policy_report_only = false
end
