96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import helmet from 'helmet';
 | |
| 
 | |
| import { homeLocation } from '../../../config/env';
 | |
| 
 | |
| let trusted = [
 | |
|   "'self'",
 | |
|   'https://search.freecodecamp.org',
 | |
|   homeLocation,
 | |
|   'https://' + process.env.AUTH0_DOMAIN
 | |
| ];
 | |
| 
 | |
| const host = process.env.HOST || 'localhost';
 | |
| const port = process.env.SYNC_PORT || '3000';
 | |
| 
 | |
| if (process.env.NODE_ENV !== 'production') {
 | |
|   trusted = trusted.concat([`ws://${host}:${port}`, 'http://localhost:8000']);
 | |
| }
 | |
| 
 | |
| export default function csp() {
 | |
|   return helmet.contentSecurityPolicy({
 | |
|     directives: {
 | |
|       defaultSrc: trusted.concat([
 | |
|         'https://*.cloudflare.com',
 | |
|         '*.cloudflare.com'
 | |
|       ]),
 | |
|       connectSrc: trusted.concat([
 | |
|         'https://glitch.com',
 | |
|         'https://*.glitch.com',
 | |
|         'https://*.glitch.me',
 | |
|         'https://*.cloudflare.com',
 | |
|         'https://*.algolia.net'
 | |
|       ]),
 | |
|       scriptSrc: [
 | |
|         "'unsafe-eval'",
 | |
|         "'unsafe-inline'",
 | |
|         '*.google-analytics.com',
 | |
|         '*.gstatic.com',
 | |
|         'https://*.cloudflare.com',
 | |
|         '*.cloudflare.com',
 | |
|         'https://*.gitter.im',
 | |
|         'https://*.cdnjs.com',
 | |
|         '*.cdnjs.com',
 | |
|         'https://*.jsdelivr.com',
 | |
|         '*.jsdelivr.com',
 | |
|         '*.twimg.com',
 | |
|         'https://*.twimg.com',
 | |
|         '*.youtube.com',
 | |
|         '*.ytimg.com'
 | |
|       ].concat(trusted),
 | |
|       styleSrc: [
 | |
|         "'unsafe-inline'",
 | |
|         '*.gstatic.com',
 | |
|         '*.googleapis.com',
 | |
|         '*.bootstrapcdn.com',
 | |
|         'https://*.bootstrapcdn.com',
 | |
|         '*.cloudflare.com',
 | |
|         'https://*.cloudflare.com',
 | |
|         'https://use.fontawesome.com'
 | |
|       ].concat(trusted),
 | |
|       fontSrc: [
 | |
|         '*.cloudflare.com',
 | |
|         'https://*.cloudflare.com',
 | |
|         '*.bootstrapcdn.com',
 | |
|         '*.googleapis.com',
 | |
|         '*.gstatic.com',
 | |
|         'https://*.bootstrapcdn.com',
 | |
|         'https://use.fontawesome.com'
 | |
|       ].concat(trusted),
 | |
|       imgSrc: [
 | |
|         // allow all input since we have user submitted images for
 | |
|         // public profile
 | |
|         '*',
 | |
|         'data:'
 | |
|       ],
 | |
|       mediaSrc: ['*.bitly.com', '*.amazonaws.com', '*.twitter.com'].concat(
 | |
|         trusted
 | |
|       ),
 | |
|       frameSrc: [
 | |
|         '*.gitter.im',
 | |
|         '*.gitter.im https:',
 | |
|         '*.youtube.com',
 | |
|         '*.twitter.com',
 | |
|         '*.ghbtns.com',
 | |
|         '*.freecatphotoapp.com',
 | |
|         'freecodecamp.github.io'
 | |
|       ].concat(trusted)
 | |
|     },
 | |
|     // set to true if you only want to report errors
 | |
|     reportOnly: false,
 | |
|     // set to true if you want to set all headers
 | |
|     setAllHeaders: false,
 | |
|     // set to true if you want to force buggy CSP in Safari 5
 | |
|     safari5: false
 | |
|   });
 | |
| }
 |