From db22a867d30a4512d53439349851a169ce1a76ff Mon Sep 17 00:00:00 2001 From: Cameron Welter Date: Sun, 7 Nov 2021 11:06:47 -0500 Subject: [PATCH 1/3] test: add basic tests for buildPermissionsPolicyHeaders --- __tests__/buildPermissionsPolicyHeaders.js | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 __tests__/buildPermissionsPolicyHeaders.js diff --git a/__tests__/buildPermissionsPolicyHeaders.js b/__tests__/buildPermissionsPolicyHeaders.js new file mode 100644 index 0000000..f2567b4 --- /dev/null +++ b/__tests__/buildPermissionsPolicyHeaders.js @@ -0,0 +1,47 @@ +const buildPermissionsPolicyHeaders = require('../lib/buildPermissionsPolicyHeaders') + +describe('buildPermissionsPolicyHeaders', () => { + + test('with defaults', () => { + const result = buildPermissionsPolicyHeaders() + + expect(result).toEqual( + [ + { + key: 'Feature-Policy', + value: "clipboard-read 'none';clipboard-write 'none';gamepad 'none';speaker-selection 'none';accelerometer 'none';ambient-light-sensor 'none';autoplay 'none';battery 'none';camera 'none';cross-origin-isolated 'none';display-capture 'none';document-domain 'none';encrypted-media 'none';execution-while-not-rendered 'none';execution-while-out-of-viewport 'none';fullscreen 'none';geolocation 'none';gyroscope 'none';magnetometer 'none';microphone 'none';midi 'none';navigation-override 'none';payment 'none';picture-in-picture 'none';publickey-credentials-get 'none';screen-wake-lock 'none';sync-xhr 'none';usb 'none';web-share 'none';xr-spatial-tracking 'none';" + }, + { + key: 'Permissions-Policy', + value: 'clipboard-read=(),clipboard-write=(),gamepad=(),speaker-selection=(),accelerometer=(),ambient-light-sensor=(),autoplay=(),battery=(),camera=(),cross-origin-isolated=(),display-capture=(),document-domain=(),encrypted-media=(),execution-while-not-rendered=(),execution-while-out-of-viewport=(),fullscreen=(),geolocation=(),gyroscope=(),magnetometer=(),microphone=(),midi=(),navigation-override=(),payment=(),picture-in-picture=(),publickey-credentials-get=(),screen-wake-lock=(),sync-xhr=(),usb=(),web-share=(),xr-spatial-tracking=()' + } + ] + ) + }) + + test('with custom config', () => { + const result = buildPermissionsPolicyHeaders({ + permissionsPolicy: { + battery: 'https://trezy.dev', + gyroscope: '*' + }, + permissionsPolicyDirectiveSupport: ["proposed", "standard", "experimental"], + }) + + console.log(result) + + expect(result).toEqual( + [ + { + key: 'Feature-Policy', + value: "clipboard-read 'none';clipboard-write 'none';gamepad 'none';speaker-selection 'none';accelerometer 'none';ambient-light-sensor 'none';autoplay 'none';battery https://trezy.dev;camera 'none';cross-origin-isolated 'none';display-capture 'none';document-domain 'none';encrypted-media 'none';execution-while-not-rendered 'none';execution-while-out-of-viewport 'none';fullscreen 'none';geolocation 'none';gyroscope *;magnetometer 'none';microphone 'none';midi 'none';navigation-override 'none';payment 'none';picture-in-picture 'none';publickey-credentials-get 'none';screen-wake-lock 'none';sync-xhr 'none';usb 'none';web-share 'none';xr-spatial-tracking 'none';conversion-measurement 'none';focus-without-user-activation 'none';hid 'none';idle-detection 'none';serial 'none';sync-script 'none';trust-token-redemption 'none';vertical-scroll 'none';" + }, + { + key: 'Permissions-Policy', + value: 'clipboard-read=(),clipboard-write=(),gamepad=(),speaker-selection=(),accelerometer=(),ambient-light-sensor=(),autoplay=(),battery=(https://trezy.dev),camera=(),cross-origin-isolated=(),display-capture=(),document-domain=(),encrypted-media=(),execution-while-not-rendered=(),execution-while-out-of-viewport=(),fullscreen=(),geolocation=(),gyroscope=(*),magnetometer=(),microphone=(),midi=(),navigation-override=(),payment=(),picture-in-picture=(),publickey-credentials-get=(),screen-wake-lock=(),sync-xhr=(),usb=(),web-share=(),xr-spatial-tracking=(),conversion-measurement=(),focus-without-user-activation=(),hid=(),idle-detection=(),serial=(),sync-script=(),trust-token-redemption=(),vertical-scroll=()' + } + ] + ) + }) + +}) From 026c6e26ffe585bc66ddf7cb6e92cfc2bade1702 Mon Sep 17 00:00:00 2001 From: Cameron Welter Date: Sun, 7 Nov 2021 11:07:53 -0500 Subject: [PATCH 2/3] fix(buildPermissionsPolicyHeaders): set initial reducer value so we pass curnch fns an actual object --- lib/buildPermissionsPolicyHeaders.js | 36 ++++++++++++++++------------ 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/buildPermissionsPolicyHeaders.js b/lib/buildPermissionsPolicyHeaders.js index e87b348..8cca9fc 100644 --- a/lib/buildPermissionsPolicyHeaders.js +++ b/lib/buildPermissionsPolicyHeaders.js @@ -4,14 +4,17 @@ const crunchPermissionsPolicyHeader = require('./crunchPermissionsPolicyHeader.j const directives = require('./PermissionsPolicy/index.js') -function reduceDirectives (policy, defaultValue) { - return (accumulator, directive) => { - if (policy[directive] !== false) { - accumulator[directive] = policy[directive] || defaultValue - } - - return accumulator - } +function reduceDirectives (supportedDirectives, permissionsPolicy, defaultValue) { + return supportedDirectives.reduce( + (accumulator, directive) => { + if (permissionsPolicy[directive] !== false) { + accumulator[directive] = permissionsPolicy[directive] || defaultValue + } + + return accumulator + }, + {} + ) } @@ -25,19 +28,22 @@ module.exports = function buildPermissionsPolicyHeaders(options = {}) { return [] } - const supportedDirectives = Array.from(new Set(permissionsPolicyDirectiveSupport - .map(directiveSet => directives[directiveSet]) - .flat())) - + const supportedDirectives = Array.from( + new Set( + permissionsPolicyDirectiveSupport.map( + directiveSet => directives[directiveSet] + ).flat() + ) + ) + return [ { key: 'Feature-Policy', - value: crunchFeaturePolicyHeader(supportedDirectives.reduce(reduceDirectives(permissionsPolicy, "'none'"))), + value: crunchFeaturePolicyHeader(reduceDirectives(supportedDirectives, permissionsPolicy, "'none'")) }, - { key: 'Permissions-Policy', - value: crunchPermissionsPolicyHeader(supportedDirectives.reduce(reduceDirectives(permissionsPolicy, ''))), + value: crunchPermissionsPolicyHeader(reduceDirectives(supportedDirectives, permissionsPolicy, '')), }, ] } From aeb8bbb509f8a4d667980978d182fb9f1306cda4 Mon Sep 17 00:00:00 2001 From: Cameron Welter Date: Sun, 7 Nov 2021 11:09:10 -0500 Subject: [PATCH 3/3] test: remove console log --- __tests__/buildPermissionsPolicyHeaders.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/__tests__/buildPermissionsPolicyHeaders.js b/__tests__/buildPermissionsPolicyHeaders.js index f2567b4..4f221dc 100644 --- a/__tests__/buildPermissionsPolicyHeaders.js +++ b/__tests__/buildPermissionsPolicyHeaders.js @@ -28,8 +28,6 @@ describe('buildPermissionsPolicyHeaders', () => { permissionsPolicyDirectiveSupport: ["proposed", "standard", "experimental"], }) - console.log(result) - expect(result).toEqual( [ {