@@ -11,6 +11,7 @@ var isDbg = require('../libs/debug').isDbg;
11
11
var async = require ( 'async' ) ;
12
12
var _ = require ( 'underscore' ) ;
13
13
var url = require ( 'url' ) ;
14
+ var crypto = require ( 'crypto' ) ;
14
15
15
16
//--- Model inclusions
16
17
var Discussion = require ( '../models/discussion' ) . Discussion ;
@@ -261,6 +262,11 @@ exports.register = function (aReq, aRes) {
261
262
//
262
263
263
264
Strategy . find ( { } , function ( aErr , aAvailableStrategies ) {
265
+ var SECRET = process . env . HCAPTCHA_SECRET_KEY ;
266
+ var SITEKEY = process . env . HCAPTCHA_SITE_KEY ;
267
+ var defaultCSP = ' \'self\'' ;
268
+ var captchaCSP = ( SECRET ? ' hcaptcha.com *.hcaptcha.com' : '' ) ;
269
+
264
270
if ( aErr || ! aAvailableStrategies ) {
265
271
statusCodePage ( aReq , aRes , aNext , {
266
272
statusCode : 503 ,
@@ -277,6 +283,11 @@ exports.register = function (aReq, aRes) {
277
283
} ) ;
278
284
} ) ;
279
285
286
+ options . hasCaptcha = ( SECRET ? true : false ) ;
287
+
288
+ options . nonce = crypto . randomBytes ( 512 ) . toString ( 'hex' ) ;
289
+ defaultCSP += ' \'nonce-' + options . nonce + '\'' ;
290
+
280
291
// Insert an empty default strategy at the beginning
281
292
// NOTE: Safari always autoselects an option when disabled
282
293
options . strategies . unshift ( { 'strat' : '' , 'display' : '(default preferred authentication)' } ) ;
@@ -286,10 +297,21 @@ exports.register = function (aReq, aRes) {
286
297
return aStrategy . display ;
287
298
} ) ;
288
299
300
+
289
301
aRes . header ( 'Cache-Control' , 'no-cache, no-store, must-revalidate' ) ;
290
302
aRes . header ( 'Pragma' , 'no-cache' ) ;
291
303
aRes . header ( 'Expires' , '0' ) ;
292
304
305
+ //
306
+ aRes . header ( 'Content-Security-Policy' ,
307
+ 'default-src' + defaultCSP +
308
+ '; connect-src' + defaultCSP + captchaCSP +
309
+ '; frame-src' + defaultCSP + captchaCSP +
310
+ '; style-src' + defaultCSP + captchaCSP +
311
+ '; script-src' + defaultCSP + captchaCSP +
312
+ ''
313
+ ) ;
314
+
293
315
aRes . render ( 'pages/loginPage' , options ) ;
294
316
}
295
317
} ) ;
0 commit comments