diff --git a/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/output-selector/index.vue b/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/output-selector/index.vue index d4230fdf..b4b859fb 100644 --- a/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/output-selector/index.vue +++ b/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/output-selector/index.vue @@ -12,6 +12,9 @@ export default { modelValue: { type: String, default: undefined + }, + from: { + type: String } }, emits: ["update:modelValue"], @@ -32,6 +35,9 @@ export default { currentStepIndex: currentStepIndex.value, currentTask: currentTask.value }); + if (props.from) { + options.value = options.value.filter((item: any) => item.type === props.from); + } if (props.modelValue == null && options.value.length > 0) { ctx.emit("update:modelValue", options.value[0].value); } diff --git a/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts b/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts index 56f7dc14..226e13fe 100644 --- a/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts +++ b/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts @@ -342,7 +342,7 @@ export class PipelineService extends BaseService { } } - async cancel(historyId:number) { + async cancel(historyId: number) { const executor = runningTasks.get(historyId); if (executor) { await executor.cancel(); diff --git a/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-cdn/index.ts b/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-cdn/index.ts index 851d493e..252b2dc3 100644 --- a/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-cdn/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-cdn/index.ts @@ -4,8 +4,9 @@ import { TencentAccess } from '../../access/index.js'; import { CertInfo } from '@certd/plugin-cert'; @IsTaskPlugin({ - name: 'DeployCertToTencentCDN', - title: '部署到腾讯云CDN', + name: 'DeployCertToTencentEO', + title: '部署到腾讯云EO', + desc: '腾讯云边缘安全加速平台 EO', group: pluginGroups.tencent.key, default: { strategy: { diff --git a/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-eocdn/index.ts b/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-eocdn/index.ts new file mode 100644 index 00000000..851d493e --- /dev/null +++ b/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/deploy-to-eocdn/index.ts @@ -0,0 +1,115 @@ +import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline'; +import tencentcloud from 'tencentcloud-sdk-nodejs'; +import { TencentAccess } from '../../access/index.js'; +import { CertInfo } from '@certd/plugin-cert'; + +@IsTaskPlugin({ + name: 'DeployCertToTencentCDN', + title: '部署到腾讯云CDN', + group: pluginGroups.tencent.key, + default: { + strategy: { + runStrategy: RunStrategy.SkipWhenSucceed, + }, + }, +}) +export class DeployToCdnPlugin extends AbstractTaskPlugin { + @TaskInput({ + title: '域名证书', + helper: '请选择前置任务输出的域名证书', + component: { + name: 'pi-output-selector', + from: 'CertApply', + }, + required: true, + }) + cert!: CertInfo; + + @TaskInput({ + title: 'Access提供者', + helper: 'access 授权', + component: { + name: 'pi-access-selector', + type: 'tencent', + }, + required: true, + }) + accessId!: string; + + @TaskInput({ + title: '证书名称', + helper: '证书上传后将以此参数作为名称前缀', + }) + certName!: string; + + @TaskInput({ + title: 'cdn加速域名', + rules: [{ required: true, message: '该项必填' }], + }) + domainName!: string; + + // @TaskInput({ + // title: "CDN接口", + // helper: "CDN接口端点", + // component: { + // name: "a-select", + // type: "tencent", + // }, + // required: true, + // }) + // endpoint!: string; + + async onInstance() {} + + async execute(): Promise { + const accessProvider: TencentAccess = (await this.accessService.getById(this.accessId)) as TencentAccess; + const client = this.getClient(accessProvider); + const params = this.buildParams(); + await this.doRequest(client, params); + } + + getClient(accessProvider: TencentAccess) { + const CdnClient = tencentcloud.cdn.v20180606.Client; + + const clientConfig = { + credential: { + secretId: accessProvider.secretId, + secretKey: accessProvider.secretKey, + }, + region: '', + profile: { + httpProfile: { + endpoint: 'cdn.tencentcloudapi.com', + }, + }, + }; + + return new CdnClient(clientConfig); + } + + buildParams() { + return { + Https: { + Switch: 'on', + CertInfo: { + Certificate: this.cert.crt, + PrivateKey: this.cert.key, + }, + }, + Domain: this.domainName, + }; + } + + async doRequest(client: any, params: any) { + const ret = await client.UpdateDomainConfig(params); + this.checkRet(ret); + this.logger.info('设置腾讯云CDN证书成功:', ret.RequestId); + return ret.RequestId; + } + + checkRet(ret: any) { + if (!ret || ret.Error) { + throw new Error('执行失败:' + ret.Error.Code + ',' + ret.Error.Message); + } + } +}