X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Fui-server%2FUIHttpServer.ts;h=5bcae7beff6ed84fc6d0e202437361bc7f1c3725;hb=9388120364d5a2f3b9103f05802e1756d2dad04f;hp=27e8d7ba9051654d777f904b7e5ff16c884b0a47;hpb=a66bbcfe85550dc01a2e32bd17a52f5980a78193;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ui-server/UIHttpServer.ts b/src/charging-station/ui-server/UIHttpServer.ts index 27e8d7ba..5bcae7be 100644 --- a/src/charging-station/ui-server/UIHttpServer.ts +++ b/src/charging-station/ui-server/UIHttpServer.ts @@ -2,11 +2,10 @@ import type { IncomingMessage, ServerResponse } from 'node:http' import { StatusCodes } from 'http-status-codes' -import { AbstractUIServer } from './AbstractUIServer.js' -import { UIServerUtils } from './UIServerUtils.js' import { BaseError } from '../../exception/index.js' import { ApplicationProtocolVersion, + MapStringifyFormat, type ProcedureName, type Protocol, type ProtocolRequest, @@ -18,12 +17,14 @@ import { } from '../../types/index.js' import { Constants, - JSONStringifyWithMapSupport, generateUUID, isNotEmptyString, - logPrefix, - logger + JSONStringify, + logger, + logPrefix } from '../../utils/index.js' +import { AbstractUIServer } from './AbstractUIServer.js' +import { isProtocolAndVersionSupported } from './UIServerUtils.js' const moduleName = 'UIHttpServer' @@ -61,7 +62,7 @@ export class UIHttpServer extends AbstractUIServer { .writeHead(this.responseStatusToStatusCode(payload.status), { 'Content-Type': 'application/json' }) - .end(JSONStringifyWithMapSupport(payload)) + .end(JSONStringify(payload, undefined, MapStringifyFormat.object)) } else { logger.error( `${this.logPrefix(moduleName, 'sendResponse')} Response for unknown request id: ${uuid}` @@ -95,7 +96,7 @@ export class UIHttpServer extends AbstractUIServer { 'WWW-Authenticate': 'Basic realm=users' }) .end(`${StatusCodes.UNAUTHORIZED} Unauthorized`) - .destroy() + res.destroy() req.destroy() } }) @@ -109,7 +110,7 @@ export class UIHttpServer extends AbstractUIServer { this.responseHandlers.set(uuid, res) try { const fullProtocol = `${protocol}${version}` - if (!UIServerUtils.isProtocolAndVersionSupported(fullProtocol)) { + if (!isProtocolAndVersionSupported(fullProtocol)) { throw new BaseError(`Unsupported UI protocol version: '${fullProtocol}'`) } this.registerProtocolVersionUIService(version) @@ -126,10 +127,22 @@ export class UIHttpServer extends AbstractUIServer { bodyBuffer.push(chunk) }) .on('end', () => { - const body = JSON.parse(Buffer.concat(bodyBuffer).toString()) as RequestPayload + let requestPayload: RequestPayload | undefined + try { + requestPayload = JSON.parse(Buffer.concat(bodyBuffer).toString()) as RequestPayload + } catch (error) { + this.sendResponse( + this.buildProtocolResponse(uuid, { + status: ResponseStatus.FAILURE, + errorMessage: (error as Error).message, + errorStack: (error as Error).stack + }) + ) + return + } this.uiServices .get(version) - ?.requestHandler(this.buildProtocolRequest(uuid, procedureName, body)) + ?.requestHandler(this.buildProtocolRequest(uuid, procedureName, requestPayload)) .then((protocolResponse?: ProtocolResponse) => { if (protocolResponse != null) { this.sendResponse(protocolResponse)