@@ -6,8 +6,14 @@ 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 ? ""
@@ -16,14 +22,27 @@ export function generateCSP(isDev = false) {
1622 "default-src" : [ SELF ] ,
1723 "frame-src" : [ SELF ] ,
1824 "script-src" : isDev
19- ? [ SELF , UNSAFE_EVAL , process . env . VITE_FATHOM_URL ]
20- : [ SELF , WASM_UNSAFE_EVAL , process . env . VITE_FATHOM_URL ] ,
25+ ? [ SELF , UNSAFE_EVAL , FATHOM_HOST ] . filter ( Boolean )
26+ : [ SELF , WASM_UNSAFE_EVAL , FATHOM_HOST ] . filter ( Boolean ) ,
2127 "style-src" : [ SELF , UNSAFE_INLINE ] ,
2228 "connect-src" : [ SELF , "127.0.0.1" , "127.0.0.1:*" , "ws://localhost:5173/" ] ,
23- "img-src" : [ SELF , process . env . VITE_FATHOM_URL ] ,
29+ "img-src" : [ SELF , FATHOM_HOST ] . filter ( Boolean ) ,
2430 "object-src" : [ NONE ] ,
2531 } ,
2632 } ) ;
2733}
2834
29- 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