新增邮件发送和管理员功能
This commit is contained in:
@@ -2,31 +2,51 @@ import KvConst from '../const/kv-const';
|
||||
import setting from '../entity/setting';
|
||||
import orm from '../entity/orm';
|
||||
import { settingConst } from '../const/entity-const';
|
||||
import BizError from "../error/biz-error";
|
||||
import fileUtils from '../utils/file-utils';
|
||||
import r2Service from './r2-service';
|
||||
import emailService from './email-service';
|
||||
import accountService from './account-service';
|
||||
import userService from './user-service';
|
||||
import starService from './star-service';
|
||||
import constant from '../const/constant';
|
||||
import BizError from '../error/biz-error';
|
||||
|
||||
const settingService = {
|
||||
|
||||
async refresh(c) {
|
||||
const settingRow = await orm(c).select().from(setting).get();
|
||||
settingRow.resendTokens = JSON.parse(settingRow.resendTokens);
|
||||
await c.env.kv.put(KvConst.SETTING, JSON.stringify(settingRow));
|
||||
},
|
||||
|
||||
async query(c) {
|
||||
const setting = await c.env.kv.get(KvConst.SETTING, { type: 'json' });
|
||||
let domainList = c.env.domain;
|
||||
if (typeof domainList === 'string') {
|
||||
throw new BizError('环境变量domain必须是JSON类型');
|
||||
}
|
||||
domainList = domainList.map(item => '@' + item);
|
||||
setting.domainList = domainList;
|
||||
setting.siteKey = c.env.site_key;
|
||||
setting.r2Domain = c.env.r2_domain;
|
||||
return setting;
|
||||
},
|
||||
|
||||
async get(c) {
|
||||
const settingRow = await this.query(c);
|
||||
settingRow.siteKey = settingRow.siteKey ? `${settingRow.siteKey.slice(0, 11)}******` : null ;
|
||||
settingRow.secretKey = settingRow.secretKey ? `${settingRow.secretKey.slice(0, 11)}******`: null ;
|
||||
Object.keys(settingRow.resendTokens).forEach(key => {
|
||||
settingRow.resendTokens[key] = `${settingRow.resendTokens[key].slice(0, 11)}******`;
|
||||
});
|
||||
return settingRow
|
||||
},
|
||||
|
||||
async set(c, params) {
|
||||
if (params.registerVerify === 0 || params.addEmailVerify === 0) {
|
||||
if (!c.env.site_key || !c.env.secret_key) {
|
||||
throw new BizError('Turnstile密钥未配置,不能开启人机验证')
|
||||
}
|
||||
}
|
||||
const settingData = await this.query(c)
|
||||
let resendTokens = {...settingData.resendTokens,...params.resendTokens}
|
||||
Object.keys(resendTokens).forEach(domain => {
|
||||
if(!resendTokens[domain]) delete resendTokens[domain]
|
||||
})
|
||||
params.resendTokens = JSON.stringify(resendTokens)
|
||||
await orm(c).update(setting).set({ ...params }).returning().get();
|
||||
await this.refresh(c);
|
||||
},
|
||||
@@ -54,6 +74,42 @@ const settingService = {
|
||||
async isAddEmailVerify(c) {
|
||||
const { addEmailVerify } = await this.query(c);
|
||||
return addEmailVerify === settingConst.addEmailVerify.OPEN;
|
||||
},
|
||||
|
||||
async setBackground(c, params) {
|
||||
|
||||
const settingRow = await this.query(c);
|
||||
|
||||
|
||||
if (!c.env.r2) {
|
||||
throw new BizError('r2对象存储未配置不能上传背景');
|
||||
}
|
||||
|
||||
if (!settingRow.r2Domain) {
|
||||
throw new BizError('r2域名未配置不上传背景');
|
||||
}
|
||||
|
||||
const { background } = params;
|
||||
const file = fileUtils.base64ToFile(background);
|
||||
const arrayBuffer = await file.arrayBuffer();
|
||||
const key = constant.BACKGROUND_PREFIX + await fileUtils.getBuffHash(arrayBuffer) + fileUtils.getExtFileName(file.name);
|
||||
await r2Service.putObj(c, key, file, {
|
||||
contentType: file.type
|
||||
});
|
||||
|
||||
if (settingRow.background) {
|
||||
await r2Service.delete(c, settingRow.background);
|
||||
}
|
||||
|
||||
await orm(c).update(setting).set({ background: key }).run();
|
||||
await this.refresh(c);
|
||||
return key;
|
||||
},
|
||||
|
||||
async physicsDeleteAll(c) {
|
||||
await emailService.physicsDeleteAll(c);
|
||||
await accountService.physicsDeleteAll(c);
|
||||
await userService.physicsDeleteAll(c);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user