mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
feat: Add better support for non-native errors
This commit is contained in:
@@ -6,7 +6,7 @@ import type { HttpHandlerInput } from '../server/HttpHandler';
|
||||
import { HttpHandler } from '../server/HttpHandler';
|
||||
import type { HttpRequest } from '../server/HttpRequest';
|
||||
import type { HttpResponse } from '../server/HttpResponse';
|
||||
import { assertNativeError } from '../util/errors/ErrorUtil';
|
||||
import { assertError } from '../util/errors/ErrorUtil';
|
||||
import type { ErrorHandler } from './http/ErrorHandler';
|
||||
import type { RequestParser } from './http/RequestParser';
|
||||
import type { ResponseDescription } from './http/response/ResponseDescription';
|
||||
@@ -103,7 +103,7 @@ export class AuthenticatedLdpHandler extends HttpHandler {
|
||||
try {
|
||||
writeData = { response: input.response, result: await this.runHandlers(input.request) };
|
||||
} catch (error: unknown) {
|
||||
assertNativeError(error);
|
||||
assertError(error);
|
||||
// We don't know the preferences yet at this point
|
||||
const preferences: RepresentationPreferences = { type: { 'text/plain': 1 }};
|
||||
const result = await this.errorHandler.handleSafe({ error, preferences });
|
||||
@@ -129,7 +129,7 @@ export class AuthenticatedLdpHandler extends HttpHandler {
|
||||
try {
|
||||
return await this.handleOperation(request, operation);
|
||||
} catch (error: unknown) {
|
||||
assertNativeError(error);
|
||||
assertError(error);
|
||||
return await this.errorHandler.handleSafe({ error, preferences: operation.preferences });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { getLoggerFor } from '../../logging/LogUtil';
|
||||
import type { HttpResponse } from '../../server/HttpResponse';
|
||||
import { INTERNAL_QUADS } from '../../util/ContentTypes';
|
||||
import { isNativeError } from '../../util/errors/ErrorUtil';
|
||||
import { isInternalContentType } from '../../storage/conversion/ConversionUtil';
|
||||
import { NotImplementedHttpError } from '../../util/errors/NotImplementedHttpError';
|
||||
import { pipeSafely } from '../../util/StreamUtil';
|
||||
import type { MetadataWriter } from './metadata/MetadataWriter';
|
||||
@@ -20,9 +19,10 @@ export class BasicResponseWriter extends ResponseWriter {
|
||||
this.metadataWriter = metadataWriter;
|
||||
}
|
||||
|
||||
public async canHandle(input: { response: HttpResponse; result: ResponseDescription | Error }): Promise<void> {
|
||||
if (isNativeError(input.result) || input.result.metadata?.contentType === INTERNAL_QUADS) {
|
||||
throw new NotImplementedHttpError('Only successful binary responses are supported');
|
||||
public async canHandle(input: { response: HttpResponse; result: ResponseDescription }): Promise<void> {
|
||||
const contentType = input.result.metadata?.contentType;
|
||||
if (isInternalContentType(contentType)) {
|
||||
throw new NotImplementedHttpError(`Cannot serialize the internal content type ${contentType}`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import { translate } from 'sparqlalgebrajs';
|
||||
import { getLoggerFor } from '../../logging/LogUtil';
|
||||
import { APPLICATION_SPARQL_UPDATE } from '../../util/ContentTypes';
|
||||
import { BadRequestHttpError } from '../../util/errors/BadRequestHttpError';
|
||||
import { isNativeError } from '../../util/errors/ErrorUtil';
|
||||
import { createErrorMessage } from '../../util/errors/ErrorUtil';
|
||||
import { UnsupportedMediaTypeHttpError } from '../../util/errors/UnsupportedMediaTypeHttpError';
|
||||
import { guardedStreamFrom, readableToString } from '../../util/StreamUtil';
|
||||
import type { BodyParserArgs } from './BodyParser';
|
||||
@@ -29,10 +29,7 @@ export class SparqlUpdateBodyParser extends BodyParser {
|
||||
algebra = translate(sparql, { quads: true, baseIRI: metadata.identifier.value });
|
||||
} catch (error: unknown) {
|
||||
this.logger.warn('Could not translate SPARQL query to SPARQL algebra', { error });
|
||||
if (isNativeError(error)) {
|
||||
throw new BadRequestHttpError(error.message);
|
||||
}
|
||||
throw new BadRequestHttpError();
|
||||
throw new BadRequestHttpError(createErrorMessage(error));
|
||||
}
|
||||
|
||||
// Prevent body from being requested again
|
||||
|
||||
Reference in New Issue
Block a user