mirror of
https://github.com/certd/certd.git
synced 2026-04-24 04:08:53 +08:00
pref: 安全特性支持,站点隐藏功能
This commit is contained in:
@@ -4,6 +4,7 @@ import { UserService } from '../sys/authority/service/user-service.js';
|
||||
import { PlusService, SysInstallInfo, SysPrivateSettings, SysSettingsService } from '@certd/lib-server';
|
||||
import { nanoid } from 'nanoid';
|
||||
import crypto from 'crypto';
|
||||
import {SafeService} from "../sys/settings/safe-service.js";
|
||||
|
||||
@Autoload()
|
||||
@Scope(ScopeEnum.Request, { allowDowngrade: true })
|
||||
@@ -18,6 +19,8 @@ export class AutoAInitSite {
|
||||
sysSettingsService: SysSettingsService;
|
||||
@Inject()
|
||||
plusService: PlusService;
|
||||
@Inject()
|
||||
safeService: SafeService;
|
||||
|
||||
@Init()
|
||||
async init() {
|
||||
@@ -57,6 +60,8 @@ export class AutoAInitSite {
|
||||
logger.error('授权许可验证失败', e);
|
||||
}
|
||||
|
||||
//加载站点隐藏配置
|
||||
await this.safeService.reloadHiddenStatus(true)
|
||||
logger.info('初始化站点完成');
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
import {Inject, Provide, Scope, ScopeEnum} from '@midwayjs/core';
|
||||
import {SiteHidden, SysSafeSetting, SysSettingsService} from "@certd/lib-server";
|
||||
import fs from "fs";
|
||||
import {logger, utils} from "@certd/basic";
|
||||
import {cloneDeep, merge} from "lodash-es";
|
||||
|
||||
|
||||
export class HiddenStatus {
|
||||
|
||||
|
||||
isHidden = false;
|
||||
lastRequestTime = 0;
|
||||
intervalId: any = null;
|
||||
|
||||
hasUnHiddenFile() {
|
||||
if (fs.existsSync(`./data/.unhidden`)) {
|
||||
fs.unlinkSync(`./data/.unhidden`)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
updateRequestTime() {
|
||||
this.lastRequestTime = Date.now();
|
||||
}
|
||||
|
||||
startCheck(autoHiddenTimes = 5) {
|
||||
this.stopCheck()
|
||||
this.intervalId = setInterval(() => {
|
||||
//默认5分钟后自动隐藏
|
||||
if (!this.isHidden && Date.now() - this.lastRequestTime > 1000 * 60 * autoHiddenTimes) {
|
||||
this.isHidden = true;
|
||||
}
|
||||
}, 1000 * 60)
|
||||
}
|
||||
|
||||
stopCheck() {
|
||||
if (this.intervalId) {
|
||||
clearInterval(this.intervalId)
|
||||
this.intervalId = null
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export const hiddenStatus = new HiddenStatus();
|
||||
|
||||
|
||||
@Provide('safeService')
|
||||
@Scope(ScopeEnum.Request, {allowDowngrade: true})
|
||||
export class SafeService {
|
||||
|
||||
@Inject()
|
||||
sysSettingsService: SysSettingsService;
|
||||
|
||||
|
||||
async reloadHiddenStatus(immediate = false) {
|
||||
const hidden = await this.getHiddenSetting()
|
||||
if (hidden.enabled) {
|
||||
logger.error("启动站点隐藏");
|
||||
hiddenStatus.isHidden = false
|
||||
if (immediate) {
|
||||
hiddenStatus.isHidden = true;
|
||||
}
|
||||
const autoHiddenTimes = hidden.autoHiddenTimes || 5;
|
||||
hiddenStatus.startCheck(autoHiddenTimes);
|
||||
} else {
|
||||
logger.error("关闭站点隐藏");
|
||||
hiddenStatus.isHidden = false;
|
||||
hiddenStatus.stopCheck()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async getHiddenSetting(): Promise<SiteHidden> {
|
||||
const safeSetting = await this.getSafeSetting()
|
||||
return safeSetting.hidden || {enabled: false}
|
||||
}
|
||||
|
||||
async getSafeSetting() {
|
||||
return await this.sysSettingsService.getSetting<SysSafeSetting>(SysSafeSetting)
|
||||
}
|
||||
|
||||
async hiddenImmediately() {
|
||||
return hiddenStatus.isHidden = true
|
||||
}
|
||||
|
||||
async saveSafeSetting(body: SysSafeSetting) {
|
||||
|
||||
// 更新hidden配置
|
||||
if (body.hidden.openPassword) {
|
||||
body.hidden.openPassword = utils.hash.md5(body.hidden.openPassword);
|
||||
}
|
||||
const blankSetting = new SysSafeSetting()
|
||||
const setting = await this.getSafeSetting()
|
||||
const newSetting = merge(blankSetting, cloneDeep(setting), body);
|
||||
if (newSetting.hidden?.enabled && !newSetting.hidden?.openPassword) {
|
||||
throw new Error("首次设置需要填写解锁密码")
|
||||
}
|
||||
|
||||
if(isNaN(newSetting.hidden.autoHiddenTimes) || newSetting.hidden.autoHiddenTimes < 1){
|
||||
newSetting.hidden.autoHiddenTimes = 1
|
||||
}
|
||||
|
||||
await this.sysSettingsService.saveSetting(newSetting);
|
||||
|
||||
await this.reloadHiddenStatus(false)
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user