CommunitySolidServer/test/configs/AuthenticatedFileResourceStoreConfig.ts
2020-09-17 11:55:49 +02:00

66 lines
1.7 KiB
TypeScript

import type { HttpHandler,
ResourceStore } from '../../index';
import {
AuthenticatedLdpHandler,
BasicResponseWriter,
CompositeAsyncHandler,
MethodPermissionsExtractor,
RdfToQuadConverter,
UnsecureWebIdExtractor,
QuadToRdfConverter,
} from '../../index';
import type { ServerConfig } from './ServerConfig';
import {
getFileResourceStore,
getConvertingStore,
getBasicRequestParser,
getOperationHandler,
getWebAclAuthorizer,
} from './Util';
/**
* AuthenticatedFileResourceStoreConfig works with
* - a WebAclAuthorizer
* - a FileResourceStore wrapped in a converting store (rdf to quad & quad to rdf)
* - GET, POST, PUT & DELETE operation handlers
*/
export class AuthenticatedFileResourceStoreConfig implements ServerConfig {
public base: string;
public store: ResourceStore;
public constructor(base: string, rootFilepath: string) {
this.base = base;
this.store = getConvertingStore(
getFileResourceStore(base, rootFilepath),
[ new QuadToRdfConverter(),
new RdfToQuadConverter() ],
);
}
public getHttpHandler(): HttpHandler {
const requestParser = getBasicRequestParser();
const credentialsExtractor = new UnsecureWebIdExtractor();
const permissionsExtractor = new CompositeAsyncHandler([
new MethodPermissionsExtractor(),
]);
const operationHandler = getOperationHandler(this.store);
const responseWriter = new BasicResponseWriter();
const authorizer = getWebAclAuthorizer(this.store, this.base);
const handler = new AuthenticatedLdpHandler({
requestParser,
credentialsExtractor,
permissionsExtractor,
authorizer,
operationHandler,
responseWriter,
});
return handler;
}
}