Files
minecraft/dashboard/src/app/api/approved/route.ts
T

74 lines
2.2 KiB
TypeScript

import { NextRequest } from "next/server";
import {
listApproved,
approvePlayer,
revokePlayer,
reopenWindow,
resetPassword,
forceReregister,
importFromWhitelist,
} from "@/server/authflow";
import { whitelistList, easyauthList, authProvider, registrationCommand } from "@/server/mc";
import { ok, fail, readJson, handle } from "@/server/api";
export const dynamic = "force-dynamic";
export async function GET() {
return handle(async () => {
let whitelist: string[] | null = null;
let registered: string[] | null = null;
try {
whitelist = await whitelistList();
} catch {}
try {
registered = await easyauthList();
} catch {}
return ok({ approved: listApproved(), whitelist, registered, authProvider: authProvider(), registrationCommand: registrationCommand() });
});
}
type Body = {
op: "approve" | "revoke" | "reopen" | "reset-password" | "force-reregister" | "import-whitelist";
username?: string;
note?: string;
};
export async function POST(req: NextRequest) {
return handle(async () => {
const body = await readJson<Body>(req);
switch (body.op) {
case "approve": {
if (!body.username) return fail("Username required");
const player = await approvePlayer(body.username.trim(), body.note);
return ok(player);
}
case "revoke": {
if (!body.username) return fail("Username required");
await revokePlayer(body.username);
return ok({ revoked: true });
}
case "reopen": {
if (!body.username) return fail("Username required");
await reopenWindow(body.username);
return ok({ reopened: true });
}
case "reset-password": {
if (!body.username) return fail("Username required");
const temp = await resetPassword(body.username);
return ok({ tempPassword: temp });
}
case "force-reregister": {
if (!body.username) return fail("Username required");
await forceReregister(body.username);
return ok({ pending: true });
}
case "import-whitelist": {
const added = await importFromWhitelist();
return ok({ imported: added });
}
default:
return fail("Unknown operation");
}
});
}