From 389fb333345b4331bc4ae29cc1cd369a7187210d Mon Sep 17 00:00:00 2001 From: Ruben Verborgh Date: Fri, 4 Sep 2020 22:56:57 +0200 Subject: [PATCH] refactor: Simplify MethodPermissionsExtractor --- .../permissions/MethodPermissionsExtractor.ts | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/src/ldp/permissions/MethodPermissionsExtractor.ts b/src/ldp/permissions/MethodPermissionsExtractor.ts index eed892531..8a1954e98 100644 --- a/src/ldp/permissions/MethodPermissionsExtractor.ts +++ b/src/ldp/permissions/MethodPermissionsExtractor.ts @@ -3,30 +3,24 @@ import { Operation } from '../operations/Operation'; import { PermissionSet } from './PermissionSet'; import { PermissionsExtractor } from './PermissionsExtractor'; +const READ_METHODS = new Set([ 'GET', 'HEAD' ]); +const WRITE_METHODS = new Set([ 'POST', 'PUT', 'DELETE' ]); +const SUPPORTED_METHODS = new Set([ ...READ_METHODS, ...WRITE_METHODS ]); + /** * Generates permissions for the base set of methods that always require the same permissions. * Specifically: GET, HEAD, POST, PUT and DELETE. */ export class MethodPermissionsExtractor extends PermissionsExtractor { - public async canHandle(input: Operation): Promise { - if (!/^(?:HEAD|GET|POST|PUT|DELETE)$/u.test(input.method)) { - throw new UnsupportedHttpError(`Unsupported method: ${input.method}`); + public async canHandle({ method }: Operation): Promise { + if (!SUPPORTED_METHODS.has(method)) { + throw new UnsupportedHttpError(`Cannot determine permissions of ${method}`); } } - public async handle(input: Operation): Promise { - const requiredPermissions = { - read: /^(?:HEAD|GET)$/u.test(input.method), - append: false, - write: /^(?:POST|PUT|DELETE)$/u.test(input.method), - }; - - const read = /^(?:HEAD|GET)$/u.test(input.method); - const write = /^(?:POST|PUT|DELETE)$/u.test(input.method); - - // Since `append` is a specific type of write, it is true if `write` is true. - const append = requiredPermissions.write; - - return { read, append, write }; + public async handle({ method }: Operation): Promise { + const read = READ_METHODS.has(method); + const write = WRITE_METHODS.has(method); + return { read, write, append: write }; } }