From 90f7c3655e20988e73838c6f5299bd3d0e4237a8 Mon Sep 17 00:00:00 2001 From: Will Anderson Date: Mon, 11 May 2026 11:40:05 -0500 Subject: [PATCH] add unsafe-eval to CSP for El runtime native_js() compatibility El's native_js() compiles to eval(). checkout-auth.el uses native_js() to embed the auth logic, so all window globals (showSignIn, initStripe, etc.) live inside an eval call. Stage CSP was blocking it, leaving the page with no auth functions defined. --- src/main.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main.el b/src/main.el index 56a37d0..eadcd47 100644 --- a/src/main.el +++ b/src/main.el @@ -2169,7 +2169,7 @@ fn sec_headers_json() -> String { + "\"X-Frame-Options\":\"SAMEORIGIN\"," + "\"Referrer-Policy\":\"strict-origin-when-cross-origin\"," + "\"Permissions-Policy\":\"geolocation=(), microphone=(), camera=()\"," - + "\"Content-Security-Policy\":\"default-src 'self'; script-src 'self' 'unsafe-inline' https://challenges.cloudflare.com https://cdn.jsdelivr.net https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' 'unsafe-inline'; frame-src https://challenges.cloudflare.com; connect-src 'self' https://api.stripe.com https://*.supabase.co; img-src 'self' data: https:; font-src 'self' data:\"}" + + "\"Content-Security-Policy\":\"default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://challenges.cloudflare.com https://cdn.jsdelivr.net https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' 'unsafe-inline'; frame-src https://challenges.cloudflare.com; connect-src 'self' https://api.stripe.com https://*.supabase.co; img-src 'self' data: https:; font-src 'self' data:\"}" } // Headers for compiled JS assets. Explicitly sets Content-Type so the browser @@ -2185,7 +2185,7 @@ fn js_headers_json() -> String { + "\"X-Frame-Options\":\"SAMEORIGIN\"," + "\"Referrer-Policy\":\"strict-origin-when-cross-origin\"," + "\"Permissions-Policy\":\"geolocation=(), microphone=(), camera=()\"," - + "\"Content-Security-Policy\":\"default-src 'self'; script-src 'self' 'unsafe-inline' https://challenges.cloudflare.com https://cdn.jsdelivr.net https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' 'unsafe-inline'; frame-src https://challenges.cloudflare.com; connect-src 'self' https://api.stripe.com https://*.supabase.co; img-src 'self' data: https:; font-src 'self' data:\"}" + + "\"Content-Security-Policy\":\"default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://challenges.cloudflare.com https://cdn.jsdelivr.net https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' 'unsafe-inline'; frame-src https://challenges.cloudflare.com; connect-src 'self' https://api.stripe.com https://*.supabase.co; img-src 'self' data: https:; font-src 'self' data:\"}" } // Headers for static assets under /assets/ and /brand/. @@ -2201,7 +2201,7 @@ fn static_asset_headers_json() -> String { + "\"X-Frame-Options\":\"SAMEORIGIN\"," + "\"Referrer-Policy\":\"strict-origin-when-cross-origin\"," + "\"Permissions-Policy\":\"geolocation=(), microphone=(), camera=()\"," - + "\"Content-Security-Policy\":\"default-src 'self'; script-src 'self' 'unsafe-inline' https://challenges.cloudflare.com https://cdn.jsdelivr.net https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' 'unsafe-inline'; frame-src https://challenges.cloudflare.com; connect-src 'self' https://api.stripe.com https://*.supabase.co; img-src 'self' data: https:; font-src 'self' data:\"}" + + "\"Content-Security-Policy\":\"default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://challenges.cloudflare.com https://cdn.jsdelivr.net https://www.googletagmanager.com https://www.google-analytics.com; style-src 'self' 'unsafe-inline'; frame-src https://challenges.cloudflare.com; connect-src 'self' https://api.stripe.com https://*.supabase.co; img-src 'self' data: https:; font-src 'self' data:\"}" } fn handle_request(method: String, path: String, headers: Map, body: String) -> String {