X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Fui-server%2Fui-services%2FUIServiceUtils.ts;h=c019982854c22d73bcc446ca3a2ecc56caa1aca1;hb=7acb3f7bb991a6d02a4521c0cbc5f163aa5e8a61;hp=dabb5d474e88a78aebe5ea965b5b591e9f20246e;hpb=675fa8e39afc1cc54c2dc68542300de95f5767e9;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ui-server/ui-services/UIServiceUtils.ts b/src/charging-station/ui-server/ui-services/UIServiceUtils.ts index dabb5d47..c0199828 100644 --- a/src/charging-station/ui-server/ui-services/UIServiceUtils.ts +++ b/src/charging-station/ui-server/ui-services/UIServiceUtils.ts @@ -1,36 +1,59 @@ -import { Protocol, ProtocolVersion } from '../../../types/UIProtocol'; +import type { IncomingMessage } from 'http'; -import { IncomingMessage } from 'http'; -import Utils from '../../../utils/Utils'; +import { Protocol, ProtocolVersion } from '../../../types/UIProtocol'; import logger from '../../../utils/Logger'; +import Utils from '../../../utils/Utils'; export class UIServiceUtils { + private constructor() { + // This is intentional + } + public static handleProtocols = ( protocols: Set, request: IncomingMessage ): string | false => { - let protocolIndex: number; let protocol: Protocol; let version: ProtocolVersion; + if (protocols.size === 0) { + return false; + } for (const fullProtocol of protocols) { - protocolIndex = fullProtocol.indexOf(Protocol.UI); - protocol = fullProtocol.substring( - protocolIndex, - protocolIndex + Protocol.UI.length - ) as Protocol; - version = fullProtocol.substring(protocolIndex + Protocol.UI.length) as ProtocolVersion; - if ( - Object.values(Protocol).includes(protocol) && - Object.values(ProtocolVersion).includes(version) - ) { + [protocol, version] = UIServiceUtils.getProtocolAndVersion(fullProtocol); + if (UIServiceUtils.isProtocolAndVersionSupported(protocol, version) === true) { return fullProtocol; } } logger.error( `${Utils.logPrefix( - ' UI WebSocket Server:' + ' UI WebSocket Server |' )} Unsupported protocol: ${protocol} or protocol version: ${version}` ); return false; }; + + public static isProtocolAndVersionSupported = ( + protocol: Protocol, + version: ProtocolVersion + ): boolean => + Object.values(Protocol).includes(protocol) && Object.values(ProtocolVersion).includes(version); + + public static getProtocolAndVersion = (protocolStr: string): [Protocol, ProtocolVersion] => { + const protocolIndex = protocolStr.indexOf(Protocol.UI); + const protocol = protocolStr.substring( + protocolIndex, + protocolIndex + Protocol.UI.length + ) as Protocol; + const version = protocolStr.substring(protocolIndex + Protocol.UI.length) as ProtocolVersion; + return [protocol, version]; + }; + + public static isLoopback(address: string): boolean { + const isLoopbackRegExp = new RegExp( + // eslint-disable-next-line no-useless-escape + /^localhost$|^127(?:\.\d+){0,2}\.\d+$|^(?:0*\:)*?:?0*1$/, + 'i' + ); + return isLoopbackRegExp.test(address); + } }