import { eq } from "drizzle-orm"; import { z } from "zod"; import useDatabase from "~/composables/useDatabase"; import { usersTable } from "~/db/schema"; const schema = z.object({ h: z.coerce.string(), u: z.coerce.number(), t: z.coerce.number(), }); export default defineEventHandler(async (e) => { const query = await getValidatedQuery(e, schema.safeParse); if(!query.success) throw query.error; if(Bun.hash(query.data.u.toString(), query.data.t).toString() !== query.data.h) { return createError({ statusCode: 400, message: 'Lien incorrect', }) } if(Date.now() > query.data.t + (60 * 60 * 1000)) { return createError({ statusCode: 400, message: 'Le lien a expiré', }) } const db = useDatabase(); const result = db.select({ state: usersTable.state }).from(usersTable).where(eq(usersTable.id, query.data.u)).get(); if(result === undefined) { return createError({ statusCode: 400, message: 'Aucune donnée utilisateur trouvée', }) } if(result?.state === 1) { return createError({ statusCode: 400, message: 'Votre compte a déjà été validé', }) } db.update(usersTable).set({ state: 1 }).where(eq(usersTable.id, query.data.u)).run(); sendRedirect(e, '/user/mailvalidated'); })