'use server'; import 'server-only'; import { encodedRedirect } from '@/utils/utils'; import { createServerClient } from '@/utils/supabase'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; export const signUp = async (formData: FormData) => { const email = formData.get('email') as string; const password = formData.get('password') as string; const supabase = await createServerClient(); const origin = (await headers()).get('origin'); if (!email || !password) { return encodedRedirect( 'error', '/sign-up', 'Email & password are required', ); } const { error } = await supabase.auth.signUp({ email, password, options: { emailRedirectTo: `${origin}/auth/callback`, }, }); if (error) { console.error(error.code + ': ' + error.message); return encodedRedirect( 'error', '/sign-up', 'Thanks for signing up! Please check your email for a verification link.', ); } else { return encodedRedirect( 'success', '/sign-up', 'Thanks for signing up! Please check your email for a verification link.', ); } }; export const signIn = async (formData: FormData) => { const email = formData.get('email') as string; const password = formData.get('password') as string; const supabase = await createServerClient(); const { error } = await supabase.auth.signInWithPassword({ email, password, }); if (error) { return encodedRedirect('error', '/sign-in', error.message); } return redirect('/protected'); }; export const forgotPassword = async (formData: FormData) => { const email = formData.get('email') as string; const supabase = await createServerClient(); const origin = (await headers()).get('origin'); const callbackUrl = formData.get('callbackUrl') as string; if (!email) { return encodedRedirect('error', '/forgot-password', 'Email is required'); } const { error } = await supabase.auth.resetPasswordForEmail(email, { redirectTo: `${origin}/auth/callback?redirect_to=/protected/reset-password`, }); if (error) { console.error(error.message); return encodedRedirect( 'error', '/forgot-password', 'Could not reset password', ); } if (callbackUrl) { return redirect(callbackUrl); } return encodedRedirect( 'success', '/forgot-password', 'Check your email for a link to reset your password.', ); }; export const resetPassword = async (formData: FormData) => { const supabase = await createServerClient(); const password = formData.get('password') as string; const confirmPassword = formData.get('confirmPassword') as string; if (!password || !confirmPassword) { encodedRedirect( 'error', '/protected/reset-password', 'Password and confirm password are required', ); } if (password !== confirmPassword) { encodedRedirect( 'error', '/protected/reset-password', 'Passwords do not match', ); } const { error } = await supabase.auth.updateUser({ password: password, }); if (error) { encodedRedirect( 'error', '/protected/reset-password', 'Password update failed', ); } encodedRedirect('success', '/protected/reset-password', 'Password updated'); }; export const signOut = async () => { const supabase = await createServerClient(); await supabase.auth.signOut(); return redirect('/sign-in'); };