Files
BYW-VoiceHub/server/utils/system-settings-helper.ts
T

41 lines
1.5 KiB
TypeScript

import { db } from '~/drizzle/db'
import { systemSettings } from '~/drizzle/schema'
import type { SystemSettings } from '~/drizzle/schema'
/**
* 统一读取系统设置,读取失败时返回 null,由调用方按安全默认值降级。
* 说明:随主分支 minimize-Redis 重构,此处直接查询数据库,不再经过缓存层。
*/
export async function getSystemSettingsCached(): Promise<SystemSettings | null> {
try {
const [settings] = await db.select().from(systemSettings).limit(1)
return settings ?? null
} catch (error) {
console.warn('[SystemSettings] 读取系统设置失败:', error)
return null
}
}
export async function getForcePasswordChangeOnFirstLogin(): Promise<boolean> {
const settings = await getSystemSettingsCached()
return settings && typeof settings.forcePasswordChangeOnFirstLogin === 'boolean'
? settings.forcePasswordChangeOnFirstLogin
: false
}
export function computeRequirePasswordChange(
user: { forcePasswordChange?: boolean | null; passwordChangedAt?: Date | string | null },
forcePasswordChangeOnFirstLogin: boolean
): boolean {
return !!user.forcePasswordChange || (forcePasswordChangeOnFirstLogin && !user.passwordChangedAt)
}
export async function resolveRequirePasswordChange(user: {
forcePasswordChange?: boolean | null
passwordChangedAt?: Date | string | null
}): Promise<boolean> {
if (user.forcePasswordChange) return true
if (user.passwordChangedAt) return false
return computeRequirePasswordChange(user, await getForcePasswordChangeOnFirstLogin())
}