79 lines
2.0 KiB
TypeScript
79 lines
2.0 KiB
TypeScript
'use server'
|
||
|
||
import { revalidatePath } from 'next/cache'
|
||
import { redirect } from 'next/navigation'
|
||
import { createClient } from '@/lib/supabase/server'
|
||
import { getFirstAdminSetupState } from '@/lib/auth/first-admin-setup'
|
||
import { createInternalAuthUser } from '@/lib/auth/internal-users'
|
||
|
||
export async function login(formData: FormData) {
|
||
const supabase = await createClient()
|
||
|
||
const data = {
|
||
email: formData.get('email') as string,
|
||
password: formData.get('password') as string,
|
||
}
|
||
|
||
const { error } = await supabase.auth.signInWithPassword(data)
|
||
|
||
if (error) {
|
||
redirect(`/login?error=true&message=${encodeURIComponent(error.message)}`)
|
||
}
|
||
|
||
revalidatePath('/', 'layout')
|
||
redirect('/')
|
||
}
|
||
|
||
export async function signup(formData: FormData) {
|
||
const setupState = await getFirstAdminSetupState()
|
||
|
||
if (setupState.errorMessage) {
|
||
redirect(`/register?error=true&message=${encodeURIComponent(setupState.errorMessage)}`)
|
||
}
|
||
|
||
if (!setupState.available) {
|
||
redirect(
|
||
`/login?error=true&message=${encodeURIComponent(
|
||
'Kayıt kapalı. Bu self-host kurulumunda ilk admin hesabı zaten oluşturulmuş.',
|
||
)}`,
|
||
)
|
||
}
|
||
|
||
const data = {
|
||
email: formData.get('email') as string,
|
||
password: formData.get('password') as string,
|
||
}
|
||
|
||
try {
|
||
await createInternalAuthUser({
|
||
email: data.email,
|
||
password: data.password,
|
||
role: 'freelancer',
|
||
reason: 'first_admin',
|
||
})
|
||
} catch (error) {
|
||
const message =
|
||
error instanceof Error ? error.message : 'Kullanıcı oluşturulamadı.'
|
||
redirect(`/register?error=true&message=${encodeURIComponent(message)}`)
|
||
}
|
||
|
||
const supabase = await createClient()
|
||
const { error } = await supabase.auth.signInWithPassword(data)
|
||
|
||
if (error) {
|
||
redirect(`/login?error=true&message=${encodeURIComponent(error.message)}`)
|
||
}
|
||
|
||
revalidatePath('/', 'layout')
|
||
redirect('/')
|
||
}
|
||
|
||
export async function signOut() {
|
||
const supabase = await createClient()
|
||
|
||
await supabase.auth.signOut()
|
||
|
||
revalidatePath('/', 'layout')
|
||
redirect('/login')
|
||
}
|