import { NextRequest, NextResponse } from 'next/server'; import { cookies } from 'next/headers'; import { logger } from '@/lib/logger'; import { encryptSession, decryptSession } from '@/lib/auth/crypto'; import { SESSION_COOKIE, SESSION_COOKIE_MAX_AGE } from '@/lib/auth/session-cookie'; const COOKIE_OPTIONS = { httpOnly: true, secure: process.env.NODE_ENV === 'production', sameSite: 'lax' as const, path: '/', maxAge: SESSION_COOKIE_MAX_AGE, }; export async function POST(request: NextRequest) { try { const { serverUrl, username, password } = await request.json(); if (!serverUrl || !username || !password) { return NextResponse.json({ error: 'Missing required fields' }, { status: 400 }); } const token = encryptSession(serverUrl, username, password); const cookieStore = await cookies(); cookieStore.set(SESSION_COOKIE, token, COOKIE_OPTIONS); return NextResponse.json({ ok: true }); } catch (error) { logger.error('Session store error', { error: error instanceof Error ? error.message : 'Unknown error' }); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } } export async function GET() { try { const cookieStore = await cookies(); const token = cookieStore.get(SESSION_COOKIE)?.value; if (!token) { return NextResponse.json({ error: 'No session' }, { status: 401 }); } const credentials = decryptSession(token); if (!credentials) { cookieStore.delete(SESSION_COOKIE); return NextResponse.json({ error: 'Invalid session' }, { status: 401 }); } return NextResponse.json(credentials, { headers: { 'Cache-Control': 'no-store, no-cache, must-revalidate' }, }); } catch (error) { logger.error('Session read error', { error: error instanceof Error ? error.message : 'Unknown error' }); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } } export async function DELETE() { try { const cookieStore = await cookies(); cookieStore.delete(SESSION_COOKIE); return NextResponse.json({ ok: true }); } catch (error) { logger.error('Session clear error', { error: error instanceof Error ? error.message : 'Unknown error' }); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } }