@@ -41,6 +41,8 @@ import {
4141 getPersisedSettingsFromFile ,
4242 updateAltairSettingsOnFile ,
4343} from '../settings/main/store' ;
44+ import { cspAsString } from '../utils/csp' ;
45+ import { SENTRY_CSP_REPORT_URI } from '../constants' ;
4446
4547export class WindowManager {
4648 private instance ?: BrowserWindow ;
@@ -306,19 +308,37 @@ export class WindowManager {
306308 `'sha256-1Sj1x3xsk3UVwnakQHbO0yQ3Xm904avQIfGThrdrjcc='` ,
307309 `'${ createSha256CspHash ( renderInitSnippet ( this . getRenderOptions ( ) ) ) } '` ,
308310 `https://cdn.jsdelivr.net` ,
309- `https://apis.google.com` ,
310311 `localhost:*` ,
311312 `file:` ,
312313 ] ;
313314
315+ const additionalHeaders = {
316+ // TODO: Figure out why an error from this breaks devtools
317+ 'Content-Security-Policy' : [
318+ cspAsString ( {
319+ 'script-src' : scriptSrc ,
320+ 'object-src' : [ "'self'" ] ,
321+ 'report-uri' : [ SENTRY_CSP_REPORT_URI ] ,
322+ 'report-to' : [ 'csp-endpoint' ] ,
323+ } ) ,
324+ ] ,
325+ 'Report-To' : JSON . stringify ( {
326+ group : 'csp-endpoint' ,
327+ max_age : 10886400 , // 3 months
328+ endpoints : [
329+ {
330+ url : SENTRY_CSP_REPORT_URI ,
331+ } ,
332+ ] ,
333+ include_subdomains : true ,
334+ } ) ,
335+ 'Reporting-Endpoints' : `csp-endpoint="${ SENTRY_CSP_REPORT_URI } "` ,
336+ } ;
337+
314338 return callback ( {
315339 responseHeaders : {
316- ...details . responseHeaders , // Setting CSP
317- // TODO: Figure out why an error from this breaks devtools
318- 'Content-Security-Policy' : [
319- `script-src ${ scriptSrc . join ( ' ' ) } ; object-src 'self';` ,
320- // `script-src 'self' 'sha256-1Sj1x3xsk3UVwnakQHbO0yQ3Xm904avQIfGThrdrjcc=' '${createSha256CspHash(renderInitSnippet())}' https://cdn.jsdelivr.net localhost:*; object-src 'self';`
321- ] ,
340+ ...details . responseHeaders ,
341+ ...additionalHeaders , // Additional headers
322342 } ,
323343 } ) ;
324344 }
0 commit comments