Use node crypto built-in uuid v4 generator
authorJérôme Benoit <jerome.benoit@sap.com>
Sat, 15 Oct 2022 13:57:10 +0000 (15:57 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Sat, 15 Oct 2022 13:57:10 +0000 (15:57 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
package-lock.json
package.json
src/charging-station/WorkerBroadcastChannel.ts
src/charging-station/ui-server/UIWebSocketServer.ts
src/ui/web/package-lock.json
src/ui/web/package.json
src/ui/web/src/composables/UIClient.ts
src/utils/Utils.ts

index 523423ee2056bfd92920bb42d5cc8176b38acd0c..e61d1e6934b998bef5ee4b5a9fe1806a89ac6bf4 100644 (file)
@@ -27,7 +27,6 @@
         "source-map-support": "^0.5.21",
         "tar": "^6.1.11",
         "tslib": "^2.4.0",
-        "uuid": "^9.0.0",
         "winston": "^3.8.2",
         "winston-daily-rotate-file": "^4.7.1",
         "ws": "^8.9.0"
@@ -41,7 +40,6 @@
         "@types/node": "^18.11.0",
         "@types/proper-lockfile": "^4.1.2",
         "@types/tar": "^6.1.3",
-        "@types/uuid": "^8.3.4",
         "@types/ws": "^8.5.3",
         "@typescript-eslint/eslint-plugin": "^5.40.0",
         "@typescript-eslint/parser": "^5.40.0",
       "integrity": "sha512-N1rW+njavs70y2cApeIw1vLMYXRwfBy+7trgavGuuTfOd7j1Yh7QTRc/yqsPl6ncokt72ZXuxEU0PiCp9bSwNQ==",
       "dev": true
     },
-    "node_modules/@types/uuid": {
-      "version": "8.3.4",
-      "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
-      "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
-      "dev": true
-    },
     "node_modules/@types/webgl-ext": {
       "version": "0.0.30",
       "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz",
       "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==",
       "dev": true
     },
-    "node_modules/uuid": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
-      "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
-      "bin": {
-        "uuid": "dist/bin/uuid"
-      }
-    },
     "node_modules/uuid-parse": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz",
       "integrity": "sha512-N1rW+njavs70y2cApeIw1vLMYXRwfBy+7trgavGuuTfOd7j1Yh7QTRc/yqsPl6ncokt72ZXuxEU0PiCp9bSwNQ==",
       "dev": true
     },
-    "@types/uuid": {
-      "version": "8.3.4",
-      "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
-      "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
-      "dev": true
-    },
     "@types/webgl-ext": {
       "version": "0.0.30",
       "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz",
       "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==",
       "dev": true
     },
-    "uuid": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
-      "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg=="
-    },
     "uuid-parse": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz",
index 19dd533ef84e1ed3f890c432eddaed149240c615..364403deffed8ca09ee1357caca59082ed0f9c0b 100644 (file)
@@ -92,7 +92,6 @@
     "source-map-support": "^0.5.21",
     "tar": "^6.1.11",
     "tslib": "^2.4.0",
-    "uuid": "^9.0.0",
     "winston": "^3.8.2",
     "winston-daily-rotate-file": "^4.7.1",
     "ws": "^8.9.0"
     "@types/node": "^18.11.0",
     "@types/proper-lockfile": "^4.1.2",
     "@types/tar": "^6.1.3",
-    "@types/uuid": "^8.3.4",
     "@types/ws": "^8.5.3",
     "@typescript-eslint/eslint-plugin": "^5.40.0",
     "@typescript-eslint/parser": "^5.40.0",
index c1df1afdabb88b7dd276f4b38e891bf5eb863d79..652a27e1831e7fb7f9815745511de6c68a7fe54f 100644 (file)
@@ -1,7 +1,5 @@
 import { BroadcastChannel } from 'worker_threads';
 
-import * as uuid from 'uuid';
-
 import type { JsonType } from '../types/JsonType';
 import type {
   BroadcastChannelRequest,
@@ -42,7 +40,7 @@ export default abstract class WorkerBroadcastChannel extends BroadcastChannel {
       );
       return false;
     }
