X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcharging-station%2Fui-server%2FUIServerFactory.ts;h=d7de7ddd93b152a6bd26b75007dd72b1d31f05e9;hb=6027002ff1398a1cb3bb55d4994e4615efded2c0;hp=d3c34b58aedaaa48f25289d011d84a4ba3cec942;hpb=6d2b7d0121fa6ab41272ed8f4f0d7fd2ce3e8c7d;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ui-server/UIServerFactory.ts b/src/charging-station/ui-server/UIServerFactory.ts index d3c34b58..d7de7ddd 100644 --- a/src/charging-station/ui-server/UIServerFactory.ts +++ b/src/charging-station/ui-server/UIServerFactory.ts @@ -1,50 +1,69 @@ -import chalk from 'chalk'; +import chalk from 'chalk' -import type { AbstractUIServer } from './AbstractUIServer'; -import { UIHttpServer } from './UIHttpServer'; -import { UIServerUtils } from './UIServerUtils'; -import { UIWebSocketServer } from './UIWebSocketServer'; +import type { AbstractUIServer } from './AbstractUIServer.js' +import { UIHttpServer } from './UIHttpServer.js' +import { isLoopback } from './UIServerUtils.js' +import { UIWebSocketServer } from './UIWebSocketServer.js' +import { BaseError } from '../../exception/index.js' import { ApplicationProtocol, ApplicationProtocolVersion, - type UIServerConfiguration, -} from '../../types'; + AuthenticationType, + type UIServerConfiguration +} from '../../types/index.js' +// eslint-disable-next-line @typescript-eslint/no-extraneous-class export class UIServerFactory { - private constructor() { + private constructor () { // This is intentional } - public static getUIServerImplementation( - uiServerConfiguration: UIServerConfiguration, - ): AbstractUIServer | undefined { - if (UIServerUtils.isLoopback(uiServerConfiguration.options!.host!) === false) { + public static getUIServerImplementation ( + uiServerConfiguration: UIServerConfiguration + ): AbstractUIServer { + if ( + uiServerConfiguration.authentication?.enabled === true && + !Object.values(AuthenticationType).includes(uiServerConfiguration.authentication.type) + ) { + throw new BaseError( + `Unknown authentication type '${uiServerConfiguration.authentication.type}' for UI server` + ) + } + if ( + uiServerConfiguration.type === ApplicationProtocol.HTTP && + uiServerConfiguration.authentication?.enabled === true && + uiServerConfiguration.authentication.type === AuthenticationType.PROTOCOL_BASIC_AUTH + ) { + throw new BaseError('Protocol basic authentication is not supported for HTTP UI server') + } + if ( + uiServerConfiguration.authentication?.enabled !== true && + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + !isLoopback(uiServerConfiguration.options!.host!) + ) { console.warn( chalk.yellow( - 'Loopback address not detected in UI server configuration. This is not recommended.', - ), - ); + 'Non loopback address in UI server configuration without authentication enabled. This is not recommended' + ) + ) } - uiServerConfiguration = { - version: ApplicationProtocolVersion.VERSION_11, - ...uiServerConfiguration, - }; if ( uiServerConfiguration.type === ApplicationProtocol.WS && uiServerConfiguration.version !== ApplicationProtocolVersion.VERSION_11 ) { console.warn( chalk.yellow( - `Only version ${ApplicationProtocolVersion.VERSION_11} is supported for WebSocket UI server. Falling back to version ${ApplicationProtocolVersion.VERSION_11}.`, - ), - ); - uiServerConfiguration.version = ApplicationProtocolVersion.VERSION_11; + `Only version ${ApplicationProtocolVersion.VERSION_11} is supported for WebSocket UI server. Falling back to version ${ApplicationProtocolVersion.VERSION_11}` + ) + ) + uiServerConfiguration.version = ApplicationProtocolVersion.VERSION_11 } switch (uiServerConfiguration.type) { - case ApplicationProtocol.WS: - return new UIWebSocketServer(uiServerConfiguration); case ApplicationProtocol.HTTP: - return new UIHttpServer(uiServerConfiguration); + return new UIHttpServer(uiServerConfiguration) + case ApplicationProtocol.WS: + default: + return new UIWebSocketServer(uiServerConfiguration) } } }