summaryrefslogtreecommitdiff
path: root/website/src/actions/otp/verify-otp.ts
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2026-06-18 19:21:59 +0100
committerJoe Carstairs <me@joeac.net>2026-06-18 19:21:59 +0100
commitca8e6824eaa711105f4092365792720c9dde026b (patch)
tree2b6493941352d11b799ee63d3f1311c13de649b8 /website/src/actions/otp/verify-otp.ts
parenta0f25057283a397f006127b6f582d190d2c4294e (diff)
remove Astro website
Diffstat (limited to 'website/src/actions/otp/verify-otp.ts')
-rw-r--r--website/src/actions/otp/verify-otp.ts48
1 files changed, 0 insertions, 48 deletions
diff --git a/website/src/actions/otp/verify-otp.ts b/website/src/actions/otp/verify-otp.ts
deleted file mode 100644
index 726786e..0000000
--- a/website/src/actions/otp/verify-otp.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import { randomBytes } from "node:crypto";
-import { z } from "astro/zod";
-import { defineAction } from "astro:actions";
-import { and, db, eq, gte, Otp, SendmailToken } from "astro:db";
-
-export default defineAction({
- input: z.object({
- guess: z.string().length(6),
- lenient: z.boolean().default(false),
- userId: z.string().nonempty(),
- }),
- handler: verifyOtp,
-});
-
-async function verifyOtp({ guess, lenient, userId }: VerifyOtpParams) {
- const leniency = lenient ? 1000 * 60 : 0;
- const isOtpCorrect =
- (await db.$count(
- Otp,
- and(
- eq(Otp.userId, userId),
- eq(Otp.value, guess),
- gte(Otp.validUntil, Date.now() - leniency),
- ),
- )) > 0;
-
- if (!isOtpCorrect) {
- return false;
- }
-
- await db.delete(Otp).where(and(eq(Otp.userId, userId), eq(Otp.value, guess)));
-
- const token = randomBytes(256).toString("hex");
- await db.insert(SendmailToken).values({
- userId,
- value: token,
- createdAt: Date.now(),
- validUntil: Date.now() + 60_000,
- });
-
- return token;
-}
-
-type VerifyOtpParams = {
- guess: string;
- lenient: boolean;
- userId: string;
-};