Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b0ccab41e1 | ||
|
|
ccda3a3325 | ||
|
|
4b7eeaa6e0 | ||
|
|
2951f0030d | ||
|
|
acc2df29de | ||
|
|
431afd618f | ||
|
|
6d5e5bd692 | ||
|
|
ffd2e8149e | ||
|
|
2ab92dc13e | ||
|
|
7f6a8bc87e | ||
|
|
b1ff163a28 | ||
|
|
440d55ccb8 | ||
|
|
285532d431 | ||
|
|
f2c47459f8 | ||
|
|
49703f08e5 | ||
|
|
1d0aa9573b | ||
|
|
b2014cf88b | ||
|
|
a0e0078bad | ||
|
|
5ebca21c32 | ||
|
|
970aea90c9 | ||
|
|
5f9341ad8e | ||
|
|
574c0983f5 | ||
|
|
be6c7c7ac8 | ||
|
|
4fd31f276b | ||
|
|
224db7da57 | ||
|
|
1413e1aff4 | ||
|
|
68b669d3ff | ||
|
|
29f44c67c8 | ||
|
|
3332d2288f | ||
|
|
34702196e1 | ||
|
|
d45c8d1e9b | ||
|
|
bc19825ada | ||
|
|
72bb640239 | ||
|
|
aacee4a94c | ||
|
|
3ab37d5c5d | ||
|
|
3dd3ecf8f1 | ||
|
|
a3831827d0 | ||
|
|
6aa6c957ee | ||
|
|
9e12412f5f | ||
|
|
0f9eb31740 | ||
|
|
6be8ab581d | ||
|
|
d8425bc9c5 | ||
|
|
0ddcb9c00a | ||
|
|
6d43623f45 | ||
|
|
196cd88010 | ||
|
|
7f37df4227 | ||
|
|
985a12a63b | ||
|
|
9058c0e9fc | ||
|
|
4b0cd32d12 | ||
|
|
6cb51bc55d | ||
|
|
119e3c31c9 | ||
|
|
56164c25d0 | ||
|
|
c66e5f9fcd | ||
|
|
12700e1754 | ||
|
|
50db6f0765 | ||
|
|
64e8adddfd | ||
|
|
729a4d64e9 | ||
|
|
6f12504588 | ||
|
|
271459f820 | ||
|
|
5000c95d01 | ||
|
|
f477733483 | ||
|
|
54e1681c5e | ||
|
|
2f6d9a156a | ||
|
|
10dd89ae62 | ||
|
|
d01bfbec96 | ||
|
|
5eb4aa3a0e | ||
|
|
0b9933df1e | ||
|
|
76d12d6062 | ||
|
|
cf10faf61c | ||
|
|
1cbf9c1cd9 | ||
|
|
25e361b9f9 | ||
|
|
b88ee33ae4 | ||
|
|
684964da4f | ||
|
|
8a3841f638 | ||
|
|
f642e42eea | ||
|
|
bbef854c02 | ||
|
|
e50611666e | ||
|
|
eae4f721e8 | ||
|
|
12fed34e10 | ||
|
|
56350b54ee | ||
|
|
10b7644bb7 | ||
|
|
d79db3bd3f | ||
|
|
1588461633 | ||
|
|
dd999b60a4 | ||
|
|
3abee72fee | ||
|
|
b5577b1d37 | ||
|
|
e15ffb5820 | ||
|
|
4d9a5ed4a1 | ||
|
|
b2bc1debe0 | ||
|
|
590ff67fcb | ||
|
|
209e1adf53 | ||
|
|
53c08484a3 | ||
|
|
c6ca832737 | ||
|
|
2c399a078e | ||
|
|
8c519f13da | ||
|
|
853fdc70a2 | ||
|
|
dc4f811eaa | ||
|
|
d23c8b4a2a | ||
|
|
00c0dcc81d | ||
|
|
f77feefdb8 | ||
|
|
2e346e5369 | ||
|
|
17023f6b55 | ||
|
|
3bb29abe32 | ||
|
|
ac42d38b7a | ||
|
|
d9c0130b59 | ||
|
|
4925d5a5e7 | ||
|
|
dd9a7cf5d7 | ||
|
|
5ee3874b7e | ||
|
|
17dd77cc96 | ||
|
|
6c546b5290 | ||
|
|
a853fc2026 | ||
|
|
92c9ac3826 | ||
|
|
78c2ced43b | ||
|
|
72f850f675 | ||
|
|
bc326489ab | ||
|
|
ea5e7d9563 | ||
|
|
5b5b48fc06 | ||
|
|
1548ba0b8d | ||
|
|
26b1c4244f | ||
|
|
8a4e981931 | ||
|
|
6163c3f08e | ||
|
|
e17f381b1f | ||
|
|
316537eb4d | ||
|
|
b2c421600c | ||
|
|
787f6ef528 | ||
|
|
8578547467 | ||
|
|
51ab6d6da1 | ||
|
|
3a8b5de8f7 | ||
|
|
faf08f6513 | ||
|
|
06c69d23be | ||
|
|
1bcadd5f8e | ||
|
|
524195d729 | ||
|
|
0c25d277ef | ||
|
|
27b0348e1d | ||
|
|
ea5aa68769 | ||
|
|
99fefb168a | ||
|
|
49457505cd | ||
|
|
bfc948a9b4 | ||
|
|
c407206627 | ||
|
|
39d3bf97d1 | ||
|
|
79be392775 | ||
|
|
be4c6b8e16 | ||
|
|
c8e193e70d | ||
|
|
35859ffc3f | ||
|
|
0d81ada5a8 | ||
|
|
b68cf0fb45 | ||
|
|
9ed2078e92 | ||
|
|
1f002159e2 | ||
|
|
5bc690fcd9 | ||
|
|
bab9adce24 | ||
|
|
e47eddaa85 | ||
|
|
8ef1f2e395 | ||
|
|
541131bbc6 | ||
|
|
7626eecbf6 | ||
|
|
49afa75929 | ||
|
|
5c5265ede2 | ||
|
|
42d61d8089 | ||
|
|
01eb50078e | ||
|
|
eef021f472 | ||
|
|
6f3fd785e7 | ||
|
|
7cd8a645a8 | ||
|
|
9671348dc1 | ||
|
|
7a3e68d656 | ||
|
|
42c7ec2f75 | ||
|
|
32c3ce5c98 | ||
|
|
e55a3a82fc | ||
|
|
305da86f97 | ||
|
|
c23d1d11b5 | ||
|
|
a3cabd5f36 | ||
|
|
66ac4716f2 | ||
|
|
3cd1aaeb03 | ||
|
|
4eb940ffe7 | ||
|
|
61800b23e2 | ||
|
|
0283662931 |
@@ -4,7 +4,7 @@ on:
|
||||
branches: ['v2-dev']
|
||||
paths:
|
||||
- "trigger/build.trigger"
|
||||
|
||||
workflow_dispatch: # 添加手动触发
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
|
||||
ref: 'v2-dev'
|
||||
- name: get_certd_version
|
||||
id: get_certd_version
|
||||
uses: actions/github-script@v6
|
||||
|
||||
@@ -8,6 +8,8 @@ on:
|
||||
workflows: [ "build-image" ]
|
||||
types:
|
||||
- completed
|
||||
workflow_dispatch: # 添加手动触发
|
||||
|
||||
|
||||
|
||||
# schedule:
|
||||
@@ -26,6 +28,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
ref: v2-dev
|
||||
|
||||
- name: get_certd_version
|
||||
id: get_certd_version
|
||||
uses: actions/github-script@v6
|
||||
@@ -43,7 +46,7 @@ jobs:
|
||||
with:
|
||||
time: '10' # for 60 seconds
|
||||
- name: deploy-certd-demo
|
||||
uses: tyrrrz/action-http-request@master
|
||||
uses: tyrrrz/action-http-request@prime
|
||||
with:
|
||||
# 通过webhook 触发 certd-demo来部署
|
||||
url: ${{ secrets.WEBHOOK_CERTD_DEMO }}
|
||||
|
||||
@@ -8,7 +8,7 @@ on:
|
||||
workflows: [ "build-image-for-release" ]
|
||||
types:
|
||||
- completed
|
||||
|
||||
workflow_dispatch: # 添加手动触发
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
@@ -19,13 +19,17 @@ permissions:
|
||||
jobs:
|
||||
publish-atomgit:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
if: |
|
||||
github.event_name == 'workflow_dispatch' ||
|
||||
(github.event.workflow_run.conclusion == 'success')
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
ref: 'v2-dev'
|
||||
|
||||
- name: get_certd_version
|
||||
id: get_certd_version
|
||||
uses: actions/github-script@v6
|
||||
|
||||
@@ -8,7 +8,7 @@ on:
|
||||
workflows: [ "build-image-for-release" ]
|
||||
types:
|
||||
- completed
|
||||
|
||||
workflow_dispatch: # 添加手动触发
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
@@ -19,13 +19,16 @@ permissions:
|
||||
jobs:
|
||||
publish-gitee:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
if: |
|
||||
github.event_name == 'workflow_dispatch' ||
|
||||
(github.event.workflow_run.conclusion == 'success')
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
ref: 'v2-dev'
|
||||
|
||||
- name: publish_to_gitee
|
||||
id: publish_to_gitee
|
||||
|
||||
@@ -8,7 +8,7 @@ on:
|
||||
workflows: [ "build-image-for-release" ]
|
||||
types:
|
||||
- completed
|
||||
|
||||
workflow_dispatch: # 添加手动触发
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
@@ -19,13 +19,16 @@ permissions:
|
||||
jobs:
|
||||
publish-github:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
if: |
|
||||
github.event_name == 'workflow_dispatch' ||
|
||||
(github.event.workflow_run.conclusion == 'success')
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
ref: 'v2-dev'
|
||||
|
||||
- name: publish_to_github
|
||||
id: publish_to_github
|
||||
|
||||
@@ -4,6 +4,7 @@ on:
|
||||
branches: ['v2-dev']
|
||||
paths:
|
||||
- "trigger/release.trigger"
|
||||
workflow_dispatch: # 添加手动触发
|
||||
# workflow_run:
|
||||
# workflows: [ "deploy-demo" ]
|
||||
# types:
|
||||
@@ -25,6 +26,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
ref: 'v2-dev'
|
||||
|
||||
- name: get_certd_version
|
||||
id: get_certd_version
|
||||
@@ -118,7 +120,7 @@ jobs:
|
||||
# greper/certd-agent:latest
|
||||
# greper/certd-agent:${{steps.get_certd_version.outputs.result}}
|
||||
- name: deploy-certd-doc
|
||||
uses: tyrrrz/action-http-request@master
|
||||
uses: tyrrrz/action-http-request@prime
|
||||
with:
|
||||
url: ${{ secrets.WEBHOOK_CERTD_DOC }}
|
||||
method: POST
|
||||
|
||||
@@ -17,6 +17,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
ref: v2-dev
|
||||
- name: Set git user # 2. 给git命令设置用户名和邮箱,↙↙↙ 改成你的name和email
|
||||
run: |
|
||||
git config --global user.name "xiaojunnuo"
|
||||
|
||||
@@ -17,6 +17,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
ref: v2
|
||||
- name: Set git user # 2. 给git命令设置用户名和邮箱,↙↙↙ 改成你的name和email
|
||||
run: |
|
||||
git config --global user.name "xiaojunnuo"
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
name: sync-to-cnb-dev
|
||||
on:
|
||||
push:
|
||||
branches: ['v2-dev']
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout work repo # 1. 检出当前仓库(certd-sync-work)
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
ref: v2-dev
|
||||
- name: Set git user # 2. 给git命令设置用户名和邮箱,↙↙↙ 改成你的name和email
|
||||
run: |
|
||||
git config --global user.name "xiaojunnuo"
|
||||
git config --global user.email "xiaojunnuo@qq.com"
|
||||
|
||||
- name: Set git token # 3. 给git命令设置token,用于push到目标仓库
|
||||
uses: de-vri-es/setup-git-credentials@v2
|
||||
with: # token 格式为: username:password
|
||||
credentials: https://cnb:${{secrets.CNB_TOKEN}}@cnb.cool
|
||||
|
||||
- name: push to cnb # 4. 执行同步
|
||||
run: |
|
||||
git remote add upstream https://cnb.cool/certd/certd.git
|
||||
git push --set-upstream upstream v2-dev
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
name: sync-to-cnb
|
||||
on:
|
||||
push:
|
||||
branches: ['v2']
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout work repo # 1. 检出当前仓库(certd-sync-work)
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
- name: Set git user # 2. 给git命令设置用户名和邮箱,↙↙↙ 改成你的name和email
|
||||
run: |
|
||||
git config --global user.name "xiaojunnuo"
|
||||
git config --global user.email "xiaojunnuo@qq.com"
|
||||
|
||||
- name: Set git token # 3. 给git命令设置token,用于push到目标仓库
|
||||
uses: de-vri-es/setup-git-credentials@v2
|
||||
with: # token 格式为: username:password
|
||||
credentials: https://cnb:${{secrets.CNB_TOKEN}}@cnb.cool
|
||||
|
||||
- name: push to cnb # 4. 执行同步
|
||||
run: |
|
||||
git remote add upstream https://cnb.cool/certd/certd.git
|
||||
git push --set-upstream upstream v2
|
||||
|
||||
@@ -17,6 +17,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
ref: v2-dev
|
||||
- name: Set git user # 2. 给git命令设置用户名和邮箱,↙↙↙ 改成你的name和email
|
||||
run: |
|
||||
git config --global user.name "xiaojunnuo"
|
||||
|
||||
@@ -65,6 +65,20 @@ demoKeyId = '';
|
||||
encrypt: true, //该属性是否需要加密
|
||||
})
|
||||
demoKeySecret = '';
|
||||
|
||||
|
||||
|
||||
@AccessInput({
|
||||
title: '另外一个授权Id',//标题
|
||||
component: {
|
||||
name:"access-selector", //access选择组件
|
||||
vModel:"modelValue",
|
||||
type: "ssh", // access类型,让用户固定选择这种类型的access
|
||||
},
|
||||
required: true, //text组件可以省略
|
||||
})
|
||||
otherAccessId;
|
||||
|
||||
```
|
||||
|
||||
### 4. 实现测试方法
|
||||
@@ -93,7 +107,7 @@ async onTestRequest() {
|
||||
|
||||
```typescript
|
||||
/**
|
||||
* 获api接口示例 取域名列表,
|
||||
* api接口示例 获取域名列表,
|
||||
*/
|
||||
async GetDomainList(req: PageSearch): Promise<PageRes<DomainRecord>> {
|
||||
//输出日志必须使用ctx.logger
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 什么是插件转换工具
|
||||
|
||||
插件转换工具是一个用于将 Certd 插件转换为 YAML 配置文件的命令行工具。它可以分析单个插件文件,识别插件类型,并生成对应的 YAML 配置,方便插件的注册和管理。
|
||||
插件转换工具是一个用于将 Certd 插件转换为 YAML 配置文件的命令行工具。它可以分析单个插件文件,识别插件类型,并生成对应的 YAML 配置,可以让插件分发和在线注册。
|
||||
|
||||
## 工具位置
|
||||
|
||||
|
||||
@@ -80,7 +80,8 @@ certDomains!: string[];
|
||||
helper: 'demoAccess授权',
|
||||
component: {
|
||||
name: 'access-selector',
|
||||
type: 'demo', // 固定授权类型
|
||||
vModel:"modelValue",
|
||||
type: "demo", // access类型,让用户固定选择这种类型的access
|
||||
},
|
||||
// rules: [{ required: true, message: '此项必填' }],
|
||||
// required: true, // 必填
|
||||
|
||||
@@ -79,5 +79,15 @@
|
||||
"PLUS_SERVER_BASE_URL": "http://127.0.0.1:11007"
|
||||
}
|
||||
}
|
||||
],
|
||||
"compounds": [
|
||||
{
|
||||
"name": "all",
|
||||
"configurations": [
|
||||
"server",
|
||||
"client",
|
||||
],
|
||||
"stopAll": false
|
||||
},
|
||||
]
|
||||
}
|
||||
@@ -3,6 +3,156 @@
|
||||
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
|
||||
|
||||
* 修复修改分组报错的bug ([224db7d](https://github.com/certd/certd/commit/224db7da57dbdddf25bcac7faa0a29eb228c5a33))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 移除passkey的counter递增校验 ([68b669d](https://github.com/certd/certd/commit/68b669d3ff3e13b931939093320ce7237bb02b1b))
|
||||
* passkey 支持Bitwarden ([29f44c6](https://github.com/certd/certd/commit/29f44c67c808bed9ff1c9d4884d39a1a62d043a7))
|
||||
* passkey登录放到下方其他登录位置 ([1413e1a](https://github.com/certd/certd/commit/1413e1aff4aabcfd471716338c210fbcfd76c8f9))
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复阿里云证书订单翻页问题 ([6d43623](https://github.com/certd/certd/commit/6d43623f459a7594599e50a7ed89d67fcc775518))
|
||||
* 修复查看证书详情页面错位的bug ([7f37df4](https://github.com/certd/certd/commit/7f37df42274e657892d92e868ceac67e139f3bf2))
|
||||
* 修复选择插件页面无法滚动的bug ([d8425bc](https://github.com/certd/certd/commit/d8425bc9c5ee81bb669706c6de6bad69d7c38d8e))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化passkey ([9e12412](https://github.com/certd/certd/commit/9e12412f5fa7800df1d7efaf62cd8fd5d79bb569))
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复多选框只能单选的bug ([12700e1](https://github.com/certd/certd/commit/12700e1754319513ac02822ff1588d63420b964e))
|
||||
* 修复旧版1panel插件 报sslIds is not iterable的错误 ([50db6f0](https://github.com/certd/certd/commit/50db6f0765e7ec9a5698cd99540d90e188634fb1))
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复当证书更新后第一次站点检查会报与主站证书过期时间不一致错误的bug ([dd999b6](https://github.com/certd/certd/commit/dd999b60a4fe3507ff5e0109d637b4e891b28bdd))
|
||||
* 修复京东云报错不准确的bug ([10dd89a](https://github.com/certd/certd/commit/10dd89ae62e438a211a15e729559af823a096583))
|
||||
* 修复群晖测试时报addSecret undefine错误 ([5eb4aa3](https://github.com/certd/certd/commit/5eb4aa3a0eab9ffa729c8e813cbf973d9683cc13))
|
||||
* 修复提示支付失败的bug ([12fed34](https://github.com/certd/certd/commit/12fed34e109f3254de664813954081a52513bd38))
|
||||
* 修复修改项目名称后,没有同步刷新的bug ([3abee72](https://github.com/certd/certd/commit/3abee72fee286864b665033b23b172ef0ea92d83))
|
||||
* cname provider授权修改为sys级别 ([d01bfbe](https://github.com/certd/certd/commit/d01bfbec96a3a2109ec864953b0c9e8c1f95b97b))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 查看证书增加证书详情显示,包括域名,过期时间,颁发机构,指纹等 ([0b9933d](https://github.com/certd/certd/commit/0b9933df1e8d1685d14271435a8a7488974cc47b))
|
||||
* 获取阿里证书订单id组件增加翻页功能,突破50的上限 ([d79db3b](https://github.com/certd/certd/commit/d79db3bd3f0d5ad39664bb47ec3814d43ad93304))
|
||||
* 优化阿里云连接超时时长为10秒,支持配置环境变量 ([1588461](https://github.com/certd/certd/commit/1588461633bd275765daa96fc68320abb58d616d))
|
||||
* 优化个人账户页面 ([e506116](https://github.com/certd/certd/commit/e50611666ef731a903d7bdd8eb62333b97e2cc5b))
|
||||
* 支持批量转移流水线到其他项目 ([8a3841f](https://github.com/certd/certd/commit/8a3841f6382b53ce2343307fb035e74fa5383fef))
|
||||
* 支持passkey登录 ([10b7644](https://github.com/certd/certd/commit/10b7644bb7ba5f82776537bc0c4f5eb95d5f8e4e))
|
||||
* dns-provider 支持bind9 ,support bind9 ([76d12d6](https://github.com/certd/certd/commit/76d12d60624c0672fd3717a80a2cfef6845b14b8))
|
||||
|
||||
## [1.39.1](https://github.com/certd/certd/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复企业管理模式下,切换用户登录后,丢失项目列表的bug ([d23c8b4](https://github.com/certd/certd/commit/d23c8b4a2a5f5ab17822c6ee1d4108ac7280b9d1))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 支持迁移个人数据到企业项目中 ([c6ca832](https://github.com/certd/certd/commit/c6ca83273779ed84de1b23b5e477063af043d015))
|
||||
* install tip ([853fdc7](https://github.com/certd/certd/commit/853fdc70a263b62d75c9ff3970607e6bf1c1593b))
|
||||
|
||||
# [1.39.0](https://github.com/certd/certd/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复部署到openwrt错误的bug ([2e3d0cc](https://github.com/certd/certd/commit/2e3d0cc57c16c48ad435bc8fde729bacaedde9f5))
|
||||
* 修复发件邮箱无法输入的bug ([27b0348](https://github.com/certd/certd/commit/27b0348e1d3d752f418f851965d6afbc26c0160c))
|
||||
* 修复复制流水线保存后丢失分组和排序号的问题 ([bc32648](https://github.com/certd/certd/commit/bc326489abc1d50a0930b4f47aa2d62d3a486798))
|
||||
* 修复获取群辉deviceid报错的bug ([79be392](https://github.com/certd/certd/commit/79be392775a2c91848dd5a66a2618adc4e4b48f6))
|
||||
* 修复京东云域名申请证书报错的bug ([d9c0130](https://github.com/certd/certd/commit/d9c0130b59997144a3c274d456635b800135e43f))
|
||||
* 修复偶尔下载证书报未授权的错误 ([316537e](https://github.com/certd/certd/commit/316537eb4dcbe5ec57784e8bf95ee3cdfd21dce7))
|
||||
* 修复dcdn多个域名同时部署时 可能会出现证书名称重复的bug ([78c2ced](https://github.com/certd/certd/commit/78c2ced43b1a73d142b0ed783b162b97f545ab06))
|
||||
* 优化dcdn部署上传多次证书 偶尔报 The CertName already exists的问题 ([72f850f](https://github.com/certd/certd/commit/72f850f675b500d12ebff2338d1b99d6fab476e1))
|
||||
* **cert-plugin:** 优化又拍云客户端错误处理逻辑,当域名已绑定证书时不再抛出异常。 ([92c9ac3](https://github.com/certd/certd/commit/92c9ac382692e6c84140ff787759ab6d39ccbe96))
|
||||
* esxi部署失败的bug ([1e44115](https://github.com/certd/certd/commit/1e441154617e6516a9a3610412bf597128c62696))
|
||||
|
||||
### Features
|
||||
|
||||
* 支持企业级管理模式,项目管理,细分权限 ([3734083](https://github.com/certd/certd/commit/37340838b6a61a94b86bfa13cf5da88b26f1315a))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 【破坏性更新】错误返回信息msg字段名统一改成message,与成功的返回结构一致 ([51ab6d6](https://github.com/certd/certd/commit/51ab6d6da1bb551b55b3a6a4a9a945c8d6ace806))
|
||||
* 当域名管理中没有域名时,创建流水线时不展开域名选择框 ([bb0afe1](https://github.com/certd/certd/commit/bb0afe1fa7b0fc52fde051d24fbe6be69d52f4cc))
|
||||
* 任务步骤页面增加串行执行提示说明 ([787f6ef](https://github.com/certd/certd/commit/787f6ef52893d8dc912ee2a7a5b8ce2b73c108c9))
|
||||
* 站点监控支持指定ip地址检查 ([83d81b6](https://github.com/certd/certd/commit/83d81b64b3adb375366039e07c87d1ad79121c13))
|
||||
* AI开发插件 skills 定义初步 ([1f68fad](https://github.com/certd/certd/commit/1f68faddb97a978c5a5e731a8895b4bb0587ad83))
|
||||
* http请求增加建立连接超时配置 ([3c85602](https://github.com/certd/certd/commit/3c85602ab1fc1953cdc06a6cd75a971d14119179))
|
||||
|
||||
## [1.38.12](https://github.com/certd/certd/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复获取群辉deviceid报错的bug ([39d3bf9](https://github.com/certd/certd/commit/39d3bf97d1935918bac575da9d0726310c83c19d))
|
||||
|
||||
## [1.38.11](https://github.com/certd/certd/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复1panel2.1.0新版本测试失败的问题 ([8ef1f2e](https://github.com/certd/certd/commit/8ef1f2e395ea5969a95f55535e6c16a65e2b463b))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化登陆页面的黑暗模式 ([e47edda](https://github.com/certd/certd/commit/e47eddaa858f8fffe7a40dfbd14e8cda1dcba4ac))
|
||||
* 支持自定义发件人名称,格式:名称<邮箱> ([bab9adc](https://github.com/certd/certd/commit/bab9adce240108d4291eedc67e04abc4a01019e0))
|
||||
|
||||
## [1.38.10](https://github.com/certd/certd/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复1panel 请求失败的bug ([0283662](https://github.com/certd/certd/commit/0283662931ff47d6b5d49f91a30c4a002fe1d108))
|
||||
* 修复阿里云dcdn使用上传到cas的id引用错误的bug ([61800b2](https://github.com/certd/certd/commit/61800b23e2be324169990810d1176c18decabb23))
|
||||
* 修复保存站点监控dns设置,偶尔无法保存成功的bug ([8387fe0](https://github.com/certd/certd/commit/8387fe0d5b2e77b8c2788a10791e5389d97a3e41))
|
||||
* 修复任务步骤标题过长导致错位的问题 ([9fb9805](https://github.com/certd/certd/commit/9fb980599f96ccbf61bd46019411db2f13c70e57))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 421 支持3次重试 ([b91548e](https://github.com/certd/certd/commit/b91548eef4c24faa822d3a40f1f6a77b41d274e4))
|
||||
* 备份支持scp上传 ([66ac471](https://github.com/certd/certd/commit/66ac4716f2565d7ee827461b625397ae21599451))
|
||||
* 监控设置支持逗号分割 ([c23d1d1](https://github.com/certd/certd/commit/c23d1d11b58a6cdfe431a7e8abbd5d955146c38d))
|
||||
* 列表中支持下次执行时间显示 ([a3cabd5](https://github.com/certd/certd/commit/a3cabd5f36ed41225ad418098596e9b2c44e31a1))
|
||||
* 模版编辑页面,hover反色过亮问题优化 ([e55a3a8](https://github.com/certd/certd/commit/e55a3a82fc6939b940f0c3be4529d74a625f6f4e))
|
||||
* 群晖支持刷新登录有效期 ([42c7ec2](https://github.com/certd/certd/commit/42c7ec2f75947e2b8298d6605d4dbcd441aacd51))
|
||||
* 所有授权增加测试按钮 ([7a3e68d](https://github.com/certd/certd/commit/7a3e68d656c1dcdcd814b69891bd2c2c6fe3098a))
|
||||
* 新网互联支持查询域名列表 ([e7e54bc](https://github.com/certd/certd/commit/e7e54bc19e3a734913a93a94e25db3bb06d2ab0f))
|
||||
* 优化京东云报错详情显示 ([1195417](https://github.com/certd/certd/commit/1195417b9714d2fcb540e43c0a20809b7ee2052b))
|
||||
* 优化网络测试页面,夜间模式显示效果 ([305da86](https://github.com/certd/certd/commit/305da86f97d918374819ecd6c50685f09b94ea59))
|
||||
* 增加部署证书到certd本身插件 ([3cd1aae](https://github.com/certd/certd/commit/3cd1aaeb035f8af79714030889b2b4dc259b700e))
|
||||
* 支持next-terminal ([6f3fd78](https://github.com/certd/certd/commit/6f3fd785e77a33c72bdf4115dc5d498e677d1863))
|
||||
* 主题默认跟随系统颜色(自动切换深色浅色模式) ([32c3ce5](https://github.com/certd/certd/commit/32c3ce5c9868569523901a9a939ca5b535ec3277))
|
||||
* http校验方式支持scp上传 ([4eb940f](https://github.com/certd/certd/commit/4eb940ffe765a0330331bc6af8396315e36d4e4a))
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -3,6 +3,140 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复修改分组报错的bug ([224db7d](https://github.com/certd/certd/commit/224db7da57dbdddf25bcac7faa0a29eb228c5a33))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 移除passkey的counter递增校验 ([68b669d](https://github.com/certd/certd/commit/68b669d3ff3e13b931939093320ce7237bb02b1b))
|
||||
* passkey 支持Bitwarden ([29f44c6](https://github.com/certd/certd/commit/29f44c67c808bed9ff1c9d4884d39a1a62d043a7))
|
||||
* passkey登录放到下方其他登录位置 ([1413e1a](https://github.com/certd/certd/commit/1413e1aff4aabcfd471716338c210fbcfd76c8f9))
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复阿里云证书订单翻页问题 ([6d43623](https://github.com/certd/certd/commit/6d43623f459a7594599e50a7ed89d67fcc775518))
|
||||
* 修复查看证书详情页面错位的bug ([7f37df4](https://github.com/certd/certd/commit/7f37df42274e657892d92e868ceac67e139f3bf2))
|
||||
* 修复选择插件页面无法滚动的bug ([d8425bc](https://github.com/certd/certd/commit/d8425bc9c5ee81bb669706c6de6bad69d7c38d8e))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化passkey ([9e12412](https://github.com/certd/certd/commit/9e12412f5fa7800df1d7efaf62cd8fd5d79bb569))
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复多选框只能单选的bug ([12700e1](https://github.com/certd/certd/commit/12700e1754319513ac02822ff1588d63420b964e))
|
||||
* 修复旧版1panel插件 报sslIds is not iterable的错误 ([50db6f0](https://github.com/certd/certd/commit/50db6f0765e7ec9a5698cd99540d90e188634fb1))
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复当证书更新后第一次站点检查会报与主站证书过期时间不一致错误的bug ([dd999b6](https://github.com/certd/certd/commit/dd999b60a4fe3507ff5e0109d637b4e891b28bdd))
|
||||
* 修复京东云报错不准确的bug ([10dd89a](https://github.com/certd/certd/commit/10dd89ae62e438a211a15e729559af823a096583))
|
||||
* 修复群晖测试时报addSecret undefine错误 ([5eb4aa3](https://github.com/certd/certd/commit/5eb4aa3a0eab9ffa729c8e813cbf973d9683cc13))
|
||||
* 修复提示支付失败的bug ([12fed34](https://github.com/certd/certd/commit/12fed34e109f3254de664813954081a52513bd38))
|
||||
* 修复修改项目名称后,没有同步刷新的bug ([3abee72](https://github.com/certd/certd/commit/3abee72fee286864b665033b23b172ef0ea92d83))
|
||||
* cname provider授权修改为sys级别 ([d01bfbe](https://github.com/certd/certd/commit/d01bfbec96a3a2109ec864953b0c9e8c1f95b97b))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 查看证书增加证书详情显示,包括域名,过期时间,颁发机构,指纹等 ([0b9933d](https://github.com/certd/certd/commit/0b9933df1e8d1685d14271435a8a7488974cc47b))
|
||||
* 获取阿里证书订单id组件增加翻页功能,突破50的上限 ([d79db3b](https://github.com/certd/certd/commit/d79db3bd3f0d5ad39664bb47ec3814d43ad93304))
|
||||
* 优化阿里云连接超时时长为10秒,支持配置环境变量 ([1588461](https://github.com/certd/certd/commit/1588461633bd275765daa96fc68320abb58d616d))
|
||||
* 优化个人账户页面 ([e506116](https://github.com/certd/certd/commit/e50611666ef731a903d7bdd8eb62333b97e2cc5b))
|
||||
* 支持批量转移流水线到其他项目 ([8a3841f](https://github.com/certd/certd/commit/8a3841f6382b53ce2343307fb035e74fa5383fef))
|
||||
* 支持passkey登录 ([10b7644](https://github.com/certd/certd/commit/10b7644bb7ba5f82776537bc0c4f5eb95d5f8e4e))
|
||||
* dns-provider 支持bind9 ,support bind9 ([76d12d6](https://github.com/certd/certd/commit/76d12d60624c0672fd3717a80a2cfef6845b14b8))
|
||||
|
||||
## [1.39.1](https://github.com/certd/certd/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复企业管理模式下,切换用户登录后,丢失项目列表的bug ([d23c8b4](https://github.com/certd/certd/commit/d23c8b4a2a5f5ab17822c6ee1d4108ac7280b9d1))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 支持迁移个人数据到企业项目中 ([c6ca832](https://github.com/certd/certd/commit/c6ca83273779ed84de1b23b5e477063af043d015))
|
||||
* install tip ([853fdc7](https://github.com/certd/certd/commit/853fdc70a263b62d75c9ff3970607e6bf1c1593b))
|
||||
|
||||
# [1.39.0](https://github.com/certd/certd/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复部署到openwrt错误的bug ([2e3d0cc](https://github.com/certd/certd/commit/2e3d0cc57c16c48ad435bc8fde729bacaedde9f5))
|
||||
* 修复发件邮箱无法输入的bug ([27b0348](https://github.com/certd/certd/commit/27b0348e1d3d752f418f851965d6afbc26c0160c))
|
||||
* 修复复制流水线保存后丢失分组和排序号的问题 ([bc32648](https://github.com/certd/certd/commit/bc326489abc1d50a0930b4f47aa2d62d3a486798))
|
||||
* 修复获取群辉deviceid报错的bug ([79be392](https://github.com/certd/certd/commit/79be392775a2c91848dd5a66a2618adc4e4b48f6))
|
||||
* 修复京东云域名申请证书报错的bug ([d9c0130](https://github.com/certd/certd/commit/d9c0130b59997144a3c274d456635b800135e43f))
|
||||
* 修复偶尔下载证书报未授权的错误 ([316537e](https://github.com/certd/certd/commit/316537eb4dcbe5ec57784e8bf95ee3cdfd21dce7))
|
||||
* 修复dcdn多个域名同时部署时 可能会出现证书名称重复的bug ([78c2ced](https://github.com/certd/certd/commit/78c2ced43b1a73d142b0ed783b162b97f545ab06))
|
||||
* 优化dcdn部署上传多次证书 偶尔报 The CertName already exists的问题 ([72f850f](https://github.com/certd/certd/commit/72f850f675b500d12ebff2338d1b99d6fab476e1))
|
||||
* **cert-plugin:** 优化又拍云客户端错误处理逻辑,当域名已绑定证书时不再抛出异常。 ([92c9ac3](https://github.com/certd/certd/commit/92c9ac382692e6c84140ff787759ab6d39ccbe96))
|
||||
* esxi部署失败的bug ([1e44115](https://github.com/certd/certd/commit/1e441154617e6516a9a3610412bf597128c62696))
|
||||
|
||||
### Features
|
||||
|
||||
* 支持企业级管理模式,项目管理,细分权限 ([3734083](https://github.com/certd/certd/commit/37340838b6a61a94b86bfa13cf5da88b26f1315a))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 【破坏性更新】错误返回信息msg字段名统一改成message,与成功的返回结构一致 ([51ab6d6](https://github.com/certd/certd/commit/51ab6d6da1bb551b55b3a6a4a9a945c8d6ace806))
|
||||
* 当域名管理中没有域名时,创建流水线时不展开域名选择框 ([bb0afe1](https://github.com/certd/certd/commit/bb0afe1fa7b0fc52fde051d24fbe6be69d52f4cc))
|
||||
* 任务步骤页面增加串行执行提示说明 ([787f6ef](https://github.com/certd/certd/commit/787f6ef52893d8dc912ee2a7a5b8ce2b73c108c9))
|
||||
* 站点监控支持指定ip地址检查 ([83d81b6](https://github.com/certd/certd/commit/83d81b64b3adb375366039e07c87d1ad79121c13))
|
||||
* AI开发插件 skills 定义初步 ([1f68fad](https://github.com/certd/certd/commit/1f68faddb97a978c5a5e731a8895b4bb0587ad83))
|
||||
* http请求增加建立连接超时配置 ([3c85602](https://github.com/certd/certd/commit/3c85602ab1fc1953cdc06a6cd75a971d14119179))
|
||||
|
||||
## [1.38.12](https://github.com/certd/certd/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复获取群辉deviceid报错的bug ([39d3bf9](https://github.com/certd/certd/commit/39d3bf97d1935918bac575da9d0726310c83c19d))
|
||||
|
||||
## [1.38.11](https://github.com/certd/certd/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复1panel2.1.0新版本测试失败的问题 ([8ef1f2e](https://github.com/certd/certd/commit/8ef1f2e395ea5969a95f55535e6c16a65e2b463b))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化登陆页面的黑暗模式 ([e47edda](https://github.com/certd/certd/commit/e47eddaa858f8fffe7a40dfbd14e8cda1dcba4ac))
|
||||
* 支持自定义发件人名称,格式:名称<邮箱> ([bab9adc](https://github.com/certd/certd/commit/bab9adce240108d4291eedc67e04abc4a01019e0))
|
||||
|
||||
## [1.38.10](https://github.com/certd/certd/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复1panel 请求失败的bug ([0283662](https://github.com/certd/certd/commit/0283662931ff47d6b5d49f91a30c4a002fe1d108))
|
||||
* 修复阿里云dcdn使用上传到cas的id引用错误的bug ([61800b2](https://github.com/certd/certd/commit/61800b23e2be324169990810d1176c18decabb23))
|
||||
* 修复保存站点监控dns设置,偶尔无法保存成功的bug ([8387fe0](https://github.com/certd/certd/commit/8387fe0d5b2e77b8c2788a10791e5389d97a3e41))
|
||||
* 修复任务步骤标题过长导致错位的问题 ([9fb9805](https://github.com/certd/certd/commit/9fb980599f96ccbf61bd46019411db2f13c70e57))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 421 支持3次重试 ([b91548e](https://github.com/certd/certd/commit/b91548eef4c24faa822d3a40f1f6a77b41d274e4))
|
||||
* 备份支持scp上传 ([66ac471](https://github.com/certd/certd/commit/66ac4716f2565d7ee827461b625397ae21599451))
|
||||
* 监控设置支持逗号分割 ([c23d1d1](https://github.com/certd/certd/commit/c23d1d11b58a6cdfe431a7e8abbd5d955146c38d))
|
||||
* 列表中支持下次执行时间显示 ([a3cabd5](https://github.com/certd/certd/commit/a3cabd5f36ed41225ad418098596e9b2c44e31a1))
|
||||
* 模版编辑页面,hover反色过亮问题优化 ([e55a3a8](https://github.com/certd/certd/commit/e55a3a82fc6939b940f0c3be4529d74a625f6f4e))
|
||||
* 群晖支持刷新登录有效期 ([42c7ec2](https://github.com/certd/certd/commit/42c7ec2f75947e2b8298d6605d4dbcd441aacd51))
|
||||
* 所有授权增加测试按钮 ([7a3e68d](https://github.com/certd/certd/commit/7a3e68d656c1dcdcd814b69891bd2c2c6fe3098a))
|
||||
* 新网互联支持查询域名列表 ([e7e54bc](https://github.com/certd/certd/commit/e7e54bc19e3a734913a93a94e25db3bb06d2ab0f))
|
||||
* 优化京东云报错详情显示 ([1195417](https://github.com/certd/certd/commit/1195417b9714d2fcb540e43c0a20809b7ee2052b))
|
||||
* 优化网络测试页面,夜间模式显示效果 ([305da86](https://github.com/certd/certd/commit/305da86f97d918374819ecd6c50685f09b94ea59))
|
||||
* 增加部署证书到certd本身插件 ([3cd1aae](https://github.com/certd/certd/commit/3cd1aaeb035f8af79714030889b2b4dc259b700e))
|
||||
* 支持next-terminal ([6f3fd78](https://github.com/certd/certd/commit/6f3fd785e77a33c72bdf4115dc5d498e677d1863))
|
||||
* 主题默认跟随系统颜色(自动切换深色浅色模式) ([32c3ce5](https://github.com/certd/certd/commit/32c3ce5c9868569523901a9a939ca5b535ec3277))
|
||||
* http校验方式支持scp上传 ([4eb940f](https://github.com/certd/certd/commit/4eb940ffe765a0330331bc6af8396315e36d4e4a))
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -16,7 +16,6 @@ https://1panel.cn/docs/installation/online_installation/
|
||||
|
||||

|
||||
|
||||
|
||||

|
||||
|
||||
#### 1.2 访问测试:
|
||||
@@ -40,6 +39,9 @@ admin/123456
|
||||
1. 打开`docker-compose.yaml`,整个内容复制下来
|
||||
https://gitee.com/certd/certd/raw/v2/docker/run/docker-compose.yaml
|
||||
|
||||
::: tip
|
||||
默认使用SQLite数据库,如果需要使用MySQL、PostgreSQL数据库,请参考[多数据库支持](../database.md)
|
||||
:::
|
||||
|
||||
2. 然后到 `1Panel->容器->编排->新建编排`
|
||||
输入名称,粘贴`docker-compose.yaml`原文内容
|
||||
@@ -49,7 +51,10 @@ admin/123456
|
||||

|
||||
|
||||
> 默认使用sqlite数据库,数据保存在`/data/certd`目录下,您可以手动备份该目录
|
||||
> certd还支持`mysql`和`postgresql`数据库,[点我了解如何切换其他数据库](../database)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### 2.2 访问测试
|
||||
|
||||
|
||||
@@ -30,7 +30,9 @@
|
||||
点击确定,等待启动完成
|
||||

|
||||
|
||||
> certd默认使用sqlite数据库,另外支持`mysql`和`postgresql`数据库,[点我了解如何切换其他数据库](../database)
|
||||
::: tip
|
||||
默认安装使用SQLite数据库,如果需要使用MySQL、PostgreSQL数据库,请参考[多数据库支持](../database.md)
|
||||
:::
|
||||
|
||||
|
||||
## 二、访问应用
|
||||
|
||||
@@ -42,8 +42,9 @@ docker compose up -d
|
||||
> 如果提示 没有docker compose命令,请安装docker-compose
|
||||
> https://docs.docker.com/compose/install/linux/
|
||||
|
||||
> certd默认使用sqlite数据库,另外还支持`mysql`和`postgresql`数据库,[点我了解如何切换其他数据库](../database)
|
||||
|
||||
::: tip
|
||||
默认安装使用SQLite数据库,如果需要使用MySQL、PostgreSQL数据库,请参考[多数据库支持](../database.md)
|
||||
:::
|
||||
|
||||
### 3. 访问测试
|
||||
|
||||
|
||||
@@ -20,57 +20,59 @@
|
||||
| 16.| **APISIX授权** | |
|
||||
| 17.| **亚马逊云aws授权** | |
|
||||
| 18.| **亚马逊云科技(国区)授权** | |
|
||||
| 19.| **CacheFly** | CacheFly |
|
||||
| 20.| **EAB授权** | ZeroSSL证书申请需要EAB授权 |
|
||||
| 21.| **google cloud** | 谷歌云授权 |
|
||||
| 22.| **cloudflare授权** | |
|
||||
| 23.| **中国移动CND授权** | |
|
||||
| 24.| **授权插件示例** | 这是一个示例授权插件,用于演示如何实现一个授权插件 |
|
||||
| 25.| **dns.la授权** | |
|
||||
| 26.| **多吉云** | |
|
||||
| 27.| **Dokploy授权** | |
|
||||
| 28.| **farcdn授权** | |
|
||||
| 29.| **FlexCDN授权** | |
|
||||
| 30.| **Gcore** | Gcore |
|
||||
| 31.| **Github授权** | |
|
||||
| 32.| **godaddy授权** | |
|
||||
| 33.| **金山云授权** | |
|
||||
| 34.| **FTP授权** | |
|
||||
| 35.| **七牛OSS授权** | |
|
||||
| 36.| **腾讯云COS授权** | 腾讯云对象存储授权,包含地域和存储桶 |
|
||||
| 37.| **s3/minio授权** | S3/minio oss授权 |
|
||||
| 38.| **namesilo授权** | |
|
||||
| 39.| **1panel授权** | 账号和密码 |
|
||||
| 40.| **支付宝** | |
|
||||
| 41.| **白山云授权** | |
|
||||
| 42.| **宝塔云WAF授权** | 用于连接和管理宝塔云WAF服务的授权配置 |
|
||||
| 43.| **cdnfly授权** | |
|
||||
| 44.| **k8s授权** | |
|
||||
| 45.| **括彩云cdn授权** | 括彩云CDN,每月免费30G,[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) |
|
||||
| 46.| **LeCDN授权** | |
|
||||
| 47.| **lucky** | |
|
||||
| 48.| **猫云授权** | |
|
||||
| 49.| **plesk授权** | |
|
||||
| 50.| **长亭雷池授权** | |
|
||||
| 51.| **群晖登录授权** | |
|
||||
| 52.| **uniCloud** | unicloud授权 |
|
||||
| 53.| **微信支付** | |
|
||||
| 54.| **易盾rcdn授权** | 易盾CDN,每月免费30G,[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) |
|
||||
| 55.| **易发云短信** | sms.yfyidc.cn/ |
|
||||
| 56.| **易盾DCDN授权** | https://user.yiduncdn.com |
|
||||
| 57.| **易支付** | |
|
||||
| 58.| **proxmox** | |
|
||||
| 59.| **UCloud授权** | 优刻得授权 |
|
||||
| 60.| **又拍云** | |
|
||||
| 61.| **网宿授权** | |
|
||||
| 62.| **西部数码授权** | |
|
||||
| 63.| **我爱云授权** | 我爱云CDN |
|
||||
| 64.| **新网授权(代理方式)** | |
|
||||
| 65.| **新网授权** | |
|
||||
| 66.| **新网互联授权** | 仅支持代理账号,ip需要加入白名单 |
|
||||
| 67.| **Zenlayer授权** | Zenlayer授权 |
|
||||
| 68.| **GoEdge授权** | |
|
||||
| 69.| **雨云授权** | https://app.rainyun.com/ |
|
||||
| 19.| **BIND9 DNS 授权** | 通过 SSH 连接到 BIND9 服务器,使用 nsupdate 命令管理 DNS 记录 |
|
||||
| 20.| **CacheFly** | CacheFly |
|
||||
| 21.| **EAB授权** | ZeroSSL证书申请需要EAB授权 |
|
||||
| 22.| **google cloud** | 谷歌云授权 |
|
||||
| 23.| **cloudflare授权** | |
|
||||
| 24.| **中国移动CND授权** | |
|
||||
| 25.| **授权插件示例** | 这是一个示例授权插件,用于演示如何实现一个授权插件 |
|
||||
| 26.| **dns.la授权** | |
|
||||
| 27.| **多吉云** | |
|
||||
| 28.| **Dokploy授权** | |
|
||||
| 29.| **farcdn授权** | |
|
||||
| 30.| **FlexCDN授权** | |
|
||||
| 31.| **Gcore** | Gcore |
|
||||
| 32.| **Github授权** | |
|
||||
| 33.| **godaddy授权** | |
|
||||
| 34.| **金山云授权** | |
|
||||
| 35.| **FTP授权** | |
|
||||
| 36.| **七牛OSS授权** | |
|
||||
| 37.| **腾讯云COS授权** | 腾讯云对象存储授权,包含地域和存储桶 |
|
||||
| 38.| **s3/minio授权** | S3/minio oss授权 |
|
||||
| 39.| **namesilo授权** | |
|
||||
| 40.| **Next Terminal 授权** | 用于访问 Next Terminal API 的授权配置 |
|
||||
| 41.| **1panel授权** | 账号和密码 |
|
||||
| 42.| **支付宝** | |
|
||||
| 43.| **白山云授权** | |
|
||||
| 44.| **宝塔云WAF授权** | 用于连接和管理宝塔云WAF服务的授权配置 |
|
||||
| 45.| **cdnfly授权** | |
|
||||
| 46.| **k8s授权** | |
|
||||
| 47.| **括彩云cdn授权** | 括彩云CDN,每月免费30G,[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) |
|
||||
| 48.| **LeCDN授权** | |
|
||||
| 49.| **lucky** | |
|
||||
| 50.| **猫云授权** | |
|
||||
| 51.| **plesk授权** | |
|
||||
| 52.| **长亭雷池授权** | |
|
||||
| 53.| **群晖登录授权** | |
|
||||
| 54.| **uniCloud** | unicloud授权 |
|
||||
| 55.| **微信支付** | |
|
||||
| 56.| **易盾rcdn授权** | 易盾CDN,每月免费30G,[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) |
|
||||
| 57.| **易发云短信** | sms.yfyidc.cn/ |
|
||||
| 58.| **易盾DCDN授权** | https://user.yiduncdn.com |
|
||||
| 59.| **易支付** | |
|
||||
| 60.| **proxmox** | |
|
||||
| 61.| **UCloud授权** | 优刻得授权 |
|
||||
| 62.| **又拍云** | |
|
||||
| 63.| **网宿授权** | |
|
||||
| 64.| **西部数码授权** | |
|
||||
| 65.| **我爱云授权** | 我爱云CDN |
|
||||
| 66.| **新网授权(代理方式)** | |
|
||||
| 67.| **新网授权** | |
|
||||
| 68.| **新网互联授权** | 仅支持代理账号,ip需要加入白名单 |
|
||||
| 69.| **Zenlayer授权** | Zenlayer授权 |
|
||||
| 70.| **GoEdge授权** | |
|
||||
| 71.| **雨云授权** | https://app.rainyun.com/ |
|
||||
|
||||
<style module>
|
||||
table th:first-of-type {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# 任务插件
|
||||
共 `122` 款任务插件
|
||||
共 `126` 款任务插件
|
||||
## 1. 证书申请
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
@@ -57,44 +57,47 @@
|
||||
| 2.| **AcePanel-面板证书** | 部署AcePanel面板证书 |
|
||||
| 3.| **Dokploy-部署server证书** | 自动更新Dokploy server证书 |
|
||||
| 4.| **飞牛NAS-部署证书** | |
|
||||
| 5.| **1Panel-部署面板证书** | 更新1Panel的面板证书 |
|
||||
| 6.| **1Panel-更新站点证书** | 更新1Panel的站点证书 |
|
||||
| 7.| **宝塔-删除过期证书** | 删除证书夹中过期证书 |
|
||||
| 8.| **宝塔-WAF证书部署** | 部署宝塔云WAF/aaWAF |
|
||||
| 9.| **宝塔-面板证书部署** | 部署宝塔面板本身的ssl证书 |
|
||||
| 10.| **宝塔win-网站证书部署** | 部署到Windows版宝塔管理的站点的ssl证书 |
|
||||
| 11.| **宝塔-网站证书部署** | 部署宝塔管理的站点的ssl证书,目前支持宝塔网站站点、docker站点等。本插件也支持aaPanel。 |
|
||||
| 12.| **K8S-Apply自定义yaml** | apply自定义yaml到k8s |
|
||||
| 13.| **K8S-Ingress 证书部署** | 部署证书到k8s的Ingress |
|
||||
| 14.| **K8S-部署证书到Secret** | 部署证书到k8s的secret |
|
||||
| 15.| **lucky-更新Lucky证书** | |
|
||||
| 16.| **Plesk-部署Plesk网站证书** | |
|
||||
| 17.| **Plesk-更新证书** | 不会创建新证书记录,直接更新旧的证书 |
|
||||
| 18.| **雷池-更新证书** | 更新长亭雷池WAF的证书 |
|
||||
| 19.| **群晖-部署证书到群晖面板** | Synology,支持6.x以上版本 |
|
||||
| 20.| **uniCloud-部署到服务空间** | 部署到服务空间 |
|
||||
| 21.| **Proxmox-上传证书到Proxmox** | |
|
||||
| 22.| **威联通-部署证书到威联通** | 部署证书到qnap |
|
||||
| 5.| **NextTerminal-更新证书** | 更新 Next Terminal 证书 |
|
||||
| 6.| **1Panel-部署面板证书** | 更新1Panel的面板证书 |
|
||||
| 7.| **1Panel-更新站点证书** | 更新1Panel的站点证书 |
|
||||
| 8.| **宝塔-删除过期证书** | 删除证书夹中过期证书 |
|
||||
| 9.| **宝塔-WAF证书部署** | 部署宝塔云WAF/aaWAF |
|
||||
| 10.| **宝塔-面板证书部署** | 部署宝塔面板本身的ssl证书 |
|
||||
| 11.| **宝塔win-网站证书部署** | 部署到Windows版宝塔管理的站点的ssl证书 |
|
||||
| 12.| **宝塔-网站证书部署** | 部署宝塔管理的站点的ssl证书,目前支持宝塔网站站点、docker站点等。本插件也支持aaPanel。 |
|
||||
| 13.| **K8S-Apply自定义yaml** | apply自定义yaml到k8s |
|
||||
| 14.| **K8S-Ingress 证书部署** | 部署证书到k8s的Ingress |
|
||||
| 15.| **K8S-部署证书到Secret** | 部署证书到k8s的secret |
|
||||
| 16.| **lucky-更新Lucky证书** | |
|
||||
| 17.| **Plesk-部署Plesk网站证书** | |
|
||||
| 18.| **Plesk-更新证书** | 不会创建新证书记录,直接更新旧的证书 |
|
||||
| 19.| **雷池-更新证书(支持控制台和防护应用)** | 更新长亭雷池WAF的证书,支持更新控制台和防护应用的证书。 |
|
||||
| 20.| **群晖-部署证书到群晖面板** | Synology,支持6.x以上版本 |
|
||||
| 21.| **群晖-刷新OTP登录有效期** | 群晖登录状态可能30天失效,需要在失效之前登录一次,刷新有效期,您可以将其放在“部署到群晖面板”任务之后 |
|
||||
| 22.| **uniCloud-部署到服务空间** | 部署到服务空间 |
|
||||
| 23.| **Proxmox-上传证书到Proxmox** | |
|
||||
| 24.| **威联通-部署证书到威联通** | 部署证书到qnap |
|
||||
## 5. 阿里云
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 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. 华为云
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
@@ -110,9 +113,9 @@
|
||||
| 1.| **腾讯云-删除即将过期证书** | 仅删除未使用的证书 |
|
||||
| 2.| **腾讯云-部署证书到任意云资源** | 支持负载均衡、CDN、DDoS、直播、点播、Web应用防火墙、API网关、TEO、容器服务、对象存储、轻应用服务器、云原生微服务、云开发 |
|
||||
| 3.| **腾讯云-部署到CDN(废弃)** | 已废弃,请使用v2版 |
|
||||
| 4.| **腾讯云-部署到CDN-v2** | 推荐使用 |
|
||||
| 4.| **腾讯云-部署到CDN-v2** | 推荐使用,支持CDN域名以及COS加速域名 |
|
||||
| 5.| **腾讯云-部署到CLB** | 暂时只支持单向认证证书,暂时只支持通用负载均衡 |
|
||||
| 6.| **腾讯云-部署证书到COS** | 部署到腾讯云COS源站域名证书【注意:很不稳定,需要重试很多次偶尔才能成功一次】 |
|
||||
| 6.| **腾讯云-部署证书到COS** | 部署到腾讯云COS源站域名证书,注意是源站域名,加速域名请使用腾讯云CDN v2插件【注意:很不稳定,需要重试很多次偶尔才能成功一次】 |
|
||||
| 7.| **腾讯云-部署到腾讯云EO** | 腾讯云边缘安全加速平台EdgeOne(EO) |
|
||||
| 8.| **腾讯云-部署到腾讯云直播** | https://console.cloud.tencent.com/live/ |
|
||||
| 9.| **腾讯云-部署到TKE** | 修改TKE集群密钥配置,支持Opaque和TLS证书类型。注意: 1. serverless集群请使用K8S部署插件; 2. Opaque类型需要【上传到腾讯云】作为前置任务; 3. ApiServer需要开通公网访问(或者certd可访问),实际上底层仍然是通过KubeClient进行部署 |
|
||||
@@ -182,7 +185,8 @@
|
||||
|-----|-----|-----|
|
||||
| 1.| **数据库备份** | 【仅管理员可用】仅支持备份SQLite数据库 |
|
||||
| 2.| **重启 Certd** | 【仅管理员可用】 重启 certd的https服务,用于更新 Certd 的 ssl 证书 |
|
||||
| 3.| **自定义js脚本** | 【仅管理员】运行自定义js脚本执行 |
|
||||
| 3.| **部署证书到Certd本身** | 【仅管理员可用】 部署证书到 certd的https服务,用于更新 Certd 的 ssl 证书,建议将此任务放在流水线的最后一步 |
|
||||
| 4.| **自定义js脚本** | 【仅管理员】运行自定义js脚本执行 |
|
||||
|
||||
<style module>
|
||||
table th:first-of-type {
|
||||
|
||||
@@ -9,18 +9,19 @@
|
||||
| 5.| **京东云** | 京东云DNS解析提供商 |
|
||||
| 6.| **新网(代理方式)** | 新网域名解析(代理方式) |
|
||||
| 7.| **新网** | 新网域名解析 |
|
||||
| 8.| **cloudflare** | cloudflare dns provider |
|
||||
| 9.| **dns.la** | dns.la |
|
||||
| 10.| **godaddy** | GoDaddy |
|
||||
| 11.| **华为云** | 华为云DNS解析提供商 |
|
||||
| 12.| **namesilo** | namesilo dns provider |
|
||||
| 13.| **雨云** | 雨云DNS解析提供商 |
|
||||
| 14.| **腾讯云** | 腾讯云域名DNS解析提供者 |
|
||||
| 15.| **腾讯云EO DNS** | 腾讯云EO DNS解析提供者 |
|
||||
| 16.| **西部数码** | west dns provider |
|
||||
| 17.| **Dns提供商Demo** | dns provider示例 |
|
||||
| 18.| **51dns** | 51DNS |
|
||||
| 19.| **新网互联** | 新网互联 |
|
||||
| 8.| **BIND9 DNS** | 通过 SSH 连接到 BIND9 服务器,使用 nsupdate 命令管理 DNS 记录 |
|
||||
| 9.| **cloudflare** | cloudflare dns provider |
|
||||
| 10.| **dns.la** | dns.la |
|
||||
| 11.| **godaddy** | GoDaddy |
|
||||
| 12.| **华为云** | 华为云DNS解析提供商 |
|
||||
| 13.| **namesilo** | namesilo dns provider |
|
||||
| 14.| **雨云** | 雨云DNS解析提供商 |
|
||||
| 15.| **腾讯云** | 腾讯云域名DNS解析提供者 |
|
||||
| 16.| **腾讯云EO DNS** | 腾讯云EO DNS解析提供者 |
|
||||
| 17.| **西部数码** | west dns provider |
|
||||
| 18.| **Dns提供商Demo** | dns provider示例 |
|
||||
| 19.| **51dns** | 51DNS |
|
||||
| 20.| **新网互联** | 新网互联 |
|
||||
|
||||
<style module>
|
||||
table th:first-of-type {
|
||||
|
||||
@@ -28,6 +28,11 @@ https://certd.handsfree.work/
|
||||
2. [Docker方式部署](./install/docker/)
|
||||
3. [源码方式部署](./install/source/)
|
||||
|
||||
::: tip
|
||||
默认安装使用SQLite数据库,如果需要使用MySQL、PostgreSQL数据库,请参考[多数据库支持](./install/database.md)
|
||||
:::
|
||||
|
||||
|
||||
|
||||
### 2. 访问测试
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 28 KiB |
@@ -16,21 +16,11 @@ CERTD_HTTPS_port=7002
|
||||
|
||||
参考Certd顶部的创建证书流水线教程
|
||||
|
||||
### 2、配置复制到本机任务
|
||||
将证书复制到certd的证书安装位置
|
||||
证书路径:`ssl/cert.crt`
|
||||
私钥路径:`ssl/cert.key`
|
||||
### 2、配置部署证书到certd任务
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
### 3、配置重启Certd任务
|
||||
重启certd的https server,让证书生效
|
||||

|
||||
|
||||
|
||||
|
||||
### 4、配置定时任务
|
||||
### 3、配置定时任务
|
||||
每天定时执行,最终效果如下
|
||||
|
||||

|
||||
|
||||
@@ -9,5 +9,5 @@
|
||||
}
|
||||
},
|
||||
"npmClient": "pnpm",
|
||||
"version": "1.38.9"
|
||||
"version": "1.39.6"
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
"docs:preview": "vitepress preview docs",
|
||||
"pub": "echo 1",
|
||||
"dev": "pnpm run -r --parallel compile ",
|
||||
"pub_all":"pnpm run -r --parallel pub ",
|
||||
"release": "time /t >trigger/release.trigger && git add trigger/release.trigger && git commit -m \"build: release\" && git push",
|
||||
"publish_to_atomgit": "node --experimental-json-modules ./scripts/publish-atomgit.js",
|
||||
"publish_to_gitee": "node --experimental-json-modules ./scripts/publish-gitee.js",
|
||||
|
||||
@@ -3,6 +3,48 @@
|
||||
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
|
||||
|
||||
## [1.39.4](https://github.com/publishlab/node-acme-client/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.39.3](https://github.com/publishlab/node-acme-client/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.39.2](https://github.com/publishlab/node-acme-client/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复京东云报错不准确的bug ([10dd89a](https://github.com/publishlab/node-acme-client/commit/10dd89ae62e438a211a15e729559af823a096583))
|
||||
|
||||
## [1.39.1](https://github.com/publishlab/node-acme-client/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
# [1.39.0](https://github.com/publishlab/node-acme-client/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.38.12](https://github.com/publishlab/node-acme-client/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.38.11](https://github.com/publishlab/node-acme-client/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.38.10](https://github.com/publishlab/node-acme-client/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.38.9](https://github.com/publishlab/node-acme-client/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"description": "Simple and unopinionated ACME client",
|
||||
"private": false,
|
||||
"author": "nmorsman",
|
||||
"version": "1.38.9",
|
||||
"version": "1.39.6",
|
||||
"type": "module",
|
||||
"module": "scr/index.js",
|
||||
"main": "src/index.js",
|
||||
@@ -18,7 +18,7 @@
|
||||
"types"
|
||||
],
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.38.9",
|
||||
"@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": "b30cb5d7dc8311af4863da7dc8781f7264ba0545"
|
||||
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||
}
|
||||
|
||||
@@ -174,7 +174,7 @@ export default async (client, userOpts) => {
|
||||
|
||||
|
||||
} catch (e) {
|
||||
log(`[auto] [${d}] challengeCreateFn threw error: ${e.message}`);
|
||||
log(`[auto] [${d}] challengeCreateFn threw error: ${e.message || e}`);
|
||||
await deactivateAuth(e);
|
||||
throw e;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,56 @@
|
||||
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
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复群晖测试时报addSecret undefine错误 ([5eb4aa3](https://github.com/certd/certd/commit/5eb4aa3a0eab9ffa729c8e813cbf973d9683cc13))
|
||||
|
||||
## [1.39.1](https://github.com/certd/certd/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
# [1.39.0](https://github.com/certd/certd/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* esxi部署失败的bug ([1e44115](https://github.com/certd/certd/commit/1e441154617e6516a9a3610412bf597128c62696))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* http请求增加建立连接超时配置 ([3c85602](https://github.com/certd/certd/commit/3c85602ab1fc1953cdc06a6cd75a971d14119179))
|
||||
|
||||
## [1.38.12](https://github.com/certd/certd/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.38.11](https://github.com/certd/certd/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.38.10](https://github.com/certd/certd/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 421 支持3次重试 ([b91548e](https://github.com/certd/certd/commit/b91548eef4c24faa822d3a40f1f6a77b41d274e4))
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1 +1 @@
|
||||
23:08
|
||||
00:03
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/basic",
|
||||
"private": false,
|
||||
"version": "1.38.9",
|
||||
"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": "b30cb5d7dc8311af4863da7dc8781f7264ba0545"
|
||||
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ export function resetLogConfigure() {
|
||||
}
|
||||
resetLogConfigure();
|
||||
export const logger: ILogger = log4js.getLogger("default") as any;
|
||||
logger.addSecret = (secret: string) => {};
|
||||
|
||||
export function resetLogFilePath(filePath: string) {
|
||||
logFilePath = filePath;
|
||||
@@ -106,8 +107,8 @@ export class PipelineLogger implements ILogger {
|
||||
logger: ILogger;
|
||||
customWriter!: (text: string) => void;
|
||||
|
||||
constructor(name: string, write: (text: string) => void) {
|
||||
this.customWriter = write;
|
||||
constructor(name: string, write?: (text: string) => void) {
|
||||
this.customWriter = write || (() => {});
|
||||
//@ts-ignore
|
||||
this.logger = log4js.getLogger(name);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,54 @@
|
||||
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
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* cname provider授权修改为sys级别 ([d01bfbe](https://github.com/certd/certd/commit/d01bfbec96a3a2109ec864953b0c9e8c1f95b97b))
|
||||
|
||||
## [1.39.1](https://github.com/certd/certd/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
# [1.39.0](https://github.com/certd/certd/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.38.12](https://github.com/certd/certd/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.38.11](https://github.com/certd/certd/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.38.10](https://github.com/certd/certd/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复1panel 请求失败的bug ([0283662](https://github.com/certd/certd/commit/0283662931ff47d6b5d49f91a30c4a002fe1d108))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 所有授权增加测试按钮 ([7a3e68d](https://github.com/certd/certd/commit/7a3e68d656c1dcdcd814b69891bd2c2c6fe3098a))
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/pipeline",
|
||||
"private": false,
|
||||
"version": "1.38.9",
|
||||
"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.38.9",
|
||||
"@certd/plus-core": "^1.38.9",
|
||||
"@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": "b30cb5d7dc8311af4863da7dc8781f7264ba0545"
|
||||
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||
}
|
||||
|
||||
@@ -4,13 +4,13 @@ import { HttpClient, ILogger, utils } from "@certd/basic";
|
||||
import * as _ from "lodash-es";
|
||||
import { PluginRequestHandleReq } from "../plugin/index.js";
|
||||
|
||||
export type AccessRequestHandleReqInput<T = any> = {
|
||||
id?: number;
|
||||
title?: string;
|
||||
access: T;
|
||||
};
|
||||
// export type AccessRequestHandleReqInput<T = any> = {
|
||||
// id?: number;
|
||||
// title?: string;
|
||||
// access: T;
|
||||
// };
|
||||
|
||||
export type AccessRequestHandleReq<T = any> = PluginRequestHandleReq<AccessRequestHandleReqInput<T>>;
|
||||
export type AccessRequestHandleReq<T = any> = PluginRequestHandleReq<T>;
|
||||
|
||||
export type AccessInputDefine = FormItemProps & {
|
||||
title: string;
|
||||
|
||||
@@ -17,6 +17,8 @@ export type PluginRequestHandleReq<T = any> = {
|
||||
action: string;
|
||||
input: T;
|
||||
data: any;
|
||||
record: { id: number; type: string; title: string };
|
||||
fromType?: "sys" | "user"; // sys、user
|
||||
};
|
||||
|
||||
export type UserInfo = {
|
||||
@@ -169,9 +171,7 @@ export abstract class AbstractTaskPlugin implements ITaskPlugin {
|
||||
}
|
||||
|
||||
if (this.ctx?.define?.onlyAdmin) {
|
||||
if (!this.isAdmin()) {
|
||||
throw new Error("只有管理员才能运行此任务");
|
||||
}
|
||||
this.checkAdmin();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -283,6 +283,12 @@ export abstract class AbstractTaskPlugin implements ITaskPlugin {
|
||||
return this.ctx.user.role === "admin";
|
||||
}
|
||||
|
||||
checkAdmin() {
|
||||
if (!this.isAdmin()) {
|
||||
throw new Error("只有“管理员”或“系统级项目”才有权限运行此插件任务");
|
||||
}
|
||||
}
|
||||
|
||||
getStepFromPipeline(stepId: string) {
|
||||
let found: any = null;
|
||||
RunnableCollection.each(this.ctx.pipeline.stages, step => {
|
||||
@@ -301,6 +307,14 @@ export abstract class AbstractTaskPlugin implements ITaskPlugin {
|
||||
buildDomainGroupOptions(options: any[], domains: string[]) {
|
||||
return utils.options.buildGroupOptions(options, domains);
|
||||
}
|
||||
|
||||
getLastStatus(): Runnable {
|
||||
return this.ctx.lastStatus || ({} as any);
|
||||
}
|
||||
|
||||
getLastOutput(key: string) {
|
||||
return this.getLastStatus().status?.output?.[key];
|
||||
}
|
||||
}
|
||||
|
||||
export type OutputVO = {
|
||||
|
||||
@@ -3,6 +3,46 @@
|
||||
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
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.39.1](https://github.com/certd/certd/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
# [1.39.0](https://github.com/certd/certd/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.38.12](https://github.com/certd/certd/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.38.11](https://github.com/certd/certd/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.38.10](https://github.com/certd/certd/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-huawei",
|
||||
"private": false,
|
||||
"version": "1.38.9",
|
||||
"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": "b30cb5d7dc8311af4863da7dc8781f7264ba0545"
|
||||
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,46 @@
|
||||
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
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.39.1](https://github.com/certd/certd/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
# [1.39.0](https://github.com/certd/certd/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.38.12](https://github.com/certd/certd/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.38.11](https://github.com/certd/certd/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.38.10](https://github.com/certd/certd/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-iframe",
|
||||
"private": false,
|
||||
"version": "1.38.9",
|
||||
"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": "b30cb5d7dc8311af4863da7dc8781f7264ba0545"
|
||||
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,46 @@
|
||||
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
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.39.1](https://github.com/certd/certd/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
# [1.39.0](https://github.com/certd/certd/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.38.12](https://github.com/certd/certd/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.38.11](https://github.com/certd/certd/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.38.10](https://github.com/certd/certd/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/jdcloud",
|
||||
"version": "1.38.9",
|
||||
"version": "1.39.6",
|
||||
"description": "jdcloud openApi sdk",
|
||||
"main": "./dist/bundle.js",
|
||||
"module": "./dist/bundle.js",
|
||||
@@ -56,5 +56,5 @@
|
||||
"fetch"
|
||||
]
|
||||
},
|
||||
"gitHead": "b30cb5d7dc8311af4863da7dc8781f7264ba0545"
|
||||
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,46 @@
|
||||
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
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.39.1](https://github.com/certd/certd/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
# [1.39.0](https://github.com/certd/certd/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.38.12](https://github.com/certd/certd/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.38.11](https://github.com/certd/certd/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.38.10](https://github.com/certd/certd/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-k8s",
|
||||
"private": false,
|
||||
"version": "1.38.9",
|
||||
"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.38.9",
|
||||
"@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": "b30cb5d7dc8311af4863da7dc8781f7264ba0545"
|
||||
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,56 @@
|
||||
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
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复京东云报错不准确的bug ([10dd89a](https://github.com/certd/certd/commit/10dd89ae62e438a211a15e729559af823a096583))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化阿里云连接超时时长为10秒,支持配置环境变量 ([1588461](https://github.com/certd/certd/commit/1588461633bd275765daa96fc68320abb58d616d))
|
||||
* 优化个人账户页面 ([e506116](https://github.com/certd/certd/commit/e50611666ef731a903d7bdd8eb62333b97e2cc5b))
|
||||
* 支持批量转移流水线到其他项目 ([8a3841f](https://github.com/certd/certd/commit/8a3841f6382b53ce2343307fb035e74fa5383fef))
|
||||
|
||||
## [1.39.1](https://github.com/certd/certd/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
# [1.39.0](https://github.com/certd/certd/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 【破坏性更新】错误返回信息msg字段名统一改成message,与成功的返回结构一致 ([51ab6d6](https://github.com/certd/certd/commit/51ab6d6da1bb551b55b3a6a4a9a945c8d6ace806))
|
||||
|
||||
## [1.38.12](https://github.com/certd/certd/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
## [1.38.11](https://github.com/certd/certd/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
## [1.38.10](https://github.com/certd/certd/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/lib-server",
|
||||
"version": "1.38.9",
|
||||
"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.38.9",
|
||||
"@certd/basic": "^1.38.9",
|
||||
"@certd/pipeline": "^1.38.9",
|
||||
"@certd/plugin-lib": "^1.38.9",
|
||||
"@certd/plus-core": "^1.38.9",
|
||||
"@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": "b30cb5d7dc8311af4863da7dc8781f7264ba0545"
|
||||
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ export abstract class BaseController {
|
||||
fail(msg: string, code?: any) {
|
||||
return {
|
||||
code: code ? code : Constants.res.error.code,
|
||||
msg: msg ? msg : Constants.res.error.code,
|
||||
message: msg ? msg : Constants.res.error.code,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -69,10 +69,8 @@ export abstract class BaseController {
|
||||
if (!projectIdStr){
|
||||
projectIdStr = this.ctx.request.query["projectId"] as string;
|
||||
}
|
||||
if (!projectIdStr){
|
||||
return null
|
||||
}
|
||||
if (!projectIdStr) {
|
||||
//这里必须抛异常,否则可能会有权限问题
|
||||
throw new Error("projectId 不能为空")
|
||||
}
|
||||
const userId = this.getUserId()
|
||||
@@ -85,7 +83,7 @@ export abstract class BaseController {
|
||||
let userId = this.getUserId()
|
||||
const projectId = await this.getProjectId(permission)
|
||||
if(projectId){
|
||||
userId = 0
|
||||
userId = -1 // 企业管理模式下,用户id固定-1
|
||||
}
|
||||
return {
|
||||
projectId,userId
|
||||
@@ -117,11 +115,17 @@ export abstract class BaseController {
|
||||
if (projectId) {
|
||||
await authService.checkProjectId(service, id, projectId);
|
||||
}else{
|
||||
if(allowAdmin){
|
||||
await authService.checkUserIdButAllowAdmin(this.ctx, service, id);
|
||||
|
||||
if(userId === Constants.systemUserId){
|
||||
//系统级别,不检查权限
|
||||
}else{
|
||||
await authService.checkUserId(this.ctx, service, id);
|
||||
if(allowAdmin){
|
||||
await authService.checkUserIdButAllowAdmin(this.ctx, service, id);
|
||||
}else{
|
||||
await authService.checkUserId( service, id, userId);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return {projectId,userId}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import { Inject } from '@midwayjs/core';
|
||||
import { TypeORMDataSourceManager } from '@midwayjs/typeorm';
|
||||
import { EntityManager } from 'typeorm/entity-manager/EntityManager.js';
|
||||
import { FindManyOptions } from 'typeorm';
|
||||
import { Constants } from './constants.js';
|
||||
|
||||
export type PageReq<T = any> = {
|
||||
page?: { offset: number; limit: number };
|
||||
@@ -258,12 +259,12 @@ export abstract class BaseService<T> {
|
||||
|
||||
export function checkUserProjectParam(userId: number, projectId: number) {
|
||||
if (projectId != null ){
|
||||
if( userId !==0) {
|
||||
if( userId !== Constants.enterpriseUserId) {
|
||||
throw new ValidateException('userId projectId 错误');
|
||||
}
|
||||
return true
|
||||
}else{
|
||||
if( userId > 0) {
|
||||
if( userId != null) {
|
||||
return true
|
||||
}
|
||||
throw new ValidateException('userId不能为空');
|
||||
|
||||
@@ -120,4 +120,6 @@ export const Constants = {
|
||||
message: '用户邮箱还未配置',
|
||||
},
|
||||
},
|
||||
systemUserId: 0, // 系统级别userid固定为0
|
||||
enterpriseUserId: -1 // 企业模式用户id固定为-1
|
||||
};
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
export class BaseException extends Error {
|
||||
code: number;
|
||||
data?:any
|
||||
constructor(name, code, message,data?:any) {
|
||||
constructor(name: string, code: number, message: string ,data?:any) {
|
||||
super(message);
|
||||
this.name = name;
|
||||
this.code = code;
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
export class Result<T> {
|
||||
code: number;
|
||||
msg: string;
|
||||
message: string;
|
||||
data: T;
|
||||
|
||||
constructor(code, msg, data?) {
|
||||
constructor(code, message, data?) {
|
||||
this.code = code;
|
||||
this.msg = msg;
|
||||
this.message = message;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
static error(code = 1, msg, data?: any) {
|
||||
return new Result(code, msg, data);
|
||||
static error(code = 1, message, data?: any) {
|
||||
return new Result(code, message, data);
|
||||
}
|
||||
|
||||
static success(msg, data?) {
|
||||
return new Result(0, msg, data);
|
||||
static success(message, data?) {
|
||||
return new Result(0, message, data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,6 +88,10 @@ export class SysPrivateSettings extends BaseSettings {
|
||||
|
||||
pipelineMaxRunningCount?: number;
|
||||
|
||||
|
||||
environmentVars?: string = '';
|
||||
|
||||
|
||||
sms?: {
|
||||
type?: string;
|
||||
config?: any;
|
||||
|
||||
@@ -9,8 +9,10 @@ import { cache, logger, mergeUtils, setGlobalProxy } from '@certd/basic';
|
||||
import * as dns from 'node:dns';
|
||||
import { BaseService, setAdminMode } from '../../../basic/index.js';
|
||||
import { executorQueue } from '../../basic/service/executor-queue.js';
|
||||
import { isComm } from '@certd/plus-core';
|
||||
import { isComm, isPlus } from '@certd/plus-core';
|
||||
const { merge } = mergeUtils;
|
||||
|
||||
let lastSaveEnvVars = {};
|
||||
/**
|
||||
* 设置
|
||||
*/
|
||||
@@ -117,12 +119,12 @@ export class SysSettingsService extends BaseService<SysSettingsEntity> {
|
||||
}
|
||||
|
||||
async savePublicSettings(bean: SysPublicSettings) {
|
||||
if(isComm()){
|
||||
if(bean.adminMode === 'enterprise'){
|
||||
if (isComm()) {
|
||||
if (bean.adminMode === 'enterprise') {
|
||||
throw new Error("商业版不支持使用企业管理模式")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
await this.saveSetting(bean);
|
||||
//让设置生效
|
||||
await this.reloadPublicSettings();
|
||||
@@ -153,7 +155,9 @@ export class SysSettingsService extends BaseService<SysSettingsEntity> {
|
||||
|
||||
async reloadPublicSettings() {
|
||||
const publicSetting = await this.getPublicSettings()
|
||||
setAdminMode(publicSetting.adminMode)
|
||||
if (isPlus()){
|
||||
setAdminMode(publicSetting.adminMode )
|
||||
}
|
||||
}
|
||||
|
||||
async reloadPrivateSettings() {
|
||||
@@ -173,6 +177,44 @@ export class SysSettingsService extends BaseService<SysSettingsEntity> {
|
||||
}
|
||||
|
||||
setSslProviderReverseProxies(privateSetting.reverseProxies);
|
||||
|
||||
//加载环境变量
|
||||
this.setEnvironmentVars(privateSetting.environmentVars);
|
||||
}
|
||||
|
||||
setEnvironmentVars(vars: string) {
|
||||
const envVars = {}
|
||||
if (typeof vars !== 'string') {
|
||||
vars = ""
|
||||
}
|
||||
vars.split('\n').forEach(line => {
|
||||
line = line.trim();
|
||||
if (!line || line.startsWith('#')) {
|
||||
return
|
||||
}
|
||||
|
||||
const arr = line.split("#")
|
||||
if (arr.length > 0) {
|
||||
line = arr[0].trim();
|
||||
}
|
||||
if (!line.includes("=")) {
|
||||
return
|
||||
}
|
||||
|
||||
const [key, value] = line.split('=');
|
||||
if (key && value) {
|
||||
envVars[key.trim()] = value.trim();
|
||||
}
|
||||
});
|
||||
//先删除旧环境变量
|
||||
if (lastSaveEnvVars) {
|
||||
for (const key in lastSaveEnvVars) {
|
||||
delete process.env[key];
|
||||
}
|
||||
}
|
||||
|
||||
merge(process.env, envVars);
|
||||
lastSaveEnvVars = envVars;
|
||||
}
|
||||
|
||||
async updateByKey(key: string, setting: any) {
|
||||
|
||||
@@ -7,8 +7,12 @@ import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
|
||||
export class AccessEntity {
|
||||
@PrimaryGeneratedColumn()
|
||||
id: number;
|
||||
@Column({ name: 'key_id', comment: 'key_id', length: 100 })
|
||||
keyId: string;
|
||||
|
||||
@Column({ name: 'user_id', comment: '用户id' })
|
||||
userId: number;
|
||||
userId: number; // 0为系统级别, -1为企业,大于1为用户
|
||||
|
||||
@Column({ comment: '名称', length: 100 })
|
||||
name: string;
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import {AccessGetter, BaseService, PageReq, PermissionException, ValidateExcepti
|
||||
import {AccessEntity} from '../entity/access.js';
|
||||
import {AccessDefine, accessRegistry, newAccess} from '@certd/pipeline';
|
||||
import {EncryptService} from './encrypt-service.js';
|
||||
import { logger, utils } from '@certd/basic';
|
||||
|
||||
/**
|
||||
* 授权
|
||||
@@ -46,6 +47,7 @@ export class AccessService extends BaseService<AccessEntity> {
|
||||
}
|
||||
delete param._copyFrom
|
||||
this.encryptSetting(param, oldEntity);
|
||||
param.keyId = "ac_" + utils.id.simpleNanoId();
|
||||
return await super.add(param);
|
||||
}
|
||||
|
||||
@@ -117,6 +119,7 @@ export class AccessService extends BaseService<AccessEntity> {
|
||||
throw new ValidateException('该授权配置不存在,请确认是否已被删除');
|
||||
}
|
||||
this.encryptSetting(param, oldEntity);
|
||||
delete param.keyId
|
||||
return await super.update(param);
|
||||
}
|
||||
|
||||
@@ -215,4 +218,37 @@ export class AccessService extends BaseService<AccessEntity> {
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制授权到其他项目
|
||||
* @param accessId
|
||||
* @param projectId
|
||||
*/
|
||||
async copyTo(accessId: number,projectId?: number) {
|
||||
const access = await this.info(accessId);
|
||||
if (access == null) {
|
||||
throw new Error(`该授权配置不存在,请确认是否已被删除:id=${accessId}`);
|
||||
}
|
||||
|
||||
const keyId = access.keyId;
|
||||
//检查目标项目里是否已经有相同keyId的配置
|
||||
const existAccess = await this.repository.findOne({
|
||||
where: {
|
||||
keyId,
|
||||
projectId,
|
||||
},
|
||||
});
|
||||
if (existAccess) {
|
||||
logger.info(`目标项目已存在相同keyId的授权配置,跳过复制:keyId=${keyId}`);
|
||||
return existAccess.id;
|
||||
}
|
||||
const newAccess = {
|
||||
...access,
|
||||
userId:-1,
|
||||
id: undefined,
|
||||
projectId,
|
||||
}
|
||||
await this.repository.save(newAccess);
|
||||
return newAccess.id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
|
||||
export class AddonEntity {
|
||||
@PrimaryGeneratedColumn()
|
||||
id: number;
|
||||
@Column({ name: 'key_id', comment: 'key_id', length: 100 })
|
||||
keyId: string;
|
||||
@Column({ name: 'user_id', comment: '用户id' })
|
||||
userId: number;
|
||||
@Column({ comment: '名称', length: 100 })
|
||||
|
||||
@@ -4,6 +4,7 @@ import { In, Repository } from "typeorm";
|
||||
import { AddonDefine, BaseService, PageReq, ValidateException } from "../../../index.js";
|
||||
import { addonRegistry } from "../api/index.js";
|
||||
import { AddonEntity } from "../entity/addon.js";
|
||||
import { utils } from "@certd/basic";
|
||||
|
||||
/**
|
||||
* Addon
|
||||
@@ -43,6 +44,7 @@ export class AddonService extends BaseService<AddonEntity> {
|
||||
} else {
|
||||
param.isSystem = false;
|
||||
}
|
||||
param.keyId = "ad_" + utils.id.simpleNanoId();
|
||||
delete param._copyFrom;
|
||||
return await super.add(param);
|
||||
}
|
||||
@@ -57,6 +59,7 @@ export class AddonService extends BaseService<AddonEntity> {
|
||||
if (oldEntity == null) {
|
||||
throw new ValidateException("该Addon配置不存在,请确认是否已被删除");
|
||||
}
|
||||
delete param.keyId
|
||||
return await super.update(param);
|
||||
}
|
||||
|
||||
@@ -67,6 +70,7 @@ export class AddonService extends BaseService<AddonEntity> {
|
||||
}
|
||||
return {
|
||||
id: entity.id,
|
||||
keyId: entity.keyId,
|
||||
name: entity.name,
|
||||
userId: entity.userId,
|
||||
addonType: entity.addonType,
|
||||
@@ -100,6 +104,7 @@ export class AddonService extends BaseService<AddonEntity> {
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
keyId: true,
|
||||
name: true,
|
||||
addonType: true,
|
||||
type: true,
|
||||
@@ -132,6 +137,7 @@ export class AddonService extends BaseService<AddonEntity> {
|
||||
const setting = JSON.parse(res.setting);
|
||||
return {
|
||||
id: res.id,
|
||||
keyId: res.keyId,
|
||||
addonType: res.addonType,
|
||||
type: res.type,
|
||||
name: res.name,
|
||||
|
||||
@@ -3,6 +3,46 @@
|
||||
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
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.39.1](https://github.com/certd/certd/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
# [1.39.0](https://github.com/certd/certd/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.38.12](https://github.com/certd/certd/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.38.11](https://github.com/certd/certd/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.38.10](https://github.com/certd/certd/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/midway-flyway-js",
|
||||
"version": "1.38.9",
|
||||
"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": "b30cb5d7dc8311af4863da7dc8781f7264ba0545"
|
||||
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,46 @@
|
||||
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
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
## [1.39.1](https://github.com/certd/certd/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
# [1.39.0](https://github.com/certd/certd/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
## [1.38.12](https://github.com/certd/certd/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
## [1.38.11](https://github.com/certd/certd/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
## [1.38.10](https://github.com/certd/certd/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/plugin-cert",
|
||||
"private": false,
|
||||
"version": "1.38.9",
|
||||
"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.38.9",
|
||||
"@certd/basic": "^1.38.9",
|
||||
"@certd/pipeline": "^1.38.9",
|
||||
"@certd/plugin-lib": "^1.38.9",
|
||||
"@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": "b30cb5d7dc8311af4863da7dc8781f7264ba0545"
|
||||
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,51 @@
|
||||
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
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复阿里云证书订单翻页问题 ([6d43623](https://github.com/certd/certd/commit/6d43623f459a7594599e50a7ed89d67fcc775518))
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-lib
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 查看证书增加证书详情显示,包括域名,过期时间,颁发机构,指纹等 ([0b9933d](https://github.com/certd/certd/commit/0b9933df1e8d1685d14271435a8a7488974cc47b))
|
||||
* dns-provider 支持bind9 ,support bind9 ([76d12d6](https://github.com/certd/certd/commit/76d12d60624c0672fd3717a80a2cfef6845b14b8))
|
||||
|
||||
## [1.39.1](https://github.com/certd/certd/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-lib
|
||||
|
||||
# [1.39.0](https://github.com/certd/certd/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-lib
|
||||
|
||||
## [1.38.12](https://github.com/certd/certd/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-lib
|
||||
|
||||
## [1.38.11](https://github.com/certd/certd/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-lib
|
||||
|
||||
## [1.38.10](https://github.com/certd/certd/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-lib
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-lib
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/plugin-lib",
|
||||
"private": false,
|
||||
"version": "1.38.9",
|
||||
"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.38.9",
|
||||
"@certd/basic": "^1.38.9",
|
||||
"@certd/pipeline": "^1.38.9",
|
||||
"@certd/plus-core": "^1.38.9",
|
||||
"@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": "b30cb5d7dc8311af4863da7dc8781f7264ba0545"
|
||||
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import fs from "fs";
|
||||
import os from "os";
|
||||
import path from "path";
|
||||
import { CertificateInfo, crypto } from "@certd/acme-client";
|
||||
import cryptoLib from "crypto";
|
||||
import { ILogger } from "@certd/basic";
|
||||
import dayjs from "dayjs";
|
||||
import { uniq } from "lodash-es";
|
||||
@@ -119,9 +120,28 @@ export class CertReader {
|
||||
const detail = crypto.readCertificateInfo(crt.toString());
|
||||
const effective = detail.notBefore;
|
||||
const expires = detail.notAfter;
|
||||
const fingerprints = CertReader.getFingerprintX509(crt);
|
||||
// @ts-ignore
|
||||
detail.fingerprints = fingerprints;
|
||||
return { detail, effective, expires };
|
||||
}
|
||||
|
||||
static getFingerprintX509(crt: string) {
|
||||
try {
|
||||
// 创建X509Certificate实例
|
||||
const cert = new cryptoLib.X509Certificate(crt);
|
||||
// 获取指纹
|
||||
return {
|
||||
fingerprint: cert.fingerprint,
|
||||
fingerprint256: cert.fingerprint256,
|
||||
fingerprint512: cert.fingerprint512,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("处理证书失败:", error.message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
getAllDomains() {
|
||||
const { detail } = this.getCrtDetail();
|
||||
const domains = [];
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { HttpClient, ILogger, utils } from "@certd/basic";
|
||||
import { IAccess, IServiceGetter, PageRes, PageSearch, Registrable } from "@certd/pipeline";
|
||||
import { IAccess, IAccessService, IServiceGetter, PageRes, PageSearch, Registrable } from "@certd/pipeline";
|
||||
|
||||
export type DnsProviderDefine = Registrable & {
|
||||
accessType: string;
|
||||
@@ -26,6 +26,7 @@ export type DnsProviderContext = {
|
||||
utils: typeof utils;
|
||||
domainParser: IDomainParser;
|
||||
serviceGetter: IServiceGetter;
|
||||
accessGetter?: IAccessService;
|
||||
};
|
||||
|
||||
export type DomainRecord = {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { HttpClient, ILogger } from "@certd/basic";
|
||||
import { PageRes, PageSearch } from "@certd/pipeline";
|
||||
import { IAccessService, PageRes, PageSearch } from "@certd/pipeline";
|
||||
import punycode from "punycode.js";
|
||||
import { CreateRecordOptions, DnsProviderContext, DnsProviderDefine, DomainRecord, IDnsProvider, RemoveRecordOptions } from "./api.js";
|
||||
import { dnsProviderRegistry } from "./registry.js";
|
||||
@@ -59,6 +59,11 @@ export async function createDnsProvider(opts: { dnsProviderType: string; context
|
||||
if (dnsProviderDefine.deprecated) {
|
||||
context.logger.warn(dnsProviderDefine.deprecated);
|
||||
}
|
||||
|
||||
if (!context.accessGetter) {
|
||||
const accessGetter: IAccessService = await context.serviceGetter.get("accessService");
|
||||
context.accessGetter = accessGetter;
|
||||
}
|
||||
// @ts-ignore
|
||||
const dnsProvider: IDnsProvider = new DnsProviderClass();
|
||||
dnsProvider.setCtx(context);
|
||||
|
||||
@@ -43,6 +43,7 @@ export function createRemoteSelectInputDefine(opts?: {
|
||||
pager?: boolean;
|
||||
component?: any;
|
||||
value?: any;
|
||||
pageSize?: number;
|
||||
}) {
|
||||
const title = opts?.title || "请选择";
|
||||
const certDomainsInputKey = opts?.certDomainsInputKey || "certDomains";
|
||||
@@ -54,13 +55,11 @@ export function createRemoteSelectInputDefine(opts?: {
|
||||
const helper = opts?.helper || "请选择";
|
||||
const search = opts?.search ?? false;
|
||||
const pager = opts?.pager ?? false;
|
||||
let mode = "tags";
|
||||
if (opts.multi === false) {
|
||||
mode = undefined;
|
||||
} else {
|
||||
mode = opts?.mode ?? "tags";
|
||||
let mode = "default";
|
||||
const multi = opts?.multi ?? true;
|
||||
if (multi) {
|
||||
mode = "tags";
|
||||
}
|
||||
|
||||
const item = {
|
||||
title,
|
||||
component: {
|
||||
@@ -72,6 +71,8 @@ export function createRemoteSelectInputDefine(opts?: {
|
||||
action,
|
||||
search,
|
||||
pager,
|
||||
multi,
|
||||
pageSize: opts?.pageSize,
|
||||
watches: [certDomainsInputKey, accessIdInputKey, ...watches],
|
||||
...opts.component,
|
||||
},
|
||||
|
||||
@@ -38,6 +38,10 @@ COPY ./patch/ssh2/*.js /app/node_modules/.pnpm/node_modules/ssh2/lib/protocol/
|
||||
|
||||
ENV LEGO_VERSION=4.30.1
|
||||
ENV LEGO_DOWNLOAD_DIR=/app/tools/lego
|
||||
|
||||
ENV ALIYUN_CLIENT_CONNECT_TIMEOUT=10000
|
||||
ENV ALIYUN_CLIENT_READ_TIMEOUT=20000
|
||||
|
||||
RUN mkdir -p $LEGO_DOWNLOAD_DIR
|
||||
|
||||
# 根据架构下载不同的文件
|
||||
|
||||
@@ -3,6 +3,127 @@
|
||||
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
|
||||
|
||||
* 修复修改分组报错的bug ([224db7d](https://github.com/certd/certd/commit/224db7da57dbdddf25bcac7faa0a29eb228c5a33))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* passkey 支持Bitwarden ([29f44c6](https://github.com/certd/certd/commit/29f44c67c808bed9ff1c9d4884d39a1a62d043a7))
|
||||
* passkey登录放到下方其他登录位置 ([1413e1a](https://github.com/certd/certd/commit/1413e1aff4aabcfd471716338c210fbcfd76c8f9))
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复阿里云证书订单翻页问题 ([6d43623](https://github.com/certd/certd/commit/6d43623f459a7594599e50a7ed89d67fcc775518))
|
||||
* 修复查看证书详情页面错位的bug ([7f37df4](https://github.com/certd/certd/commit/7f37df42274e657892d92e868ceac67e139f3bf2))
|
||||
* 修复选择插件页面无法滚动的bug ([d8425bc](https://github.com/certd/certd/commit/d8425bc9c5ee81bb669706c6de6bad69d7c38d8e))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化passkey ([9e12412](https://github.com/certd/certd/commit/9e12412f5fa7800df1d7efaf62cd8fd5d79bb569))
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复多选框只能单选的bug ([12700e1](https://github.com/certd/certd/commit/12700e1754319513ac02822ff1588d63420b964e))
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复群晖测试时报addSecret undefine错误 ([5eb4aa3](https://github.com/certd/certd/commit/5eb4aa3a0eab9ffa729c8e813cbf973d9683cc13))
|
||||
* 修复提示支付失败的bug ([12fed34](https://github.com/certd/certd/commit/12fed34e109f3254de664813954081a52513bd38))
|
||||
* 修复修改项目名称后,没有同步刷新的bug ([3abee72](https://github.com/certd/certd/commit/3abee72fee286864b665033b23b172ef0ea92d83))
|
||||
* cname provider授权修改为sys级别 ([d01bfbe](https://github.com/certd/certd/commit/d01bfbec96a3a2109ec864953b0c9e8c1f95b97b))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 查看证书增加证书详情显示,包括域名,过期时间,颁发机构,指纹等 ([0b9933d](https://github.com/certd/certd/commit/0b9933df1e8d1685d14271435a8a7488974cc47b))
|
||||
* 获取阿里证书订单id组件增加翻页功能,突破50的上限 ([d79db3b](https://github.com/certd/certd/commit/d79db3bd3f0d5ad39664bb47ec3814d43ad93304))
|
||||
* 优化阿里云连接超时时长为10秒,支持配置环境变量 ([1588461](https://github.com/certd/certd/commit/1588461633bd275765daa96fc68320abb58d616d))
|
||||
* 优化个人账户页面 ([e506116](https://github.com/certd/certd/commit/e50611666ef731a903d7bdd8eb62333b97e2cc5b))
|
||||
* 支持批量转移流水线到其他项目 ([8a3841f](https://github.com/certd/certd/commit/8a3841f6382b53ce2343307fb035e74fa5383fef))
|
||||
* 支持passkey登录 ([10b7644](https://github.com/certd/certd/commit/10b7644bb7ba5f82776537bc0c4f5eb95d5f8e4e))
|
||||
* dns-provider 支持bind9 ,support bind9 ([76d12d6](https://github.com/certd/certd/commit/76d12d60624c0672fd3717a80a2cfef6845b14b8))
|
||||
|
||||
## [1.39.1](https://github.com/certd/certd/compare/v1.39.0...v1.39.1) (2026-03-09)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复企业管理模式下,切换用户登录后,丢失项目列表的bug ([d23c8b4](https://github.com/certd/certd/commit/d23c8b4a2a5f5ab17822c6ee1d4108ac7280b9d1))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 支持迁移个人数据到企业项目中 ([c6ca832](https://github.com/certd/certd/commit/c6ca83273779ed84de1b23b5e477063af043d015))
|
||||
|
||||
# [1.39.0](https://github.com/certd/certd/compare/v1.38.12...v1.39.0) (2026-03-07)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复发件邮箱无法输入的bug ([27b0348](https://github.com/certd/certd/commit/27b0348e1d3d752f418f851965d6afbc26c0160c))
|
||||
* 修复复制流水线保存后丢失分组和排序号的问题 ([bc32648](https://github.com/certd/certd/commit/bc326489abc1d50a0930b4f47aa2d62d3a486798))
|
||||
* 修复获取群辉deviceid报错的bug ([79be392](https://github.com/certd/certd/commit/79be392775a2c91848dd5a66a2618adc4e4b48f6))
|
||||
* 修复偶尔下载证书报未授权的错误 ([316537e](https://github.com/certd/certd/commit/316537eb4dcbe5ec57784e8bf95ee3cdfd21dce7))
|
||||
|
||||
### Features
|
||||
|
||||
* 支持企业级管理模式,项目管理,细分权限 ([3734083](https://github.com/certd/certd/commit/37340838b6a61a94b86bfa13cf5da88b26f1315a))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 当域名管理中没有域名时,创建流水线时不展开域名选择框 ([bb0afe1](https://github.com/certd/certd/commit/bb0afe1fa7b0fc52fde051d24fbe6be69d52f4cc))
|
||||
* 任务步骤页面增加串行执行提示说明 ([787f6ef](https://github.com/certd/certd/commit/787f6ef52893d8dc912ee2a7a5b8ce2b73c108c9))
|
||||
|
||||
## [1.38.12](https://github.com/certd/certd/compare/v1.38.11...v1.38.12) (2026-02-18)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复获取群辉deviceid报错的bug ([39d3bf9](https://github.com/certd/certd/commit/39d3bf97d1935918bac575da9d0726310c83c19d))
|
||||
|
||||
## [1.38.11](https://github.com/certd/certd/compare/v1.38.10...v1.38.11) (2026-02-16)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化登陆页面的黑暗模式 ([e47edda](https://github.com/certd/certd/commit/e47eddaa858f8fffe7a40dfbd14e8cda1dcba4ac))
|
||||
* 支持自定义发件人名称,格式:名称<邮箱> ([bab9adc](https://github.com/certd/certd/commit/bab9adce240108d4291eedc67e04abc4a01019e0))
|
||||
|
||||
## [1.38.10](https://github.com/certd/certd/compare/v1.38.9...v1.38.10) (2026-02-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复1panel 请求失败的bug ([0283662](https://github.com/certd/certd/commit/0283662931ff47d6b5d49f91a30c4a002fe1d108))
|
||||
* 修复保存站点监控dns设置,偶尔无法保存成功的bug ([8387fe0](https://github.com/certd/certd/commit/8387fe0d5b2e77b8c2788a10791e5389d97a3e41))
|
||||
* 修复任务步骤标题过长导致错位的问题 ([9fb9805](https://github.com/certd/certd/commit/9fb980599f96ccbf61bd46019411db2f13c70e57))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 监控设置支持逗号分割 ([c23d1d1](https://github.com/certd/certd/commit/c23d1d11b58a6cdfe431a7e8abbd5d955146c38d))
|
||||
* 列表中支持下次执行时间显示 ([a3cabd5](https://github.com/certd/certd/commit/a3cabd5f36ed41225ad418098596e9b2c44e31a1))
|
||||
* 模版编辑页面,hover反色过亮问题优化 ([e55a3a8](https://github.com/certd/certd/commit/e55a3a82fc6939b940f0c3be4529d74a625f6f4e))
|
||||
* 所有授权增加测试按钮 ([7a3e68d](https://github.com/certd/certd/commit/7a3e68d656c1dcdcd814b69891bd2c2c6fe3098a))
|
||||
* 优化网络测试页面,夜间模式显示效果 ([305da86](https://github.com/certd/certd/commit/305da86f97d918374819ecd6c50685f09b94ea59))
|
||||
* 支持next-terminal ([6f3fd78](https://github.com/certd/certd/commit/6f3fd785e77a33c72bdf4115dc5d498e677d1863))
|
||||
* 主题默认跟随系统颜色(自动切换深色浅色模式) ([32c3ce5](https://github.com/certd/certd/commit/32c3ce5c9868569523901a9a939ca5b535ec3277))
|
||||
* http校验方式支持scp上传 ([4eb940f](https://github.com/certd/certd/commit/4eb940ffe765a0330331bc6af8396315e36d4e4a))
|
||||
|
||||
## [1.38.9](https://github.com/certd/certd/compare/v1.38.8...v1.38.9) (2026-02-09)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/ui-client",
|
||||
"version": "1.38.9",
|
||||
"version": "1.39.6",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite --open",
|
||||
@@ -106,8 +106,8 @@
|
||||
"zod-defaults": "^0.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@certd/lib-iframe": "^1.38.9",
|
||||
"@certd/pipeline": "^1.38.9",
|
||||
"@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",
|
||||
|
||||
|
After Width: | Height: | Size: 117 KiB |
@@ -1,7 +1,7 @@
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="500" height="500" viewBox="0 0 500.000000 500.000000"
|
||||
>
|
||||
<path d="M28.34 56.68h28.34V36.12H28.34a7.79 7.79 0 1 1 0-15.58h19.84v9.05h8.5V12H28.34a16.29 16.29 0 0 0 0 32.58h19.84v3.56H28.34a19.84 19.84 0 0 1 0-39.68h28.34V0H28.34a28.34 28.34 0 0 0 0 56.68z"
|
||||
<path fill="#333" d="M28.34 56.68h28.34V36.12H28.34a7.79 7.79 0 1 1 0-15.58h19.84v9.05h8.5V12H28.34a16.29 16.29 0 0 0 0 32.58h19.84v3.56H28.34a19.84 19.84 0 0 1 0-39.68h28.34V0H28.34a28.34 28.34 0 0 0 0 56.68z"
|
||||
transform="translate(70, 76) scale(6,6)"
|
||||
></path>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 397 B After Width: | Height: | Size: 409 B |
|
After Width: | Height: | Size: 5.4 KiB |
@@ -136,27 +136,29 @@ function createService() {
|
||||
*/
|
||||
function createRequestFunction(service: any) {
|
||||
return function (config: any) {
|
||||
const configDefault = {
|
||||
const configDefault: any = {
|
||||
headers: {
|
||||
"Content-Type": get(config, "headers.Content-Type", "application/json"),
|
||||
} as any,
|
||||
timeout: 30000,
|
||||
baseURL: env.API,
|
||||
data: {},
|
||||
params: {},
|
||||
};
|
||||
const projectStore = useProjectStore();
|
||||
|
||||
if (projectStore.isEnterprise && !config.url.startsWith("/sys")) {
|
||||
configDefault.headers["project-id"] = projectStore.currentProjectId;
|
||||
}
|
||||
|
||||
const userStore = useUserStore();
|
||||
const token = userStore.getToken;
|
||||
if (token != null) {
|
||||
// @ts-ignore
|
||||
configDefault.headers.Authorization = token;
|
||||
}
|
||||
return service(Object.assign(configDefault, config));
|
||||
Object.assign(configDefault, config);
|
||||
|
||||
if (!configDefault.params.projectId && projectStore.isEnterprise && !config.url.startsWith("/sys") && !config.url.startsWith("http")) {
|
||||
configDefault.params.projectId = projectStore.currentProject?.id;
|
||||
}
|
||||
return service(configDefault);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -19,30 +19,30 @@ export function parse(jsonString = "{}", defaultValue = {}) {
|
||||
/**
|
||||
* @description 接口请求返回
|
||||
* @param {Any} data 返回值
|
||||
* @param {String} msg 状态信息
|
||||
* @param {String} message 状态信息
|
||||
* @param {Number} code 状态码
|
||||
*/
|
||||
export function response(data = {}, msg = "", code = 0) {
|
||||
return [200, { code, msg, data }];
|
||||
export function response(data = {}, message = "", code = 0) {
|
||||
return [200, { code, message, data }];
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 接口请求返回 正确返回
|
||||
* @param {Any} data 返回值
|
||||
* @param {String} msg 状态信息
|
||||
* @param {String} message 状态信息
|
||||
*/
|
||||
export function responseSuccess(data = {}, msg = "成功") {
|
||||
return response(data, msg);
|
||||
export function responseSuccess(data = {}, message = "成功") {
|
||||
return response(data, message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 接口请求返回 错误返回
|
||||
* @param {Any} data 返回值
|
||||
* @param {String} msg 状态信息
|
||||
* @param {String} message 状态信息
|
||||
* @param {Number} code 状态码
|
||||
*/
|
||||
export function responseError(data = {}, msg = "请求失败", code = 500) {
|
||||
return response(data, msg, code);
|
||||
export function responseError(data = {}, message = "请求失败", code = 500) {
|
||||
return response(data, message, code);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,8 @@ import NotificationSelector from "../views/certd/notification/notification-selec
|
||||
import EmailSelector from "./email-selector/index.vue";
|
||||
import ValidTimeFormat from "./valid-time-format.vue";
|
||||
import ProjectSelector from "./project-selector/index.vue";
|
||||
import ProjectCurrent from "./project-selector/project-current.vue";
|
||||
|
||||
export default {
|
||||
install(app: any) {
|
||||
app.component(
|
||||
@@ -47,5 +49,6 @@ export default {
|
||||
app.use(vip);
|
||||
app.use(Plugins);
|
||||
app.component("ProjectSelector", ProjectSelector);
|
||||
app.component("ProjectCurrent", ProjectCurrent);
|
||||
},
|
||||
};
|
||||
|
||||
@@ -13,11 +13,13 @@
|
||||
import { ComponentPropsType, doRequest } from "/@/components/plugins/lib";
|
||||
import { ref, inject } from "vue";
|
||||
import { Form } from "ant-design-vue";
|
||||
import { getInputFromForm } from "./utils";
|
||||
|
||||
defineOptions({
|
||||
name: "ApiTest",
|
||||
});
|
||||
|
||||
const fromType: any = inject("getFromType");
|
||||
const getScope: any = inject("get:scope");
|
||||
const getPluginType: any = inject("get:plugin:type", () => {
|
||||
return "access";
|
||||
@@ -45,13 +47,16 @@ const doTest = async () => {
|
||||
message.value = "";
|
||||
hasError.value = false;
|
||||
loading.value = true;
|
||||
const { input, record } = getInputFromForm(form, pluginType);
|
||||
try {
|
||||
const res = await doRequest(
|
||||
{
|
||||
type: pluginType,
|
||||
typeName: form.type,
|
||||
action: props.action,
|
||||
input: pluginType === "plugin" ? form.input : form,
|
||||
input,
|
||||
record,
|
||||
fromType,
|
||||
},
|
||||
{
|
||||
onError(err: any) {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
import { ComponentPropsType, doRequest } from "/@/components/plugins/lib";
|
||||
import { defineComponent, inject, ref, useAttrs, watch, Ref } from "vue";
|
||||
import { PluginDefine } from "@certd/pipeline";
|
||||
import { getInputFromForm } from "./utils";
|
||||
|
||||
defineOptions({
|
||||
name: "RemoteAutoComplete",
|
||||
@@ -48,18 +49,6 @@ const message = ref("");
|
||||
const hasError = ref(false);
|
||||
const loading = ref(false);
|
||||
|
||||
function getInputFromForm(form: any, pluginType: string) {
|
||||
let input: any = {};
|
||||
if (pluginType === "plugin") {
|
||||
input = form?.input || {};
|
||||
} else if (pluginType === "access") {
|
||||
input = form?.access || {};
|
||||
} else {
|
||||
input = form || {};
|
||||
}
|
||||
return input;
|
||||
}
|
||||
|
||||
const getOptions = async () => {
|
||||
if (loading.value) {
|
||||
return;
|
||||
@@ -75,7 +64,7 @@ const getOptions = async () => {
|
||||
}
|
||||
const pluginType = getPluginType();
|
||||
const { form } = getScope();
|
||||
const input = getInputFromForm(form, pluginType);
|
||||
const { input, record } = getInputFromForm(form, pluginType);
|
||||
for (let key in define.input) {
|
||||
const inWatches = props.watches?.includes(key);
|
||||
const inputDefine = define.input[key];
|
||||
@@ -99,6 +88,7 @@ const getOptions = async () => {
|
||||
action: props.action,
|
||||
input,
|
||||
data: {},
|
||||
record,
|
||||
},
|
||||
{
|
||||
onError(err: any) {
|
||||
@@ -140,7 +130,7 @@ watch(
|
||||
() => {
|
||||
const pluginType = getPluginType();
|
||||
const { form, key } = getScope();
|
||||
const input = getInputFromForm(form, pluginType);
|
||||
const { input, record } = getInputFromForm(form, pluginType);
|
||||
const watches: any = {};
|
||||
if (props.watches && props.watches.length > 0) {
|
||||
for (const key of props.watches) {
|
||||
|
||||
@@ -9,6 +9,7 @@ import { doRequest } from "/@/components/plugins/lib";
|
||||
import { inject, ref, useAttrs } from "vue";
|
||||
import { useFormWrapper } from "@fast-crud/fast-crud";
|
||||
import { notification } from "ant-design-vue";
|
||||
import { getInputFromForm } from "./utils";
|
||||
|
||||
defineOptions({
|
||||
name: "RemoteInput",
|
||||
@@ -71,15 +72,18 @@ const doPluginFormSubmit = async (data: any) => {
|
||||
}
|
||||
|
||||
loading.value = true;
|
||||
|
||||
try {
|
||||
const pluginType = getPluginType();
|
||||
const { form } = getScope();
|
||||
const { input, record } = getInputFromForm(form, pluginType);
|
||||
const res = await doRequest({
|
||||
type: pluginType,
|
||||
typeName: form.type,
|
||||
action: props.action,
|
||||
input: pluginType === "plugin" ? form.input : form,
|
||||
input,
|
||||
data: data,
|
||||
record,
|
||||
});
|
||||
//获取返回值 填入到input中
|
||||
emit("update:modelValue", res);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="remote-select">
|
||||
<div class="flex flex-row">
|
||||
<a-select class="remote-select-input" show-search :filter-option="filterOption" :options="optionsRef" :value="value" v-bind="attrs" @click="onClick" @update:value="emit('update:value', $event)">
|
||||
<a-select ref="selectRef" class="remote-select-input" show-search :filter-option="filterOption" :options="optionsRef" :value="value" v-bind="attrs" @click="onClick" @update:value="updateValue($event)">
|
||||
<template #dropdownRender="{ menuNode: menu }">
|
||||
<template v-if="search">
|
||||
<div class="flex w-full" style="padding: 4px 8px">
|
||||
@@ -38,11 +38,14 @@
|
||||
import { ComponentPropsType, doRequest } from "/@/components/plugins/lib";
|
||||
import { defineComponent, inject, ref, useAttrs, watch, Ref } from "vue";
|
||||
import { PluginDefine } from "@certd/pipeline";
|
||||
import { getInputFromForm } from "./utils";
|
||||
|
||||
defineOptions({
|
||||
name: "RemoteSelect",
|
||||
});
|
||||
|
||||
const selectRef = ref(null);
|
||||
|
||||
const VNodes = defineComponent({
|
||||
props: {
|
||||
vnodes: {
|
||||
@@ -60,6 +63,8 @@ const props = defineProps<
|
||||
watches?: string[];
|
||||
search?: boolean;
|
||||
pager?: boolean;
|
||||
multi?: boolean;
|
||||
pageSize?: number;
|
||||
} & ComponentPropsType
|
||||
>();
|
||||
|
||||
@@ -67,6 +72,18 @@ const emit = defineEmits<{
|
||||
"update:value": any;
|
||||
}>();
|
||||
|
||||
function updateValue(value: any) {
|
||||
// if (props.multi !== false) {
|
||||
// emit("update:value", value);
|
||||
// } else {
|
||||
// const last = value?.[value.length - 1];
|
||||
// emit("update:value", last);
|
||||
// selectRef.value.blur();
|
||||
// }
|
||||
|
||||
emit("update:value", value);
|
||||
}
|
||||
|
||||
const attrs = useAttrs();
|
||||
|
||||
const getCurrentPluginDefine: any = inject("getCurrentPluginDefine", () => {
|
||||
@@ -79,17 +96,6 @@ const getPluginType: any = inject("get:plugin:type", () => {
|
||||
return "plugin";
|
||||
});
|
||||
|
||||
function getInputFromForm(form: any, pluginType: string) {
|
||||
let input: any = {};
|
||||
if (pluginType === "plugin") {
|
||||
input = form?.input || {};
|
||||
} else if (pluginType === "access") {
|
||||
input = form?.access || {};
|
||||
} else {
|
||||
input = form || {};
|
||||
}
|
||||
return input;
|
||||
}
|
||||
const searchKeyRef = ref("");
|
||||
const optionsRef = ref([]);
|
||||
const message = ref("");
|
||||
@@ -98,7 +104,7 @@ const loading = ref(false);
|
||||
const pagerRef: Ref = ref({
|
||||
pageNo: 1,
|
||||
total: 0,
|
||||
pageSize: 100,
|
||||
pageSize: props.pageSize || 50,
|
||||
});
|
||||
const getOptions = async () => {
|
||||
if (loading.value) {
|
||||
@@ -115,7 +121,7 @@ const getOptions = async () => {
|
||||
}
|
||||
const pluginType = getPluginType();
|
||||
const { form } = getScope();
|
||||
const input = getInputFromForm(form, pluginType);
|
||||
const { input, record } = getInputFromForm(form, pluginType);
|
||||
|
||||
for (let key in define.input) {
|
||||
const inWatches = props.watches?.includes(key);
|
||||
@@ -141,6 +147,7 @@ const getOptions = async () => {
|
||||
typeName: form.type,
|
||||
action: props.action,
|
||||
input,
|
||||
record,
|
||||
data: {
|
||||
searchKey: props.search ? searchKeyRef.value : "",
|
||||
pageNo,
|
||||
@@ -175,7 +182,7 @@ const getOptions = async () => {
|
||||
pagerRef.value.pageNo = res.pageNo ?? 1;
|
||||
}
|
||||
if (res.pageSize != null) {
|
||||
pagerRef.value.pageSize = res.pageSize ?? 100;
|
||||
pagerRef.value.pageSize = res.pageSize ?? pageSize;
|
||||
}
|
||||
if (res.total != null) {
|
||||
pagerRef.value.total = res.total ?? list.length;
|
||||
@@ -211,7 +218,7 @@ watch(
|
||||
() => {
|
||||
const pluginType = getPluginType();
|
||||
const { form, key } = getScope();
|
||||
const input = getInputFromForm(form, pluginType);
|
||||
const { input, record } = getInputFromForm(form, pluginType);
|
||||
const watches: any = {};
|
||||
if (props.watches && props.watches.length > 0) {
|
||||
for (const key of props.watches) {
|
||||
@@ -228,9 +235,10 @@ watch(
|
||||
const { form } = value;
|
||||
const oldForm: any = oldValue?.form;
|
||||
let changed = oldForm == null || optionsRef.value.length == 0;
|
||||
debugger;
|
||||
if (props.watches && props.watches.length > 0) {
|
||||
for (const key of props.watches) {
|
||||
if (oldForm && form[key] != oldForm[key]) {
|
||||
if (oldForm && JSON.stringify(form[key]) != JSON.stringify(oldForm[key])) {
|
||||
changed = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
import { ComponentPropsType, doRequest } from "/@/components/plugins/lib";
|
||||
import { defineComponent, inject, ref, useAttrs, watch, Ref } from "vue";
|
||||
import { PluginDefine } from "@certd/pipeline";
|
||||
import { getInputFromForm } from "./utils";
|
||||
|
||||
defineOptions({
|
||||
name: "RemoteTreeSelect",
|
||||
@@ -67,7 +68,7 @@ const getOptions = async () => {
|
||||
}
|
||||
const pluginType = getPluginType();
|
||||
const { form } = getScope();
|
||||
const input = (pluginType === "plugin" ? form?.input : form) || {};
|
||||
const { input, record } = getInputFromForm(form, pluginType);
|
||||
|
||||
for (let key in define.input) {
|
||||
const inWatches = props.watches?.includes(key);
|
||||
@@ -98,6 +99,7 @@ const getOptions = async () => {
|
||||
pageNo,
|
||||
pageSize,
|
||||
},
|
||||
record,
|
||||
},
|
||||
{
|
||||
onError(err: any) {
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
import { cloneDeep } from "lodash-es";
|
||||
|
||||
export function getInputFromForm(form: any, pluginType: string) {
|
||||
form = cloneDeep(form);
|
||||
let input: any = {};
|
||||
const record: any = form;
|
||||
if (pluginType === "plugin") {
|
||||
input = form?.input || {};
|
||||
delete form.input;
|
||||
} else if (pluginType === "access") {
|
||||
input = form?.access || {};
|
||||
delete form.access;
|
||||
} else if (pluginType === "notification") {
|
||||
input = form?.body || {};
|
||||
delete form.body;
|
||||
} else if (pluginType === "addon") {
|
||||
input = form?.body || {};
|
||||
delete form.body;
|
||||
} else {
|
||||
throw new Error(`pluginType ${pluginType} not support`);
|
||||
}
|
||||
return {
|
||||
input,
|
||||
record,
|
||||
};
|
||||
}
|
||||
@@ -20,6 +20,7 @@ export const Dicts = {
|
||||
uploaderTypeDict: dict({
|
||||
data: [
|
||||
{ label: "SFTP", value: "sftp" },
|
||||
{ label: "SCP", value: "scp" },
|
||||
{ label: "FTP", value: "ftp" },
|
||||
{ label: "阿里云OSS", value: "alioss" },
|
||||
{ label: "腾讯云COS", value: "tencentcos" },
|
||||
|
||||
@@ -12,11 +12,13 @@ export type RequestHandleReq<T = any> = {
|
||||
action: string;
|
||||
data?: any;
|
||||
input: T;
|
||||
record?: any;
|
||||
fromType?: string; // sys、user
|
||||
};
|
||||
|
||||
export async function doRequest(req: RequestHandleReq, opts: any = {}) {
|
||||
const url = `/pi/handle/${req.type}`;
|
||||
const { typeName, action, data, input } = req;
|
||||
const { typeName, action, data, input, record, fromType } = req;
|
||||
const res = await request({
|
||||
url,
|
||||
method: "post",
|
||||
@@ -25,6 +27,8 @@ export async function doRequest(req: RequestHandleReq, opts: any = {}) {
|
||||
action,
|
||||
data,
|
||||
input,
|
||||
record,
|
||||
fromType,
|
||||
},
|
||||
...opts,
|
||||
});
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
import { inject, ref, useAttrs } from "vue";
|
||||
import { Modal } from "ant-design-vue";
|
||||
import { ComponentPropsType, doRequest } from "/@/components/plugins/lib";
|
||||
import { getInputFromForm } from "../common/utils";
|
||||
|
||||
defineOptions({
|
||||
name: "DeviceIdGetter",
|
||||
@@ -34,7 +35,7 @@ const getPluginType: any = inject("get:plugin:type", () => {
|
||||
async function loginWithOTPCode(otpCode: string) {
|
||||
const { form } = getScope();
|
||||
const pluginType = getPluginType();
|
||||
|
||||
const { input, record } = getInputFromForm(form, pluginType);
|
||||
return await doRequest({
|
||||
type: pluginType,
|
||||
typeName: form.type,
|
||||
@@ -42,7 +43,8 @@ async function loginWithOTPCode(otpCode: string) {
|
||||
data: {
|
||||
otpCode,
|
||||
},
|
||||
input: form,
|
||||
input: input,
|
||||
record,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -3,39 +3,63 @@
|
||||
<template #overlay>
|
||||
<a-menu @click="handleMenuClick">
|
||||
<a-menu-item v-for="item in projectStore.myProjects" :key="item.id">
|
||||
{{ item.name }}
|
||||
<div class="flex items-center justify-between w-full">
|
||||
<span class="mr-1">{{ item.name }}</span>
|
||||
<fs-values-format :model-value="item.permission" :dict="projectPermissionDict"></fs-values-format>
|
||||
</div>
|
||||
</a-menu-item>
|
||||
<a-menu-item key="join">
|
||||
<div class="flex items-center w-full">
|
||||
<fs-icon icon="ion:add" class="mr-1"></fs-icon>
|
||||
<span>加入其他项目</span>
|
||||
</div>
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
</template>
|
||||
<div class="rounded pl-3 pr-3 px-2 py-1 flex-center flex pointer items-center bg-accent h-10 button-text" title="当前项目">
|
||||
<fs-icon icon="ion:apps" class="mr-1"></fs-icon>
|
||||
当前项目:{{ projectStore.currentProject?.name || "..." }}
|
||||
<fs-icon icon="ion:chevron-down-outline" class="ml-1"></fs-icon>
|
||||
<!-- <fs-icon icon="ion:apps" class="mr-1"></fs-icon> -->
|
||||
<span class="hidden md:flex"> 当前项目:</span>
|
||||
<span class="text-ellipsis">{{ projectStore.currentProject?.name || "..." }}</span>
|
||||
<fs-icon :icon="currentIcon" class="ml-5"></fs-icon>
|
||||
</div>
|
||||
</a-dropdown>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted } from "vue";
|
||||
import { computed, onMounted } from "vue";
|
||||
import { useProjectStore } from "/@/store/project";
|
||||
import { useDicts } from "/@/views/certd/dicts";
|
||||
import { useRouter } from "vue-router";
|
||||
defineOptions({
|
||||
name: "ProjectSelector",
|
||||
});
|
||||
|
||||
const projectStore = useProjectStore();
|
||||
onMounted(async () => {
|
||||
await projectStore.reload();
|
||||
await projectStore.init();
|
||||
console.log(projectStore.myProjects);
|
||||
});
|
||||
|
||||
const router = useRouter();
|
||||
function handleMenuClick({ key }: any) {
|
||||
if (key === "join") {
|
||||
router.push("/certd/project/join");
|
||||
return;
|
||||
}
|
||||
|
||||
projectStore.changeCurrentProject(key);
|
||||
window.location.reload();
|
||||
}
|
||||
const { projectPermissionDict } = useDicts();
|
||||
|
||||
const currentIcon = computed(() => {
|
||||
return projectPermissionDict.dataMap[projectStore.currentProject?.permission || ""]?.icon || "";
|
||||
});
|
||||
</script>
|
||||
<style lang="less">
|
||||
.project-selector {
|
||||
&.button-text {
|
||||
min-width: 150px;
|
||||
min-width: 100px;
|
||||
max-width: 250px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<template>
|
||||
<a-tag color="green" class="flex-center flex pointer items-center button-text" title="当前项目">
|
||||
<!-- <fs-icon icon="ion:apps" class="mr-1"></fs-icon> -->
|
||||
当前项目:{{ projectStore.currentProject?.name || "..." }}
|
||||
<fs-icon :icon="currentIcon" class="ml-5"></fs-icon>
|
||||
</a-tag>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, onMounted } from "vue";
|
||||
import { useProjectStore } from "/@/store/project";
|
||||
import { useDicts } from "/@/views/certd/dicts";
|
||||
defineOptions({
|
||||
name: "ProjectCurrent",
|
||||
});
|
||||
|
||||
const projectStore = useProjectStore();
|
||||
// onMounted(async () => {
|
||||
// await projectStore.reload();
|
||||
// });
|
||||
|
||||
const { projectPermissionDict } = useDicts();
|
||||
|
||||
const currentIcon = computed(() => {
|
||||
return projectPermissionDict.dataMap[projectStore.currentProject?.permission || ""]?.icon || "";
|
||||
});
|
||||
</script>
|
||||
<style lang="less"></style>
|
||||
@@ -90,7 +90,7 @@
|
||||
<div class="mt-10">
|
||||
<div class="w-100 flex-col md:flex-row">
|
||||
<span>{{ t("vip.site_id") }}:</span>
|
||||
<fs-copyable v-model="computedSiteId" class="mr-2"></fs-copyable>
|
||||
<fs-copyable v-model="computedSiteId" class="mr-2 inline-flex"></fs-copyable>
|
||||
<a @click="goBindAccount">{{ t("vip.not_effective") }}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<a-dropdown>
|
||||
<div class="fs-user-info">{{ t("user.greeting") }},{{ userStore.getUserInfo?.nickName || userStore.getUserInfo?.username }}</div>
|
||||
<div class="fs-user-info" @click="goUserProfile">{{ t("user.greeting") }},{{ userStore.getUserInfo?.nickName || userStore.getUserInfo?.username }}</div>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item>
|
||||
|
||||
@@ -48,6 +48,9 @@ const avatar = computed(() => {
|
||||
async function handleLogout() {
|
||||
await userStore.logout(true);
|
||||
}
|
||||
function goUserProfile() {
|
||||
router.push("/certd/mine/user-profile");
|
||||
}
|
||||
|
||||
const settingStore = useSettingStore();
|
||||
|
||||
@@ -84,17 +87,18 @@ const projectStore = useProjectStore();
|
||||
|
||||
<template>
|
||||
<BasicLayout @clear-preferences-and-logout="handleLogout">
|
||||
<template #header-left-0> </template>
|
||||
<template #header-left-0>
|
||||
<div v-if="projectStore.isEnterprise" class="ml-1 mr-2">
|
||||
<project-selector class="flex-center header-btn" />
|
||||
</div>
|
||||
</template>
|
||||
<template #user-dropdown>
|
||||
<UserDropdown :avatar="avatar" :menus="menus" :text="userStore.userInfo?.nickName || userStore.userInfo?.username" description="" tag-text="" @logout="handleLogout" />
|
||||
<UserDropdown :avatar="avatar" :menus="menus" :text="userStore.userInfo?.nickName || userStore.userInfo?.username" description="" tag-text="" @logout="handleLogout" @user-profile="goUserProfile" />
|
||||
</template>
|
||||
<template #lock-screen>
|
||||
<LockScreen :avatar @to-login="handleLogout" />
|
||||
</template>
|
||||
<template #header-right-0>
|
||||
<div v-if="projectStore.isEnterprise" class="ml-1 mr-2">
|
||||
<project-selector class="flex-center header-btn" />
|
||||
</div>
|
||||
<div class="hover:bg-accent ml-1 mr-2 cursor-pointer rounded-full hidden md:block">
|
||||
<tutorial-button class="flex-center header-btn" mode="nav" />
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div id="userLayout" :class="['user-layout-wrapper']">
|
||||
<div class="login-container flex justify-start">
|
||||
<div class="login-container flex justify-start dark:background-[#141414]">
|
||||
<div class="user-layout-content flex-col justify-start">
|
||||
<div class="top flex flex-col items-center justify-start">
|
||||
<div class="header flex flex-row items-center">
|
||||
@@ -59,6 +59,14 @@ const sysPublic: Ref<SysPublicSetting> = computed(() => {
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.dark {
|
||||
.login-container {
|
||||
background: #141414 !important;
|
||||
.desc {
|
||||
color: rgba(227, 227, 227, 0.45) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
#userLayout.user-layout-wrapper {
|
||||
height: 100%;
|
||||
|
||||
|
||||
@@ -68,6 +68,14 @@ export default {
|
||||
|
||||
smsTab: "Login via SMS code",
|
||||
passwordTab: "Password login",
|
||||
passkeyTab: "Passkey Login",
|
||||
passkeyLogin: "Passkey Login",
|
||||
passkeyHelper: "Login with your biometric or security key",
|
||||
passkeyNotSupported: "Your browser does not support Passkey",
|
||||
passkeyRegister: "Register Passkey",
|
||||
passkeyRegistered: "Passkey Registered",
|
||||
passkeyRegisterSuccess: "Passkey registered successfully",
|
||||
passkeyRegisterFailed: "Passkey registration failed",
|
||||
title: "Change Password",
|
||||
weakPasswordWarning: "For your account security, please change your password immediately",
|
||||
changeNow: "Change Now",
|
||||
@@ -90,4 +98,11 @@ export default {
|
||||
updateProfile: "Update Profile",
|
||||
oauthLoginTitle: "Other ways of login",
|
||||
oauthOnlyLoginTitle: "Login",
|
||||
registerPasskey: "Register Passkey",
|
||||
deviceName: "Device Name",
|
||||
deviceNameHelper: "Please enter the device name, used to identify the device",
|
||||
passkeyRegisterHelper: "Site domain change will invalidate passkey",
|
||||
userInfo: "User Info",
|
||||
securitySettingTip: "2FA Setting",
|
||||
securitySetting: "2FA Setting",
|
||||
};
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
//注意: @符号是保留字符,需要用{'@'}替换, AI请务必提醒我修改
|
||||
export default {
|
||||
app: {
|
||||
crud: {
|
||||
@@ -160,6 +161,7 @@ export default {
|
||||
updateTime: "Update Time",
|
||||
triggerType: "Trigger Type",
|
||||
pipelineId: "Pipeline Id",
|
||||
nextRunTime: "Next Run Time",
|
||||
projectName: "Project",
|
||||
adminId: "Admin",
|
||||
},
|
||||
@@ -216,6 +218,9 @@ export default {
|
||||
projectUserManager: "Project User Management",
|
||||
myProjectManager: "My Projects",
|
||||
myProjectDetail: "Project Detail",
|
||||
projectJoin: "Join Project",
|
||||
currentProject: "Current Project",
|
||||
projectMemberManager: "Project Member",
|
||||
},
|
||||
certificateRepo: {
|
||||
title: "Certificate Repository",
|
||||
@@ -273,77 +278,6 @@ export default {
|
||||
webhookEnabledHelper: "Support webhook trigger pipeline, please check webhook address in trigger source",
|
||||
},
|
||||
notificationDefault: "Use Default Notification",
|
||||
monitor: {
|
||||
remark: "Remark",
|
||||
title: "Site Certificate Monitoring",
|
||||
description: "Check website certificates' expiration at 0:00 daily; reminders sent 10 days before expiration (using default notification channel);",
|
||||
settingLink: "Site Monitoring Settings",
|
||||
limitInfo: "Basic edition limited to 1, professional and above unlimited, current",
|
||||
checkAll: "Check All",
|
||||
confirmTitle: "Confirm",
|
||||
confirmContent: "Confirm to trigger check for all site certificates?",
|
||||
checkSubmitted: "Check task submitted",
|
||||
pleaseRefresh: "Please refresh the page later to see the results",
|
||||
siteName: "Site Name",
|
||||
enterSiteName: "Please enter the site name",
|
||||
domain: "Domain",
|
||||
enterDomain: "Please enter the domain",
|
||||
enterValidDomain: "Please enter a valid domain",
|
||||
httpsPort: "HTTPS Port",
|
||||
enterPort: "Please enter the port",
|
||||
certInfo: "Certificate Info",
|
||||
issuer: "Issuer",
|
||||
certDomains: "Certificate Domains",
|
||||
certProvider: "Issuer",
|
||||
certStatus: "Certificate Status",
|
||||
error: "Error",
|
||||
status: {
|
||||
ok: "Valid",
|
||||
expired: "Expired",
|
||||
},
|
||||
certEffectiveTime: "Certificate Effective",
|
||||
certExpiresTime: "Certificate Expiration",
|
||||
remainingValidity: "Remaining Validity",
|
||||
expired: "expired",
|
||||
days: "days",
|
||||
lastCheckTime: "Last Check Time",
|
||||
disabled: "Enable/Disable",
|
||||
ipCheck: "Enable IP Check",
|
||||
ipCheckHelper: "Enable to check certificate expiration time on each IP (or source site domain) ",
|
||||
ipSyncAuto: "Enable IP Sync Auto",
|
||||
ipSyncMode: "IP Sync Mode",
|
||||
ipIgnoreCoherence: "Ignore Certificate Coherence",
|
||||
ipIgnoreCoherenceHelper: "Enable to ignore certificate coherence check, only check certificate expiration time",
|
||||
selectRequired: "Please select",
|
||||
ipCheckConfirm: "Are you sure to {status} IP check?",
|
||||
ipCount: "IP Count",
|
||||
checkStatus: "Check Status",
|
||||
pipelineId: "Linked Pipeline ID",
|
||||
certInfoId: "Certificate ID",
|
||||
checkSubmittedRefresh: "Check task submitted. Please refresh later to view the result.",
|
||||
ipManagement: "IP Management",
|
||||
bulkImport: "Bulk Import",
|
||||
basicLimitError: "Basic version allows only one monitoring site. Please upgrade to the Pro version.",
|
||||
limitExceeded: "Sorry, you can only create up to {max} monitoring records. Please purchase or upgrade your plan.",
|
||||
setting: {
|
||||
siteMonitorSettings: "Site Monitor Settings",
|
||||
notificationChannel: "Notification Channel",
|
||||
setNotificationChannel: "Set the notification channel",
|
||||
retryTimes: "Retry Times",
|
||||
monitorRetryTimes: "Number of retry attempts for monitoring requests",
|
||||
monitorCronSetting: "Monitoring Schedule",
|
||||
cronTrigger: "Scheduled trigger for monitoring",
|
||||
dnsServer: "DNS Server",
|
||||
dnsServerHelper: "Use a custom domain name resolution server, such as: 1.1.1.1 , support multiple",
|
||||
certValidDays: "Certificate Valid Days",
|
||||
certValidDaysHelper: "Number of days before expiration to send a notification",
|
||||
},
|
||||
cert: {
|
||||
expired: "Expired",
|
||||
expiring: "Expiring",
|
||||
noExpired: "Not Expired",
|
||||
},
|
||||
},
|
||||
checkStatus: {
|
||||
success: "Success",
|
||||
checking: "Checking",
|
||||
@@ -697,6 +631,7 @@ export default {
|
||||
password: "Password",
|
||||
pleaseEnterPassword: "Please enter password",
|
||||
qqEmailAuthCodeHelper: "If using QQ email, get an authorization code in QQ email settings as the password",
|
||||
senderEmailHelper: "You can use the format: Name<Email> to set the sender name, e.g.: autossl<certd{'@'}example.com>",
|
||||
senderEmail: "Sender Email",
|
||||
pleaseEnterSenderEmail: "Please enter sender email",
|
||||
useSsl: "Use SSL",
|
||||
@@ -792,7 +727,7 @@ export default {
|
||||
paymentSetting: "Payment Settings",
|
||||
captchaSetting: "Captcha Setting",
|
||||
pipelineSetting: "Pipeline Settings",
|
||||
oauthSetting: "OAuth2 Settings",
|
||||
oauthSetting: "Login Settings",
|
||||
networkSetting: "Network Settings",
|
||||
adminModeSetting: "Admin Mode Settings",
|
||||
adminModeHelper: "enterprise mode : allow to create and manage pipelines, roles, users, etc.\n saas mode : only allow to create and manage pipelines",
|
||||
@@ -834,6 +769,10 @@ export default {
|
||||
oauthAutoRedirectHelper: "Whether to auto redirect to OAuth2 login when login (using the first enabled OAuth2 login type)",
|
||||
oauthOnly: "OAuth2 Login Only",
|
||||
oauthOnlyHelper: "Whether to only allow OAuth2 login, disable password login",
|
||||
enablePasskey: "Enable Passkey Login",
|
||||
passkeyHostnameNotSame: "Passkey hostname must be the same as the main domain",
|
||||
passkeyEnabledHelper:
|
||||
"1、Site must enable https \n2、Domain name must not change, otherwise the registered passkey will be invalid \n3、Domain name must be the same as the main domain, otherwise the registered passkey will be invalid",
|
||||
|
||||
email: {
|
||||
templates: "Email Templates",
|
||||
@@ -854,6 +793,10 @@ export default {
|
||||
reverseProxyHelper: "Reverse proxy for ACME address, used when applying for certificate",
|
||||
reverseProxyPlaceholder: "http://le.px.handfree.work",
|
||||
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: {
|
||||
@@ -887,6 +830,28 @@ export default {
|
||||
write: "Write",
|
||||
admin: "Admin",
|
||||
},
|
||||
projectMemberStatus: "Member Status",
|
||||
|
||||
isSystem: "Is System Project",
|
||||
isSystemHelper: "System-level projects allow running admin plugins",
|
||||
},
|
||||
project: {
|
||||
noProjectJoined: "You haven't joined any projects yet",
|
||||
applyToJoin: "Please apply to join a project to start using",
|
||||
systemProjects: "System Project List",
|
||||
createdAt: "Created At",
|
||||
applyJoin: "Apply to Join",
|
||||
noSystemProjects: "No system projects available",
|
||||
fetchFailed: "Failed to fetch project list",
|
||||
applySuccess: "Application successful, waiting for admin approval",
|
||||
applyFailed: "Application failed, please try again later",
|
||||
leave: "Leave Project",
|
||||
leaveSuccess: "Leave project successful",
|
||||
leaveFailed: "Leave project failed, please try again later",
|
||||
applyJoinConfirm: "Are you sure you want to apply to join this project?",
|
||||
leaveConfirm: "Are you sure you want to leave this project?",
|
||||
viewDetail: "View Detail",
|
||||
projectManage: "Project Manage",
|
||||
},
|
||||
addonSelector: {
|
||||
select: "Select",
|
||||
|
||||