| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- import { expect, vi } from 'vitest'
- import sinon from 'sinon'
- import HttpPermissionsPolicyMiddleware from '../../../../app/src/infrastructure/HttpPermissionsPolicy.mjs'
- import MockRequest from '../helpers/MockRequest.mjs'
- import MockResponse from '../helpers/MockResponse.mjs'
- const modulePath =
- '../../../../app/src/infrastructure/HttpPermissionsPolicy.mjs'
- describe('HttpPermissionsPolicy', function () {
- beforeEach(async function (ctx) {
- ctx.next = sinon.stub()
- ctx.HttpPermissionsPolicy = (await import(modulePath)).default
- ctx.path = '/foo/bar'
- ctx.req = new MockRequest(vi)
- ctx.res = new MockResponse(vi)
- })
- 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
- )
- 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
- )
- 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
- )
- 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' },
- }
- 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: '' },
- }
- 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
- )
- 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
- )
- expect(httpPermissionsMiddleware.policy).to.equal('usb=()')
- })
- })
- })
|