From 00b8317b7040d235fef127eeec3abeb24bfa1af3 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 6 Dec 2023 13:54:01 -0800 Subject: email verification --- routes/users.js | 45 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) (limited to 'routes') diff --git a/routes/users.js b/routes/users.js index d3dff28b..f666d75b 100644 --- a/routes/users.js +++ b/routes/users.js @@ -23,6 +23,7 @@ import { v4 } from "uuid"; import { parseISO } from "date-fns"; import { types } from "$lib/payments"; import { bech32 } from "bech32"; +import { mail, templates } from "$lib/mail"; import got from "got"; import upload from "$lib/upload"; @@ -433,8 +434,46 @@ export default { else bail(res, "unauthorized"); }, - async verify({ body: { test } }, res) { - console.log("test", test); - res.send(test); + async request({ body: { id, email }}, res) { + try { + let code = v4(); + let user = await g(`user:${id}`); + if (!user) fail("user not found"); + let { username } = user; + + if (email !== user.email) { + user.verified = false; + await s(`user:${id}`, user); + user.email = email; + } + + + await s(`verify:${code}`, id); + let link = `${process.env.URL}/${username}/verify/${code}`; + let subject = "Email Verification"; + + await mail(user, subject, templates.verifyEmail, { + username, + link + }); + + res.send({ ok: true }); + } catch (e) { + bail(res, e.message); + } + }, + + async verify({ params: { code } }, res) { + try { + let id = await g(`verify:${code}`); + if (!id) fail(res, "verification failed"); + let user = await g(`user:${id}`); + user.verified = true; + await s(`user:${id}`, user); + + res.send(pick(user, whitelist)); + } catch (e) { + bail(res, e.message); + } } }; -- cgit v1.2.3