| 
									
										
										
										
											2015-08-04 01:25:34 -07:00
										 |  |  | import helmet from 'helmet'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-05 10:17:34 +01:00
										 |  |  | import { homeLocation } from '../../../config/env'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-22 19:33:25 -08:00
										 |  |  | let trusted = [ | 
					
						
							| 
									
										
										
										
											2019-02-18 19:32:49 +00:00
										 |  |  |   "'self'", | 
					
						
							| 
									
										
										
										
											2018-03-07 15:04:42 +00:00
										 |  |  |   'https://search.freecodecamp.org', | 
					
						
							| 
									
										
										
										
											2018-10-05 10:17:34 +01:00
										 |  |  |   homeLocation, | 
					
						
							| 
									
										
										
										
											2018-06-28 15:02:22 +05:30
										 |  |  |   'https://' + process.env.AUTH0_DOMAIN | 
					
						
							| 
									
										
										
										
											2015-08-04 01:25:34 -07:00
										 |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-22 13:04:21 +00:00
										 |  |  | const host = process.env.HOST || 'localhost'; | 
					
						
							| 
									
										
										
										
											2017-04-21 03:51:55 -07:00
										 |  |  | const port = process.env.SYNC_PORT || '3000'; | 
					
						
							| 
									
										
										
										
											2017-02-22 13:04:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 01:19:40 +05:30
										 |  |  | if (process.env.FREECODECAMP_NODE_ENV !== 'production') { | 
					
						
							| 
									
										
										
										
											2018-10-05 10:17:34 +01:00
										 |  |  |   trusted = trusted.concat([`ws://${host}:${port}`, 'http://localhost:8000']); | 
					
						
							| 
									
										
										
										
											2015-12-22 19:33:25 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 01:25:34 -07:00
										 |  |  | export default function csp() { | 
					
						
							| 
									
										
										
										
											2016-05-03 11:32:28 -07:00
										 |  |  |   return helmet.contentSecurityPolicy({ | 
					
						
							| 
									
										
										
										
											2016-01-12 21:45:15 -08:00
										 |  |  |     directives: { | 
					
						
							| 
									
										
										
										
											2016-07-28 20:01:17 -07:00
										 |  |  |       defaultSrc: trusted.concat([ | 
					
						
							|  |  |  |         'https://*.cloudflare.com', | 
					
						
							| 
									
										
										
										
											2018-06-28 21:01:29 +05:30
										 |  |  |         '*.cloudflare.com' | 
					
						
							| 
									
										
										
										
											2016-07-28 20:01:17 -07:00
										 |  |  |       ]), | 
					
						
							| 
									
										
										
										
											2017-01-26 21:07:22 -08:00
										 |  |  |       connectSrc: trusted.concat([ | 
					
						
							| 
									
										
										
										
											2017-03-23 22:26:45 -04:00
										 |  |  |         'https://glitch.com', | 
					
						
							|  |  |  |         'https://*.glitch.com', | 
					
						
							|  |  |  |         'https://*.glitch.me', | 
					
						
							| 
									
										
										
										
											2018-08-15 15:02:41 +05:30
										 |  |  |         'https://*.cloudflare.com', | 
					
						
							|  |  |  |         'https://*.algolia.net' | 
					
						
							| 
									
										
										
										
											2017-01-26 21:07:22 -08:00
										 |  |  |       ]), | 
					
						
							| 
									
										
										
										
											2016-01-12 21:45:15 -08:00
										 |  |  |       scriptSrc: [ | 
					
						
							| 
									
										
										
										
											2019-02-18 19:32:49 +00:00
										 |  |  |         "'unsafe-eval'", | 
					
						
							|  |  |  |         "'unsafe-inline'", | 
					
						
							| 
									
										
										
										
											2016-01-12 21:45:15 -08:00
										 |  |  |         '*.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', | 
					
						
							| 
									
										
										
										
											2016-05-04 10:30:47 -07:00
										 |  |  |         '*.youtube.com', | 
					
						
							| 
									
										
										
										
											2018-06-28 21:01:29 +05:30
										 |  |  |         '*.ytimg.com' | 
					
						
							| 
									
										
										
										
											2016-01-12 21:45:15 -08:00
										 |  |  |       ].concat(trusted), | 
					
						
							|  |  |  |       styleSrc: [ | 
					
						
							| 
									
										
										
										
											2019-02-18 19:32:49 +00:00
										 |  |  |         "'unsafe-inline'", | 
					
						
							| 
									
										
										
										
											2016-01-12 21:45:15 -08:00
										 |  |  |         '*.gstatic.com', | 
					
						
							|  |  |  |         '*.googleapis.com', | 
					
						
							|  |  |  |         '*.bootstrapcdn.com', | 
					
						
							|  |  |  |         'https://*.bootstrapcdn.com', | 
					
						
							|  |  |  |         '*.cloudflare.com', | 
					
						
							| 
									
										
										
										
											2016-10-25 23:59:25 +07:00
										 |  |  |         'https://*.cloudflare.com', | 
					
						
							| 
									
										
										
										
											2018-07-31 16:25:03 +01:00
										 |  |  |         'https://use.fontawesome.com' | 
					
						
							| 
									
										
										
										
											2016-01-12 21:45:15 -08:00
										 |  |  |       ].concat(trusted), | 
					
						
							|  |  |  |       fontSrc: [ | 
					
						
							|  |  |  |         '*.cloudflare.com', | 
					
						
							|  |  |  |         'https://*.cloudflare.com', | 
					
						
							|  |  |  |         '*.bootstrapcdn.com', | 
					
						
							|  |  |  |         '*.googleapis.com', | 
					
						
							|  |  |  |         '*.gstatic.com', | 
					
						
							| 
									
										
										
										
											2018-08-15 15:02:41 +05:30
										 |  |  |         'https://*.bootstrapcdn.com', | 
					
						
							|  |  |  |         'https://use.fontawesome.com' | 
					
						
							| 
									
										
										
										
											2016-01-12 21:45:15 -08:00
										 |  |  |       ].concat(trusted), | 
					
						
							|  |  |  |       imgSrc: [ | 
					
						
							|  |  |  |         // allow all input since we have user submitted images for
 | 
					
						
							|  |  |  |         // public profile
 | 
					
						
							|  |  |  |         '*', | 
					
						
							|  |  |  |         'data:' | 
					
						
							|  |  |  |       ], | 
					
						
							| 
									
										
										
										
											2018-10-05 10:17:34 +01:00
										 |  |  |       mediaSrc: ['*.bitly.com', '*.amazonaws.com', '*.twitter.com'].concat( | 
					
						
							|  |  |  |         trusted | 
					
						
							|  |  |  |       ), | 
					
						
							| 
									
										
										
										
											2016-01-12 21:45:15 -08:00
										 |  |  |       frameSrc: [ | 
					
						
							|  |  |  |         '*.gitter.im', | 
					
						
							|  |  |  |         '*.gitter.im https:', | 
					
						
							| 
									
										
										
										
											2016-04-19 00:23:27 -07:00
										 |  |  |         '*.youtube.com', | 
					
						
							| 
									
										
										
										
											2016-01-12 21:45:15 -08:00
										 |  |  |         '*.twitter.com', | 
					
						
							|  |  |  |         '*.ghbtns.com', | 
					
						
							| 
									
										
										
										
											2016-02-09 23:22:42 -05:00
										 |  |  |         '*.freecatphotoapp.com', | 
					
						
							| 
									
										
										
										
											2016-02-13 21:26:59 -05:00
										 |  |  |         'freecodecamp.github.io' | 
					
						
							| 
									
										
										
										
											2016-01-12 21:45:15 -08:00
										 |  |  |       ].concat(trusted) | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2015-08-04 01:25:34 -07:00
										 |  |  |     // 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 | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } |