From bc3757aa09f528663d03dd6bfb594294703941ad Mon Sep 17 00:00:00 2001 From: Kilian Decaderincourt Date: Fri, 10 Sep 2021 17:19:48 +0200 Subject: [PATCH] refact: use nanoid instead of hash --- package-lock.json | 17 +++++++++++++++++ package.json | 1 + src/scenes/scenes.controller.ts | 11 ++++++++--- src/utils.ts | 12 ------------ 4 files changed, 26 insertions(+), 15 deletions(-) delete mode 100644 src/utils.ts diff --git a/package-lock.json b/package-lock.json index 85474bc..1a61449 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "@nestjs/platform-express": "^8.0.0", "@types/keyv": "^3.1.3", "keyv": "^4.0.3", + "nanoid": "^3.1.25", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.2.0" @@ -7101,6 +7102,17 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz", "integrity": "sha1-2COIrpyWC+y+oMc7uet5tsbOmus=" }, + "node_modules/nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -15450,6 +15462,11 @@ } } }, + "nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", diff --git a/package.json b/package.json index 837048c..e5fdaca 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "@nestjs/platform-express": "^8.0.0", "@types/keyv": "^3.1.3", "keyv": "^4.0.3", + "nanoid": "^3.1.25", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.2.0" diff --git a/src/scenes/scenes.controller.ts b/src/scenes/scenes.controller.ts index 1f13951..9607555 100644 --- a/src/scenes/scenes.controller.ts +++ b/src/scenes/scenes.controller.ts @@ -3,14 +3,15 @@ import { Controller, Get, Header, + InternalServerErrorException, Param, Post, Res, } from '@nestjs/common'; import { Response } from 'express'; import { StorageNamespace, StorageService } from 'src/storage/storage.service'; -import { hash, hexadecimalToDecimal } from 'src/utils'; import { Readable } from 'stream'; +import { nanoid } from 'nanoid'; @Controller() export class ScenesController { @@ -30,8 +31,12 @@ export class ScenesController { @Post() async create(@Body() payload: Buffer) { - const drawingHash = hash(payload); - const id = hexadecimalToDecimal(drawingHash); + const id = nanoid(); + + // Nanoid has similar collision probability as uuid v4, so the following should *never* happen + if (await this.storageService.get(id, this.namespace)) { + throw new InternalServerErrorException(); + } await this.storageService.set(id, payload, this.namespace); diff --git a/src/utils.ts b/src/utils.ts deleted file mode 100644 index ee733e4..0000000 --- a/src/utils.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { createHash } from 'crypto'; - -export function hash(buffer): string { - return createHash(`sha256`).update(buffer).digest(`hex`); -} - -// Copied from https://github.com/NMinhNguyen/excalidraw-json -export function hexadecimalToDecimal(hexadecimal: string) { - // See https://stackoverflow.com/a/53751162 - const bigInt = BigInt(`0x${hexadecimal}`); - return bigInt.toString(10); -}