From 57a425a79a636a740e7bfd5b5ae748422ffa65ae Mon Sep 17 00:00:00 2001 From: Lea Date: Wed, 24 Jan 2024 00:55:17 +0100 Subject: [PATCH] nextjs is stupid --- src/app/api/aliases/temporary/route.ts | 2 +- src/lib/actions.ts | 3 ++- src/lib/util-server.ts | 27 +++++++++++++++++++++++++ src/lib/util.ts | 28 +------------------------- 4 files changed, 31 insertions(+), 29 deletions(-) create mode 100644 src/lib/util-server.ts diff --git a/src/app/api/aliases/temporary/route.ts b/src/app/api/aliases/temporary/route.ts index 4997753..dfffdbb 100644 --- a/src/app/api/aliases/temporary/route.ts +++ b/src/app/api/aliases/temporary/route.ts @@ -1,7 +1,7 @@ import apiAuth from "@/lib/apiAuth"; import { auditLog } from "@/lib/audit"; import { AliasEntry, createAliasEntry } from "@/lib/db"; -import { generateAliasEmail } from "@/lib/util"; +import { generateAliasEmail } from "@/lib/util-server"; import { NextResponse } from "next/server"; /** diff --git a/src/lib/actions.ts b/src/lib/actions.ts index 9ff84e8..f44cb2d 100644 --- a/src/lib/actions.ts +++ b/src/lib/actions.ts @@ -5,7 +5,8 @@ import fs from "fs/promises"; import { getServerSession } from "next-auth"; import { AuditLog, auditLog } from "./audit"; import { AliasEntry, AliasRequestEntry, ApiKeyEntry, approveAliasEntry, createAliasEntry, createApiKeyEntry, createTempAliasRequestEntry, createUserEntry, database, deleteAliasEntry, deleteApiKey, deleteTempAliasRequestEntry, getAlias, getAllAliases, getApiKeyById, getTempAliasRequestEntry, getUserAliases, getUserApiKeys, isAliasAvailable, setUserPassword } from "./db"; -import { aliasesNeedApproval, anonymizeApiKey, generateAliasEmail, isAdmin } from "./util"; +import { aliasesNeedApproval, anonymizeApiKey, isAdmin } from "./util"; +import { generateAliasEmail } from "./util-server"; export async function fetchAllUsers(): Promise { return new Promise(async (resolve, reject) => { diff --git a/src/lib/util-server.ts b/src/lib/util-server.ts new file mode 100644 index 0000000..1050d56 --- /dev/null +++ b/src/lib/util-server.ts @@ -0,0 +1,27 @@ +import { TEMP_EMAIL_DOMAIN } from "./constants"; +import { isAliasAvailable } from "./db"; +import crypto from 'crypto'; +import * as random_words from "random-words"; + +export async function generateAliasEmail(label: string, style: 'words' | 'random', labelAtEnd: boolean): Promise { + let email: string; + do { + let randomString: string; + switch (style) { + case 'words': + randomString = random_words.generate(2).join(''); + break; + case 'random': + randomString = crypto + .randomBytes(8) + .toString('base64') + .replace(/\W/, ''); // Delete special characters + break; + default: + throw new Error("Invalid style"); + } + email = `${labelAtEnd ? `${randomString}-${label}` : `${label}-${randomString}`}@${TEMP_EMAIL_DOMAIN}`; + } while (!await isAliasAvailable(email, true)); + + return email; +} \ No newline at end of file diff --git a/src/lib/util.ts b/src/lib/util.ts index 00a22e5..2828a8c 100644 --- a/src/lib/util.ts +++ b/src/lib/util.ts @@ -1,8 +1,5 @@ import { Session } from 'next-auth'; -import crypto from 'crypto'; -import { ApiKeyEntry, isAliasAvailable } from './db'; -import * as random_words from "random-words"; -import { TEMP_EMAIL_DOMAIN } from './constants'; +import { ApiKeyEntry } from './db'; export function sha256sum(input: any) { const hash = crypto.createHash('sha256'); @@ -25,26 +22,3 @@ export function anonymizeApiKey(key: ApiKeyEntry): ApiKeyEntry { token: key.token.substring(0, 6) + "********", }; } - -export async function generateAliasEmail(label: string, style: 'words' | 'random', labelAtEnd: boolean): Promise { - let email: string; - do { - let randomString: string; - switch (style) { - case 'words': - randomString = random_words.generate(2).join(''); - break; - case 'random': - randomString = crypto - .randomBytes(8) - .toString('base64') - .replace(/\W/, ''); // Delete special characters - break; - default: - throw new Error("Invalid style"); - } - email = `${labelAtEnd ? `${randomString}-${label}` : `${label}-${randomString}`}@${TEMP_EMAIL_DOMAIN}`; - } while (!await isAliasAvailable(email, true)); - - return email; -}