import { Brand } from "@/components/ui/brand" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { SubmitButton } from "@/components/ui/submit-button" import { createClient } from "@/lib/supabase/server" import { Database } from "@/supabase/types" import { createServerClient } from "@supabase/ssr" import { get } from "@vercel/edge-config" import { Metadata } from "next" import { cookies, headers } from "next/headers" import { redirect } from "next/navigation" export const metadata: Metadata = { title: "Login" } export default async function Login({ searchParams }: { searchParams: { message: string } }) { const cookieStore = cookies() const supabase = createServerClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, { cookies: { get(name: string) { return cookieStore.get(name)?.value } } } ) const session = (await supabase.auth.getSession()).data.session if (session) { const { data: homeWorkspace, error } = await supabase .from("workspaces") .select("*") .eq("user_id", session.user.id) .eq("is_home", true) .single() if (!homeWorkspace) { throw new Error(error.message) } return redirect(`/${homeWorkspace.id}/chat`) } const signIn = async (formData: FormData) => { "use server" const email = formData.get("email") as string const password = formData.get("password") as string const cookieStore = cookies() const supabase = createClient(cookieStore) const { data, error } = await supabase.auth.signInWithPassword({ email, password }) if (error) { return redirect(`/login?message=${error.message}`) } const { data: homeWorkspace, error: homeWorkspaceError } = await supabase .from("workspaces") .select("*") .eq("user_id", data.user.id) .eq("is_home", true) .single() if (!homeWorkspace) { throw new Error( homeWorkspaceError?.message || "An unexpected error occurred" ) } console.log("======>Redirecting to workspace:", homeWorkspace.id) return redirect(`/${homeWorkspace.id}/chat`) } const getEnvVarOrEdgeConfigValue = async (name: string) => { "use server" if (process.env.EDGE_CONFIG) { return await get(name) } return process.env[name] } const signUp = async (formData: FormData) => { "use server" const email = formData.get("email") as string const password = formData.get("password") as string const emailDomainWhitelistPatternsString = await getEnvVarOrEdgeConfigValue( "EMAIL_DOMAIN_WHITELIST" ) const emailDomainWhitelist = emailDomainWhitelistPatternsString?.trim() ? emailDomainWhitelistPatternsString?.split(",") : [] const emailWhitelistPatternsString = await getEnvVarOrEdgeConfigValue("EMAIL_WHITELIST") const emailWhitelist = emailWhitelistPatternsString?.trim() ? emailWhitelistPatternsString?.split(",") : [] // If there are whitelist patterns, check if the email is allowed to sign up if (emailDomainWhitelist.length > 0 || emailWhitelist.length > 0) { const domainMatch = emailDomainWhitelist?.includes(email.split("@")[1]) const emailMatch = emailWhitelist?.includes(email) if (!domainMatch && !emailMatch) { return redirect( `/login?message=Email ${email} is not allowed to sign up.` ) } } const cookieStore = cookies() const supabase = createClient(cookieStore) const { error } = await supabase.auth.signUp({ email, password, options: { // USE IF YOU WANT TO SEND EMAIL VERIFICATION, ALSO CHANGE TOML FILE // emailRedirectTo: `${origin}/auth/callback` } }) if (error) { console.error(error) return redirect(`/login?message=${error.message}`) } return redirect("/setup") // USE IF YOU WANT TO SEND EMAIL VERIFICATION, ALSO CHANGE TOML FILE // return redirect("/login?message=Check email to continue sign in process") } const handleResetPassword = async (formData: FormData) => { "use server" const origin = headers().get("origin") const email = formData.get("email") as string const cookieStore = cookies() const supabase = createClient(cookieStore) const { error } = await supabase.auth.resetPasswordForEmail(email, { redirectTo: `${origin}/auth/callback?next=/login/password` }) if (error) { return redirect(`/login?message=${error.message}`) } return redirect("/login?message=Check email to reset password") } return (
Login Sign Up
Forgot your password?
{searchParams?.message && (

{searchParams.message}

)}
) }