diff --git a/packages/ui/certd-server/src/plugins/index.ts b/packages/ui/certd-server/src/plugins/index.ts index 49d2300e..9f59a4b6 100644 --- a/packages/ui/certd-server/src/plugins/index.ts +++ b/packages/ui/certd-server/src/plugins/index.ts @@ -10,3 +10,4 @@ export * from './plugin-west/index.js'; export * from './plugin-doge/index.js'; export * from './plugin-qiniu/index.js'; export * from './plugin-jdcloud/index.js'; +export * from './plugin-woai/index.js'; diff --git a/packages/ui/certd-server/src/plugins/plugin-woai/access.ts b/packages/ui/certd-server/src/plugins/plugin-woai/access.ts new file mode 100644 index 00000000..b04cd8e5 --- /dev/null +++ b/packages/ui/certd-server/src/plugins/plugin-woai/access.ts @@ -0,0 +1,28 @@ +import { AccessInput, BaseAccess, IsAccess } from '@certd/pipeline'; + +@IsAccess({ + name: 'woai', + title: '我爱云授权', + desc: '我爱云CDN', +}) +export class WoaiAccess extends BaseAccess { + @AccessInput({ + title: '账号', + component: { + placeholder: '我爱云的账号', + }, + required: true, + }) + username = ''; + @AccessInput({ + title: '密码', + component: { + placeholder: '我爱云的密码', + }, + required: true, + encrypt: true, + }) + password = ''; +} + +new WoaiAccess(); diff --git a/packages/ui/certd-server/src/plugins/plugin-woai/index.ts b/packages/ui/certd-server/src/plugins/plugin-woai/index.ts new file mode 100644 index 00000000..fdad254f --- /dev/null +++ b/packages/ui/certd-server/src/plugins/plugin-woai/index.ts @@ -0,0 +1,2 @@ +export * from './plugins/index.js'; +export * from './access.js'; diff --git a/packages/ui/certd-server/src/plugins/plugin-woai/plugins/index.ts b/packages/ui/certd-server/src/plugins/plugin-woai/plugins/index.ts new file mode 100644 index 00000000..cd1308a9 --- /dev/null +++ b/packages/ui/certd-server/src/plugins/plugin-woai/plugins/index.ts @@ -0,0 +1 @@ +export * from './plugin-deploy-to-cdn.js'; diff --git a/packages/ui/certd-server/src/plugins/plugin-woai/plugins/plugin-deploy-to-cdn.ts b/packages/ui/certd-server/src/plugins/plugin-woai/plugins/plugin-deploy-to-cdn.ts new file mode 100644 index 00000000..f76e612e --- /dev/null +++ b/packages/ui/certd-server/src/plugins/plugin-woai/plugins/plugin-deploy-to-cdn.ts @@ -0,0 +1,94 @@ +import {AbstractTaskPlugin, HttpClient, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput} from '@certd/pipeline'; +import {CertInfo} from '@certd/plugin-cert'; +import {WoaiAccess} from '../access.js'; + +@IsTaskPlugin({ + name: 'woaiCloud', + title: '部署证书到我爱云 CDN', + desc: '部署证书到我爱云CDN', + icon: 'clarity:plugin-line', + group: pluginGroups.other.key, + default: { + strategy: { + runStrategy: RunStrategy.SkipWhenSucceed, + }, + }, +}) +export class WoaiCdnPlugin extends AbstractTaskPlugin { + @TaskInput({ + title: '证书ID', + helper: '请填写 证书列表 中的证书的ID', + component: {name: 'a-input'}, + required: true, + }) + certId!: string; + @TaskInput({ + title: '域名证书', + helper: '请选择前置任务输出的域名证书', + component: { + name: 'pi-output-selector', + from: ['CertApply', 'CertApplyLego'], + }, + required: true, + }) + cert!: CertInfo; + @TaskInput({ + title: 'Access授权', + helper: '我爱云的用户、密码授权', + component: { + name: 'pi-access-selector', + type: 'woai', + }, + required: true, + }) + accessId!: string; + http!: HttpClient; + private readonly baseApi = 'https://console.edeg.51vs.club'; + + async onInstance() { + this.http = this.ctx.http; + } + + private async doRequestApi(url: string, data: any = null, method = 'post', token: string | null = null) { + const headers = { + 'Content-Type': 'application/json', + ...(token ? {'Token': token} : {}), + }; + const res = await this.http.request({ + url, + method, + data, + headers, + }); + if (res.code !== 200) { + throw new Error(`${JSON.stringify(res.message)}`); + } + return res; + } + + async execute(): Promise { + const {certId, cert, accessId} = this; + const access = (await this.accessService.getById(accessId)) as WoaiAccess; + // 登录获取token + const loginResponse = await this.doRequestApi(`${this.baseApi}/account/login`, { + username: access.username, + password: access.password, + }); + const token = loginResponse.data.token; + this.logger.info('登录成功,获取到Token:', token); + // 更新证书 + const editCertResponse = await this.doRequestApi( + `${this.baseApi}/certificate/edit`, + { + id: certId, + cert: cert.crt, + key: cert.key, + }, + 'post', + token + ); + this.logger.info('证书更新成功:', editCertResponse.message); + } +} + +new WoaiCdnPlugin();