mirror of
https://github.com/certd/certd.git
synced 2026-04-15 05:00:52 +08:00
perf: 插件贡献文档及示例
This commit is contained in:
42
packages/plugins/plugin-center/src/demo/access.ts
Normal file
42
packages/plugins/plugin-center/src/demo/access.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import { IsAccess, AccessInput } from "@certd/pipeline";
|
||||
|
||||
/**
|
||||
* 这个注解将注册一个授权配置
|
||||
* 在certd的后台管理系统中,用户可以选择添加此类型的授权
|
||||
*/
|
||||
@IsAccess({
|
||||
name: "demo",
|
||||
title: "授权插件示例",
|
||||
desc: "",
|
||||
})
|
||||
export class DemoAccess {
|
||||
/**
|
||||
* 授权属性配置
|
||||
*/
|
||||
@AccessInput({
|
||||
title: "密钥Id",
|
||||
component: {
|
||||
placeholder: "demoKeyId",
|
||||
},
|
||||
required: true,
|
||||
})
|
||||
demoKeyId = "";
|
||||
|
||||
/**
|
||||
* 授权属性配置
|
||||
*/
|
||||
@AccessInput({
|
||||
//标题
|
||||
title: "密钥串",
|
||||
component: {
|
||||
//input组件的placeholder
|
||||
placeholder: "demoKeySecret",
|
||||
},
|
||||
//是否必填
|
||||
required: true,
|
||||
})
|
||||
//属性名称
|
||||
demoKeySecret = "";
|
||||
}
|
||||
|
||||
new DemoAccess();
|
||||
79
packages/plugins/plugin-center/src/demo/dns-provider.ts
Normal file
79
packages/plugins/plugin-center/src/demo/dns-provider.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
import _ from "lodash";
|
||||
import { CreateRecordOptions, IDnsProvider, IsDnsProvider, RemoveRecordOptions } from "@certd/plugin-cert";
|
||||
import { Autowire, ILogger } from "@certd/pipeline";
|
||||
import { DemoAccess } from "./access";
|
||||
|
||||
// TODO 这里注册一个dnsProvider
|
||||
@IsDnsProvider({
|
||||
//注意这里name,要跟access的name一致
|
||||
name: "demo",
|
||||
title: "Dns提供商Demo",
|
||||
desc: "demo dns provider示例",
|
||||
accessType: "demo",
|
||||
})
|
||||
export class DemoDnsProvider implements IDnsProvider {
|
||||
@Autowire()
|
||||
access!: DemoAccess;
|
||||
@Autowire()
|
||||
logger!: ILogger;
|
||||
|
||||
async onInstance() {
|
||||
const access: any = this.access;
|
||||
this.logger.debug("access",access)
|
||||
//初始化的操作
|
||||
//...
|
||||
}
|
||||
|
||||
async getDomainList():Promise<any[]> {
|
||||
// TODO 这里你要实现一个获取域名列表的方法
|
||||
const access = this.access
|
||||
this.logger.debug("access",access)
|
||||
return []
|
||||
}
|
||||
|
||||
async matchDomain(dnsRecord: string):Promise<any> {
|
||||
const domainList = await this.getDomainList();
|
||||
let domainRecord = null;
|
||||
for (const item of domainList) {
|
||||
//TODO 根据域名去匹配账户中是否有该域名, 这里不一定是item.name 具体要看你要实现的平台的接口而定
|
||||
if (_.endsWith(dnsRecord + ".", item.name)) {
|
||||
domainRecord = item;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!domainRecord) {
|
||||
this.logger.info("账户中域名列表:",domainList)
|
||||
this.logger.error("找不到域名,请确认账户中是否真的有此域名")
|
||||
throw new Error("can not find Domain:"+dnsRecord);
|
||||
}
|
||||
return domainRecord;
|
||||
}
|
||||
|
||||
|
||||
|
||||
async createRecord(options: CreateRecordOptions): Promise<any> {
|
||||
const { fullRecord, value, type } = options;
|
||||
this.logger.info("添加域名解析:", fullRecord, value,type);
|
||||
//先确定账户中是否有该域名
|
||||
const domainRecord = await this.matchDomain(fullRecord);
|
||||
this.logger.debug("matchDomain:",domainRecord)
|
||||
//TODO 然后调用接口,创建txt类型的dns解析记录
|
||||
// .. 这里调用对应平台的后台接口
|
||||
const access = this.access
|
||||
this.logger.debug("access",access)
|
||||
|
||||
|
||||
|
||||
}
|
||||
async removeRecord(options: RemoveRecordOptions): Promise<any> {
|
||||
const { fullRecord, value, record } = options;
|
||||
this.logger.info("删除域名解析:", fullRecord, value,record);
|
||||
//TODO 这里调用删除txt dns解析记录接口
|
||||
const access = this.access
|
||||
this.logger.debug("access",access)
|
||||
this.logger.info("删除域名解析成功:", fullRecord, value);
|
||||
}
|
||||
}
|
||||
|
||||
//TODO 实例化这个provider,将其自动注册到系统中
|
||||
new DemoDnsProvider();
|
||||
3
packages/plugins/plugin-center/src/demo/index.ts
Normal file
3
packages/plugins/plugin-center/src/demo/index.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export * from './dns-provider'
|
||||
export * from './plugin-test'
|
||||
export * from './access'
|
||||
87
packages/plugins/plugin-center/src/demo/plugin-test.ts
Normal file
87
packages/plugins/plugin-center/src/demo/plugin-test.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
import { AbstractTaskPlugin, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput } from "@certd/pipeline";
|
||||
import { CertInfo, CertReader } from "@certd/plugin-cert";
|
||||
|
||||
@IsTaskPlugin({
|
||||
name: "demoTest",
|
||||
title: "Demo测试插件",
|
||||
default: {
|
||||
strategy: {
|
||||
runStrategy: RunStrategy.SkipWhenSucceed,
|
||||
},
|
||||
},
|
||||
})
|
||||
export class DemoTestPlugin extends AbstractTaskPlugin {
|
||||
|
||||
//测试参数
|
||||
@TaskInput({
|
||||
title: "属性示例",
|
||||
})
|
||||
text!: string;
|
||||
|
||||
//测试参数
|
||||
@TaskInput({
|
||||
title: "选择框",
|
||||
component:{
|
||||
name:"a-select",
|
||||
options:[
|
||||
{value:"1",label:"选项1"},
|
||||
{value:"2",label:"选项2"},
|
||||
]
|
||||
}
|
||||
})
|
||||
select!: string;
|
||||
|
||||
//测试参数
|
||||
@TaskInput({
|
||||
title: "switch",
|
||||
component:{
|
||||
name:"a-switch",
|
||||
}
|
||||
})
|
||||
switch!: boolean;
|
||||
//证书选择,此项必须要有
|
||||
@TaskInput({
|
||||
title: "域名证书",
|
||||
helper: "请选择前置任务输出的域名证书",
|
||||
component: {
|
||||
name: "pi-output-selector",
|
||||
},
|
||||
required: true,
|
||||
})
|
||||
cert!: CertInfo;
|
||||
|
||||
//授权选择框
|
||||
@TaskInput({
|
||||
title: "demo授权",
|
||||
helper: "demoAccess授权",
|
||||
component: {
|
||||
name: "pi-access-selector",
|
||||
type: "demoAccess",
|
||||
},
|
||||
rules: [{ required: true, message: "此项必填" }],
|
||||
})
|
||||
accessId!: string;
|
||||
|
||||
accessService!: IAccessService;
|
||||
logger!: ILogger;
|
||||
|
||||
async onInstance() {
|
||||
this.accessService = this.ctx.accessService;
|
||||
this.logger = this.ctx.logger;
|
||||
}
|
||||
async execute(): Promise<void> {
|
||||
const { select, text, cert, accessId } = this;
|
||||
const certReader = new CertReader(cert);
|
||||
const access = await this.accessService.getById(accessId);
|
||||
this.logger.debug("access",access)
|
||||
this.logger.debug("certReader",certReader)
|
||||
this.logger.info("DemoTestPlugin execute");
|
||||
this.logger.info( "text:", text);
|
||||
this.logger.info( "select:", select);
|
||||
this.logger.info( "switch:", this.switch);
|
||||
this.logger.info( "授权id:", accessId);
|
||||
//TODO 这里实现你要部署的执行方法
|
||||
}
|
||||
}
|
||||
//TODO 这里实例化插件,进行注册
|
||||
new DemoTestPlugin();
|
||||
1
packages/plugins/plugin-center/src/index.ts
Normal file
1
packages/plugins/plugin-center/src/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
export * from "./demo"
|
||||
Reference in New Issue
Block a user