| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- const { expect } = require('chai')
- const sinon = require('sinon')
- const modulePath = '../../../../app/src/infrastructure/HttpPermissionsPolicy.js'
- const SandboxedModule = require('sandboxed-module')
- const HttpPermissionsPolicyMiddleware = require('../../../../app/src/infrastructure/HttpPermissionsPolicy')
- const MockRequest = require('../helpers/MockRequest')
- const MockResponse = require('../helpers/MockResponse')
- describe('HttpPermissionsPolicy', function () {
- this.beforeEach(function () {
- this.next = sinon.stub()
- this.HttpPermissionsPolicy = SandboxedModule.require(modulePath, {})
- this.path = '/foo/bar'
- this.req = new MockRequest()
- return (this.res = new MockResponse())
- })
- describe('when a single blocked policy element is provided', function () {
- it('returns a valid header string', function () {
- const policy = {
- blocked: ['accelerometer'],
- }
- const httpPermissionsMiddleware = new HttpPermissionsPolicyMiddleware(
- policy
- )
- return expect(httpPermissionsMiddleware.policy).to.equal(
- 'accelerometer=()'
- )
- })
- })
- describe('when a single allowed policy element is provided', function () {
- it('returns a valid header string', function () {
- const policy = {
- allowed: { camera: 'self' },
- }
- const httpPermissionsMiddleware = new HttpPermissionsPolicyMiddleware(
- policy
- )
- return expect(httpPermissionsMiddleware.policy).to.equal('camera=(self)')
- })
- })
- describe('when a full policy is provided', function () {
- it('returns a valid header string', function () {
- const policy = {
- blocked: ['usb', 'hid'],
- allowed: { camera: 'self https://example.com', fullscreen: 'self' },
- }
- const httpPermissionsMiddleware = new HttpPermissionsPolicyMiddleware(
- policy
- )
- return expect(httpPermissionsMiddleware.policy).to.equal(
- 'usb=(), hid=(), camera=(self https://example.com), fullscreen=(self)'
- )
- })
- })
- describe('when a conflicting policy is provided', function () {
- it('returns an error', function () {
- const policy = {
- blocked: ['usb'],
- allowed: { usb: 'self' },
- }
- return expect(() => new HttpPermissionsPolicyMiddleware(policy)).to.throw(
- 'Invalid Permissions-Policy header configuration'
- )
- })
- })
- describe('when the allowlist contains an incomplete directive', function () {
- it('returns an error', function () {
- const policy = {
- blocked: ['usb'],
- allowed: { camera: '' },
- }
- return expect(() => new HttpPermissionsPolicyMiddleware(policy)).to.throw(
- 'Invalid Permissions-Policy header configuration'
- )
- })
- })
- describe('when an empty denylist is provided', function () {
- it('returns a valid header string ', function () {
- const policy = {
- allowed: { camera: 'self' },
- blocked: [],
- }
- const httpPermissionsMiddleware = new HttpPermissionsPolicyMiddleware(
- policy
- )
- return expect(httpPermissionsMiddleware.policy).to.equal('camera=(self)')
- })
- })
- describe('when an empty allowlist is provided', function () {
- it('returns a valid header string ', function () {
- const policy = {
- allowed: {},
- blocked: ['usb'],
- }
- const httpPermissionsMiddleware = new HttpPermissionsPolicyMiddleware(
- policy
- )
- return expect(httpPermissionsMiddleware.policy).to.equal('usb=()')
- })
- })
- })
|