chore: 新网dns完善

This commit is contained in:
xiaojunnuo
2025-09-23 23:24:36 +08:00
parent 105f0bfde2
commit 298f7d9d52
10 changed files with 395 additions and 151 deletions
@@ -21,6 +21,7 @@ import { DomainParser } from "@certd/plugin-cert/dist/dns-provider/domain-parser
import punycode from "punycode.js";
import { SubDomainService } from "../../pipeline/service/sub-domain-service.js";
import { SubDomainsGetter } from "../../pipeline/service/getter/sub-domain-getter.js";
import { TaskServiceBuilder } from "../../pipeline/service/getter/task-service-getter.js";
type CnameCheckCacheValue = {
validating: boolean;
@@ -55,6 +56,10 @@ export class CnameRecordService extends BaseService<CnameRecordEntity> {
@Inject()
subDomainService: SubDomainService;
@Inject()
taskServiceBuilder: TaskServiceBuilder;
//@ts-ignore
getRepository() {
return this.repository;
@@ -248,8 +253,9 @@ export class CnameRecordService extends BaseService<CnameRecordEntity> {
});
}
const serviceGetter = this.taskServiceBuilder.create({userId:cnameProvider.userId})
const access = await this.accessService.getById(cnameProvider.accessId, cnameProvider.userId);
const context = {access, logger, http, utils, domainParser};
const context = {access, logger, http, utils, domainParser,serviceGetter};
const dnsProvider: IDnsProvider = await createDnsProvider({
dnsProviderType: cnameProvider.dnsProviderType,
context,
@@ -10,6 +10,9 @@ import { DomainVerifierGetter } from "./domain-verifier-getter.js";
import { DomainService } from "../../../cert/service/domain-service.js";
import { SubDomainService } from "../sub-domain-service.js";
const serviceNames = [
'ocrService',
]
export class TaskServiceGetter implements IServiceGetter{
private userId: number;
private appCtx : IMidwayContainer;
@@ -29,8 +32,14 @@ export class TaskServiceGetter implements IServiceGetter{
return await this.getNotificationService() as T
} else if (serviceName === 'domainVerifierGetter') {
return await this.getDomainVerifierGetter() as T
}else{
throw new Error(`service ${serviceName} not found`)
} else{
if(!serviceNames.includes(serviceName)){
throw new Error(`${serviceName} not in whitelist`)
}
const service = await this.appCtx.getAsync(serviceName)
if (! service){
throw new Error(`${serviceName} not found`)
}
}
}
@@ -36,3 +36,4 @@ export * from './plugin-apisix/index.js'
export * from './plugin-dokploy/index.js'
export * from './plugin-godaddy/index.js'
export * from './plugin-captcha/index.js'
export * from './plugin-xinnet/index.js'
@@ -1,29 +1,67 @@
import { IsAccess, AccessInput, BaseAccess } from '@certd/pipeline';
import { IsAccess, AccessInput, BaseAccess } from "@certd/pipeline";
import { XinnetClient } from "@certd/plugin-plus";
/**
* 这个注解将注册一个授权配置
* 在certd的后台管理系统中,用户可以选择添加此类型的授权
*/
@IsAccess({
name: 'xinnet',
title: '新网授权',
icon: 'arcticons:dns-changer-3',
desc: '',
name: "xinnet",
title: "新网授权",
icon: "arcticons:dns-changer-3",
desc: ""
})
export class XinnetAccess extends BaseAccess {
/**
* 授权属性配置
*/
@AccessInput({
title: '域名登录密码',
title: "用户名",
component: {
name:"a-input-password",
vModel:"value",
placeholder: '域名密码',
placeholder: "手机号"
},
helper:"您可以在此处[重置域名管理密码](https://domain.xinnet.com/#domain/manage/domain_manage_pwd)",
required: true,
encrypt: true,
encrypt: true
})
password = '';
username = "";
@AccessInput({
title: "域名登录密码",
component: {
name: "a-input-password",
vModel: "value",
placeholder: "域名密码"
},
helper: "您可以在此处[重置域名管理密码](https://domain.xinnet.com/#domain/manage/domain_manage_pwd)",
required: true,
encrypt: true
})
password = "";
@AccessInput({
title: "测试",
component: {
name: "api-test",
action: "TestRequest"
},
helper: "点击测试接口是否正常"
})
testRequest = true;
async onTestRequest() {
const client = new XinnetClient({
access: this,
logger: this.ctx.logger,
http: this.ctx.http
});
await client.getDomainList({ pageNo: 1, pageSize: 1 });
return "ok";
}
}
new XinnetAccess();
@@ -1,3 +1,2 @@
export * from './dns-provider.js';
export * from './access.js';
export * from './client.js';