X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=ui%2Fweb%2Fsrc%2Fcomposables%2FUIClient.ts;h=9522c59213c666a526d48927447024f3e8fc065a;hb=7445d18b9b9ac750b9dc3dc3638d4fd0e8aff818;hp=64f2bc69d4e5efd2549d51d471c6f1dafa039058;hpb=84ec8d3464903cfa8259ff622bff2b19b5c47132;p=e-mobility-charging-stations-simulator.git diff --git a/ui/web/src/composables/UIClient.ts b/ui/web/src/composables/UIClient.ts index 64f2bc69..9522c592 100644 --- a/ui/web/src/composables/UIClient.ts +++ b/ui/web/src/composables/UIClient.ts @@ -12,7 +12,7 @@ import { type UIServerConfigurationSection } from '@/types' -import { randomUUID } from './Utils' +import { randomUUID, validateUUID } from './Utils' type ResponseHandler = { procedureName: ProcedureName @@ -24,11 +24,17 @@ export class UIClient { private static instance: UIClient | null = null private ws?: WebSocket - private responseHandlers: Map + private responseHandlers: Map< + `${string}-${string}-${string}-${string}-${string}`, + ResponseHandler + > private constructor(private uiServerConfiguration: UIServerConfigurationSection) { this.openWS() - this.responseHandlers = new Map() + this.responseHandlers = new Map< + `${string}-${string}-${string}-${string}-${string}`, + ResponseHandler + >() } public static getInstance(uiServerConfiguration?: UIServerConfigurationSection): UIClient { @@ -230,15 +236,30 @@ export class UIClient { } private responseHandler(messageEvent: MessageEvent): void { - const response = JSON.parse(messageEvent.data) as ProtocolResponse + let response: ProtocolResponse + try { + response = JSON.parse(messageEvent.data) + } catch (error) { + useToast().error('Invalid response JSON format') + console.error('Invalid response JSON format', error) + return + } - if (Array.isArray(response) === false) { - throw new Error(`Response not an array: ${JSON.stringify(response, undefined, 2)}`) + if (!Array.isArray(response)) { + useToast().error('Response not an array') + console.error('Response not an array:', response) + return } const [uuid, responsePayload] = response - if (this.responseHandlers.has(uuid) === true) { + if (!validateUUID(uuid)) { + useToast().error('Response UUID field is invalid') + console.error('Response UUID field is invalid:', response) + return + } + + if (this.responseHandlers.has(uuid)) { const { procedureName, resolve, reject } = this.responseHandlers.get(uuid)! switch (responsePayload.status) { case ResponseStatus.SUCCESS: