mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
feat: Support LDN inbox headers
* chore: add inbox mapping to metadatawriter config * fix: correct inbox link rel * feat: make LinkTypeParser reuseable to fit all link headers * feat: minor code optimization * feat: cleaned up metadata parser config * feat: further cleanup of metadata parser config * feat: adapted LinkMetadataParser to take a list to be in line with LinkRelMetadataWriter implementation * feat: minor changes to be in line with other classes and code improvements Co-authored-by: Wouter Termont <woutermont@gmail.com>
This commit is contained in:
@@ -97,7 +97,7 @@ export * from './ldp/http/conditions/ConditionsParser';
|
||||
export * from './ldp/http/metadata/ConstantMetadataWriter';
|
||||
export * from './ldp/http/metadata/ContentTypeParser';
|
||||
export * from './ldp/http/metadata/LinkRelMetadataWriter';
|
||||
export * from './ldp/http/metadata/LinkTypeParser';
|
||||
export * from './ldp/http/metadata/LinkRelParser';
|
||||
export * from './ldp/http/metadata/MappedMetadataWriter';
|
||||
export * from './ldp/http/metadata/MetadataParser';
|
||||
export * from './ldp/http/metadata/MetadataWriter';
|
||||
|
||||
@@ -1,17 +1,27 @@
|
||||
import type { NamedNode } from '@rdfjs/types';
|
||||
import { DataFactory } from 'n3';
|
||||
import { getLoggerFor } from '../../../logging/LogUtil';
|
||||
import type { HttpRequest } from '../../../server/HttpRequest';
|
||||
import { parseParameters, splitAndClean, transformQuotedStrings } from '../../../util/HeaderUtil';
|
||||
import { RDF } from '../../../util/Vocabularies';
|
||||
import type { RepresentationMetadata } from '../../representation/RepresentationMetadata';
|
||||
import { MetadataParser } from './MetadataParser';
|
||||
import namedNode = DataFactory.namedNode;
|
||||
|
||||
/**
|
||||
* Parses Link headers with "rel=type" parameters and adds them as RDF.type metadata.
|
||||
* Parses Link headers with a specific `rel` value and adds them as metadata with the given predicate.
|
||||
*/
|
||||
export class LinkTypeParser extends MetadataParser {
|
||||
export class LinkRelParser extends MetadataParser {
|
||||
protected readonly logger = getLoggerFor(this);
|
||||
|
||||
private readonly linkRelMap: Record<string, NamedNode>;
|
||||
|
||||
public constructor(linkRelMap: Record<string, string>) {
|
||||
super();
|
||||
this.linkRelMap = Object.fromEntries(
|
||||
Object.entries(linkRelMap).map(([ header, uri ]): [string, NamedNode] => [ header, namedNode(uri) ]),
|
||||
);
|
||||
}
|
||||
|
||||
public async handle(input: { request: HttpRequest; metadata: RepresentationMetadata }): Promise<void> {
|
||||
const link = input.request.headers.link ?? [];
|
||||
const entries: string[] = Array.isArray(link) ? link : [ link ];
|
||||
@@ -29,8 +39,8 @@ export class LinkTypeParser extends MetadataParser {
|
||||
continue;
|
||||
}
|
||||
for (const { name, value } of parseParameters(parameters, replacements)) {
|
||||
if (name === 'rel' && value === 'type') {
|
||||
metadata.add(RDF.type, DataFactory.namedNode(link.slice(1, -1)));
|
||||
if (name === 'rel' && this.linkRelMap[value]) {
|
||||
metadata.add(this.linkRelMap[value], namedNode(link.slice(1, -1)));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user