From 99f5b8ebc1c64798ceb42042ad71cf71e967beb0 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Mon, 9 Feb 2026 14:29:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=8A=E4=BC=A0=E5=88=B0=E9=98=BF=E9=87=8C=E4=BA=91?= =?UTF-8?q?cas=E5=90=8E=EF=BC=8C=E5=85=B6=E4=BB=96=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=97=A0=E6=B3=95=E9=83=A8=E7=BD=B2=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/deploy-to-alb/index.ts | 23 ++++-- .../plugin/deploy-to-all/index.ts | 20 +++-- .../plugin/deploy-to-apig/index.ts | 19 +++-- .../plugin/deploy-to-cdn/index.ts | 25 +++--- .../plugin/deploy-to-dcdn/index.ts | 50 ++++++------ .../plugin/deploy-to-esa/index.ts | 25 +++--- .../plugin/deploy-to-ga/index.ts | 6 +- .../plugin/deploy-to-nlb/index.ts | 16 +++- .../plugin/deploy-to-oss/index.ts | 59 +++++--------- .../plugin/deploy-to-slb/index.ts | 77 +++++++++++-------- .../plugin/deploy-to-waf/index.ts | 36 +++++---- .../plugin/upload-to-aliyun/index.ts | 4 +- .../plugin-lib/aliyun/lib/ssl-client.ts | 13 +++- 13 files changed, 206 insertions(+), 167 deletions(-) diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-alb/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-alb/index.ts index 8576748c9..138268532 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-alb/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-alb/index.ts @@ -5,7 +5,7 @@ import { createRemoteSelectInputDefine } from "@certd/plugin-lib"; import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js"; -import { AliyunClient, AliyunSslClient } from "../../../plugin-lib/aliyun/lib/index.js"; +import { AliyunClient, AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/index.js"; import { AliyunClientV2 } from "../../../plugin-lib/aliyun/lib/aliyun-client-v2.js"; @IsTaskPlugin({ @@ -31,7 +31,7 @@ export class AliyunDeployCertToALB extends AbstractTaskPlugin { }, required: true }) - cert!: CertInfo | number; + cert!: CertInfo | CasCertId | number; @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) certDomains!: string[]; @@ -298,18 +298,25 @@ export class AliyunDeployCertToALB extends AbstractTaskPlugin { async getAliyunCertId(access: AliyunAccess) { let certId: any = this.cert; if (typeof this.cert === "object") { + + const certInfo = this.cert as CertInfo; + const casCert = this.cert as CasCertId; const sslClient = new AliyunSslClient({ access, logger: this.logger, endpoint: this.casEndpoint }); - const certName = this.buildCertName(CertReader.getMainDomain(this.cert.crt)); - const certIdRes = await sslClient.uploadCertificate({ - name: certName, - cert: this.cert - }); - certId = certIdRes.certId as any; + if (certInfo.crt) { + const certName = this.buildCertName(CertReader.getMainDomain(certInfo.crt)); + const certIdRes = await sslClient.uploadCertificate({ + name: certName, + cert: certInfo, + }); + certId = certIdRes.certId as any; + }else if (casCert.certId){ + certId = casCert.certId; + } } return certId; diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-all/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-all/index.ts index 4411531aa..41242bc01 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-all/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-all/index.ts @@ -2,7 +2,7 @@ import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput import { CertApplyPluginNames, CertInfo } from "@certd/plugin-cert"; import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from "@certd/plugin-lib"; import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js"; -import { AliyunSslClient } from "../../../plugin-lib/aliyun/lib/ssl-client.js"; +import { AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/ssl-client.js"; @IsTaskPlugin({ name: "AliyunDeployCertToAll", @@ -27,7 +27,7 @@ export class AliyunDeployCertToAll extends AbstractTaskPlugin { }, required: true, }) - cert!: CertInfo | number; + cert!: CertInfo | CasCertId | number; @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) certDomains!: string[]; @@ -155,11 +155,17 @@ export class AliyunDeployCertToAll extends AbstractTaskPlugin { // let certId: any = this.cert; if (typeof this.cert === "object") { - const certIdRes = await sslClient.uploadCertificate({ - name: this.appendTimeSuffix("certd"), - cert: this.cert, - }); - certId = certIdRes.certId as any; + const certInfo = this.cert as CertInfo; + const casCert = this.cert as CasCertId; + if (casCert.certId) { + certId = casCert.certId; + } else { + const certIdRes = await sslClient.uploadCertificate({ + name: this.appendTimeSuffix("certd"), + cert: certInfo, + }); + certId = certIdRes.certId as any; + } } const jobId = await this.createDeployJob(sslClient, certId); diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-apig/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-apig/index.ts index 15d4bfe26..5093054fc 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-apig/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-apig/index.ts @@ -4,7 +4,7 @@ import { createRemoteSelectInputDefine } from "@certd/plugin-lib"; import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js"; -import { AliyunSslClient } from "../../../plugin-lib/aliyun/lib/ssl-client.js"; +import { AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/ssl-client.js"; import { CertApplyPluginNames, CertInfo, CertReader } from "@certd/plugin-cert"; import {optionsUtils} from "@certd/basic"; @@ -30,7 +30,7 @@ export class DeployCertToAliyunApig extends AbstractTaskPlugin { }, required: true, }) - cert!: CertInfo | string; + cert!: CertInfo | CasCertId |number; @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) certDomains!: string[]; @@ -137,11 +137,16 @@ export class DeployCertToAliyunApig extends AbstractTaskPlugin { logger: this.logger, region: this.casRegion, }); - - certId = await sslClient.uploadCert({ - name: this.buildCertName(CertReader.getMainDomain(this.cert.crt)), - cert: this.cert, - }); + const certInfo = this.cert as CertInfo; + const casCert = this.cert as CasCertId; + if (casCert.certId) { + certId = casCert.certId; + } else { + certId = await sslClient.uploadCert({ + name: this.buildCertName(CertReader.getMainDomain(certInfo.crt)), + cert: certInfo, + }); + } } const certIdentify = `${certId}-${this.casRegion}` diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-cdn/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-cdn/index.ts index 04db45742..57689e82a 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-cdn/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-cdn/index.ts @@ -1,9 +1,9 @@ import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline'; -import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from '@certd/plugin-lib'; +import { CertInfo, createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from '@certd/plugin-lib'; import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js"; import { optionsUtils } from '@certd/basic'; import { CertApplyPluginNames, CertReader } from "@certd/plugin-cert"; -import { AliyunClient, AliyunSslClient } from "../../../plugin-lib/aliyun/lib/index.js"; +import { AliyunClient, AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/index.js"; @IsTaskPlugin({ name: 'DeployCertToAliyunCDN', title: '阿里云-部署证书至CDN', @@ -43,7 +43,7 @@ export class DeployCertToAliyunCDN extends AbstractTaskPlugin { template:false, required: true, }) - cert!: string; + cert!: CertInfo | CasCertId |number; @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) certDomains!: string[]; @@ -113,13 +113,18 @@ export class DeployCertToAliyunCDN extends AbstractTaskPlugin { let certName = this.appendTimeSuffix(this.certName); if (typeof this.cert === 'object') { - // @ts-ignore - const certName = this.buildCertName(CertReader.getMainDomain(this.cert.crt)) - const certIdRes = await sslClient.uploadCertificate({ - name:certName, - cert: this.cert, - }); - certId = certIdRes.certId as any; + const certInfo = this.cert as CertInfo; + const casCert = this.cert as CasCertId; + if (casCert.certId) { + certId = casCert.certId; + } else { + certName = this.buildCertName(CertReader.getMainDomain(certInfo.crt)) + const certIdRes = await sslClient.uploadCertificate({ + name:certName, + cert: certInfo, + }); + certId = certIdRes.certId as any; + } } const client = await this.getClient(access); diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-dcdn/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-dcdn/index.ts index f96793b49..13cda1abd 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-dcdn/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-dcdn/index.ts @@ -7,9 +7,9 @@ import { import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js"; import { CertInfo } from '@certd/plugin-cert'; -import { CertApplyPluginNames} from '@certd/plugin-cert'; +import { CertApplyPluginNames } from '@certd/plugin-cert'; import { optionsUtils } from "@certd/basic"; -import { AliyunClient } from "../../../plugin-lib/aliyun/lib/index.js"; +import { AliyunClient, CasCertId } from "../../../plugin-lib/aliyun/lib/index.js"; @IsTaskPlugin({ name: 'DeployCertToAliyunDCDN', title: '阿里云-部署证书至DCDN', @@ -32,7 +32,7 @@ export class DeployCertToAliyunDCDN extends AbstractTaskPlugin { }, required: true, }) - cert!: CertInfo | number; + cert!: CertInfo | CasCertId | number; @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) certDomains!: string[]; @@ -68,18 +68,18 @@ export class DeployCertToAliyunDCDN extends AbstractTaskPlugin { domainName!: string | string[]; - async onInstance() {} + async onInstance() { } async execute(): Promise { this.logger.info('开始部署证书到阿里云DCDN'); - if(!this.domainName){ + if (!this.domainName) { throw new Error('您还未选择DCDN域名'); } const access = (await this.getAccess(this.accessId)) as AliyunAccess; const client = await this.getClient(access); - if(typeof this.domainName === 'string'){ + if (typeof this.domainName === 'string') { this.domainName = [this.domainName]; } - for (const domainName of this.domainName ) { + for (const domainName of this.domainName) { this.logger.info(`[${domainName}]开始部署`) const params = await this.buildParams(domainName); await this.doRequest(client, params); @@ -100,30 +100,32 @@ export class DeployCertToAliyunDCDN extends AbstractTaskPlugin { return client; } - async buildParams(domainName:string) { + async buildParams(domainName: string) { const CertName = (this.certName ?? 'certd') + '-' + dayjs().format('YYYYMMDDHHmmss'); - if (typeof this.cert !== 'object') { - const certId = this.cert; - this.logger.info('使用已上传的证书:', certId); - return { - DomainName: domainName, - SSLProtocol: 'on', - CertType: 'cas', - CertName: CertName, - CertId: certId, - }; + let certId: any = this.cert + if (typeof this.cert === 'object') { + const certInfo = this.cert as CertInfo; + if (certInfo.crt) { + this.logger.info('上传证书:', CertName); + const cert: any = this.cert; + return { + DomainName: domainName, + SSLProtocol: 'on', + CertName: CertName, + CertType: 'upload', + SSLPub: cert.crt, + SSLPri: cert.key, + }; + } } - - this.logger.info('上传证书:', CertName); - const cert: any = this.cert; + this.logger.info('使用已上传的证书:', certId); return { DomainName: domainName, SSLProtocol: 'on', + CertType: 'cas', CertName: CertName, - CertType: 'upload', - SSLPub: cert.crt, - SSLPri: cert.key, + CertId: certId, }; } diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-esa/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-esa/index.ts index 926bb853b..ad5eac4c9 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-esa/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-esa/index.ts @@ -5,7 +5,7 @@ import { createRemoteSelectInputDefine } from "@certd/plugin-lib"; import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js"; -import { AliyunSslClient } from "../../../plugin-lib/aliyun/lib/ssl-client.js"; +import { AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/ssl-client.js"; import { AliyunClientV2 } from "../../../plugin-lib/aliyun/lib/aliyun-client-v2.js"; import dayjs from "dayjs"; @@ -32,7 +32,7 @@ export class AliyunDeployCertToESA extends AbstractTaskPlugin { }, required: true }) - cert!: CertInfo; + cert!: CertInfo | CasCertId | number; @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) certDomains!: string[]; @@ -117,14 +117,21 @@ export class AliyunDeployCertToESA extends AbstractTaskPlugin { endpoint: this.casEndpoint }); - certName = this.buildCertName(CertReader.getMainDomain(this.cert.crt)); + const certInfo = this.cert as CertInfo; + const casCert = this.cert as CasCertId; + if (casCert.certId) { + certId = casCert.certId; + certName = casCert.certName; + } else { + certName = this.buildCertName(CertReader.getMainDomain(certInfo.crt)); - const certIdRes = await sslClient.uploadCertificate({ - name: certName, - cert: this.cert - }); - certId = certIdRes.certId as any; - this.logger.info("上传证书成功", certId, certName); + const certIdRes = await sslClient.uploadCertificate({ + name: certName, + cert: certInfo + }); + certId = certIdRes.certId as any; + this.logger.info("上传证书成功", certId, certName); + } } return { certId, diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-ga/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-ga/index.ts index 8c621a963..32530e241 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-ga/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-ga/index.ts @@ -5,7 +5,7 @@ import { createRemoteSelectInputDefine } from "@certd/plugin-lib"; import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js"; -import { AliyunSslClient } from "../../../plugin-lib/aliyun/lib/ssl-client.js"; +import { AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/ssl-client.js"; @IsTaskPlugin({ name: "AliyunDeployCertToGA", @@ -30,7 +30,7 @@ export class AliyunDeployCertToGA extends AbstractTaskPlugin { }, required: true }) - cert!: CertInfo|number; + cert!: CertInfo|number | CasCertId; @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) certDomains!: string[]; @@ -123,7 +123,7 @@ export class AliyunDeployCertToGA extends AbstractTaskPlugin { logger: this.logger, endpoint: this.casEndpoint }); - return await sslClient.uploadCertOrGet(this.cert) + return await sslClient.uploadCertOrGet(this.cert as any) } async execute(): Promise { diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-nlb/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-nlb/index.ts index 066aa3dd7..d500e8a14 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-nlb/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-nlb/index.ts @@ -6,7 +6,7 @@ import { } from "@certd/plugin-lib"; import { CertApplyPluginNames} from '@certd/plugin-cert'; import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js"; -import { AliyunClient, AliyunSslClient } from "../../../plugin-lib/aliyun/lib/index.js"; +import { AliyunClient, AliyunSslClient, CasCertId } from "../../../plugin-lib/aliyun/lib/index.js"; import { AliyunClientV2 } from '../../../plugin-lib/aliyun/lib/aliyun-client-v2.js'; @IsTaskPlugin({ name: 'AliyunDeployCertToNLB', @@ -31,7 +31,7 @@ export class AliyunDeployCertToNLB extends AbstractTaskPlugin { }, required: true, }) - cert!: CertInfo | number; + cert!: CertInfo | number | CasCertId; @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) certDomains!: string[]; @@ -286,17 +286,25 @@ export class AliyunDeployCertToNLB extends AbstractTaskPlugin { async getAliyunCertId(access: AliyunAccess) { let certId: any = this.cert; if (typeof this.cert === 'object') { + + const casCert = this.cert as CasCertId; + if (casCert.certId) { + return casCert.certId; + } + + const certInfo = this.cert as CertInfo; + const sslClient = new AliyunSslClient({ access, logger: this.logger, endpoint: this.casEndpoint, }); - const certName = this.buildCertName(CertReader.getMainDomain(this.cert.crt)) + const certName = this.buildCertName(CertReader.getMainDomain(certInfo.crt)) const certIdRes = await sslClient.uploadCertificate({ name: certName, - cert: this.cert, + cert: certInfo, }); certId = certIdRes.certId as any; } diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-oss/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-oss/index.ts index 16c784df3..7d9a341dd 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-oss/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-oss/index.ts @@ -1,14 +1,13 @@ -import {AbstractTaskPlugin, IsTaskPlugin, Pager, pluginGroups, RunStrategy, TaskInput} from '@certd/pipeline'; +import { optionsUtils } from "@certd/basic"; +import { AbstractTaskPlugin, IsTaskPlugin, Pager, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline'; +import { CertApplyPluginNames, CertInfo } from '@certd/plugin-cert'; import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from '@certd/plugin-lib'; -import {CertInfo, CertReader} from '@certd/plugin-cert'; -import { CertApplyPluginNames} from '@certd/plugin-cert'; -import {optionsUtils} from "@certd/basic"; -import {isArray} from "lodash-es"; +import { isArray } from "lodash-es"; import { AliyunAccess } from '../../../plugin-lib/aliyun/access/index.js'; -import { AliyunSslClient } from '../../../plugin-lib/aliyun/lib/index.js'; +import { CasCertId } from '../../../plugin-lib/aliyun/lib/index.js'; @IsTaskPlugin({ name: 'DeployCertToAliyunOSS', title: '阿里云-部署证书至OSS', @@ -32,7 +31,7 @@ export class DeployCertToAliyunOSS extends AbstractTaskPlugin { }, required: true, }) - cert!: CertInfo | string; + cert!: CertInfo | number | CasCertId; @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) certDomains!: string[]; @@ -147,7 +146,6 @@ export class DeployCertToAliyunOSS extends AbstractTaskPlugin { this.logger.info('开始部署证书到阿里云OSS'); const access = (await this.getAccess(this.accessId)) as AliyunAccess; - await this.getAliyunCertId(access) this.logger.info(`bucket: ${this.bucket}, region: ${this.region}, domainName: ${this.domainName}`); const client = await this.getClient(access); if (typeof this.domainName === "string"){ @@ -169,12 +167,19 @@ export class DeployCertToAliyunOSS extends AbstractTaskPlugin { }); let certStr = "" + if (typeof this.cert === "object" ){ - certStr = ` - ${this.cert.key} - ${this.cert.crt} -` - }else{ + const certInfo = this.cert as CertInfo; + if (certInfo.crt){ + certStr = ` + ${certInfo.key} + ${certInfo.crt} + ` + }else{ + const casCert = this.cert as CasCertId; + certStr = `${casCert.certIdentifier}` + } + }else { certStr = `${this.cert}-${this.casRegion}` } @@ -196,34 +201,6 @@ export class DeployCertToAliyunOSS extends AbstractTaskPlugin { return res; } - async getAliyunCertId(access: AliyunAccess) { - let certId: any = this.cert; - let certName: any = this.appendTimeSuffix("certd"); - if (typeof this.cert === "object") { - let endpoint = `cas.${this.casRegion}.aliyuncs.com`; - if (this.casRegion === "cn-hangzhou" || !this.casRegion){ - endpoint = "cas.aliyuncs.com"; - } - const sslClient = new AliyunSslClient({ - access, - logger: this.logger, - endpoint: endpoint - }); - - certName = this.buildCertName(CertReader.getMainDomain(this.cert.crt)); - - const certIdRes = await sslClient.uploadCertificate({ - name: certName, - cert: this.cert - }); - certId = certIdRes.certId as any; - this.logger.info("上传证书成功", certId, certName); - } - return { - certId, - certName - }; - } async getClient(access: AliyunAccess) { // @ts-ignore diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-slb/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-slb/index.ts index a7d4a5a12..e92f9a943 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-slb/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-slb/index.ts @@ -1,10 +1,10 @@ -import {AbstractTaskPlugin, IsTaskPlugin, PageSearch, pluginGroups, RunStrategy, TaskInput} from '@certd/pipeline'; -import {CertInfo} from '@certd/plugin-cert'; +import { AbstractTaskPlugin, IsTaskPlugin, PageSearch, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline'; +import { CertInfo } from '@certd/plugin-cert'; import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from '@certd/plugin-lib'; -import {CertApplyPluginNames} from '@certd/plugin-cert'; +import { CertApplyPluginNames } from '@certd/plugin-cert'; import { AliyunAccess } from '../../../plugin-lib/aliyun/access/index.js'; import { AliyunClient, AliyunSslClient, CasCertInfo } from '../../../plugin-lib/aliyun/lib/index.js'; @@ -31,9 +31,9 @@ export class AliyunDeployCertToSLB extends AbstractTaskPlugin { }, required: true, }) - cert!: CertInfo | number; + cert!: CertInfo | number | CasCertInfo; - @TaskInput(createCertDomainGetterInputDefine({props: {required: false}})) + @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) certDomains!: string[]; @@ -44,9 +44,9 @@ export class AliyunDeployCertToSLB extends AbstractTaskPlugin { component: { name: 'a-select', options: [ - {value: 'cas.aliyuncs.com', label: '中国大陆'}, - {value: 'cas.ap-southeast-1.aliyuncs.com', label: '新加坡'}, - {value: 'cas.eu-central-1.aliyuncs.com', label: '德国(法兰克福)'}, + { value: 'cas.aliyuncs.com', label: '中国大陆' }, + { value: 'cas.ap-southeast-1.aliyuncs.com', label: '新加坡' }, + { value: 'cas.eu-central-1.aliyuncs.com', label: '德国(法兰克福)' }, ], }, required: true, @@ -99,24 +99,24 @@ export class AliyunDeployCertToSLB extends AbstractTaskPlugin { @TaskInput({ - title: "部署默认证书", - value: true, - component: { - name: "a-switch", - vModel: "checked" - } + title: "部署默认证书", + value: true, + component: { + name: "a-switch", + vModel: "checked" } + } ) deployDefault!: boolean; @TaskInput({ - title: "部署扩展证书", - value: false, - component: { - name: "a-switch", - vModel: "checked" - } + title: "部署扩展证书", + value: false, + component: { + name: "a-switch", + vModel: "checked" } + } ) deployExtension!: boolean; @@ -126,8 +126,8 @@ export class AliyunDeployCertToSLB extends AbstractTaskPlugin { title: '扩展域名列表', helper: '要部署扩展域名列表', action: AliyunDeployCertToSLB.prototype.onGetExtensionDomainList.name, - watches: ['listeners','deployExtension'], - mergeScript:` + watches: ['listeners', 'deployExtension'], + mergeScript: ` return { show: ctx.compute(({form})=>{ return form.deployExtension; @@ -143,7 +143,7 @@ export class AliyunDeployCertToSLB extends AbstractTaskPlugin { } async getLBClient(access: AliyunAccess, region: string) { - const client = new AliyunClient({logger: this.logger}); + const client = new AliyunClient({ logger: this.logger }); const version = '2014-05-15'; await client.init({ accessKeyId: access.accessKeyId, @@ -163,10 +163,10 @@ export class AliyunDeployCertToSLB extends AbstractTaskPlugin { const aliyunCert = await this.getAliyunCertId(access); const slbServerCertId = await this.uploadServerCert(client, aliyunCert); - if (this.deployDefault!==false) { + if (this.deployDefault !== false) { this.logger.info("部署监听器默认证书") for (const listener of this.listeners) { - const {port, loadBalanceId} = this.resolveListenerKey(listener) + const { port, loadBalanceId } = this.resolveListenerKey(listener) const params = { RegionId: this.regionId, LoadBalancerId: loadBalanceId, @@ -185,7 +185,7 @@ export class AliyunDeployCertToSLB extends AbstractTaskPlugin { const clientV2 = this.getCLBClientV2(access); for (const domainStr of this.extensionDomains) { - const {extensionDomainId} = this.resolveListenerKey(domainStr) + const { extensionDomainId } = this.resolveListenerKey(domainStr) const res = await clientV2.doRequest({ action: "SetDomainExtensionAttribute", // 接口版本 @@ -251,11 +251,20 @@ export class AliyunDeployCertToSLB extends AbstractTaskPlugin { if (typeof this.cert === 'object') { const name = this.appendTimeSuffix('certd'); - const certIdRes = await sslClient.uploadCertificate({ - name: name, - cert: this.cert, - }); - certId = certIdRes.certId as any; + + const casCert = this.cert as CasCertInfo; + if (casCert.certIdentifier) { + certId = casCert.certId; + } else { + const cert = this.cert as CertInfo; + const certIdRes = await sslClient.uploadCertificate({ + name: name, + cert: cert, + }); + certId = certIdRes.certId as any; + } + + } return await sslClient.getCertInfo(certId); @@ -360,7 +369,7 @@ export class AliyunDeployCertToSLB extends AbstractTaskPlugin { const allDomains: any[] = [] for (const ls of this.listeners) { - const {port, loadBalanceId, protocol} = this.resolveListenerKey(ls) + const { port, loadBalanceId, protocol } = this.resolveListenerKey(ls) const domains = await this.doGetExtensionDomainList({ access, loadBalancerId: loadBalanceId, @@ -381,7 +390,7 @@ export class AliyunDeployCertToSLB extends AbstractTaskPlugin { listenerProtocol: string, access: AliyunAccess }) { - const {loadBalancerId, listenerPort, listenerProtocol, access} = data; + const { loadBalancerId, listenerPort, listenerProtocol, access } = data; const client = access.getClient(`slb.${this.regionId}.aliyuncs.com`) let queries = { @@ -412,7 +421,7 @@ export class AliyunDeployCertToSLB extends AbstractTaskPlugin { return { value: value, label: label, - domain:i.Domain + domain: i.Domain }; }); } diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-waf/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-waf/index.ts index e9aa77503..baa4e14c4 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-waf/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-waf/index.ts @@ -1,11 +1,11 @@ -import { AbstractTaskPlugin, IsTaskPlugin, Pager,PageSearch, pluginGroups, RunStrategy, TaskInput } from "@certd/pipeline"; +import { AbstractTaskPlugin, IsTaskPlugin, Pager, PageSearch, pluginGroups, RunStrategy, TaskInput } from "@certd/pipeline"; import { CertApplyPluginNames, CertInfo, CertReader } from "@certd/plugin-cert"; import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from "@certd/plugin-lib"; import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js"; -import { AliyunClient, AliyunSslClient } from "../../../plugin-lib/aliyun/lib/index.js"; +import { AliyunClient, AliyunSslClient, CasCertInfo } from "../../../plugin-lib/aliyun/lib/index.js"; @IsTaskPlugin({ name: 'AliyunDeployCertToWaf', @@ -30,7 +30,7 @@ export class AliyunDeployCertToWaf extends AbstractTaskPlugin { }, required: true, }) - cert!: CertInfo | number; + cert!: CertInfo | number | CasCertInfo; @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) certDomains!: string[]; @@ -83,8 +83,8 @@ export class AliyunDeployCertToWaf extends AbstractTaskPlugin { helper: '请选择要部署证书的CNAME站点', action: AliyunDeployCertToWaf.prototype.onGetCnameList.name, watches: ['accessId', 'regionId'], - pager:true, - search:true, + pager: true, + search: true, }) ) cnameDomains!: string[]; @@ -105,7 +105,7 @@ export class AliyunDeployCertToWaf extends AbstractTaskPlugin { }) tlsVersion!: string; - @TaskInput({ + @TaskInput({ title: '启用TLSv3', value: true, component: { @@ -118,7 +118,7 @@ export class AliyunDeployCertToWaf extends AbstractTaskPlugin { - async onInstance() {} + async onInstance() { } async getWafClient(access: AliyunAccess) { const client = new AliyunClient({ logger: this.logger }); @@ -152,11 +152,17 @@ export class AliyunDeployCertToWaf extends AbstractTaskPlugin { endpoint: this.casEndpoint, }); - const certIdRes = await sslClient.uploadCertificate({ - name: this.buildCertName(CertReader.getMainDomain(this.cert.crt)), - cert: this.cert, - }); - certId = certIdRes.certId as any; + const cert = this.cert as CertInfo; + if (cert.crt) { + const certIdRes = await sslClient.uploadCertificate({ + name: this.buildCertName(CertReader.getMainDomain(cert.crt)), + cert: cert, + }); + certId = certIdRes.certId as any; + }else { + const casCert = this.cert as CasCertInfo; + certId = casCert.certId; + } } const client = await this.getWafClient(access); @@ -211,13 +217,13 @@ export class AliyunDeployCertToWaf extends AbstractTaskPlugin { const pager = new Pager(data) const instanceId = await this.getInstanceId(client); - const params:any = { + const params: any = { RegionId: this.regionId, InstanceId: instanceId, PageSize: pager.pageSize, PageNumber: pager.pageNo, }; - if (data.searchKey){ + if (data.searchKey) { params.Domain = data.searchKey } @@ -235,7 +241,7 @@ export class AliyunDeployCertToWaf extends AbstractTaskPlugin { domain: item.Domain, }; }); - const list= this.ctx.utils.options.buildGroupOptions(options, this.certDomains); + const list = this.ctx.utils.options.buildGroupOptions(options, this.certDomains); // const list = [{value:"1",label:"1"},{value:"2",label:"2"}] // const total = 120 diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/upload-to-aliyun/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/upload-to-aliyun/index.ts index 07b9ed552..79b655056 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/upload-to-aliyun/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/upload-to-aliyun/index.ts @@ -1,7 +1,7 @@ import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput, TaskOutput } from '@certd/pipeline'; import { CertApplyPluginNames, CertReader } from "@certd/plugin-cert"; import { AliyunAccess } from '../../../plugin-lib/aliyun/access/index.js'; -import { AliyunSslClient } from '../../../plugin-lib/aliyun/lib/index.js'; +import { AliyunSslClient, CasCertId } from '../../../plugin-lib/aliyun/lib/index.js'; /** * 华东1(杭州) cn-hangzhou cas.aliyuncs.com cas-vpc.cn-hangzhou.aliyuncs.com * 马来西亚(吉隆坡) ap-southeast-3 cas.ap-southeast-3.aliyuncs.com cas-vpc.ap-southeast-3.aliyuncs.com @@ -78,7 +78,7 @@ export class UploadCertToAliyun extends AbstractTaskPlugin { @TaskOutput({ title: '上传成功后的阿里云CertId', }) - aliyunCertId!: string; + aliyunCertId!: CasCertId; async onInstance() {} diff --git a/packages/ui/certd-server/src/plugins/plugin-lib/aliyun/lib/ssl-client.ts b/packages/ui/certd-server/src/plugins/plugin-lib/aliyun/lib/ssl-client.ts index 027accaed..d93aecc4b 100644 --- a/packages/ui/certd-server/src/plugins/plugin-lib/aliyun/lib/ssl-client.ts +++ b/packages/ui/certd-server/src/plugins/plugin-lib/aliyun/lib/ssl-client.ts @@ -126,18 +126,25 @@ export class AliyunSslClient { } } - async uploadCertOrGet(cert: CertInfo | number ) :Promise{ + async uploadCertOrGet(cert: CertInfo | number | CasCertId ) :Promise{ if (typeof cert === "object") { + + const casCert = cert as CasCertId; + if (casCert.certId) { + return casCert; + } + const certInfo = cert as CertInfo; // 上传证书到阿里云 this.logger.info(`开始上传证书`); - const certName = CertReader.buildCertName(cert); + const certName = CertReader.buildCertName(certInfo); const res = await this.uploadCertificate({ name: certName, - cert: cert + cert: certInfo }); this.logger.info("上传证书成功", JSON.stringify(res)); return res } + //number类型 const certId = cert as any; let certName: any = utils.string.appendTimeSuffix(certId); const certIdentifier = this.getCertIdentifier(certId);