mirror of
https://github.com/certd/certd.git
synced 2026-05-16 21:27:34 +08:00
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
|
|
import { Inject, Provide, Scope, ScopeEnum } from "@midwayjs/core";
|
||
|
|
import { AddonService, SysSettingsService } from "@certd/lib-server";
|
||
|
|
import { logger } from "@certd/basic";
|
||
|
|
import { ICaptchaAddon } from "../../../plugins/plugin-captcha/api.js";
|
||
|
|
|
||
|
|
@Provide()
|
||
|
|
@Scope(ScopeEnum.Request, { allowDowngrade: true })
|
||
|
|
export class CaptchaService {
|
||
|
|
@Inject()
|
||
|
|
sysSettingsService: SysSettingsService;
|
||
|
|
@Inject()
|
||
|
|
addonService: AddonService;
|
||
|
|
|
||
|
|
|
||
|
|
async getCaptcha(captchaAddonId?:number){
|
||
|
|
if (!captchaAddonId) {
|
||
|
|
const settings = await this.sysSettingsService.getPublicSettings()
|
||
|
|
captchaAddonId = settings.captchaAddonId ?? 0
|
||
|
|
}
|
||
|
|
const addon:ICaptchaAddon = await this.addonService.getAddonById(captchaAddonId,true,0)
|
||
|
|
if (!addon) {
|
||
|
|
throw new Error('验证码插件还未配置')
|
||
|
|
}
|
||
|
|
return await addon.getCaptcha()
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
async doValidate(opts:{form:any,must?:boolean,captchaAddonId?:number}){
|
||
|
|
if (!opts.captchaAddonId) {
|
||
|
|
const settings = await this.sysSettingsService.getPublicSettings()
|
||
|
|
opts.captchaAddonId = settings.captchaAddonId ?? 0
|
||
|
|
}
|
||
|
|
const addon = await this.addonService.getById(opts.captchaAddonId,0)
|
||
|
|
if (!addon) {
|
||
|
|
if (opts.must) {
|
||
|
|
throw new Error('请先配置验证码插件');
|
||
|
|
}
|
||
|
|
logger.warn('验证码插件还未配置,忽略验证码校验')
|
||
|
|
return true
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!opts.form) {
|
||
|
|
throw new Error('请输入验证码');
|
||
|
|
}
|
||
|
|
const res = await addon.onValidate(opts.form)
|
||
|
|
if (!res) {
|
||
|
|
throw new Error('验证码错误');
|
||
|
|
}
|
||
|
|
|
||
|
|
return true
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|