59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
import { cookies } from 'next/headers'
|
|
|
|
const ADMIN_PASSWORD = 'HelloWorld'
|
|
const ADMIN_SESSION_COOKIE = 'admin_session'
|
|
|
|
// Check if admin is authenticated
|
|
export async function isAdminAuthenticated(): Promise<boolean> {
|
|
try {
|
|
const cookieStore = await cookies()
|
|
const session = cookieStore.get(ADMIN_SESSION_COOKIE)?.value
|
|
return session === 'authenticated'
|
|
} catch (error) {
|
|
return false
|
|
}
|
|
}
|
|
|
|
// Verify admin password
|
|
export function verifyAdminPassword(password: string): boolean {
|
|
return password === ADMIN_PASSWORD
|
|
}
|
|
|
|
// Set admin session
|
|
export async function setAdminSession(): Promise<void> {
|
|
const cookieStore = await cookies()
|
|
cookieStore.set(ADMIN_SESSION_COOKIE, 'authenticated', {
|
|
httpOnly: true,
|
|
secure: process.env.NODE_ENV === 'production',
|
|
sameSite: 'lax',
|
|
maxAge: 60 * 60 * 24, // 24 hours
|
|
})
|
|
}
|
|
|
|
// Clear admin session
|
|
export async function clearAdminSession(): Promise<void> {
|
|
const cookieStore = await cookies()
|
|
cookieStore.delete(ADMIN_SESSION_COOKIE)
|
|
}
|
|
|
|
// Get admin session from request (for API routes)
|
|
export function getAdminSessionFromRequest(request: Request): boolean {
|
|
try {
|
|
const cookieHeader = request.headers.get('cookie')
|
|
if (!cookieHeader) {
|
|
return false
|
|
}
|
|
|
|
const cookies = cookieHeader.split(';').reduce((acc, cookie) => {
|
|
const [key, value] = cookie.trim().split('=')
|
|
acc[key] = value
|
|
return acc
|
|
}, {} as Record<string, string>)
|
|
|
|
return cookies[ADMIN_SESSION_COOKIE] === 'authenticated'
|
|
} catch (error) {
|
|
return false
|
|
}
|
|
}
|
|
|