X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Fui-server%2FUIServerFactory.ts;h=cf176bdc0403d2be85890204ba7b67e06f9b6c4a;hb=9388120364d5a2f3b9103f05802e1756d2dad04f;hp=3df4566356cee97e6c33893aa6fe7d36003d6aac;hpb=329eab0e2561adc801877a95885f3ad15cbb90f6;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 3df45663..cf176bdc 100644 --- a/src/charging-station/ui-server/UIServerFactory.ts +++ b/src/charging-station/ui-server/UIServerFactory.ts @@ -1,16 +1,18 @@ import chalk from 'chalk' -import type { AbstractUIServer } from './AbstractUIServer.js' -import { UIHttpServer } from './UIHttpServer.js' -import { UIServerUtils } from './UIServerUtils.js' -import { UIWebSocketServer } from './UIWebSocketServer.js' -import { BaseError } from '../../exception/BaseError.js' +import { BaseError } from '../../exception/index.js' import { ApplicationProtocol, ApplicationProtocolVersion, AuthenticationType, + ConfigurationSection, type UIServerConfiguration } from '../../types/index.js' +import { logger, logPrefix } from '../../utils/index.js' +import type { AbstractUIServer } from './AbstractUIServer.js' +import { UIHttpServer } from './UIHttpServer.js' +import { isLoopback } from './UIServerUtils.js' +import { UIWebSocketServer } from './UIWebSocketServer.js' // eslint-disable-next-line @typescript-eslint/no-extraneous-class export class UIServerFactory { @@ -20,13 +22,13 @@ export class UIServerFactory { public static getUIServerImplementation ( uiServerConfiguration: UIServerConfiguration - ): AbstractUIServer | undefined { + ): 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` + `Unknown authentication type '${uiServerConfiguration.authentication.type}' in '${ConfigurationSection.uiServer}' configuration section` ) } if ( @@ -34,32 +36,57 @@ export class UIServerFactory { uiServerConfiguration.authentication?.enabled === true && uiServerConfiguration.authentication.type === AuthenticationType.PROTOCOL_BASIC_AUTH ) { - throw new BaseError('Protocol basic authentication is not supported for HTTP UI server') - } - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - if (!UIServerUtils.isLoopback(uiServerConfiguration.options!.host!)) { - console.warn( - chalk.yellow( - 'Loopback address not detected in UI server configuration. This is not recommended' - ) + throw new BaseError( + `'${uiServerConfiguration.authentication.type}' authentication type with application protocol type '${uiServerConfiguration.type}' is not supported in '${ConfigurationSection.uiServer}' configuration section` ) } + if ( + uiServerConfiguration.authentication?.enabled !== true && + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + !isLoopback(uiServerConfiguration.options!.host!) + ) { + const logMsg = `Non loopback address in '${ConfigurationSection.uiServer}' configuration section without authentication enabled. This is not recommended` + logger.warn(`${UIServerFactory.logPrefix()} ${logMsg}`) + console.warn(chalk.yellow(logMsg)) + } 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}` - ) - ) + const logMsg = `Only version ${ApplicationProtocolVersion.VERSION_11} with application protocol type '${uiServerConfiguration.type}' is supported in '${ConfigurationSection.uiServer}' configuration section. Falling back to version ${ApplicationProtocolVersion.VERSION_11}` + logger.warn(`${UIServerFactory.logPrefix()} ${logMsg}`) + console.warn(chalk.yellow(logMsg)) uiServerConfiguration.version = ApplicationProtocolVersion.VERSION_11 } switch (uiServerConfiguration.type) { - case ApplicationProtocol.WS: - return new UIWebSocketServer(uiServerConfiguration) case ApplicationProtocol.HTTP: return new UIHttpServer(uiServerConfiguration) + case ApplicationProtocol.WS: + default: + if ( + !Object.values(ApplicationProtocol).includes( + uiServerConfiguration.type as ApplicationProtocol + ) + ) { + const logMsg = `Unknown application protocol type '${uiServerConfiguration.type}' in '${ + ConfigurationSection.uiServer + // eslint-disable-next-line @typescript-eslint/no-base-to-string + }' configuration section from values '${ApplicationProtocol.toString()}', defaulting to '${ + ApplicationProtocol.WS + }'` + logger.warn(`${UIServerFactory.logPrefix()} ${logMsg}`) + console.warn(logMsg) + } + return new UIWebSocketServer(uiServerConfiguration) } } + + private static readonly logPrefix = (modName?: string, methodName?: string): string => { + const logMsgPrefix = 'UI Server' + const logMsg = + modName != null && methodName != null + ? ` ${logMsgPrefix} | ${modName}.${methodName}:` + : ` ${logMsgPrefix} |` + return logPrefix(logMsg) + } }