@@ -6,22 +6,43 @@ import {
66 WASM_UNSAFE_EVAL ,
77 UNSAFE_EVAL ,
88} from "csp-header" ;
9+ import { env , argv } from "node:process" ;
10+ import { readFile , writeFile } from "node:fs/promises" ;
911
1012export function generateCSP ( isDev = false ) {
13+ const FATHOM_HOST = env . VITE_FATHOM_URL
14+ ? new URL ( env . VITE_FATHOM_URL ) . host
15+ : undefined ;
16+
1117 return getCSP ( {
1218 reportUri : isDev
1319 ? ""
1420 : "https://o4506303762464768.ingest.sentry.io/api/4506303812272128/security/?sentry_key=57614e75ac5f8c480aed3a2dd1528f13" ,
1521 directives : {
1622 "default-src" : [ SELF ] ,
1723 "frame-src" : [ SELF ] ,
18- "script-src" : isDev ? [ SELF , UNSAFE_EVAL ] : [ SELF , WASM_UNSAFE_EVAL ] ,
19- "style-src" : isDev ? [ SELF , UNSAFE_INLINE ] : [ SELF ] ,
24+ "script-src" : isDev
25+ ? [ SELF , UNSAFE_EVAL , FATHOM_HOST ] . filter ( Boolean )
26+ : [ SELF , WASM_UNSAFE_EVAL , FATHOM_HOST ] . filter ( Boolean ) ,
27+ "style-src" : [ SELF , UNSAFE_INLINE ] ,
2028 "connect-src" : [ SELF , "127.0.0.1" , "127.0.0.1:*" , "ws://localhost:5173/" ] ,
21- "img-src" : [ SELF ] ,
29+ "img-src" : [ SELF , FATHOM_HOST ] . filter ( Boolean ) ,
2230 "object-src" : [ NONE ] ,
2331 } ,
2432 } ) ;
2533}
2634
27- console . log ( generateCSP ( ) ) ;
35+ if ( argv . includes ( "-i" ) ) {
36+ readFile ( "./netlify.toml" , "utf-8" ) . then ( ( toml ) =>
37+ writeFile (
38+ "./netlify.toml" ,
39+ toml . replace (
40+ / C o n t e n t - S e c u r i t y - P o l i c y - R e p o r t - O n l y = [ ^ \n ] + / ,
41+ `Content-Security-Policy-Report-Only="${ generateCSP ( ) } "` ,
42+ ) ,
43+ "utf-8" ,
44+ ) . then ( ( ) => console . log ( "Updated CSP headers in netlify.toml" ) ) ,
45+ ) ;
46+ } else {
47+ console . log ( generateCSP ( ) ) ;
48+ }
0 commit comments