The used functionality of helmet, cors & referrer-policy has been defined in setupCors and setupHeaders.
		
			
				
	
	
		
			37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const camelToKebabCase = str => str.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`);
 | 
						|
 | 
						|
const mapFeaturePolicyToString = (features) => {
 | 
						|
  return Object.entries(features).map(([key, value]) => {
 | 
						|
    key = camelToKebabCase(key)
 | 
						|
    value = value == "*" ? value : `'${ value }'`
 | 
						|
    return `${key} ${value}`
 | 
						|
  }).join("; ")
 | 
						|
}
 | 
						|
 | 
						|
const setupHeaders = (req, res, next) => {
 | 
						|
  res.set("Access-Control-Allow-Headers", "Content-Type")
 | 
						|
 | 
						|
  // Security
 | 
						|
  res.set("X-Content-Type-Options", "nosniff");
 | 
						|
  res.set("X-XSS-Protection", "1; mode=block");
 | 
						|
  res.set("X-Frame-Options", "SAMEORIGIN");
 | 
						|
  res.set("X-DNS-Prefetch-Control", "off");
 | 
						|
  res.set("X-Download-Options", "noopen");
 | 
						|
  res.set("Strict-Transport-Security", "max-age=15552000; includeSubDomains")
 | 
						|
 | 
						|
  // Feature policy
 | 
						|
  const features = {
 | 
						|
    fullscreen: "*",
 | 
						|
    payment: "none",
 | 
						|
    microphone: "none",
 | 
						|
    camera: "self",
 | 
						|
    speaker: "*",
 | 
						|
    syncXhr: "self"
 | 
						|
  }
 | 
						|
  const featureString = mapFeaturePolicyToString(features);
 | 
						|
  res.set("Feature-Policy", featureString)
 | 
						|
 | 
						|
  return next();
 | 
						|
}
 | 
						|
 | 
						|
module.exports = setupHeaders; |