X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcharging-station%2Fui-server%2FAbstractUIServer.ts;h=a55d0070abb8fb6b4322203f608a8ea2d1a120cf;hb=0afed85fd7e6cb8f4b5ea0d18800a8d7b3bd78a7;hp=b8e7c46cdf879b1e5d28d65c653085e90c40cf89;hpb=852a4c5f07886502e278d44fda06efdfa8c711d8;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ui-server/AbstractUIServer.ts b/src/charging-station/ui-server/AbstractUIServer.ts index b8e7c46c..a55d0070 100644 --- a/src/charging-station/ui-server/AbstractUIServer.ts +++ b/src/charging-station/ui-server/AbstractUIServer.ts @@ -1,9 +1,9 @@ -import { Server as HttpServer } from 'http'; +import type { IncomingMessage, Server } from 'http'; -import WebSocket from 'ws'; - -import { ChargingStationData } from '../../types/ChargingStationWorker'; +import type { ChargingStationData } from '../../types/ChargingStationWorker'; +import type { UIServerConfiguration } from '../../types/ConfigurationData'; import { + AuthenticationType, ProcedureName, ProtocolRequest, ProtocolResponse, @@ -15,10 +15,10 @@ import type AbstractUIService from './ui-services/AbstractUIService'; export abstract class AbstractUIServer { public readonly chargingStations: Map; + protected httpServer: Server; protected readonly uiServices: Map; - protected server: WebSocket.Server | HttpServer; - public constructor() { + public constructor(protected readonly uiServerConfiguration: UIServerConfiguration) { this.chargingStations = new Map(); this.uiServices = new Map(); } @@ -27,17 +27,41 @@ export abstract class AbstractUIServer { id: string, procedureName: ProcedureName, requestPayload: RequestPayload - ): string { - return JSON.stringify([id, procedureName, requestPayload] as ProtocolRequest); + ): ProtocolRequest { + return [id, procedureName, requestPayload]; + } + + public buildProtocolResponse(id: string, responsePayload: ResponsePayload): ProtocolResponse { + return [id, responsePayload]; + } + + protected isBasicAuthEnabled(): boolean { + return ( + this.uiServerConfiguration.authentication?.enabled === true && + this.uiServerConfiguration.authentication?.type === AuthenticationType.BASIC_AUTH + ); } - public buildProtocolResponse(id: string, responsePayload: ResponsePayload): string { - return JSON.stringify([id, responsePayload] as ProtocolResponse); + protected isValidBasicAuth(req: IncomingMessage): boolean { + const authorizationHeader = req.headers.authorization ?? ''; + const authorizationToken = authorizationHeader.split(/\s+/).pop() ?? ''; + const authentication = Buffer.from(authorizationToken, 'base64').toString(); + const authenticationParts = authentication.split(/:/); + const username = authenticationParts.shift(); + const password = authenticationParts.join(':'); + return ( + this.uiServerConfiguration.authentication?.username === username && + this.uiServerConfiguration.authentication?.password === password + ); } public abstract start(): void; public abstract stop(): void; - public abstract sendRequest(request: string): void; - public abstract sendResponse(response: string): void; - public abstract logPrefix(modName?: string, methodName?: string): string; + public abstract sendRequest(request: ProtocolRequest): void; + public abstract sendResponse(response: ProtocolResponse): void; + public abstract logPrefix( + moduleName?: string, + methodName?: string, + prefixSuffix?: string + ): string; }