2025-08-23 13:20:01 +08:00
|
|
|
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<LoginSettingsVo> {
|
|
|
|
|
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 };
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-27 11:24:22 +08:00
|
|
|
async updateSettings(
|
|
|
|
|
patch: Partial<LoginSettingsVo>,
|
|
|
|
|
): Promise<LoginSettingsVo> {
|
2025-08-23 13:20:01 +08:00
|
|
|
const current = await this.getSettings();
|
|
|
|
|
const next: LoginSettingsVo = { ...current, ...patch };
|
|
|
|
|
await fs.promises.mkdir(SETTINGS_DIR, { recursive: true });
|
2025-08-27 11:24:22 +08:00
|
|
|
await fs.promises.writeFile(
|
|
|
|
|
SETTINGS_FILE,
|
|
|
|
|
JSON.stringify(next, null, 2),
|
|
|
|
|
'utf8',
|
|
|
|
|
);
|
2025-08-23 13:20:01 +08:00
|
|
|
return next;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static getSettingsPath() {
|
|
|
|
|
return SETTINGS_FILE;
|
|
|
|
|
}
|
2025-08-27 11:24:22 +08:00
|
|
|
}
|