"use server"; // mock login e-Court: รับเฉพาะผู้ใช้ใน MOCK_USERS (user1–user5) + Demo1234 // → ตั้ง cookie oacCase ตาม format จริง (identity ของแอปอ่านผ่าน lib/session.ts // — บังคับด้วย middleware.ts) import { cookies } from "next/headers"; import { redirect } from "next/navigation"; import { buildOacCaseCookie, MOCK_USERS, OAC_CASE_COOKIE } from "@/utils/user"; const MOCK_PASSWORD = "Demo1234"; export async function login( username: string, password: string, ): Promise<{ ok: true } | { ok: false; error: string }> { // mock ตอบเร็วกว่าตา — หน่วงเล็กน้อยให้เห็นสถานะ "กำลังตรวจสอบ…" await new Promise((resolve) => setTimeout(resolve, 500)); const name = username.trim(); // username มาจาก dropdown เลือกผิดไม่ได้ — เช็ครายชื่อฝั่ง server เป็น defense กัน hand-craft if (!MOCK_USERS.includes(name) || password !== MOCK_PASSWORD) { return { ok: false, error: "รหัสผ่านไม่ถูกต้อง" }; } // u_userid ต่างกันต่อคน (= u_userlogin) — สิทธิ์ "แก้ไขได้เฉพาะของตัวเอง" (guard ด้วย // userId) ต้องแยกกันจริงทั้ง 5 คน ห้ามแชร์ค่าเดียว cookies().set(OAC_CASE_COOKIE, buildOacCaseCookie(name, name), { httpOnly: true, sameSite: "lax", path: "/", maxAge: 8 * 60 * 60, }); return { ok: true }; } export async function logout(): Promise { // ลบ cookie ด้วย path "/" เท่านั้น (ตรงกับตอน set) ไม่งั้น browser ไม่ลบให้ cookies().set(OAC_CASE_COOKIE, "", { path: "/", maxAge: 0 }); // redirect ใน action เอง — ให้ Next จัดการ navigation กลไกเดียว // (ถ้าให้ client router.replace เอง จะชนกับ re-render ของหน้ารายการที่เพิ่งเสีย session จน navigation ไม่เกิด) redirect("/note/login"); }