2026-01-28 23:53:57 +08:00
|
|
|
import { logger } from '@certd/basic';
|
2024-10-14 10:57:12 +08:00
|
|
|
import { PlusService, SysInstallInfo, SysPrivateSettings, SysSettingsService } from '@certd/lib-server';
|
2026-01-28 23:53:57 +08:00
|
|
|
import { Autoload, Config, Init, Inject, Scope, ScopeEnum } from '@midwayjs/core';
|
2024-08-27 13:46:19 +08:00
|
|
|
import crypto from 'crypto';
|
2026-01-28 23:53:57 +08:00
|
|
|
import { nanoid } from 'nanoid';
|
|
|
|
|
import { UserService } from '../sys/authority/service/user-service.js';
|
|
|
|
|
import { SafeService } from "../sys/settings/safe-service.js";
|
2024-09-24 11:11:08 +08:00
|
|
|
|
2024-07-15 00:30:33 +08:00
|
|
|
@Autoload()
|
2024-12-23 00:24:31 +08:00
|
|
|
@Scope(ScopeEnum.Request, { allowDowngrade: true })
|
2024-12-23 23:33:13 +08:00
|
|
|
export class AutoAInitSite {
|
2024-07-15 00:30:33 +08:00
|
|
|
@Inject()
|
|
|
|
|
userService: UserService;
|
|
|
|
|
|
2024-08-29 09:57:27 +08:00
|
|
|
@Config('typeorm.dataSource.default.type')
|
|
|
|
|
dbType: string;
|
|
|
|
|
|
2024-07-15 00:30:33 +08:00
|
|
|
@Inject()
|
|
|
|
|
sysSettingsService: SysSettingsService;
|
2024-09-24 11:11:08 +08:00
|
|
|
@Inject()
|
|
|
|
|
plusService: PlusService;
|
2025-04-14 17:40:23 +08:00
|
|
|
@Inject()
|
|
|
|
|
safeService: SafeService;
|
2024-07-15 00:30:33 +08:00
|
|
|
|
|
|
|
|
@Init()
|
|
|
|
|
async init() {
|
|
|
|
|
logger.info('初始化站点开始');
|
2024-08-29 10:09:22 +08:00
|
|
|
await this.startOptimizeDb();
|
2024-08-27 13:46:19 +08:00
|
|
|
//安装信息
|
2024-07-15 00:30:33 +08:00
|
|
|
const installInfo: SysInstallInfo = await this.sysSettingsService.getSetting(SysInstallInfo);
|
|
|
|
|
if (!installInfo.siteId) {
|
|
|
|
|
installInfo.siteId = nanoid();
|
|
|
|
|
await this.sysSettingsService.saveSetting(installInfo);
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-27 13:46:19 +08:00
|
|
|
//private信息
|
|
|
|
|
const privateInfo = await this.sysSettingsService.getSetting<SysPrivateSettings>(SysPrivateSettings);
|
|
|
|
|
if (!privateInfo.jwtKey) {
|
|
|
|
|
privateInfo.jwtKey = nanoid();
|
|
|
|
|
await this.sysSettingsService.saveSetting(privateInfo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!privateInfo.encryptSecret) {
|
|
|
|
|
const secretKey = crypto.randomBytes(32);
|
|
|
|
|
privateInfo.encryptSecret = secretKey.toString('base64');
|
|
|
|
|
await this.sysSettingsService.saveSetting(privateInfo);
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-15 12:59:40 +08:00
|
|
|
await this.sysSettingsService.backupSecret();
|
|
|
|
|
|
2024-12-26 23:15:35 +08:00
|
|
|
//加载一次密钥
|
|
|
|
|
await this.sysSettingsService.getSecret();
|
|
|
|
|
|
2026-02-11 00:07:29 +08:00
|
|
|
//加载设置
|
|
|
|
|
await this.sysSettingsService.reloadSettings();
|
2024-10-12 16:49:49 +08:00
|
|
|
|
2024-08-02 22:58:29 +08:00
|
|
|
// 授权许可
|
2024-10-10 17:50:04 +08:00
|
|
|
try {
|
|
|
|
|
await this.plusService.verify();
|
|
|
|
|
} catch (e) {
|
|
|
|
|
logger.error('授权许可验证失败', e);
|
|
|
|
|
}
|
2024-08-02 22:58:29 +08:00
|
|
|
|
2025-04-14 17:40:23 +08:00
|
|
|
//加载站点隐藏配置
|
|
|
|
|
await this.safeService.reloadHiddenStatus(true)
|
2024-07-15 00:30:33 +08:00
|
|
|
logger.info('初始化站点完成');
|
|
|
|
|
}
|
2024-08-29 09:57:27 +08:00
|
|
|
|
2024-08-29 10:09:22 +08:00
|
|
|
async startOptimizeDb() {
|
2024-08-29 09:57:27 +08:00
|
|
|
//优化数据库
|
|
|
|
|
//检查当前数据库类型为sqlite
|
|
|
|
|
if (this.dbType === 'better-sqlite3') {
|
2024-08-29 10:09:22 +08:00
|
|
|
const res = await this.userService.repository.query('PRAGMA auto_vacuum;');
|
|
|
|
|
if (!(res && res.length > 0 && res[0].auto_vacuum > 0)) {
|
|
|
|
|
//未开启自动优化
|
|
|
|
|
await this.userService.repository.query('PRAGMA auto_vacuum = INCREMENTAL;');
|
|
|
|
|
logger.info('sqlite数据库自动优化已开启');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const optimizeDb = async () => {
|
|
|
|
|
logger.info('sqlite数据库空间优化开始');
|
|
|
|
|
await this.userService.repository.query('VACUUM');
|
2024-08-29 09:57:27 +08:00
|
|
|
logger.info('sqlite数据库空间优化完成');
|
|
|
|
|
};
|
2024-08-29 10:09:22 +08:00
|
|
|
await optimizeDb();
|
2024-08-29 09:57:27 +08:00
|
|
|
setInterval(optimizeDb, 1000 * 60 * 60 * 24);
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-07-15 00:30:33 +08:00
|
|
|
}
|