import * as fs from 'fs'; import * as path from 'path'; import { Injectable } from '@nestjs/common'; import type { LoginSettingsVo } from './login-settings.dto'; const SETTINGS_DIR = path.resolve(process.cwd(), 'config', 'runtime'); const SETTINGS_FILE = path.resolve(SETTINGS_DIR, 'login.settings.json'); const DEFAULT_SETTINGS: LoginSettingsVo = { isCaptcha: false, bg: '', isSiteCaptcha: false, siteBg: '', }; @Injectable() export class LoginSettingsService { async getSettings(): Promise { try { const buf = await fs.promises.readFile(SETTINGS_FILE, 'utf8'); const json = JSON.parse(buf); return { ...DEFAULT_SETTINGS, ...json } as LoginSettingsVo; } catch { return { ...DEFAULT_SETTINGS }; } } async updateSettings( patch: Partial, ): Promise { const current = await this.getSettings(); const next: LoginSettingsVo = { ...current, ...patch }; await fs.promises.mkdir(SETTINGS_DIR, { recursive: true }); await fs.promises.writeFile( SETTINGS_FILE, JSON.stringify(next, null, 2), 'utf8', ); return next; } static getSettingsPath() { return SETTINGS_FILE; } }