From 8ccc68d29c7b56b35023470aae89f8be61072149 Mon Sep 17 00:00:00 2001 From: Joachim Van Herwegen Date: Tue, 2 Feb 2021 17:30:26 +0100 Subject: [PATCH] feat: Add acl link headers based on headers instead of hardcoding --- config/presets/ldp/response-writer.json | 10 +++---- src/index.ts | 1 - .../http/metadata/AclLinkMetadataWriter.ts | 25 ----------------- .../metadata/AclLinkMetadataWriter.test.ts | 28 ------------------- 4 files changed, 4 insertions(+), 60 deletions(-) delete mode 100644 src/ldp/http/metadata/AclLinkMetadataWriter.ts delete mode 100644 test/unit/ldp/http/metadata/AclLinkMetadataWriter.test.ts diff --git a/config/presets/ldp/response-writer.json b/config/presets/ldp/response-writer.json index f4465d64d..12cbc4d2c 100644 --- a/config/presets/ldp/response-writer.json +++ b/config/presets/ldp/response-writer.json @@ -37,14 +37,12 @@ { "LinkRelMetadataWriter:_linkRelMap_key": "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", "LinkRelMetadataWriter:_linkRelMap_value": "type" + }, + { + "LinkRelMetadataWriter:_linkRelMap_key": "http://www.w3.org/ns/auth/acl#accessControl", + "LinkRelMetadataWriter:_linkRelMap_value": "acl" } ] - }, - { - "@type": "AclLinkMetadataWriter", - "AclLinkMetadataWriter:_aclStrategy": { - "@id": "urn:solid-server:default:AclIdentifierStrategy" - } } ] }, diff --git a/src/index.ts b/src/index.ts index 9e417bff8..d68b27134 100644 --- a/src/index.ts +++ b/src/index.ts @@ -34,7 +34,6 @@ export * from './ldp/auxiliary/SuffixAuxiliaryIdentifierStrategy'; export * from './ldp/auxiliary/Validator'; // LDP/HTTP/Metadata -export * from './ldp/http/metadata/AclLinkMetadataWriter'; export * from './ldp/http/metadata/BasicMetadataExtractor'; export * from './ldp/http/metadata/ConstantMetadataWriter'; export * from './ldp/http/metadata/ContentTypeParser'; diff --git a/src/ldp/http/metadata/AclLinkMetadataWriter.ts b/src/ldp/http/metadata/AclLinkMetadataWriter.ts deleted file mode 100644 index 80562411a..000000000 --- a/src/ldp/http/metadata/AclLinkMetadataWriter.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { HttpResponse } from '../../../server/HttpResponse'; -import { addHeader } from '../../../util/HeaderUtil'; -import type { AuxiliaryIdentifierStrategy } from '../../auxiliary/AuxiliaryIdentifierStrategy'; -import type { RepresentationMetadata } from '../../representation/RepresentationMetadata'; -import { MetadataWriter } from './MetadataWriter'; - -/** - * A MetadataWriter that always adds a rel="acl" link header to a response. - * The `rel` parameter can be used if a different `rel` value is needed (such as http://www.w3.org/ns/solid/terms#acl). - */ -export class AclLinkMetadataWriter extends MetadataWriter { - private readonly aclStrategy: AuxiliaryIdentifierStrategy; - private readonly rel: string; - - public constructor(aclStrategy: AuxiliaryIdentifierStrategy, rel = 'acl') { - super(); - this.aclStrategy = aclStrategy; - this.rel = rel; - } - - public async handle(input: { response: HttpResponse; metadata: RepresentationMetadata }): Promise { - const identifier = this.aclStrategy.getAuxiliaryIdentifier({ path: input.metadata.identifier.value }); - addHeader(input.response, 'Link', `<${identifier.path}>; rel="${this.rel}"`); - } -} diff --git a/test/unit/ldp/http/metadata/AclLinkMetadataWriter.test.ts b/test/unit/ldp/http/metadata/AclLinkMetadataWriter.test.ts deleted file mode 100644 index 64b49ec9a..000000000 --- a/test/unit/ldp/http/metadata/AclLinkMetadataWriter.test.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { createResponse } from 'node-mocks-http'; -import type { AuxiliaryIdentifierStrategy } from '../../../../../src/ldp/auxiliary/AuxiliaryIdentifierStrategy'; -import { AclLinkMetadataWriter } from '../../../../../src/ldp/http/metadata/AclLinkMetadataWriter'; -import { RepresentationMetadata } from '../../../../../src/ldp/representation/RepresentationMetadata'; -import type { ResourceIdentifier } from '../../../../../src/ldp/representation/ResourceIdentifier'; - -describe('An AclLinkMetadataWriter', (): void => { - const strategy = { - getAuxiliaryIdentifier: (id: ResourceIdentifier): ResourceIdentifier => ({ path: `${id.path}.acl` }), - } as AuxiliaryIdentifierStrategy; - const identifier = { path: 'http://test.com/foo' }; - - it('adds the acl link header.', async(): Promise => { - const writer = new AclLinkMetadataWriter(strategy); - const response = createResponse(); - const metadata = new RepresentationMetadata(identifier); - await expect(writer.handle({ response, metadata })).resolves.toBeUndefined(); - expect(response.getHeaders()).toEqual({ link: `<${identifier.path}.acl>; rel="acl"` }); - }); - - it('can use a custom rel attribute.', async(): Promise => { - const writer = new AclLinkMetadataWriter(strategy, 'http://www.w3.org/ns/solid/terms#acl'); - const response = createResponse(); - const metadata = new RepresentationMetadata(identifier); - await expect(writer.handle({ response, metadata })).resolves.toBeUndefined(); - expect(response.getHeaders()).toEqual({ link: `<${identifier.path}.acl>; rel="http://www.w3.org/ns/solid/terms#acl"` }); - }); -});