"use server"; import { redirect } from "next/navigation"; import { endSession, safeNext, startSession } from "@/lib/auth"; import { authenticateUser, createUser, UserError } from "@/lib/users"; import type { FormState } from "./types"; export async function signupAction(_prev: FormState, formData: FormData): Promise { try { const user = await createUser({ username: String(formData.get("username") ?? ""), email: String(formData.get("email") ?? ""), password: String(formData.get("password") ?? ""), name: String(formData.get("name") ?? ""), }); await startSession(user.id); } catch (e) { if (e instanceof UserError) return { error: e.message }; throw e; } redirect(safeNext(formData.get("next"))); } export async function loginAction(_prev: FormState, formData: FormData): Promise { const user = await authenticateUser(String(formData.get("login") ?? ""), String(formData.get("password") ?? "")); if (!user) return { error: "Incorrect username or password." }; await startSession(user.id); redirect(safeNext(formData.get("next"))); } export async function logoutAction() { await endSession(); redirect("/"); }