Initial commit

This commit is contained in:
2026-07-28 08:58:44 +02:00
commit c3c1f5e216
46 changed files with 10231 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
import type { APIRoute } from "astro";
export const POST: APIRoute = async ({ request, cookies, redirect, locals }) => {
let username = "";
let password = "";
const contentType = request.headers.get("content-type") ?? "";
try {
if (contentType.includes("application/json")) {
const body = await request.json();
username = body.username ?? "";
password = body.password ?? "";
} else {
const formData = await request.formData();
username = formData.get("username")?.toString() ?? "";
password = formData.get("password")?.toString() ?? "";
}
} catch (err) {
console.error("Failed to parse login request body:", err);
return new Response(JSON.stringify({ error: "Invalid request body" }), {
status: 400,
headers: { "Content-Type": "application/json" },
});
}
if (!username || !password) {
return new Response(JSON.stringify({ error: "Username and password are required" }), {
status: 400,
headers: { "Content-Type": "application/json" },
});
}
try {
await locals.pb.collection("users").authWithPassword(username, password);
cookies.set("pb_auth", locals.pb.authStore.exportToCookie(), {
path: "/",
httpOnly: true,
sameSite: "lax",
maxAge: 60 * 60 * 24 * 7, // 1 week
});
return new Response(JSON.stringify({ success: true }), {
status: 200,
headers: { "Content-Type": "application/json" },
});
} catch {
return new Response(JSON.stringify({ error: "Invalid credentials" }), {
status: 401,
headers: { "Content-Type": "application/json" },
});
}
};