This commit is contained in:
NextJS
2026-07-12 17:55:44 +00:00
parent 4ed4a10eae
commit e324a95625
28 changed files with 1087 additions and 114 deletions
+31 -9
View File
@@ -1,4 +1,5 @@
import { timingSafeEqual } from "node:crypto";
import type { AdminRole } from "@/lib/auth/roles";
function safeEqual(a: string, b: string): boolean {
const aBuf = Buffer.from(a);
@@ -16,15 +17,36 @@ export function getAdminPassword(): string | null {
return password || null;
}
export function verifyAdminCredentials(
export function getSupervisorUsername(): string {
return process.env.SUPERVISOR_USERNAME?.trim() || "supervisor";
}
export function getSupervisorPassword(): string | null {
const password = process.env.SUPERVISOR_PASSWORD?.trim();
return password || null;
}
export function verifyCredentials(
username: string,
password: string,
): boolean {
const expectedUsername = getAdminUsername();
const expectedPassword = getAdminPassword();
if (!expectedPassword) return false;
return (
safeEqual(username, expectedUsername) &&
safeEqual(password, expectedPassword)
);
): AdminRole | null {
const adminPassword = getAdminPassword();
if (
adminPassword &&
safeEqual(username, getAdminUsername()) &&
safeEqual(password, adminPassword)
) {
return "admin";
}
const supervisorPassword = getSupervisorPassword();
if (
supervisorPassword &&
safeEqual(username, getSupervisorUsername()) &&
safeEqual(password, supervisorPassword)
) {
return "supervisor";
}
return null;
}