feat: Add acl link header writer

This writer will add a link to the corresponding acl file
for all LDP requests.
This commit is contained in:
Joachim Van Herwegen
2021-01-26 10:32:43 +01:00
parent 153d2d9fe4
commit 2c3300028e
8 changed files with 92 additions and 15 deletions

View File

@@ -23,6 +23,7 @@ export * from './init/RootContainerInitializer';
export * from './init/ServerInitializer';
// 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';

View File

@@ -0,0 +1,25 @@
import type { AclManager } from '../../../authorization/AclManager';
import type { HttpResponse } from '../../../server/HttpResponse';
import { addHeader } from '../../../util/HeaderUtil';
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 aclManager: AclManager;
private readonly rel: string;
public constructor(aclManager: AclManager, rel = 'acl') {
super();
this.aclManager = aclManager;
this.rel = rel;
}
public async handle(input: { response: HttpResponse; metadata: RepresentationMetadata }): Promise<void> {
const identifier = await this.aclManager.getAclDocument({ path: input.metadata.identifier.value });
addHeader(input.response, 'Link', `<${identifier.path}>; rel="${this.rel}"`);
}
}