"use server" import { sendEmail } from "@/utils/email" import db from "@/utils/db" import jwt from "jsonwebtoken" export async function submitPrompt(prevState, formData) { try { // await createItem(formData.get('todo')) const prompt = formData.get("prompt") const email = formData.get("email") const recaptchaValue = formData.get("g-recaptcha-response") console.log({ prompt, email, recaptchaValue }) return revalidatePath("/") } catch (e) { return { message: "Failed to create" } } } export async function submitLogin(prevState, formData) { const email = formData.get("email") const recaptcha = formData.get("g-recaptcha-response") // check captcha console.log({ email, recaptcha }) const captchaResponse = await fetch( `https://www.google.com/recaptcha/api/siteverify`, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: `secret=${process.env.RECAPTCHA_SECRET_KEY}&response=${recaptcha}`, } ) const captchaData = await captchaResponse.json() console.log({ captchaData }) if (!captchaData.success) { console.log("failed captcha") return { error: "Failed to verify captcha" } } console.log("passed captcha") // upsert const [userObj] = await db`INSERT INTO users (email) VALUES (${email}) ON CONFLICT (email) DO UPDATE SET email = ${email} RETURNING *` const token = jwt.sign( { userId: userObj.id, exp: Math.floor(Date.now() / 1000) + 60 * 60, // 1 hour }, process.env.JWT_SECRET ) await sendEmail({ subject: `please confirm your email`, to: [email], from: process.env.EMAIL_FROM, text: `Hi, For anti-spam measures please confirm your email before upvoting or submitting: ${process.env.NEXT_PUBLIC_SITE_URL}/api/confirm?token=${token}`, }) console.log("sent email") return { message: "Check your mailbox" } }