diff --git a/CHANGELOG.md b/CHANGELOG.md index 33c24555c..d9a81f2c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +### Bug Fixes + +* 修复模版id不正确导致修改到错误的模版流水线bug ([b1ff163](https://github.com/certd/certd/commit/b1ff163a2828b205297408d5aed21cf1eff335e8)) +* 修复批量执行按钮无效的bug ([49703f0](https://github.com/certd/certd/commit/49703f08e55b303851086d9f36aca562d7999be6)) +* remote-select默认pageSize设置为50,阿里云WAF不支持pageSize100 ([285532d](https://github.com/certd/certd/commit/285532d4318b90d0d7f8154f070274c0a0ec0269)) + +### Performance Improvements + +* 火山引擎部署alb证书插件支持部署扩展证书以及删除已过期扩展证书 ([ffd2e81](https://github.com/certd/certd/commit/ffd2e8149e3a06bf3eec456ff85dbed793af9e90)) +* 企业模式下面增加个人数据迁移的引导 ([431afd6](https://github.com/certd/certd/commit/431afd618f547cecf9a29433f46d4367619e2ecf)) +* 新增阿里云证书清理插件 ([4b7eeaa](https://github.com/certd/certd/commit/4b7eeaa6e0a14d2e461c7c473a920a0966b1fe8e)) +* 优化远程数据选择框,选择数据时不刷新闪烁 ([7f6a8bc](https://github.com/certd/certd/commit/7f6a8bc87e364685defe7f039264b2de064806c5)) +* 支持复制粘贴任务步骤 ([acc2df2](https://github.com/certd/certd/commit/acc2df29def017fb8165f931b41ef95414966afc)) + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) ### Bug Fixes diff --git a/docs/guide/changelogs/CHANGELOG.md b/docs/guide/changelogs/CHANGELOG.md index 33c24555c..d9a81f2c2 100644 --- a/docs/guide/changelogs/CHANGELOG.md +++ b/docs/guide/changelogs/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +### Bug Fixes + +* 修复模版id不正确导致修改到错误的模版流水线bug ([b1ff163](https://github.com/certd/certd/commit/b1ff163a2828b205297408d5aed21cf1eff335e8)) +* 修复批量执行按钮无效的bug ([49703f0](https://github.com/certd/certd/commit/49703f08e55b303851086d9f36aca562d7999be6)) +* remote-select默认pageSize设置为50,阿里云WAF不支持pageSize100 ([285532d](https://github.com/certd/certd/commit/285532d4318b90d0d7f8154f070274c0a0ec0269)) + +### Performance Improvements + +* 火山引擎部署alb证书插件支持部署扩展证书以及删除已过期扩展证书 ([ffd2e81](https://github.com/certd/certd/commit/ffd2e8149e3a06bf3eec456ff85dbed793af9e90)) +* 企业模式下面增加个人数据迁移的引导 ([431afd6](https://github.com/certd/certd/commit/431afd618f547cecf9a29433f46d4367619e2ecf)) +* 新增阿里云证书清理插件 ([4b7eeaa](https://github.com/certd/certd/commit/4b7eeaa6e0a14d2e461c7c473a920a0966b1fe8e)) +* 优化远程数据选择框,选择数据时不刷新闪烁 ([7f6a8bc](https://github.com/certd/certd/commit/7f6a8bc87e364685defe7f039264b2de064806c5)) +* 支持复制粘贴任务步骤 ([acc2df2](https://github.com/certd/certd/commit/acc2df29def017fb8165f931b41ef95414966afc)) + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) ### Bug Fixes diff --git a/docs/guide/plugins/deploy.md b/docs/guide/plugins/deploy.md index ccd3351c2..b90d88ea3 100644 --- a/docs/guide/plugins/deploy.md +++ b/docs/guide/plugins/deploy.md @@ -1,5 +1,5 @@ # 任务插件 -共 `125` 款任务插件 +共 `126` 款任务插件 ## 1. 证书申请 | 序号 | 名称 | 说明 | @@ -81,22 +81,23 @@ | 序号 | 名称 | 说明 | |-----|-----|-----| -| 1.| **阿里云-部署到Ack** | 部署到阿里云Ack集群Ingress等通过Secret管理证书的应用 | -| 2.| **阿里云-部署至ALB(应用负载均衡)** | ALB,更新监听器的默认证书 | -| 3.| **阿里云-部署至任意云资源** | 【不建议使用】需要消耗阿里云自动部署次数,支持SLB、LIVE、webHosting、VOD、CR、DCDN、DDoS、CDN、ALB、APIGateway、FC、GA、MSE、NLB、OSS、SAE、WAF等云产品 | -| 4.| **阿里云-部署至云原生API网关/AI网关** | 自动部署域名证书至云原生API网关、AI网关 | -| 5.| **阿里云-部署证书至API网关** | 自动部署域名证书至阿里云API网关(APIGateway) | -| 6.| **阿里云-部署证书至CDN** | 自动部署域名证书至阿里云CDN | -| 7.| **阿里云-部署证书至DCDN** | 依赖证书申请前置任务,自动部署域名证书至阿里云DCDN | -| 8.| **阿里云-部署至ESA** | 部署证书到阿里云ESA(边缘安全加速),自动删除过期证书 | -| 9.| **阿里云-部署至阿里云FC(3.0)** | 部署证书到阿里云函数计算(FC3.0) | -| 10.| **阿里云-部署至GA** | 部署证书到阿里云GA(全球加速),支持更新默认证书和扩展证书 | -| 11.| **阿里云-部署至NLB(网络负载均衡)** | NLB,网络负载均衡,更新监听器的默认证书 | -| 12.| **阿里云-部署证书至OSS** | 部署域名证书至阿里云OSS自定义域名,不是上传到阿里云oss | -| 13.| **阿里云-部署至CLB(传统负载均衡)** | 部署证书到阿里云CLB(传统负载均衡) | -| 14.| **阿里云-部署至VOD** | 部署证书到阿里云视频点播(vod) | -| 15.| **阿里云-部署至阿里云WAF** | 部署证书到阿里云WAF | -| 16.| **阿里云-上传证书到CAS** | 上传证书到阿里云证书管理服务(CAS),如果不想在阿里云上同一份证书上传多次,可以把此任务作为前置任务,其他阿里云任务证书那一项选择此任务的输出 | +| 1.| **阿里云-删除即将过期证书** | 仅删除未使用的证书 | +| 2.| **阿里云-部署到Ack** | 部署到阿里云Ack集群Ingress等通过Secret管理证书的应用 | +| 3.| **阿里云-部署至ALB(应用负载均衡)** | ALB,更新监听器的默认证书 | +| 4.| **阿里云-部署至任意云资源** | 【不建议使用】需要消耗阿里云自动部署次数,支持SLB、LIVE、webHosting、VOD、CR、DCDN、DDoS、CDN、ALB、APIGateway、FC、GA、MSE、NLB、OSS、SAE、WAF等云产品 | +| 5.| **阿里云-部署至云原生API网关/AI网关** | 自动部署域名证书至云原生API网关、AI网关 | +| 6.| **阿里云-部署证书至API网关** | 自动部署域名证书至阿里云API网关(APIGateway) | +| 7.| **阿里云-部署证书至CDN** | 自动部署域名证书至阿里云CDN | +| 8.| **阿里云-部署证书至DCDN** | 依赖证书申请前置任务,自动部署域名证书至阿里云DCDN | +| 9.| **阿里云-部署至ESA** | 部署证书到阿里云ESA(边缘安全加速),自动删除过期证书 | +| 10.| **阿里云-部署至阿里云FC(3.0)** | 部署证书到阿里云函数计算(FC3.0) | +| 11.| **阿里云-部署至GA** | 部署证书到阿里云GA(全球加速),支持更新默认证书和扩展证书 | +| 12.| **阿里云-部署至NLB(网络负载均衡)** | NLB,网络负载均衡,更新监听器的默认证书 | +| 13.| **阿里云-部署证书至OSS** | 部署域名证书至阿里云OSS自定义域名,不是上传到阿里云oss | +| 14.| **阿里云-部署至CLB(传统负载均衡)** | 部署证书到阿里云CLB(传统负载均衡) | +| 15.| **阿里云-部署至VOD** | 部署证书到阿里云视频点播(vod) | +| 16.| **阿里云-部署至阿里云WAF** | 部署证书到阿里云WAF | +| 17.| **阿里云-上传证书到CAS** | 上传证书到阿里云证书管理服务(CAS),如果不想在阿里云上同一份证书上传多次,可以把此任务作为前置任务,其他阿里云任务证书那一项选择此任务的输出 | ## 6. 华为云 | 序号 | 名称 | 说明 | diff --git a/lerna.json b/lerna.json index b1b37df6c..909149711 100644 --- a/lerna.json +++ b/lerna.json @@ -9,5 +9,5 @@ } }, "npmClient": "pnpm", - "version": "1.39.5" + "version": "1.39.6" } diff --git a/packages/core/acme-client/CHANGELOG.md b/packages/core/acme-client/CHANGELOG.md index 54fb656cd..737cae507 100644 --- a/packages/core/acme-client/CHANGELOG.md +++ b/packages/core/acme-client/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/publishlab/node-acme-client/compare/v1.39.5...v1.39.6) (2026-03-22) + +**Note:** Version bump only for package @certd/acme-client + ## [1.39.5](https://github.com/publishlab/node-acme-client/compare/v1.39.4...v1.39.5) (2026-03-18) **Note:** Version bump only for package @certd/acme-client diff --git a/packages/core/acme-client/package.json b/packages/core/acme-client/package.json index 55545e686..7270bd1a0 100644 --- a/packages/core/acme-client/package.json +++ b/packages/core/acme-client/package.json @@ -3,7 +3,7 @@ "description": "Simple and unopinionated ACME client", "private": false, "author": "nmorsman", - "version": "1.39.5", + "version": "1.39.6", "type": "module", "module": "scr/index.js", "main": "src/index.js", @@ -18,7 +18,7 @@ "types" ], "dependencies": { - "@certd/basic": "^1.39.5", + "@certd/basic": "^1.39.6", "@peculiar/x509": "^1.11.0", "asn1js": "^3.0.5", "axios": "^1.9.0", @@ -70,5 +70,5 @@ "bugs": { "url": "https://github.com/publishlab/node-acme-client/issues" }, - "gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f" + "gitHead": "b0ccab41e17cb16c87bfc0ec3b052d5e8a5d8435" } diff --git a/packages/core/basic/CHANGELOG.md b/packages/core/basic/CHANGELOG.md index 6490da021..be97894d8 100644 --- a/packages/core/basic/CHANGELOG.md +++ b/packages/core/basic/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +**Note:** Version bump only for package @certd/basic + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) **Note:** Version bump only for package @certd/basic diff --git a/packages/core/basic/build.md b/packages/core/basic/build.md index c05600ad3..51bb64da9 100644 --- a/packages/core/basic/build.md +++ b/packages/core/basic/build.md @@ -1 +1 @@ -01:09 +00:03 diff --git a/packages/core/basic/package.json b/packages/core/basic/package.json index eb7483c30..86c06fb14 100644 --- a/packages/core/basic/package.json +++ b/packages/core/basic/package.json @@ -1,7 +1,7 @@ { "name": "@certd/basic", "private": false, - "version": "1.39.5", + "version": "1.39.6", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", @@ -47,5 +47,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f" + "gitHead": "b0ccab41e17cb16c87bfc0ec3b052d5e8a5d8435" } diff --git a/packages/core/pipeline/CHANGELOG.md b/packages/core/pipeline/CHANGELOG.md index e8727a40e..b88be1b10 100644 --- a/packages/core/pipeline/CHANGELOG.md +++ b/packages/core/pipeline/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +**Note:** Version bump only for package @certd/pipeline + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) **Note:** Version bump only for package @certd/pipeline diff --git a/packages/core/pipeline/package.json b/packages/core/pipeline/package.json index 37439c9dc..58613bc16 100644 --- a/packages/core/pipeline/package.json +++ b/packages/core/pipeline/package.json @@ -1,7 +1,7 @@ { "name": "@certd/pipeline", "private": false, - "version": "1.39.5", + "version": "1.39.6", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", @@ -18,8 +18,8 @@ "compile": "tsc --skipLibCheck --watch" }, "dependencies": { - "@certd/basic": "^1.39.5", - "@certd/plus-core": "^1.39.5", + "@certd/basic": "^1.39.6", + "@certd/plus-core": "^1.39.6", "dayjs": "^1.11.7", "lodash-es": "^4.17.21", "reflect-metadata": "^0.1.13" @@ -45,5 +45,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f" + "gitHead": "b0ccab41e17cb16c87bfc0ec3b052d5e8a5d8435" } diff --git a/packages/libs/lib-huawei/CHANGELOG.md b/packages/libs/lib-huawei/CHANGELOG.md index 3afc9fff5..c82e7a597 100644 --- a/packages/libs/lib-huawei/CHANGELOG.md +++ b/packages/libs/lib-huawei/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +**Note:** Version bump only for package @certd/lib-huawei + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) **Note:** Version bump only for package @certd/lib-huawei diff --git a/packages/libs/lib-huawei/package.json b/packages/libs/lib-huawei/package.json index 276018bb9..fbe85ce2d 100644 --- a/packages/libs/lib-huawei/package.json +++ b/packages/libs/lib-huawei/package.json @@ -1,7 +1,7 @@ { "name": "@certd/lib-huawei", "private": false, - "version": "1.39.5", + "version": "1.39.6", "main": "./dist/bundle.js", "module": "./dist/bundle.js", "types": "./dist/d/index.d.ts", @@ -24,5 +24,5 @@ "prettier": "^2.8.8", "tslib": "^2.8.1" }, - "gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f" + "gitHead": "b0ccab41e17cb16c87bfc0ec3b052d5e8a5d8435" } diff --git a/packages/libs/lib-iframe/CHANGELOG.md b/packages/libs/lib-iframe/CHANGELOG.md index b28846ca1..76d062aa5 100644 --- a/packages/libs/lib-iframe/CHANGELOG.md +++ b/packages/libs/lib-iframe/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +**Note:** Version bump only for package @certd/lib-iframe + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) **Note:** Version bump only for package @certd/lib-iframe diff --git a/packages/libs/lib-iframe/package.json b/packages/libs/lib-iframe/package.json index c6e18fe1f..30eaf7645 100644 --- a/packages/libs/lib-iframe/package.json +++ b/packages/libs/lib-iframe/package.json @@ -1,7 +1,7 @@ { "name": "@certd/lib-iframe", "private": false, - "version": "1.39.5", + "version": "1.39.6", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", @@ -31,5 +31,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f" + "gitHead": "b0ccab41e17cb16c87bfc0ec3b052d5e8a5d8435" } diff --git a/packages/libs/lib-jdcloud/CHANGELOG.md b/packages/libs/lib-jdcloud/CHANGELOG.md index 4128a9d2b..1a40ce8ec 100644 --- a/packages/libs/lib-jdcloud/CHANGELOG.md +++ b/packages/libs/lib-jdcloud/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +**Note:** Version bump only for package @certd/jdcloud + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) **Note:** Version bump only for package @certd/jdcloud diff --git a/packages/libs/lib-jdcloud/package.json b/packages/libs/lib-jdcloud/package.json index 920ef7212..3b09544e3 100644 --- a/packages/libs/lib-jdcloud/package.json +++ b/packages/libs/lib-jdcloud/package.json @@ -1,6 +1,6 @@ { "name": "@certd/jdcloud", - "version": "1.39.5", + "version": "1.39.6", "description": "jdcloud openApi sdk", "main": "./dist/bundle.js", "module": "./dist/bundle.js", @@ -56,5 +56,5 @@ "fetch" ] }, - "gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f" + "gitHead": "b0ccab41e17cb16c87bfc0ec3b052d5e8a5d8435" } diff --git a/packages/libs/lib-k8s/CHANGELOG.md b/packages/libs/lib-k8s/CHANGELOG.md index 337772d05..0f0b61a51 100644 --- a/packages/libs/lib-k8s/CHANGELOG.md +++ b/packages/libs/lib-k8s/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +**Note:** Version bump only for package @certd/lib-k8s + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) **Note:** Version bump only for package @certd/lib-k8s diff --git a/packages/libs/lib-k8s/package.json b/packages/libs/lib-k8s/package.json index 01346146b..c739ed290 100644 --- a/packages/libs/lib-k8s/package.json +++ b/packages/libs/lib-k8s/package.json @@ -1,7 +1,7 @@ { "name": "@certd/lib-k8s", "private": false, - "version": "1.39.5", + "version": "1.39.6", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", @@ -17,7 +17,7 @@ "pub": "npm publish" }, "dependencies": { - "@certd/basic": "^1.39.5", + "@certd/basic": "^1.39.6", "@kubernetes/client-node": "0.21.0" }, "devDependencies": { @@ -32,5 +32,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f" + "gitHead": "b0ccab41e17cb16c87bfc0ec3b052d5e8a5d8435" } diff --git a/packages/libs/lib-server/CHANGELOG.md b/packages/libs/lib-server/CHANGELOG.md index a8926a9c2..3568b2687 100644 --- a/packages/libs/lib-server/CHANGELOG.md +++ b/packages/libs/lib-server/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +**Note:** Version bump only for package @certd/lib-server + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) **Note:** Version bump only for package @certd/lib-server diff --git a/packages/libs/lib-server/package.json b/packages/libs/lib-server/package.json index 0701d3823..6c70e3b28 100644 --- a/packages/libs/lib-server/package.json +++ b/packages/libs/lib-server/package.json @@ -1,6 +1,6 @@ { "name": "@certd/lib-server", - "version": "1.39.5", + "version": "1.39.6", "description": "midway with flyway, sql upgrade way ", "private": false, "type": "module", @@ -28,11 +28,11 @@ ], "license": "AGPL", "dependencies": { - "@certd/acme-client": "^1.39.5", - "@certd/basic": "^1.39.5", - "@certd/pipeline": "^1.39.5", - "@certd/plugin-lib": "^1.39.5", - "@certd/plus-core": "^1.39.5", + "@certd/acme-client": "^1.39.6", + "@certd/basic": "^1.39.6", + "@certd/pipeline": "^1.39.6", + "@certd/plugin-lib": "^1.39.6", + "@certd/plus-core": "^1.39.6", "@midwayjs/cache": "3.14.0", "@midwayjs/core": "3.20.11", "@midwayjs/i18n": "3.20.13", @@ -64,5 +64,5 @@ "typeorm": "^0.3.11", "typescript": "^5.4.2" }, - "gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f" + "gitHead": "b0ccab41e17cb16c87bfc0ec3b052d5e8a5d8435" } diff --git a/packages/libs/midway-flyway-js/CHANGELOG.md b/packages/libs/midway-flyway-js/CHANGELOG.md index e8b7df862..a795b098b 100644 --- a/packages/libs/midway-flyway-js/CHANGELOG.md +++ b/packages/libs/midway-flyway-js/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +**Note:** Version bump only for package @certd/midway-flyway-js + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) **Note:** Version bump only for package @certd/midway-flyway-js diff --git a/packages/libs/midway-flyway-js/package.json b/packages/libs/midway-flyway-js/package.json index 519524a26..db06bddb6 100644 --- a/packages/libs/midway-flyway-js/package.json +++ b/packages/libs/midway-flyway-js/package.json @@ -1,6 +1,6 @@ { "name": "@certd/midway-flyway-js", - "version": "1.39.5", + "version": "1.39.6", "description": "midway with flyway, sql upgrade way ", "private": false, "type": "module", @@ -46,5 +46,5 @@ "typeorm": "^0.3.11", "typescript": "^5.4.2" }, - "gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f" + "gitHead": "b0ccab41e17cb16c87bfc0ec3b052d5e8a5d8435" } diff --git a/packages/plugins/plugin-cert/CHANGELOG.md b/packages/plugins/plugin-cert/CHANGELOG.md index 2c7386dc1..44a1bb3a4 100644 --- a/packages/plugins/plugin-cert/CHANGELOG.md +++ b/packages/plugins/plugin-cert/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +**Note:** Version bump only for package @certd/plugin-cert + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) **Note:** Version bump only for package @certd/plugin-cert diff --git a/packages/plugins/plugin-cert/package.json b/packages/plugins/plugin-cert/package.json index 26eddee75..fe06171d3 100644 --- a/packages/plugins/plugin-cert/package.json +++ b/packages/plugins/plugin-cert/package.json @@ -1,7 +1,7 @@ { "name": "@certd/plugin-cert", "private": false, - "version": "1.39.5", + "version": "1.39.6", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -17,10 +17,10 @@ "compile": "tsc --skipLibCheck --watch" }, "dependencies": { - "@certd/acme-client": "^1.39.5", - "@certd/basic": "^1.39.5", - "@certd/pipeline": "^1.39.5", - "@certd/plugin-lib": "^1.39.5", + "@certd/acme-client": "^1.39.6", + "@certd/basic": "^1.39.6", + "@certd/pipeline": "^1.39.6", + "@certd/plugin-lib": "^1.39.6", "psl": "^1.9.0", "punycode.js": "^2.3.1" }, @@ -38,5 +38,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f" + "gitHead": "b0ccab41e17cb16c87bfc0ec3b052d5e8a5d8435" } diff --git a/packages/plugins/plugin-lib/CHANGELOG.md b/packages/plugins/plugin-lib/CHANGELOG.md index 09d157f33..28c82d66b 100644 --- a/packages/plugins/plugin-lib/CHANGELOG.md +++ b/packages/plugins/plugin-lib/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +**Note:** Version bump only for package @certd/plugin-lib + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) **Note:** Version bump only for package @certd/plugin-lib diff --git a/packages/plugins/plugin-lib/package.json b/packages/plugins/plugin-lib/package.json index 0d103bd65..06084bf09 100644 --- a/packages/plugins/plugin-lib/package.json +++ b/packages/plugins/plugin-lib/package.json @@ -1,7 +1,7 @@ { "name": "@certd/plugin-lib", "private": false, - "version": "1.39.5", + "version": "1.39.6", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -22,10 +22,10 @@ "@alicloud/pop-core": "^1.7.10", "@alicloud/tea-util": "^1.4.11", "@aws-sdk/client-s3": "^3.964.0", - "@certd/acme-client": "^1.39.5", - "@certd/basic": "^1.39.5", - "@certd/pipeline": "^1.39.5", - "@certd/plus-core": "^1.39.5", + "@certd/acme-client": "^1.39.6", + "@certd/basic": "^1.39.6", + "@certd/pipeline": "^1.39.6", + "@certd/plus-core": "^1.39.6", "@kubernetes/client-node": "0.21.0", "ali-oss": "^6.22.0", "basic-ftp": "^5.0.5", @@ -57,5 +57,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f" + "gitHead": "b0ccab41e17cb16c87bfc0ec3b052d5e8a5d8435" } diff --git a/packages/ui/certd-client/CHANGELOG.md b/packages/ui/certd-client/CHANGELOG.md index 90028e6de..78703e453 100644 --- a/packages/ui/certd-client/CHANGELOG.md +++ b/packages/ui/certd-client/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +### Bug Fixes + +* 修复模版id不正确导致修改到错误的模版流水线bug ([b1ff163](https://github.com/certd/certd/commit/b1ff163a2828b205297408d5aed21cf1eff335e8)) +* remote-select默认pageSize设置为50,阿里云WAF不支持pageSize100 ([285532d](https://github.com/certd/certd/commit/285532d4318b90d0d7f8154f070274c0a0ec0269)) + +### Performance Improvements + +* 企业模式下面增加个人数据迁移的引导 ([431afd6](https://github.com/certd/certd/commit/431afd618f547cecf9a29433f46d4367619e2ecf)) +* 优化远程数据选择框,选择数据时不刷新闪烁 ([7f6a8bc](https://github.com/certd/certd/commit/7f6a8bc87e364685defe7f039264b2de064806c5)) +* 支持复制粘贴任务步骤 ([acc2df2](https://github.com/certd/certd/commit/acc2df29def017fb8165f931b41ef95414966afc)) + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) ### Bug Fixes diff --git a/packages/ui/certd-client/package.json b/packages/ui/certd-client/package.json index 0b535de31..289243224 100644 --- a/packages/ui/certd-client/package.json +++ b/packages/ui/certd-client/package.json @@ -1,6 +1,6 @@ { "name": "@certd/ui-client", - "version": "1.39.5", + "version": "1.39.6", "private": true, "scripts": { "dev": "vite --open", @@ -106,8 +106,8 @@ "zod-defaults": "^0.1.3" }, "devDependencies": { - "@certd/lib-iframe": "^1.39.5", - "@certd/pipeline": "^1.39.5", + "@certd/lib-iframe": "^1.39.6", + "@certd/pipeline": "^1.39.6", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", "@types/chai": "^4.3.12", diff --git a/packages/ui/certd-client/src/locales/langs/en-US/certd.ts b/packages/ui/certd-client/src/locales/langs/en-US/certd.ts index d300dc382..61ea3973c 100644 --- a/packages/ui/certd-client/src/locales/langs/en-US/certd.ts +++ b/packages/ui/certd-client/src/locales/langs/en-US/certd.ts @@ -795,6 +795,8 @@ export default { reverseProxyEmpty: "No reverse proxy list configured", environmentVars: "Environment Variables", environmentVarsHelper: "configure the runtime environment variables, one per line, format: KEY=VALUE", + + bindUrl: "Bind URL", }, }, modal: { diff --git a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts index 39c496214..fcc346979 100644 --- a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts +++ b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts @@ -804,6 +804,7 @@ export default { reverseProxyEmpty: "未配置反向代理", environmentVars: "环境变量", environmentVarsHelper: "配置运行时环境变量,每行一个,格式:KEY=VALUE", + bindUrl: "绑定URL", }, }, modal: { diff --git a/packages/ui/certd-client/src/store/settings/index.tsx b/packages/ui/certd-client/src/store/settings/index.tsx index 09ccb3e24..955c242b4 100644 --- a/packages/ui/certd-client/src/store/settings/index.tsx +++ b/packages/ui/certd-client/src/store/settings/index.tsx @@ -272,14 +272,27 @@ export const useSettingStore = defineStore({ }, async checkUrlBound() { const userStore = useUserStore(); - const settingStore = useSettingStore(); if (!userStore.isAdmin) { return; } + const bindUrl = this.installInfo.bindUrl; + const bindUrl2 = this.installInfo.bindUrl2; + if (!bindUrl) { + //绑定url + await this.doBindUrl("url"); + } else { + //检查当前url 是否与绑定的url一致 + const url = window.location.href; + if (!url.startsWith(bindUrl) && !url.startsWith(bindUrl2)) { + this.openBindUrlModal(); + } + } + }, + + openBindUrlModal() { const event: any = { ModalRef: null }; mitter.emit("getModal", event); const Modal = event.ModalRef; - let modalRef: any = null; const bindUrl = this.installInfo.bindUrl; const bindUrl2 = this.installInfo.bindUrl2; @@ -289,57 +302,47 @@ export const useSettingStore = defineStore({ modalRef.destroy(); } }; - - if (!bindUrl) { - //绑定url - await this.doBindUrl("url"); - } else { - //检查当前url 是否与绑定的url一致 - const url = window.location.href; - if (!url.startsWith(bindUrl) && !url.startsWith(bindUrl2)) { - modalRef = Modal.warning({ - title: "URL地址未绑定,是否绑定此地址?", - width: 500, - keyboard: false, - content: () => { - return ( -
-
- - 绑定地址1: - {bindUrl || "未占用"} - - doBindRequest("url")}> - 绑定到地址1 - -
-
- - 绑定地址2: - {bindUrl2 || "未占用"} - - doBindRequest("url2")}> - 绑定到地址2 - -
-
- ); - }, - onOk: async () => { - // await this.doBindUrl(); - window.location.href = bindUrl; - }, - okButtonProps: { - danger: true, - }, - okText: "不,回到原来的地址", - cancelText: "不,回到原来的地址", - onCancel: () => { - window.location.href = bindUrl; - }, - }); - } - } + const modalRef: any = Modal.warning({ + title: "URL地址未绑定,是否绑定此地址?", + width: 500, + keyboard: false, + content: () => { + return ( +
+
+ + 绑定地址1: + {bindUrl || "未占用"} + + doBindRequest("url")}> + 绑定到地址1 + +
+
+ + 绑定地址2: + {bindUrl2 || "未占用"} + + doBindRequest("url2")}> + 绑定到地址2 + +
+
+ ); + }, + onOk: async () => { + // await this.doBindUrl(); + window.location.href = bindUrl; + }, + okButtonProps: { + danger: true, + }, + okText: "不,回到原来的地址", + cancelText: "不,回到原来的地址", + onCancel: () => { + window.location.href = bindUrl; + }, + }); }, async loadProductInfo() { try { diff --git a/packages/ui/certd-client/src/style/certd.less b/packages/ui/certd-client/src/style/certd.less index eeb601bce..05393d6c5 100644 --- a/packages/ui/certd-client/src/style/certd.less +++ b/packages/ui/certd-client/src/style/certd.less @@ -118,3 +118,16 @@ span.fs-icon-svg { } } + +button.ant-btn.ant-btn-default.isPlus{ + color: #c5913f; + border: 1px solid #c5913f; + + &:disabled { + cursor: not-allowed; + border-color: hsl(240 5.9% 90%); + color: rgba(50, 54, 57, 0.25); + background-color: rgba(50, 54, 57, 0.04); + box-shadow: none; + } +} \ No newline at end of file diff --git a/packages/ui/certd-client/src/views/certd/access/access-selector/access/crud.tsx b/packages/ui/certd-client/src/views/certd/access/access-selector/access/crud.tsx index 880361bb3..cb8ef793d 100644 --- a/packages/ui/certd-client/src/views/certd/access/access-selector/access/crud.tsx +++ b/packages/ui/certd-client/src/views/certd/access/access-selector/access/crud.tsx @@ -18,6 +18,8 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const { form, row } = req; form.id = row.id; form.type = props.type; + delete form.access; + delete form.keyId; const res = await context.api.UpdateObj(form); lastResRef.value = res; return res; @@ -30,6 +32,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const addRequest = async (req: AddReq) => { const { form } = req; form.type = props.type; + delete form.access; const res = await context.api.AddObj(form); lastResRef.value = res; return res; @@ -70,6 +73,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat width: "1050px", }, }, + rowHandle: { width: 200, }, @@ -89,6 +93,9 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat }, // 点击行 }; }, + remove: { + confirmMessage: "授权如果已经被使用,可能会导致流水线无法正常运行,请谨慎操作", + }, }, columns: { id: { diff --git a/packages/ui/certd-client/src/views/certd/access/crud.tsx b/packages/ui/certd-client/src/views/certd/access/crud.tsx index f3be184f6..c423bb816 100644 --- a/packages/ui/certd-client/src/views/certd/access/crud.tsx +++ b/packages/ui/certd-client/src/views/certd/access/crud.tsx @@ -15,6 +15,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const editRequest = async (req: EditReq) => { const { form, row } = req; form.id = row.id; + delete form.access; const res = await api.UpdateObj(form); return res; }; @@ -25,6 +26,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const addRequest = async (req: AddReq) => { const { form } = req; + delete form.access; const res = await api.AddObj(form); return res; }; diff --git a/packages/ui/certd-client/src/views/certd/addon/crud.tsx b/packages/ui/certd-client/src/views/certd/addon/crud.tsx index 824d242bb..08c783e4a 100644 --- a/packages/ui/certd-client/src/views/certd/addon/crud.tsx +++ b/packages/ui/certd-client/src/views/certd/addon/crud.tsx @@ -16,6 +16,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const editRequest = async (req: EditReq) => { const { form, row } = req; form.id = row.id; + delete form.body; const res = await api.UpdateObj(form); return res; }; @@ -26,6 +27,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const addRequest = async (req: AddReq) => { const { form } = req; + delete form.body; const res = await api.AddObj(form); return res; }; diff --git a/packages/ui/certd-client/src/views/certd/notification/crud.tsx b/packages/ui/certd-client/src/views/certd/notification/crud.tsx index 53baf1ade..3928dbb36 100644 --- a/packages/ui/certd-client/src/views/certd/notification/crud.tsx +++ b/packages/ui/certd-client/src/views/certd/notification/crud.tsx @@ -11,6 +11,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const editRequest = async (req: EditReq) => { const { form, row } = req; form.id = row.id; + delete form.body; const res = await api.UpdateObj(form); return res; }; @@ -21,6 +22,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const addRequest = async (req: AddReq) => { const { form } = req; + delete form.body; const res = await api.AddObj(form); return res; }; diff --git a/packages/ui/certd-client/src/views/certd/notification/notification-selector/modal/crud.tsx b/packages/ui/certd-client/src/views/certd/notification/notification-selector/modal/crud.tsx index 944e29a39..a988e7962 100644 --- a/packages/ui/certd-client/src/views/certd/notification/notification-selector/modal/crud.tsx +++ b/packages/ui/certd-client/src/views/certd/notification/notification-selector/modal/crud.tsx @@ -14,6 +14,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const editRequest = async (req: EditReq) => { const { form, row } = req; form.id = row.id; + delete form.body; const res = await context.api.UpdateObj(form); lastResRef.value = res; return res; @@ -25,6 +26,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat const addRequest = async (req: AddReq) => { const { form } = req; + delete form.body; const res = await context.api.AddObj(form); lastResRef.value = res; return res; diff --git a/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/task-form/copy.ts b/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/task-form/copy.ts new file mode 100644 index 000000000..e3eab5346 --- /dev/null +++ b/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/task-form/copy.ts @@ -0,0 +1,39 @@ +import { reactive, ref } from "vue"; + +export class CopyeStore { + type: "step" | "steps" | "task" | "tasks"; + target: any; + + getCopyedCount() { + if (this.type === "step") { + return 1; + } else if (this.type === "steps") { + return this.target.length; + } else if (this.type === "task") { + return 1; + } else if (this.type === "tasks") { + return this.target.length; + } else { + return 0; + } + } + + setStep(target: any) { + this.target = target; + this.type = "step"; + } + setSteps(target: any) { + this.target = target; + this.type = "steps"; + } + setTask(target: any) { + this.target = target; + this.type = "task"; + } + setTasks(target: any) { + this.target = target; + this.type = "tasks"; + } +} + +export const Copyed: any = reactive(new CopyeStore()); diff --git a/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/task-form/index.vue b/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/task-form/index.vue index e144c0097..e73268161 100644 --- a/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/task-form/index.vue +++ b/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/task-form/index.vue @@ -29,7 +29,17 @@ @@ -68,14 +78,15 @@ diff --git a/packages/ui/certd-client/src/views/sys/settings/tabs/oauth.vue b/packages/ui/certd-client/src/views/sys/settings/tabs/oauth.vue index c6782fe07..0d8bacfd5 100644 --- a/packages/ui/certd-client/src/views/sys/settings/tabs/oauth.vue +++ b/packages/ui/certd-client/src/views/sys/settings/tabs/oauth.vue @@ -8,7 +8,7 @@
{{ t("certd.sys.setting.passkeyEnabledHelper", [bindDomain]) }}
- {{ t("certd.sys.setting.passkeyHostnameNotSame") }} + {{ t("certd.sys.setting.passkeyHostnameNotSame") }} {{ t("certd.sys.setting.bindUrl") }}
diff --git a/packages/ui/certd-server/CHANGELOG.md b/packages/ui/certd-server/CHANGELOG.md index 947178184..d47f618fc 100644 --- a/packages/ui/certd-server/CHANGELOG.md +++ b/packages/ui/certd-server/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.39.6](https://github.com/certd/certd/compare/v1.39.5...v1.39.6) (2026-03-22) + +### Bug Fixes + +* 修复模版id不正确导致修改到错误的模版流水线bug ([b1ff163](https://github.com/certd/certd/commit/b1ff163a2828b205297408d5aed21cf1eff335e8)) +* 修复批量执行按钮无效的bug ([49703f0](https://github.com/certd/certd/commit/49703f08e55b303851086d9f36aca562d7999be6)) + +### Performance Improvements + +* 火山引擎部署alb证书插件支持部署扩展证书以及删除已过期扩展证书 ([ffd2e81](https://github.com/certd/certd/commit/ffd2e8149e3a06bf3eec456ff85dbed793af9e90)) +* 新增阿里云证书清理插件 ([4b7eeaa](https://github.com/certd/certd/commit/4b7eeaa6e0a14d2e461c7c473a920a0966b1fe8e)) + ## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18) ### Performance Improvements diff --git a/packages/ui/certd-server/metadata/deploy_AliyunDeleteExpiringCert.yaml b/packages/ui/certd-server/metadata/deploy_AliyunDeleteExpiringCert.yaml new file mode 100644 index 000000000..ef492dc0b --- /dev/null +++ b/packages/ui/certd-server/metadata/deploy_AliyunDeleteExpiringCert.yaml @@ -0,0 +1,63 @@ +showRunStrategy: false +default: + strategy: + runStrategy: 0 +name: AliyunDeleteExpiringCert +title: 阿里云-删除即将过期证书 +icon: ant-design:aliyun-outlined +group: aliyun +desc: 仅删除未使用的证书 +needPlus: true +input: + accessId: + title: Access提供者 + helper: access 授权 + component: + name: access-selector + type: aliyun + required: true + order: 0 + endpoint: + title: 地域 + helper: 阿里云CAS证书服务地域 + component: + name: a-select + options: + - value: cas.aliyuncs.com + label: 中国大陆 + - value: cas.ap-southeast-1.aliyuncs.com + label: 新加坡 + required: true + value: cas.aliyuncs.com + order: 0 + maxCount: + title: 最大删除数量 + helper: 单次运行最大删除数量 + value: 100 + component: + name: a-input-number + vModel: value + required: true + order: 0 + expiringDays: + title: 即将过期天数 + helper: 仅删除有效期小于此天数的证书,0表示完全过期时才删除 + value: 0 + component: + name: a-input-number + vModel: value + required: true + order: 0 + checkTimeout: + title: 检查超时时间 + helper: 检查删除任务结果超时时间,单位分钟 + value: 10 + component: + name: a-input-number + vModel: value + required: true + order: 0 +output: {} +pluginType: deploy +type: builtIn +scriptFilePath: /plugins/plugin-aliyun/plugin/delete-expiring-cert/index.js diff --git a/packages/ui/certd-server/metadata/deploy_VolcengineDeployToALB.yaml b/packages/ui/certd-server/metadata/deploy_VolcengineDeployToALB.yaml index 497cf575c..4b5c4ef45 100644 --- a/packages/ui/certd-server/metadata/deploy_VolcengineDeployToALB.yaml +++ b/packages/ui/certd-server/metadata/deploy_VolcengineDeployToALB.yaml @@ -96,6 +96,19 @@ input: 选择要部署证书的监听器 需要在监听器中选择证书中心,进行跨服务访问授权 order: 0 + certType: + title: 证书部署类型 + helper: 选择部署默认证书还是扩展证书 + component: + name: a-select + options: + - label: 默认证书 + value: default + - label: 扩展证书 + value: extension + value: default + required: true + order: 0 output: {} pluginType: deploy type: builtIn diff --git a/packages/ui/certd-server/package.json b/packages/ui/certd-server/package.json index 6fbf6859f..7662e95f0 100644 --- a/packages/ui/certd-server/package.json +++ b/packages/ui/certd-server/package.json @@ -1,6 +1,6 @@ { "name": "@certd/ui-server", - "version": "1.39.5", + "version": "1.39.6", "description": "fast-server base midway", "private": true, "type": "module", @@ -50,20 +50,20 @@ "@aws-sdk/client-route-53": "^3.964.0", "@aws-sdk/client-s3": "^3.964.0", "@aws-sdk/client-sts": "^3.990.0", - "@certd/acme-client": "^1.39.5", - "@certd/basic": "^1.39.5", - "@certd/commercial-core": "^1.39.5", + "@certd/acme-client": "^1.39.6", + "@certd/basic": "^1.39.6", + "@certd/commercial-core": "^1.39.6", "@certd/cv4pve-api-javascript": "^8.4.2", - "@certd/jdcloud": "^1.39.5", - "@certd/lib-huawei": "^1.39.5", - "@certd/lib-k8s": "^1.39.5", - "@certd/lib-server": "^1.39.5", - "@certd/midway-flyway-js": "^1.39.5", - "@certd/pipeline": "^1.39.5", - "@certd/plugin-cert": "^1.39.5", - "@certd/plugin-lib": "^1.39.5", - "@certd/plugin-plus": "^1.39.5", - "@certd/plus-core": "^1.39.5", + "@certd/jdcloud": "^1.39.6", + "@certd/lib-huawei": "^1.39.6", + "@certd/lib-k8s": "^1.39.6", + "@certd/lib-server": "^1.39.6", + "@certd/midway-flyway-js": "^1.39.6", + "@certd/pipeline": "^1.39.6", + "@certd/plugin-cert": "^1.39.6", + "@certd/plugin-lib": "^1.39.6", + "@certd/plugin-plus": "^1.39.6", + "@certd/plus-core": "^1.39.6", "@google-cloud/publicca": "^1.3.0", "@huaweicloud/huaweicloud-sdk-cdn": "^3.1.185", "@huaweicloud/huaweicloud-sdk-core": "^3.1.185", diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/delete-expiring-cert/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/delete-expiring-cert/index.ts new file mode 100644 index 000000000..1cec2c5be --- /dev/null +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/delete-expiring-cert/index.ts @@ -0,0 +1,159 @@ +import { IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline'; +import { AbstractPlusTaskPlugin } from "@certd/plugin-plus"; +import dayjs from 'dayjs'; +import { AliyunAccess } from '../../../plugin-lib/aliyun/access/index.js'; +import { AliyunSslClient } from '../../../plugin-lib/aliyun/lib/index.js'; + +@IsTaskPlugin({ + name: 'AliyunDeleteExpiringCert', + title: '阿里云-删除即将过期证书', + icon: 'ant-design:aliyun-outlined', + group: pluginGroups.aliyun.key, + desc: '仅删除未使用的证书', + default: { + strategy: { + runStrategy: RunStrategy.AlwaysRun, + }, + }, + needPlus: true, +}) +export class AliyunDeleteExpiringCert extends AbstractPlusTaskPlugin { + @TaskInput({ + title: 'Access提供者', + helper: 'access 授权', + component: { + name: 'access-selector', + type: 'aliyun', + }, + required: true, + }) + accessId!: string; + + @TaskInput({ + title: '地域', + helper: '阿里云CAS证书服务地域', + component: { + name: 'a-select', + options: [ + { value: 'cas.aliyuncs.com', label: '中国大陆' }, + { value: 'cas.ap-southeast-1.aliyuncs.com', label: '新加坡' }, + ], + }, + required: true, + value: 'cas.aliyuncs.com', + }) + endpoint!: string; + + // @TaskInput({ + // title: '关键字筛选', + // helper: '仅匹配证书名称、域名包含关键字的证书,可以不填', + // required: false, + // component: { + // name: 'a-input', + // }, + // }) + // searchKey!: string; + + @TaskInput({ + title: '最大删除数量', + helper: '单次运行最大删除数量', + value: 100, + component: { + name: 'a-input-number', + vModel: 'value', + }, + required: true, + }) + maxCount!: number; + + @TaskInput({ + title: '即将过期天数', + helper: '仅删除有效期小于此天数的证书,0表示完全过期时才删除', + value: 0, + component: { + name: 'a-input-number', + vModel: 'value', + }, + required: true, + }) + expiringDays!: number; + + @TaskInput({ + title: '检查超时时间', + helper: '检查删除任务结果超时时间,单位分钟', + value: 10, + component: { + name: 'a-input-number', + vModel: 'value', + }, + required: true, + }) + checkTimeout!: number; + + async onInstance() {} + + async execute(): Promise { + const access = await this.getAccess(this.accessId); + const sslClient = new AliyunSslClient({ + access, + logger: this.logger, + endpoint: this.endpoint, + }); + + const params = { + ShowSize: 100, + CurrentPage: 1, + // Keyword: this.searchKey, + }; + const certificates: any[] = []; + while(true){ + const res = await sslClient.doRequest('ListCertificates', params, { + method: 'POST', + }); + let list = res?.CertificateList; + if (!list || list.length === 0) { + break; + } + this.logger.info(`查询第${params.CurrentPage}页,每页${params.ShowSize}个证书,当前页共${list.length}个证书`); + + const lastDay = dayjs().add(this.expiringDays, 'day'); + list = list.filter((item: any) => { + const notAfter = item.NotAfter; + const usingProducts = item.UsingProductList; + return dayjs(notAfter).isBefore(lastDay) && (!usingProducts || usingProducts.length === 0); + }); + for (const item of list) { + this.logger.info(`证书ID:${item.CertificateId}, 过期时间:${item.NotAfter},名称:${item.CertificateName},证书域名:${item.Domain}`); + certificates.push(item); + } + params.CurrentPage++; + } + + this.logger.info(`即将过期的证书数量:${certificates.length}`); + if (certificates.length === 0) { + this.logger.info('没有即将过期的证书, 无需删除'); + return; + } + this.logger.info(`开始删除证书,共${certificates.length}个证书`); + let successCount = 0; + let failedCount = 0; + + for (const certificate of certificates) { + try { + const deleteRes = await sslClient.doRequest('DeleteUserCertificate', { + CertId: certificate.CertificateId, + }, { method: 'POST' }); + this.logger.info(`删除证书成功,证书ID:${certificate.CertificateId}, 名称:${certificate.CertificateName}, requestId:${deleteRes?.RequestId}`); + successCount++; + + } catch (error: any) { + this.logger.error(`删除证书失败,证书ID:${certificate.CertificateId}, 名称:${certificate.CertificateName}, 错误:${error.message}`); + failedCount++; + } + } + + this.logger.info(`证书删除完成,成功:${successCount}, 失败:${failedCount}`); + } +} + +new AliyunDeleteExpiringCert(); \ No newline at end of file diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/index.ts index a1f43b4e2..8080cb96d 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/index.ts @@ -13,4 +13,5 @@ export * from './deploy-to-vod/index.js'; export * from './deploy-to-apigateway/index.js'; export * from './deploy-to-apig/index.js'; export * from './deploy-to-ack/index.js'; -export * from './deploy-to-all/index.js'; \ No newline at end of file +export * from './deploy-to-all/index.js'; +export * from './delete-expiring-cert/index.js'; \ No newline at end of file diff --git a/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/plugin-deploy-to-alb.ts b/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/plugin-deploy-to-alb.ts index 5fdc0136b..0329d71b5 100644 --- a/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/plugin-deploy-to-alb.ts +++ b/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/plugin-deploy-to-alb.ts @@ -3,6 +3,7 @@ import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from import { CertApplyPluginNames, CertInfo } from "@certd/plugin-cert"; import { VolcengineAccess } from "../access.js"; import { VolcengineClient } from "../ve-client.js"; +import dayjs from "dayjs"; @IsTaskPlugin({ name: "VolcengineDeployToALB", @@ -32,6 +33,7 @@ export class VolcengineDeployToALB extends AbstractTaskPlugin { certDomains!: string[]; + @TaskInput({ title: "Access授权", helper: "火山引擎AccessKeyId、AccessKeySecret", @@ -126,6 +128,22 @@ export class VolcengineDeployToALB extends AbstractTaskPlugin { listenerList!: string | string[]; + @TaskInput({ + title: "证书部署类型", + helper: "选择部署默认证书还是扩展证书", + component: { + name: "a-select", + options: [ + { label: "默认证书", value: "default" }, + { label: "扩展证书", value: "extension" } + ] + }, + value: "default", + required: true + }) + certType!: string; + + async onInstance() { } @@ -149,20 +167,101 @@ export class VolcengineDeployToALB extends AbstractTaskPlugin { const service = await this.getAlbService(); for (const listener of this.listenerList) { this.logger.info(`开始部署监听器${listener}证书`); - await service.request({ - action: "ModifyListenerAttributes", - query: { - ListenerId: listener, - CertificateSource: "cert_center", - CertCenterCertificateId: certId - } - }); - this.logger.info(`部署监听器${listener}证书成功`); + if (this.certType === "default") { + // 部署默认证书 + const res = await service.request({ + action: "ModifyListenerAttributes", + query: { + ListenerId: listener, + CertificateSource: "cert_center", + CertCenterCertificateId: certId + } + }); + this.logger.info(`部署监听器${listener}默认证书成功,res:${JSON.stringify(res)}`); + } else { + // 部署扩展证书 + await this.deployExtensionCertificate(service, listener, certId as string); + } + await this.ctx.utils.sleep(5000); } this.logger.info("部署完成"); } + private async deployExtensionCertificate(service: any, listenerId: string, certId: string) { + // 获取监听器当前的扩展证书列表 + const domainExtensions = await this.getListenerDomainExtensions(service, listenerId); + + // 删除过期的扩展证书 + try { + await this.deleteExpiredExtensions(service, listenerId, domainExtensions); + } catch (error) { + this.logger.error(`删除过期扩展证书失败:${error.message ||error}`); + } + + // 新增扩展证书 + const query: any = { + ListenerId: listenerId, + "DomainExtensions.1.Action": "create", + "DomainExtensions.1.CertificateSource": "cert_center", + "DomainExtensions.1.CertCenterCertificateId": certId + }; + + // 如果有证书域名信息,添加到扩展证书中 + if (this.certDomains && this.certDomains.length > 0) { + query["DomainExtensions.1.Domain"] = this.certDomains[0]; + } + + await service.request({ + action: "ModifyListenerAttributes", + query: query + }); + this.logger.info(`部署监听器${listenerId}扩展证书成功`); + } + + private async getListenerDomainExtensions(service: any, listenerId: string): Promise { + const res = await service.request({ + action: "DescribeListenerAttributes", + method: "GET", + query: { + ListenerId: listenerId + } + }); + + return res.Result.DomainExtensions || []; + } + + private async deleteExpiredExtensions(service: any, listenerId: string, domainExtensions: any[]) { + const expiredExtensions = []; + for (const ext of domainExtensions) { + if (!await this.isCertificateExpired(ext)) { + expiredExtensions.push(ext); + } + } + if (expiredExtensions.length === 0) { + this.logger.info(`没有过期的扩展证书,跳过删除`); + return; + } + + const query: any = { + ListenerId: listenerId + }; + expiredExtensions.forEach((ext, index) => { + const idx = index + 1; + query[`DomainExtensions.${idx}.Action`] = "delete"; + query[`DomainExtensions.${idx}.DomainExtensionId`] = ext.DomainExtensionId; + }); + + this.logger.info(`准备删除过期扩展证书,数量:${expiredExtensions.length}个,query:${JSON.stringify(query)}`); + + await service.request({ + action: "ModifyListenerAttributes", + query: query + }); + this.logger.info(`删除${expiredExtensions.length}个过期扩展证书成功`); + await this.ctx.utils.sleep(5000); + } + private async getCertService(access: VolcengineAccess) { const client = new VolcengineClient({ @@ -189,6 +288,54 @@ export class VolcengineDeployToALB extends AbstractTaskPlugin { return service; } + private async isCertificateExpired(extension: any): Promise { + try { + let certificateId: string; + + // 根据证书来源获取证书ID + if (extension.CertificateSource === "cert_center") { + certificateId = extension.CertCenterCertificateId; + } else if (extension.CertificateSource === "alb") { + this.logger.warn(`ALB证书不支持过期检查,跳过`); + return false; + } else if (extension.CertificateSource === "pca_leaf") { + this.logger.warn(`PCA Leaf证书不支持过期检查,跳过`); + return false; + } else { + this.logger.warn(`未知的证书来源: ${extension.CertificateSource},跳过`); + return false; + } + + if (!certificateId) { + this.logger.warn(`证书ID为空,跳过`); + return false; + } + + // 获取证书服务 + const access = await this.getAccess(this.accessId); + const certService = await this.getCertService(access); + + // 获取证书详情 + const certDetail = await certService.GetCertificateDetail(certificateId); + + // 判断证书是否过期 + if (certDetail.NotAfter) { + const expireTime = dayjs(certDetail.NotAfter); + const now = dayjs(); + const isExpired = expireTime.isBefore(now); + if (isExpired) { + this.logger.info(`证书 ${certificateId} 已过期,过期时间: ${expireTime.toISOString()}`); + } + return isExpired; + } + + return false; + } catch (error) { + this.logger.error(`检查证书是否过期失败: ${error.message || error}`); + return false; + } + } + async onGetListenerList(data: any) { if (!this.accessId) { throw new Error("请选择Access授权"); diff --git a/packages/ui/certd-server/src/plugins/plugin-volcengine/ve-client.ts b/packages/ui/certd-server/src/plugins/plugin-volcengine/ve-client.ts index c1eb2a150..3ee02041d 100644 --- a/packages/ui/certd-server/src/plugins/plugin-volcengine/ve-client.ts +++ b/packages/ui/certd-server/src/plugins/plugin-volcengine/ve-client.ts @@ -42,6 +42,17 @@ export class VolcengineClient { }); return res.Result.InstanceId || res.Result.RepeatId; }; + + service.GetCertificateDetail = async (certificateId: string) => { + const res = await service.request({ + action: "CertificateGetInstance", + method: "POST", + body: { + InstanceId: certificateId + } + }); + return res.Result; + }; return service; } diff --git a/trigger/build.trigger b/trigger/build.trigger index 06a0ef550..5d3d1ef42 100644 --- a/trigger/build.trigger +++ b/trigger/build.trigger @@ -1 +1 @@ -00:52 +00:07 diff --git a/trigger/release.trigger b/trigger/release.trigger index 79a62ad30..163de7897 100644 --- a/trigger/release.trigger +++ b/trigger/release.trigger @@ -1 +1 @@ -01:11 +00:23