diff --git a/lib/aprsme_web/plugs/content_security_policy.ex b/lib/aprsme_web/plugs/content_security_policy.ex deleted file mode 100644 index a15f634..0000000 --- a/lib/aprsme_web/plugs/content_security_policy.ex +++ /dev/null @@ -1,38 +0,0 @@ -defmodule AprsmeWeb.Plugs.ContentSecurityPolicy do - @moduledoc """ - Sets Content Security Policy headers with Sentry integration support. - """ - import Plug.Conn - - def init(opts), do: opts - - def call(conn, _opts) do - put_resp_header(conn, "content-security-policy", csp_policy()) - end - - defp csp_policy do - Enum.join( - [ - "default-src 'self'", - "script-src 'self' 'unsafe-inline' 'unsafe-eval' https://js.sentry-cdn.com https://unpkg.com https://cdn.jsdelivr.net", - "style-src 'self' 'unsafe-inline' https://unpkg.com", - "img-src 'self' data: https: blob:", - "font-src 'self' data:", - "connect-src 'self' wss://#{host()} https://*.ingest.sentry.io https://*.sentry.io https://nominatim.openstreetmap.org https://tile.openstreetmap.org https://*.tile.openstreetmap.org", - "media-src 'self'", - "object-src 'none'", - "frame-ancestors 'none'", - "base-uri 'self'", - "form-action 'self'", - "frame-src 'self'", - "manifest-src 'self'", - "worker-src 'self' blob:" - ], - "; " - ) - end - - defp host do - Application.get_env(:aprsme, AprsmeWeb.Endpoint)[:url][:host] || "localhost" - end -end diff --git a/lib/aprsme_web/router.ex b/lib/aprsme_web/router.ex index 4502076..6f10b33 100644 --- a/lib/aprsme_web/router.ex +++ b/lib/aprsme_web/router.ex @@ -14,8 +14,9 @@ defmodule AprsmeWeb.Router do plug :fetch_live_flash plug :put_root_layout, {AprsmeWeb.Layouts, :root} plug :protect_from_forgery - plug :put_secure_browser_headers - plug AprsmeWeb.Plugs.ContentSecurityPolicy + plug :put_secure_browser_headers, %{ + "content-security-policy" => "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://js.sentry-cdn.com https://unpkg.com https://cdn.jsdelivr.net https://cdnjs.cloudflare.com; style-src 'self' 'unsafe-inline' https://unpkg.com; img-src 'self' data: https: blob:; font-src 'self' data:; connect-src 'self' wss: https://*.ingest.sentry.io https://*.sentry.io https://nominatim.openstreetmap.org https://tile.openstreetmap.org https://*.tile.openstreetmap.org; media-src 'self'; object-src 'none'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'; frame-src 'self'; manifest-src 'self'; worker-src 'self' blob:" + } plug :fetch_current_user plug AprsmeWeb.Plugs.SetLocale plug IPGeolocation