import Link from "next/link"; import { getTranslations } from "next-intl/server"; import { isValidVerificationToken } from "@/actions/email-verify"; import { ContentCard, EmptyState } from "@/components/public/ui"; import { DiscordVerifyForm } from "@/components/auth/discord-verify-form"; import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; export const dynamic = "force-dynamic"; type Status = "verified" | "already" | "invalid" | "unavailable" | "discord"; export default async function VerifyPage({ searchParams, }: { searchParams: Promise<{ token?: string; email?: string; method?: string; linked?: string }>; }) { const t = await getTranslations("pages.verify"); const { token = "", email = "", method = "", linked = "" } = await searchParams; const normalisedEmail = email.trim().toLowerCase(); let status: Status = "invalid"; let discordAlreadyLinked = false; if (method === "discord" || linked === "1") { status = "discord"; const session = await auth(); if (session?.user?.id) { const userId = Number(session.user.id); try { const linkedRow = await prisma.socialAccounts.findFirst({ where: { userId: BigInt(userId), provider: "discord" }, select: { id: true }, }); discordAlreadyLinked = !!linkedRow; } catch {} } } else if (normalisedEmail && token) { const ok = await isValidVerificationToken(normalisedEmail, token); if (ok) { try { const user = await prisma.user.findFirst({ where: { mail: normalisedEmail }, select: { id: true, mailVerified: true }, }); if (!user) { status = "invalid"; } else if (user.mailVerified === "1") { status = "already"; } else { await prisma.user.update({ where: { id: user.id }, data: { mailVerified: "1" }, }); status = "verified"; } } catch { status = "unavailable"; } } } return (
{status === "verified" && (

{t("verifiedBody")}

{t("goToLogin")}
)} {status === "already" && (

{t("alreadyBody")}

{t("goToLogin")}
)} {status === "unavailable" && (

{t("unavailableBody")}

)} {status === "invalid" && ( {t("invalidBody")}
{t("backToLogin")}
)} {status === "discord" && ( {linked === "1" && (

Gelinkt!

Je Discord account is gekoppeld. Je kunt nu verder.

)} {discordAlreadyLinked ? (

Al geverifieerd!

Je Discord account is al gekoppeld aan dit account.

) : ( )}
Naar home
)}
); }