@@ -13,7 +13,7 @@ import { PassThrough } from 'stream';
13
13
14
14
import { initServerServices } from './services/init.server' ;
15
15
import { captureUnexpectedRemixError } from './services/monitoring' ;
16
- import { checkEnv , getServerEnv } from './utils/environment' ;
16
+ import { checkEnv , getClientEnvVars , getServerEnv } from './utils/environment' ;
17
17
import { NonceProvider } from './utils/nonce' ;
18
18
19
19
const ABORT_DELAY = 70000 ;
@@ -120,16 +120,29 @@ function handleBrowserRequest(
120
120
121
121
responseHeaders . set ( 'Content-Type' , 'text/html' ) ;
122
122
123
+ const clientEnv = getClientEnvVars ( ) ;
124
+ const firebaseUrl = clientEnv . FIREBASE_CONFIG . withEmulator
125
+ ? clientEnv . FIREBASE_CONFIG . authEmulatorUrl
126
+ : 'https://identitytoolkit.googleapis.com' ;
127
+
128
+ const externalDomains = [ 'cdn.segment.com' , 'api.segment.io' , '*.sentry.io' ] ;
129
+
123
130
const cspOrigins = [
131
+ [ 'base-uri' , "'none'" ] ,
124
132
[ 'default-src' , "'self'" ] ,
125
133
[ 'frame-ancestors' , "'none'" ] ,
126
134
[ 'object-src' , "'none'" ] ,
127
- [ 'style-src' , "'self' 'unsafe-inline'" ] ,
128
- [ 'script-src' , `'self' 'nonce-${ nonce } ' 'unsafe-eval' https://cdn.segment.com` ] ,
129
- [ 'connect-src' , "'self' localhost:9099" ] ,
130
- [ 'frame-src' , `https://subdomain.metabaseapp.com` ] ,
135
+ [ 'style-src' , "'self' 'unsafe-inline'" ] , // unsafe-inline seems to trigger a lot of errors, even though it did not seem to break the UI.
136
+ [ 'script-src' , `'nonce-${ nonce } ' 'unsafe-eval' 'strict-dynamic'` ] , // unsafe-eval seems to be required by lottie.js for home page animations.
137
+ [
138
+ 'connect-src' ,
139
+ `'self' ${ clientEnv . MARBLE_API_URL } ${ firebaseUrl } ${ externalDomains . map ( ( d ) => `https://${ d } ` ) . join ( ' ' ) } ` ,
140
+ ] ,
141
+ [ 'img-src' , "'self' data:" ] ,
131
142
] ;
132
143
144
+ if ( clientEnv . METABASE_URL ) cspOrigins . push ( [ 'frame-src' , clientEnv . METABASE_URL ] ) ;
145
+
133
146
responseHeaders . set (
134
147
'content-security-policy' ,
135
148
cspOrigins . flatMap ( ( rule ) => rule . join ( ' ' ) ) . join ( '; ' ) ,
0 commit comments