sync
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user