ATG: Cleanup connector statuses initialization
[e-mobility-charging-stations-simulator.git] / src / charging-station / ui-server / ui-services / UIServiceUtils.ts
CommitLineData
6c1761d4 1import type { IncomingMessage } from 'http';
8114d10e
JB
2
3import { Protocol, ProtocolVersion } from '../../../types/UIProtocol';
675fa8e3 4import logger from '../../../utils/Logger';
8114d10e 5import Utils from '../../../utils/Utils';
4198ad5c
JB
6
7export class UIServiceUtils {
d5bd1c00
JB
8 private constructor() {
9 // This is intentional
10 }
11
e7aeea18
JB
12 public static handleProtocols = (
13 protocols: Set<string>,
14 request: IncomingMessage
15 ): string | false => {
4198ad5c
JB
16 let protocol: Protocol;
17 let version: ProtocolVersion;
a92929f1
JB
18 if (protocols.size === 0) {
19 return false;
20 }
4198ad5c 21 for (const fullProtocol of protocols) {
a92929f1
JB
22 [protocol, version] = UIServiceUtils.getProtocolAndVersion(fullProtocol);
23 if (UIServiceUtils.isProtocolAndVersionSupported(protocol, version) === true) {
4198ad5c
JB
24 return fullProtocol;
25 }
26 }
e7aeea18
JB
27 logger.error(
28 `${Utils.logPrefix(
32de5a57 29 ' UI WebSocket Server |'
e7aeea18
JB
30 )} Unsupported protocol: ${protocol} or protocol version: ${version}`
31 );
4198ad5c
JB
32 return false;
33 };
d5bd1c00 34
a92929f1
JB
35 public static isProtocolAndVersionSupported = (
36 protocol: Protocol,
37 version: ProtocolVersion
38 ): boolean =>
9383b2b1
JB
39 Object.values(Protocol).includes(protocol) === true &&
40 Object.values(ProtocolVersion).includes(version) === true;
1f7fa4de 41
a92929f1
JB
42 public static getProtocolAndVersion = (protocolStr: string): [Protocol, ProtocolVersion] => {
43 const protocolIndex = protocolStr.indexOf(Protocol.UI);
44 const protocol = protocolStr.substring(
45 protocolIndex,
46 protocolIndex + Protocol.UI.length
47 ) as Protocol;
48 const version = protocolStr.substring(protocolIndex + Protocol.UI.length) as ProtocolVersion;
49 return [protocol, version];
50 };
51
d5bd1c00
JB
52 public static isLoopback(address: string): boolean {
53 const isLoopbackRegExp = new RegExp(
54 // eslint-disable-next-line no-useless-escape
55 /^localhost$|^127(?:\.\d+){0,2}\.\d+$|^(?:0*\:)*?:?0*1$/,
56 'i'
57 );
58 return isLoopbackRegExp.test(address);
59 }
4198ad5c 60}