30 lines
778 B
TypeScript
30 lines
778 B
TypeScript
import { timingSafeEqual } from 'node:crypto';
|
|
|
|
const ADMIN_PASSWORD = 'zhiniankeji666';
|
|
|
|
let adminSessionUnlocked = false;
|
|
|
|
function matchesAdminPassword(password: unknown): boolean {
|
|
if (typeof password !== 'string') return false;
|
|
|
|
const received = Buffer.from(password, 'utf8');
|
|
const expected = Buffer.from(ADMIN_PASSWORD, 'utf8');
|
|
return received.length === expected.length && timingSafeEqual(received, expected);
|
|
}
|
|
|
|
export function verifyAdminPassword(password: unknown): boolean {
|
|
const valid = matchesAdminPassword(password);
|
|
if (valid) {
|
|
adminSessionUnlocked = true;
|
|
}
|
|
return valid;
|
|
}
|
|
|
|
export function isAdminSessionUnlocked(): boolean {
|
|
return adminSessionUnlocked;
|
|
}
|
|
|
|
export function lockAdminSession(): void {
|
|
adminSessionUnlocked = false;
|
|
}
|