61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import axios, { HttpStatusCode } from "axios";
|
|
import { NextResponse } from "next/server";
|
|
import Data, { findKey } from "../data";
|
|
|
|
const users = new Data<{
|
|
[key: string]: { username: string; password: string };
|
|
}>("sentryx/users.json", { admin: { username: "admin", password: "admin" } });
|
|
|
|
const sessions = new Data<{ [key: string]: string }>(
|
|
"sentryx/sessions.json",
|
|
{}
|
|
);
|
|
|
|
export async function POST(request: Request) {
|
|
const body = await request.json();
|
|
|
|
if (!body.username || !body.password)
|
|
return NextResponse.json(
|
|
{ message: "Credentials are empty" },
|
|
{ status: HttpStatusCode.BadRequest }
|
|
);
|
|
|
|
const uuid = findKey(
|
|
users.data,
|
|
(u) => u.username == body.username && u.password == body.password
|
|
);
|
|
|
|
if (!uuid) {
|
|
return NextResponse.json(
|
|
{ message: "Invalid username or password" },
|
|
{ status: HttpStatusCode.BadRequest }
|
|
);
|
|
}
|
|
|
|
const sessionId = "SESH-" + crypto.randomUUID();
|
|
|
|
sessions.data[sessionId] = String(uuid);
|
|
|
|
sessions.write();
|
|
|
|
return NextResponse.json({ message: "ok", sessionId });
|
|
}
|
|
|
|
export async function GET(request: Request) {
|
|
const { searchParams } = new URL(request.url);
|
|
|
|
const sessionId = searchParams.get("sessionId") || "";
|
|
|
|
if (!sessions.data[sessionId])
|
|
return NextResponse.json(
|
|
{ message: "Invalid session" },
|
|
{ status: HttpStatusCode.Unauthorized }
|
|
);
|
|
|
|
return NextResponse.json({ message: "ok" });
|
|
}
|
|
|
|
export default function validate(sessionId: string) {
|
|
return sessions.data[sessionId] != undefined;
|
|
}
|