76 lines
2.6 KiB
TypeScript
76 lines
2.6 KiB
TypeScript
'use server'
|
|
|
|
import { supabase } from '@/lib/supabase'
|
|
import { redirect } from 'next/navigation'
|
|
import { cookies } from 'next/headers'
|
|
|
|
export async function login(prevState: any, formData: FormData) {
|
|
const username = formData.get('username') as string
|
|
const password = formData.get('password') as string
|
|
const remember = formData.get('remember') === 'on'
|
|
|
|
if (!username || !password) {
|
|
return { message: 'Username and password are required' }
|
|
}
|
|
|
|
try {
|
|
// 1. Check Petugas (Admin - Role 1/Admin)
|
|
const { data: petugas, error: petugasError } = await supabase
|
|
.from('petugas_posyandu')
|
|
.select('*')
|
|
.eq('username', username)
|
|
.eq('password', password) // Plain text password check as requested
|
|
.single()
|
|
|
|
if (petugas) {
|
|
// Set session/cookie for Admin
|
|
// In a real app, use a secure session library. For this demo, simple cookies.
|
|
const cookieStore = await cookies()
|
|
cookieStore.set('user_session', JSON.stringify({
|
|
id: petugas.id,
|
|
role: 'admin',
|
|
username: petugas.username,
|
|
name: petugas.nama
|
|
}), { secure: true, httpOnly: true, maxAge: remember ? 60 * 60 * 24 * 7 : 60 * 60 * 24 })
|
|
|
|
redirect('/dashboard') // Redirect to dashboard or appropriate page
|
|
}
|
|
|
|
// 2. Check Akun Balita (User - Role 2/User)
|
|
const { data: user, error: userError } = await supabase
|
|
.from('akun_balita')
|
|
.select('*')
|
|
.eq('username', username)
|
|
.eq('password', password) // Plain text password check as requested
|
|
.single()
|
|
|
|
if (user) {
|
|
// Set session/cookie for User
|
|
const cookieStore = await cookies()
|
|
cookieStore.set('user_session', JSON.stringify({
|
|
id: user.id,
|
|
role: 'user',
|
|
username: user.username,
|
|
name: user.nama_orang_tua // Or nama_anak depending on preference
|
|
}), { secure: true, httpOnly: true, maxAge: remember ? 60 * 60 * 24 * 7 : 60 * 60 * 24 })
|
|
|
|
redirect('/user-dashboard') // Redirect to user dashboard
|
|
}
|
|
|
|
return { message: 'Invalid username or password' }
|
|
|
|
} catch (error: any) {
|
|
if (error.message === 'NEXT_REDIRECT') {
|
|
throw error
|
|
}
|
|
console.error('Login error:', error)
|
|
return { message: 'An error occurred during login' }
|
|
}
|
|
}
|
|
|
|
export async function logout() {
|
|
const cookieStore = await cookies()
|
|
cookieStore.delete('user_session')
|
|
redirect('/')
|
|
}
|