-    if (uuid.validate(messageEvent.data[0]) === false) {
+    if (Utils.validateUUID(messageEvent.data[0]) === false) {
       logger.error(
         this.logPrefix(moduleName, 'validateMessageEvent') +
           ' Worker broadcast channel protocol message event data UUID field is invalid'
index 1b060783021450c367243f80df06050f74b15717..60a4e3c186221f9c00556744e68110ec123cfa1b 100644 (file)
@@ -2,7 +2,6 @@ import type { IncomingMessage } from 'http';
 import type internal from 'stream';
 
 import { StatusCodes } from 'http-status-codes';
-import * as uuid from 'uuid';
 import WebSocket, { type RawData, WebSocketServer } from 'ws';
 
 import type { UIServerConfiguration } from '../../types/ConfigurationData';
@@ -175,7 +174,7 @@ export default class UIWebSocketServer extends AbstractUIServer {
       return false;
     }
 
-    if (uuid.validate(request[0]) === false) {
+    if (Utils.validateUUID(request[0]) === false) {
       logger.error(
         `${this.logPrefix(
           moduleName,
index 188410e196db3e5934846247cbc5d74d374b56e3..51b5e5271a30577821016f0dd5b0c988547efe15 100644 (file)
@@ -11,7 +11,6 @@
         "core-js": "^3.25.5",
         "finalhandler": "^1.2.0",
         "serve-static": "^1.15.0",
-        "uuid": "^9.0.0",
         "vue": "^3.2.41",
         "vue-class-component": "^8.0.0-rc.1",
         "vue-router": "^4.1.5"
@@ -20,7 +19,6 @@
         "@types/chai": "^4.3.3",
         "@types/mocha": "^10.0.0",
         "@types/node": "^18.11.0",
-        "@types/uuid": "^8.3.4",
         "@typescript-eslint/eslint-plugin": "^5.40.0",
         "@typescript-eslint/parser": "^5.40.0",
         "@vue/cli": "~5.0.8",
         "@types/node": "*"
       }
     },
-    "node_modules/@types/uuid": {
-      "version": "8.3.4",
-      "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
-      "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
-      "dev": true
-    },
     "node_modules/@types/webpack-env": {
       "version": "1.17.0",
       "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.17.0.tgz",
         "node": ">= 0.4.0"
       }
     },
-    "node_modules/uuid": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
-      "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
-      "bin": {
-        "uuid": "dist/bin/uuid"
-      }
-    },
     "node_modules/validate-npm-package-license": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
         "@types/node": "*"
       }
     },
-    "@types/uuid": {
-      "version": "8.3.4",
-      "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
-      "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
-      "dev": true
-    },
     "@types/webpack-env": {
       "version": "1.17.0",
       "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.17.0.tgz",
       "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
       "dev": true
     },
-    "uuid": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
-      "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg=="
-    },
     "validate-npm-package-license": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
index 4aa12956ab5d5c73b79c9b40d9cf51c8f52fd578..43102903c121e6f20124469ea91dcb8c3b772600 100644 (file)
@@ -14,7 +14,6 @@
     "core-js": "^3.25.5",
     "finalhandler": "^1.2.0",
     "serve-static": "^1.15.0",
-    "uuid": "^9.0.0",
     "vue": "^3.2.41",
     "vue-class-component": "^8.0.0-rc.1",
     "vue-router": "^4.1.5"
@@ -23,7 +22,6 @@
     "@types/chai": "^4.3.3",
     "@types/mocha": "^10.0.0",
     "@types/node": "^18.11.0",
-    "@types/uuid": "^8.3.4",
     "@typescript-eslint/eslint-plugin": "^5.40.0",
     "@typescript-eslint/parser": "^5.40.0",
     "@vue/cli": "~5.0.8",
index e920545a54d4260b6e5c7fdcabc1f2fab280c8fe..cf9894009d8844b5f4879d44d899404052f0db1a 100644 (file)
@@ -3,7 +3,6 @@ import type { ProtocolResponse, ResponsePayload } from '@/types/UIProtocol';
 
 import Utils from './Utils';
 import config from '@/assets/config';
-import { v4 as uuidv4 } from 'uuid';
 
 type ResponseHandler = {
   procedureName: ProcedureName;
@@ -145,7 +144,7 @@ export default class UIClient {
     let uuid: string;
     return Utils.promiseWithTimeout(
       new Promise((resolve, reject) => {
-        uuid = uuidv4();
+        uuid = crypto.randomUUID();
         const msg = JSON.stringify([uuid, command, data]);
 
         if (this._ws.readyState !== WebSocket.OPEN) {
index f297f228979094f70c7bf0156497fc61900ca058..18d56497507b55abfaf4bef9c8fb4759f8b78b31 100644 (file)
@@ -1,7 +1,5 @@
 import crypto from 'crypto';
 
-import { v4 as uuid } from 'uuid';
-
 import { WebSocketCloseEventStatusString } from '../types/WebSocket';
 
 export default class Utils {
@@ -14,7 +12,11 @@ export default class Utils {
   }
 
   public static generateUUID(): string {
-    return uuid();
+    return crypto.randomUUID();
+  }
+
+  public static validateUUID(uuid: string): boolean {
+    return /\/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$\/i/.test(uuid);
   }
 
   public static async sleep(milliSeconds: number): Promise<NodeJS.Timeout> {