import type { APIRoute } from 'astro'; /* ── In-memory user store ──────────────────────────────────── */ export const users = new Map(); // Seed users users.set('junwon', { id: 'junwon', name: 'Junwon', password: 'palace1', avatar: 'J' }); users.set('sungho', { id: 'sungho', name: 'Sungho', password: 'palace2', avatar: 'S' }); users.set('mikyung', { id: 'mikyung', name: 'Mikyung', password: 'palace3', avatar: 'M' }); users.set('soojin', { id: 'soojin', name: 'Soojin', password: 'palace4', avatar: 'S' }); /* ── Simple token store (token → userId) ───────────────────── */ export const tokens = new Map(); function generateToken(): string { return Math.random().toString(36).slice(2) + Date.now().toString(36); } export function getUserIdFromToken(token: string | null | undefined): string | null { if (!token) return null; return tokens.get(token) || null; } /* ── POST /family/api/auth ─────────────────────────────────── */ export const POST: APIRoute = async ({ request }) => { const body = await request.json(); const { id, password } = body; if (!id || !password) { return new Response(JSON.stringify({ error: 'ID and password are required' }), { status: 400, headers: { 'Content-Type': 'application/json' }, }); } const uid = id.trim().toLowerCase(); const user = users.get(uid); if (user) { // Existing user — check password if (user.password !== password) { return new Response(JSON.stringify({ error: 'Invalid password' }), { status: 401, headers: { 'Content-Type': 'application/json' }, }); } } else { // Auto-register new user users.set(uid, { id: uid, name: uid.charAt(0).toUpperCase() + uid.slice(1), password, avatar: uid.charAt(0).toUpperCase(), }); } const token = generateToken(); tokens.set(token, uid); const u = users.get(uid)!; return new Response(JSON.stringify({ token, user: { id: u.id, name: u.name, avatar: u.avatar } }), { status: 200, headers: { 'Content-Type': 'application/json' }, }); };