mirror of https://github.com/certd/certd
commit
5649f708e3
|
@ -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';
|
||||
|
|
|
@ -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();
|
|
@ -0,0 +1,2 @@
|
|||
export * from './plugins/index.js';
|
||||
export * from './access.js';
|
|
@ -0,0 +1 @@
|
|||
export * from './plugin-deploy-to-cdn.js';
|
|
@ -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: '请填写 <a href="https://console.edge.51vs.club/site/certificate" target="_blank">证书列表</a> 中的证书的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<any, any>({
|
||||
url,
|
||||
method,
|
||||
data,
|
||||
headers,
|
||||
});
|
||||
if (res.code !== 200) {
|
||||
throw new Error(`${JSON.stringify(res.message)}`);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
async execute(): Promise<void> {
|
||||
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();
|
Loading…
Reference in New Issue