X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Fui-server%2FAbstractUIServer.ts;h=d8ef6340296b5b2ddefa4dbd471529e197a72f40;hb=07561812b72072b6d9f20997be86a42ee88e15a2;hp=f6e2010f8edf923fad117ea3ec8fb5c088f46944;hpb=daa6505e2b79f2413b52a60774d78278a11b70b7;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 f6e2010f..d8ef6340 100644 --- a/src/charging-station/ui-server/AbstractUIServer.ts +++ b/src/charging-station/ui-server/AbstractUIServer.ts @@ -1,5 +1,4 @@ -import { type IncomingMessage, Server } from 'http'; -import type { Socket } from 'net'; +import { type IncomingMessage, Server, type ServerResponse } from 'http'; import type { WebSocket } from 'ws'; @@ -19,14 +18,14 @@ import UIServiceFactory from './ui-services/UIServiceFactory'; export abstract class AbstractUIServer { public readonly chargingStations: Map; - protected httpServer: Server; - protected sockets: Set; + protected readonly httpServer: Server; + protected readonly responseHandlers: Map; protected readonly uiServices: Map; public constructor(protected readonly uiServerConfiguration: UIServerConfiguration) { this.chargingStations = new Map(); this.httpServer = new Server(); - this.sockets = new Set(); + this.responseHandlers = new Map(); this.uiServices = new Map(); } @@ -52,14 +51,24 @@ export abstract class AbstractUIServer { } } - protected isBasicAuthEnabled(): boolean { + protected authenticate(req: IncomingMessage, next: (err?: Error) => void): void { + if (this.isBasicAuthEnabled() === true) { + if (this.isValidBasicAuth(req) === false) { + next(new Error('Unauthorized')); + } + next(); + } + next(); + } + + private isBasicAuthEnabled(): boolean { return ( this.uiServerConfiguration.authentication?.enabled === true && this.uiServerConfiguration.authentication?.type === AuthenticationType.BASIC_AUTH ); } - protected isValidBasicAuth(req: IncomingMessage): boolean { + private isValidBasicAuth(req: IncomingMessage): boolean { const authorizationHeader = req.headers.authorization ?? ''; const authorizationToken = authorizationHeader.split(/\s+/).pop() ?? ''; const authentication = Buffer.from(authorizationToken, 'base64').toString();