From e802fab87f94a13f397f04cfe6068f2f7ddf7888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= <barisusakli@gmail.com> Date: Thu, 26 May 2022 12:12:19 -0400 Subject: [PATCH] fix: get rid of math.random in utils.generateUUID --- public/src/utils.common.js | 9 --------- public/src/utils.js | 8 ++++++++ src/utils.js | 15 +++++++++++++++ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/public/src/utils.common.js b/public/src/utils.common.js index 3860861ee0..da1c24c010 100644 --- a/public/src/utils.common.js +++ b/public/src/utils.common.js @@ -274,15 +274,6 @@ const HTMLEntities = Object.freeze({ /* eslint-disable no-redeclare */ const utils = { - generateUUID: function () { - /* eslint-disable no-bitwise */ - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - const r = Math.random() * 16 | 0; - const v = c === 'x' ? r : ((r & 0x3) | 0x8); - return v.toString(16); - }); - /* eslint-enable no-bitwise */ - }, // https://github.com/substack/node-ent/blob/master/index.js decodeHTMLEntities: function (html) { return String(html) diff --git a/public/src/utils.js b/public/src/utils.js index f57d68c354..50ed3960c2 100644 --- a/public/src/utils.js +++ b/public/src/utils.js @@ -73,4 +73,12 @@ utils.assertPasswordValidity = (password) => { } }; +utils.generateUUID = function () { + // from https://github.com/tracker1/node-uuid4/blob/master/browser.js + const temp_url = URL.createObjectURL(new Blob()); + const uuid = temp_url.toString(); + URL.revokeObjectURL(temp_url); + return uuid.split(/[:\/]/g).pop().toLowerCase(); // remove prefixes +}; + module.exports = utils; diff --git a/src/utils.js b/src/utils.js index 524730f221..3607f9b2d3 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,5 +1,7 @@ 'use strict'; +const crypto = require('crypto'); + process.profile = function (operation, start) { console.log('%s took %d milliseconds', operation, process.elapsedTimeSince(start)); }; @@ -14,4 +16,17 @@ utils.getLanguage = function () { const meta = require('./meta'); return meta.config && meta.config.defaultLang ? meta.config.defaultLang : 'en-GB'; }; + +utils.generateUUID = function () { + // from https://github.com/tracker1/node-uuid4/blob/master/index.js + let rnd = crypto.randomBytes(16); + /* eslint-disable no-bitwise */ + rnd[6] = (rnd[6] & 0x0f) | 0x40; + rnd[8] = (rnd[8] & 0x3f) | 0x80; + /* eslint-enable no-bitwise */ + rnd = rnd.toString('hex').match(/(.{8})(.{4})(.{4})(.{4})(.{12})/); + rnd.shift(); + return rnd.join('-'); +}; + module.exports = utils;