a55d0070abb8fb6b4322203f608a8ea2d1a120cf
1 import type { IncomingMessage
, Server
} from
'http';
3 import type { ChargingStationData
} from
'../../types/ChargingStationWorker';
4 import type { UIServerConfiguration
} from
'../../types/ConfigurationData';
13 } from
'../../types/UIProtocol';
14 import type AbstractUIService from
'./ui-services/AbstractUIService';
16 export abstract class AbstractUIServer
{
17 public readonly chargingStations
: Map
<string, ChargingStationData
>;
18 protected httpServer
: Server
;
19 protected readonly uiServices
: Map
<ProtocolVersion
, AbstractUIService
>;
21 public constructor(protected readonly uiServerConfiguration
: UIServerConfiguration
) {
22 this.chargingStations
= new Map
<string, ChargingStationData
>();
23 this.uiServices
= new Map
<ProtocolVersion
, AbstractUIService
>();
26 public buildProtocolRequest(
28 procedureName
: ProcedureName
,
29 requestPayload
: RequestPayload
31 return [id
, procedureName
, requestPayload
];
34 public buildProtocolResponse(id
: string, responsePayload
: ResponsePayload
): ProtocolResponse
{
35 return [id
, responsePayload
];
38 protected isBasicAuthEnabled(): boolean {
40 this.uiServerConfiguration
.authentication
?.enabled
=== true &&
41 this.uiServerConfiguration
.authentication
?.type === AuthenticationType
.BASIC_AUTH
45 protected isValidBasicAuth(req
: IncomingMessage
): boolean {
46 const authorizationHeader
= req
.headers
.authorization
?? '';
47 const authorizationToken
= authorizationHeader
.split(/\s
+/).pop() ?? '';
48 const authentication
= Buffer
.from(authorizationToken
, 'base64').toString();
49 const authenticationParts
= authentication
.split(/:/);
50 const username
= authenticationParts
.shift();
51 const password
= authenticationParts
.join(':');
53 this.uiServerConfiguration
.authentication
?.username
=== username
&&
54 this.uiServerConfiguration
.authentication
?.password
=== password
58 public abstract start(): void;
59 public abstract stop(): void;
60 public abstract sendRequest(request
: ProtocolRequest
): void;
61 public abstract sendResponse(response
: ProtocolResponse
): void;
62 public abstract logPrefix(