From 78fa2835abe7ff49995ad82bd28dbb956375b875 Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Fri, 7 May 2021 20:03:24 +0200 Subject: :art: [Route] templates refactor --- src/util/Base64.ts | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/util/String.ts | 5 +++++ 2 files changed, 52 insertions(+) create mode 100644 src/util/Base64.ts (limited to 'src/util') diff --git a/src/util/Base64.ts b/src/util/Base64.ts new file mode 100644 index 00000000..46cff77a --- /dev/null +++ b/src/util/Base64.ts @@ -0,0 +1,47 @@ +const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+"; + +// binary to string lookup table +const b2s = alphabet.split(""); + +// string to binary lookup table +// 123 == 'z'.charCodeAt(0) + 1 +const s2b = new Array(123); +for (let i = 0; i < alphabet.length; i++) { + s2b[alphabet.charCodeAt(i)] = i; +} + +// number to base64 +export const ntob = (n: number): string => { + if (n < 0) return `-${ntob(-n)}`; + + let lo = n >>> 0; + let hi = (n / 4294967296) >>> 0; + + let right = ""; + while (hi > 0) { + right = b2s[0x3f & lo] + right; + lo >>>= 6; + lo |= (0x3f & hi) << 26; + hi >>>= 6; + } + + let left = ""; + do { + left = b2s[0x3f & lo] + left; + lo >>>= 6; + } while (lo > 0); + + return left + right; +}; + +// base64 to number +export const bton = (base64: string) => { + let number = 0; + const sign = base64.charAt(0) === "-" ? 1 : 0; + + for (let i = sign; i < base64.length; i++) { + number = number * 64 + s2b[base64.charCodeAt(i)]; + } + + return sign ? -number : number; +}; diff --git a/src/util/String.ts b/src/util/String.ts index 3a8e35a8..49fba237 100644 --- a/src/util/String.ts +++ b/src/util/String.ts @@ -1,4 +1,5 @@ import { Request } from "express"; +import { ntob } from "./Base64"; import { FieldErrors } from "./instanceOf"; export function checkLength(str: string, min: number, max: number, key: string, req: Request) { @@ -11,3 +12,7 @@ export function checkLength(str: string, min: number, max: number, key: string, }); } } + +export function generateCode() { + return ntob(Date.now() + Math.randomIntBetween(0, 10000)); +} -- cgit 1.5.1