Compare commits

..

16 Commits

Author SHA1 Message Date
xiaojunnuo
aacee4a94c v1.39.4 2026-03-18 01:12:39 +08:00
xiaojunnuo
3ab37d5c5d build: prepare to build 2026-03-18 01:09:27 +08:00
xiaojunnuo
3dd3ecf8f1 build: prepare to build 2026-03-18 01:05:23 +08:00
xiaojunnuo
a3831827d0 chore: 1 2026-03-18 01:04:43 +08:00
xiaojunnuo
6aa6c957ee build: prepare to build 2026-03-18 00:43:45 +08:00
xiaojunnuo
9e12412f5f perf: 优化passkey 2026-03-18 00:43:01 +08:00
xiaojunnuo
0f9eb31740 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2026-03-17 23:33:18 +08:00
xiaojunnuo
6be8ab581d chore: 1 2026-03-17 23:33:13 +08:00
xiaojunnuo
d8425bc9c5 fix: 修复选择插件页面无法滚动的bug 2026-03-17 23:25:45 +08:00
xiaojunnuo
0ddcb9c00a chore: passkey perf 2026-03-17 19:16:11 +08:00
xiaojunnuo
6d43623f45 fix: 修复阿里云证书订单翻页问题 2026-03-17 18:56:52 +08:00
xiaojunnuo
196cd88010 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2026-03-17 14:53:51 +08:00
xiaojunnuo
7f37df4227 fix: 修复查看证书详情页面错位的bug 2026-03-17 14:53:46 +08:00
xiaojunnuo
985a12a63b build: release 2026-03-17 14:19:59 +08:00
xiaojunnuo
9058c0e9fc build: publish 2026-03-17 14:02:46 +08:00
xiaojunnuo
4b0cd32d12 build: trigger build image 2026-03-17 14:02:34 +08:00
51 changed files with 289 additions and 115 deletions

View File

@@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.39.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

View File

@@ -3,6 +3,13 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [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

View File

@@ -9,5 +9,5 @@
}
},
"npmClient": "pnpm",
"version": "1.39.3"
"version": "1.39.4"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.39.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

View File

@@ -3,7 +3,7 @@
"description": "Simple and unopinionated ACME client",
"private": false,
"author": "nmorsman",
"version": "1.39.3",
"version": "1.39.4",
"type": "module",
"module": "scr/index.js",
"main": "src/index.js",
@@ -18,7 +18,7 @@
"types"
],
"dependencies": {
"@certd/basic": "^1.39.3",
"@certd/basic": "^1.39.4",
"@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": "f47773348312d5480b248c02beed9e162f59e3c7"
"gitHead": "6cb51bc55d8a649797b0b3bdbc6982451b5bfd5e"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.39.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

View File

@@ -1 +1 @@
13:58
01:09

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/basic",
"private": false,
"version": "1.39.3",
"version": "1.39.4",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
@@ -47,5 +47,5 @@
"tslib": "^2.8.1",
"typescript": "^5.4.2"
},
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
"gitHead": "6cb51bc55d8a649797b0b3bdbc6982451b5bfd5e"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.39.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

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/pipeline",
"private": false,
"version": "1.39.3",
"version": "1.39.4",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
@@ -18,8 +18,8 @@
"compile": "tsc --skipLibCheck --watch"
},
"dependencies": {
"@certd/basic": "^1.39.3",
"@certd/plus-core": "^1.39.3",
"@certd/basic": "^1.39.4",
"@certd/plus-core": "^1.39.4",
"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": "f47773348312d5480b248c02beed9e162f59e3c7"
"gitHead": "6cb51bc55d8a649797b0b3bdbc6982451b5bfd5e"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.39.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

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/lib-huawei",
"private": false,
"version": "1.39.3",
"version": "1.39.4",
"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": "f47773348312d5480b248c02beed9e162f59e3c7"
"gitHead": "6cb51bc55d8a649797b0b3bdbc6982451b5bfd5e"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.39.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

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/lib-iframe",
"private": false,
"version": "1.39.3",
"version": "1.39.4",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
@@ -31,5 +31,5 @@
"tslib": "^2.8.1",
"typescript": "^5.4.2"
},
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
"gitHead": "6cb51bc55d8a649797b0b3bdbc6982451b5bfd5e"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.39.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

View File

@@ -1,6 +1,6 @@
{
"name": "@certd/jdcloud",
"version": "1.39.3",
"version": "1.39.4",
"description": "jdcloud openApi sdk",
"main": "./dist/bundle.js",
"module": "./dist/bundle.js",
@@ -56,5 +56,5 @@
"fetch"
]
},
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
"gitHead": "6cb51bc55d8a649797b0b3bdbc6982451b5bfd5e"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.39.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

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/lib-k8s",
"private": false,
"version": "1.39.3",
"version": "1.39.4",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
@@ -17,7 +17,7 @@
"pub": "npm publish"
},
"dependencies": {
"@certd/basic": "^1.39.3",
"@certd/basic": "^1.39.4",
"@kubernetes/client-node": "0.21.0"
},
"devDependencies": {
@@ -32,5 +32,5 @@
"tslib": "^2.8.1",
"typescript": "^5.4.2"
},
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
"gitHead": "6cb51bc55d8a649797b0b3bdbc6982451b5bfd5e"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.39.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

View File

@@ -1,6 +1,6 @@
{
"name": "@certd/lib-server",
"version": "1.39.3",
"version": "1.39.4",
"description": "midway with flyway, sql upgrade way ",
"private": false,
"type": "module",
@@ -28,11 +28,11 @@
],
"license": "AGPL",
"dependencies": {
"@certd/acme-client": "^1.39.3",
"@certd/basic": "^1.39.3",
"@certd/pipeline": "^1.39.3",
"@certd/plugin-lib": "^1.39.3",
"@certd/plus-core": "^1.39.3",
"@certd/acme-client": "^1.39.4",
"@certd/basic": "^1.39.4",
"@certd/pipeline": "^1.39.4",
"@certd/plugin-lib": "^1.39.4",
"@certd/plus-core": "^1.39.4",
"@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": "f47773348312d5480b248c02beed9e162f59e3c7"
"gitHead": "6cb51bc55d8a649797b0b3bdbc6982451b5bfd5e"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.39.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

View File

@@ -1,6 +1,6 @@
{
"name": "@certd/midway-flyway-js",
"version": "1.39.3",
"version": "1.39.4",
"description": "midway with flyway, sql upgrade way ",
"private": false,
"type": "module",
@@ -46,5 +46,5 @@
"typeorm": "^0.3.11",
"typescript": "^5.4.2"
},
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
"gitHead": "6cb51bc55d8a649797b0b3bdbc6982451b5bfd5e"
}

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.39.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

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/plugin-cert",
"private": false,
"version": "1.39.3",
"version": "1.39.4",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -17,10 +17,10 @@
"compile": "tsc --skipLibCheck --watch"
},
"dependencies": {
"@certd/acme-client": "^1.39.3",
"@certd/basic": "^1.39.3",
"@certd/pipeline": "^1.39.3",
"@certd/plugin-lib": "^1.39.3",
"@certd/acme-client": "^1.39.4",
"@certd/basic": "^1.39.4",
"@certd/pipeline": "^1.39.4",
"@certd/plugin-lib": "^1.39.4",
"psl": "^1.9.0",
"punycode.js": "^2.3.1"
},
@@ -38,5 +38,5 @@
"tslib": "^2.8.1",
"typescript": "^5.4.2"
},
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
"gitHead": "6cb51bc55d8a649797b0b3bdbc6982451b5bfd5e"
}

View File

@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [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

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/plugin-lib",
"private": false,
"version": "1.39.3",
"version": "1.39.4",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -22,10 +22,10 @@
"@alicloud/pop-core": "^1.7.10",
"@alicloud/tea-util": "^1.4.11",
"@aws-sdk/client-s3": "^3.964.0",
"@certd/acme-client": "^1.39.3",
"@certd/basic": "^1.39.3",
"@certd/pipeline": "^1.39.3",
"@certd/plus-core": "^1.39.3",
"@certd/acme-client": "^1.39.4",
"@certd/basic": "^1.39.4",
"@certd/pipeline": "^1.39.4",
"@certd/plus-core": "^1.39.4",
"@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": "f47773348312d5480b248c02beed9e162f59e3c7"
"gitHead": "6cb51bc55d8a649797b0b3bdbc6982451b5bfd5e"
}

View File

@@ -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";
@@ -71,6 +72,7 @@ export function createRemoteSelectInputDefine(opts?: {
search,
pager,
multi,
pageSize: opts?.pageSize,
watches: [certDomainsInputKey, accessIdInputKey, ...watches],
...opts.component,
},

View File

@@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.39.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

View File

@@ -1,6 +1,6 @@
{
"name": "@certd/ui-client",
"version": "1.39.3",
"version": "1.39.4",
"private": true,
"scripts": {
"dev": "vite --open",
@@ -106,8 +106,8 @@
"zod-defaults": "^0.1.3"
},
"devDependencies": {
"@certd/lib-iframe": "^1.39.3",
"@certd/pipeline": "^1.39.3",
"@certd/lib-iframe": "^1.39.4",
"@certd/pipeline": "^1.39.4",
"@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-node-resolve": "^15.2.3",
"@types/chai": "^4.3.12",

View File

@@ -64,6 +64,7 @@ const props = defineProps<
search?: boolean;
pager?: boolean;
multi?: boolean;
pageSize?: number;
} & ComponentPropsType
>();
@@ -103,7 +104,7 @@ const loading = ref(false);
const pagerRef: Ref = ref({
pageNo: 1,
total: 0,
pageSize: 100,
pageSize: props.pageSize || 100,
});
const getOptions = async () => {
if (loading.value) {

View File

@@ -18,7 +18,8 @@
</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 || "..." }}
<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>
@@ -58,7 +59,7 @@ const currentIcon = computed(() => {
<style lang="less">
.project-selector {
&.button-text {
min-width: 150px;
min-width: 100px;
max-width: 250px;
overflow: hidden;
text-overflow: ellipsis;

View File

@@ -88,7 +88,7 @@
</div>
<div class="passkey-list">
<div v-for="passkey in passkeys" :key="passkey.id" class="passkey-item">
<div class="passkey-icon">
<div class="passkey-icon hidden md:flex">
<fs-icon icon="ion:finger-print" class="icon" />
</div>
<div class="passkey-info">
@@ -278,20 +278,26 @@ async function doRegisterPasskey(deviceName: string) {
// type: "public-key",
// }));
const credential = await (navigator.credentials as any).create({
publicKey: {
challenge: Uint8Array.from(atob(options.challenge.replace(/-/g, "+").replace(/_/g, "/")), c => c.charCodeAt(0)),
rp: options.rp,
pubKeyCredParams: options.pubKeyCredParams,
timeout: options.timeout || 60000,
attestation: options.attestation,
// excludeCredentials: excludeCredentials,
user: {
id: new TextEncoder().encode(options.userId + ""),
name: userInfo.value.username,
displayName: deviceName,
},
console.log("passkey register options:", options, JSON.stringify(options));
const publicKey = {
challenge: Uint8Array.from(atob(options.challenge.replace(/-/g, "+").replace(/_/g, "/")), c => c.charCodeAt(0)),
rp: options.rp,
pubKeyCredParams: options.pubKeyCredParams,
timeout: options.timeout || 60000,
// attestation: options.attestation,
// excludeCredentials: excludeCredentials,
// extensions: options.extensions,
// authenticatorSelection: options.authenticatorSelection,
// hints: options.hints,
user: {
id: new TextEncoder().encode(options.userId + ""),
name: userInfo.value.username + "@" + deviceName,
displayName: deviceName,
},
};
console.log("passkey register publicKey:", publicKey, JSON.stringify(publicKey));
const credential = await (navigator.credentials as any).create({
publicKey,
});
if (!credential) {
@@ -310,6 +316,7 @@ async function doRegisterPasskey(deviceName: string) {
console.log("credential", credential, response);
const verifyRes: any = await api.verifyPasskeyRegistration(response, options.challenge, deviceName);
console.log("verifyRes:", verifyRes, JSON.stringify(verifyRes));
await loadPasskeys();
} catch (e: any) {
console.error("Passkey注册失败:", e);
@@ -721,7 +728,6 @@ onMounted(async () => {
.passkey-icon {
width: 48px;
height: 48px;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, #11998e 0%, #38ef7d 100%);
@@ -749,8 +755,8 @@ onMounted(async () => {
.passkey-meta {
display: flex;
flex-wrap: wrap;
gap: 12px;
font-size: 13px;
gap: 4px;
font-size: 12px;
}
.meta-item {

View File

@@ -100,7 +100,10 @@ function formatDate(dateStr: string): string {
.cert-detail {
table {
width: 100%;
table-layout: fixed;
table-layout: fixed !important;
}
.ant-descriptions-item-label {
width: 90px;
}
.fingerprint {
.label {

View File

@@ -25,7 +25,7 @@
</a-row>
</template>
<div class="flex-col h-100 overflow-hidden md:ml-5 md:mr-5 step-form-body">
<a-tabs v-model:active-key="pluginGroupActive" tab-position="left" class="flex-1 overflow-hidden">
<a-tabs v-model:active-key="pluginGroupActive" tab-position="left" class="flex-1 overflow-hidden h-full">
<template v-for="group of computedPluginGroups" :key="group.key">
<a-tab-pane v-if="(group.key === 'admin' && userStore.isAdmin) || group.key !== 'admin'" :key="group.key" class="scroll-y">
<template #tab>

View File

@@ -219,15 +219,22 @@ const handlePasskeyLogin = async () => {
});
const options = optionsResponse;
console.log("passkey authentication options:", options, JSON.stringify(options));
const credential = await (navigator.credentials as any).get({
publicKey: {
challenge: Uint8Array.from(atob(options.challenge.replace(/-/g, "+").replace(/_/g, "/")), c => c.charCodeAt(0)),
rpId: options.rpId,
allowCredentials: options.allowCredentials || [],
timeout: options.timeout || 60000,
// attestation: options.attestation,
// excludeCredentials: excludeCredentials,
// extensions: options.extensions,
// authenticatorSelection: options.authenticatorSelection,
// hints: options.hints,
},
});
console.log("passkey authentication credential:", credential, JSON.stringify(credential));
if (!credential) {
throw new Error("Passkey认证失败");
}

View File

@@ -3,7 +3,7 @@
<div class="oauth-title">
<div class="oauth-title-text">{{ computedTitle }}</div>
</div>
<div class="flex justify-center items-center gap-4">
<div class="flex justify-center items-center gap-4 flex-wrap md:flex-nowrap">
<template v-for="item in oauthProviderList" :key="item.type">
<div v-if="item.addonId" class="oauth-icon-button pointer" @click="goOauthLogin(item.name)">
<div><fs-icon :icon="item.icon" class="text-blue-600 text-40" /></div>

View File

@@ -88,7 +88,7 @@ export default (req: any) => {
host: "0.0.0.0",
port: 3008,
fs: devServerFs,
allowedHosts: ["localhost", "127.0.0.1", "yfy.docmirror.cn", "docmirror.top", "*"],
allowedHosts: ["localhost", "127.0.0.1", "yfy.docmirror.cn", "docmirror.top", "*", "local.dev"],
proxy: {
// with options
"/api": {
@@ -100,7 +100,7 @@ export default (req: any) => {
"/certd/api": {
//配套后端 https://github.com/fast-crud/fs-server-js
target: "http://127.0.0.1:7001/api",
rewrite: path => path.replace(/^\/certd\/api/, ""),
rewrite: (path: any) => path.replace(/^\/certd\/api/, ""),
//忽略证书
// agent: new https.Agent({ rejectUnauthorized: false }),
},

View File

@@ -3,6 +3,16 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [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))
### 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

View File

@@ -427,6 +427,7 @@ input:
helper: 兼容Windows Server各个版本
renewDays:
title: 更新天数
value: 20
component:
name: a-input-number
vModel: value

View File

@@ -56,6 +56,18 @@ input:
type: aliyun
required: true
order: 0
orderType:
title: 订单类型
value: CPACK
component:
name: a-select
vModel: value
options:
- label: 资源虚拟订单(一般选这个)
value: CPACK
- label: 售卖订单
value: BUY
order: 0
orderId:
title: 证书订单ID
component:
@@ -68,6 +80,7 @@ input:
search: false
pager: true
multi: true
pageSize: 50
watches:
- certDomains
- accessId
@@ -113,6 +126,7 @@ input:
helper: 兼容Windows Server各个版本
renewDays:
title: 更新天数
value: 20
component:
name: a-input-number
vModel: value

View File

@@ -148,6 +148,7 @@ input:
helper: 兼容Windows Server各个版本
renewDays:
title: 更新天数
value: 20
component:
name: a-input-number
vModel: value

View File

@@ -1,6 +1,6 @@
{
"name": "@certd/ui-server",
"version": "1.39.3",
"version": "1.39.4",
"description": "fast-server base midway",
"private": true,
"type": "module",
@@ -50,20 +50,20 @@
"@aws-sdk/client-route-53": "^3.964.0",
"@aws-sdk/client-s3": "^3.964.0",
"@aws-sdk/client-sts": "^3.990.0",
"@certd/acme-client": "^1.39.3",
"@certd/basic": "^1.39.3",
"@certd/commercial-core": "^1.39.3",
"@certd/acme-client": "^1.39.4",
"@certd/basic": "^1.39.4",
"@certd/commercial-core": "^1.39.4",
"@certd/cv4pve-api-javascript": "^8.4.2",
"@certd/jdcloud": "^1.39.3",
"@certd/lib-huawei": "^1.39.3",
"@certd/lib-k8s": "^1.39.3",
"@certd/lib-server": "^1.39.3",
"@certd/midway-flyway-js": "^1.39.3",
"@certd/pipeline": "^1.39.3",
"@certd/plugin-cert": "^1.39.3",
"@certd/plugin-lib": "^1.39.3",
"@certd/plugin-plus": "^1.39.3",
"@certd/plus-core": "^1.39.3",
"@certd/jdcloud": "^1.39.4",
"@certd/lib-huawei": "^1.39.4",
"@certd/lib-k8s": "^1.39.4",
"@certd/lib-server": "^1.39.4",
"@certd/midway-flyway-js": "^1.39.4",
"@certd/pipeline": "^1.39.4",
"@certd/plugin-cert": "^1.39.4",
"@certd/plugin-lib": "^1.39.4",
"@certd/plugin-plus": "^1.39.4",
"@certd/plus-core": "^1.39.4",
"@google-cloud/publicca": "^1.3.0",
"@huaweicloud/huaweicloud-sdk-cdn": "^3.1.185",
"@huaweicloud/huaweicloud-sdk-core": "^3.1.185",

View File

@@ -95,9 +95,7 @@ export class LoginController extends BaseController {
this.ctx
);
return this.ok({
...options,
});
return this.ok(options);
}
@Post('/loginByPasskey', { description: Constants.per.guest })

View File

@@ -37,7 +37,6 @@ export class MinePasskeyController extends BaseController {
return this.ok({
...options,
userId
});
}

View File

@@ -6,6 +6,7 @@ import { SiteInfoService } from '../../../modules/monitor/index.js';
import { HistoryService } from '../../../modules/pipeline/service/history-service.js';
import { PipelineService } from '../../../modules/pipeline/service/pipeline-service.js';
import { AuthService } from '../../../modules/sys/authority/service/auth-service.js';
import { PipelineEntity } from '../../../modules/pipeline/entity/pipeline.js';
const pipelineExample = `
@@ -183,21 +184,15 @@ export class PipelineController extends CrudController<PipelineService> {
}
// @Post('/add', { description: Constants.per.authOnly })
// async add(@Body(ALL) bean: PipelineEntity) {
// const { projectId, userId } = await this.getProjectUserIdWrite()
// bean.userId = userId
// bean.projectId = projectId
// return super.add(bean);
// }
@Post('/add', { description: Constants.per.authOnly })
async add(@Body(ALL) bean: PipelineEntity) {
return await this.save(bean as any);
}
// @Post('/update', { description: Constants.per.authOnly })
// async update(@Body(ALL) bean) {
// await this.checkOwner(this.getService(), bean.id,"write",true);
// delete bean.userId;
// delete bean.projectId;
// return super.update(bean);
// }
@Post('/update', { description: Constants.per.authOnly })
async update(@Body(ALL) bean) {
return await this.save(bean);
}
@Post('/save', { description: Constants.per.authOnly, summary: '新增/更新流水线' })
async save(@Body() bean: PipelineSaveDTO) {

View File

@@ -51,8 +51,6 @@ export class AutoAInitSite {
//加载一次密钥
await this.sysSettingsService.getSecret();
//加载设置
await this.sysSettingsService.reloadSettings();
// 授权许可
try {
@@ -60,6 +58,9 @@ export class AutoAInitSite {
} catch (e) {
logger.error('授权许可验证失败', e);
}
//加载设置
await this.sysSettingsService.reloadSettings();
//加载站点隐藏配置
await this.safeService.reloadHiddenStatus(true)

View File

@@ -1,4 +1,4 @@
import { cache } from "@certd/basic";
import { cache, logger } from "@certd/basic";
import { AuthException, BaseService, SysInstallInfo, SysSettingsService, SysSiteInfo } from "@certd/lib-server";
import { isComm } from "@certd/plus-core";
import { Inject, Provide, Scope, ScopeEnum } from "@midwayjs/core";
@@ -54,14 +54,21 @@ export class PasskeyService extends BaseService<PasskeyEntity> {
const options = await generateRegistrationOptions({
rpName: rpName,
rpID: rpId,
userID: new Uint8Array([userId]),
userID: new TextEncoder().encode(userId + ""),
userName: username,
userDisplayName: user.nickName || username,
timeout: 60000,
attestationType: "none",
excludeCredentials: [],
preferredAuthenticatorType: 'localDevice',
authenticatorSelection: {
authenticatorAttachment: "cross-platform",
userVerification: "preferred",
residentKey: "preferred",
requireResidentKey: false
},
});
logger.info('[passkey] 注册选项:', JSON.stringify(options));
cache.set(`passkey:registration:${options.challenge}`, userId, {
ttl: 5 * 60 * 1000,
});
@@ -86,16 +93,25 @@ export class PasskeyService extends BaseService<PasskeyEntity> {
const { rpId, origin } = await this.getRpInfo();
const verification = await verifyRegistrationResponse({
let verification: any = null;
const verifyReq = {
response,
expectedChallenge: challenge,
expectedOrigin: origin,
expectedRPID: rpId,
});
requireUserVerification: false,
};
try {
verification = await verifyRegistrationResponse(verifyReq);
} catch (error) {
// 后端验证时
logger.error('[passkey] 注册验证失败:', JSON.stringify(verifyReq));
throw new AuthException(`注册验证失败:${error.message || error}`);
}
if (!verification.verified) {
throw new AuthException("注册验证失败");
}
cache.delete(`passkey:registration:${challenge}`);
@@ -113,6 +129,7 @@ export class PasskeyService extends BaseService<PasskeyEntity> {
rpID: rpId,
timeout: 60000,
allowCredentials: [],
userVerification: 'preferred' //'required' | 'preferred' | 'discouraged';
});
// cache.set(`passkey:authentication:${options.challenge}`, userId, {
@@ -148,6 +165,7 @@ export class PasskeyService extends BaseService<PasskeyEntity> {
expectedChallenge: challenge,
expectedOrigin: origin,
expectedRPID: rpId,
requireUserVerification: false,
credential: {
id: passkey.passkeyId,
publicKey: new Uint8Array(Buffer.from(passkey.publicKey, 'base64')),

View File

@@ -20,6 +20,7 @@ export abstract class CertApplyBasePlugin extends CertApplyBaseConvertPlugin {
@TaskInput({
title: "更新天数",
value:20,
component: {
name: "a-input-number",
vModel: "value",

View File

@@ -28,11 +28,36 @@ export class CertApplyGetFormAliyunPlugin extends CertApplyBasePlugin {
})
accessId!: string;
@TaskInput(
{
title:"订单类型",
value:"CPACK",
component:{
name:"a-select",
vModel:"value",
options:[
{
label:"资源虚拟订单(一般选这个)",
value:"CPACK",
},
{
label:"售卖订单",
value:"BUY",
}
]
}
}
)
orderType!: string;
@TaskInput(
createRemoteSelectInputDefine({
title: "证书订单ID",
helper: "订阅模式的证书订单Id",
typeName: "CertApplyGetFormAliyun",
pageSize: 50,
component: {
name: "RemoteSelect",
vModel: "value",
@@ -140,6 +165,7 @@ export class CertApplyGetFormAliyunPlugin extends CertApplyBasePlugin {
pathname: `/`,
data: {
query: {
OrderType: this.orderType,
Status: "ISSUED",
CurrentPage: pager.pageNo,
ShowSize : pager.pageSize,
@@ -151,14 +177,27 @@ export class CertApplyGetFormAliyunPlugin extends CertApplyBasePlugin {
return []
}
return list.map((item: any) => {
const label = `${item.Domain}<${item.OrderId}>`;
const total = res.TotalCount || 0;
const records = list.map((item: any) => {
let value = item.OrderId;
let domain = item.Domain;
let label = `${item.Domain}<${item.OrderId}>`;
if (!item.OrderId) {
label = `${item.CommonName}<${item.Name}>`;
value = item.Name;
domain = item.CommonName;
}
return {
label: label,
value: item.OrderId,
Domain: item.Domain,
value: value,
Domain: domain,
};
});
return {
list:records,
total,
}
}
}

View File

@@ -1 +1 @@
00:57
14:02

View File

@@ -1 +1 @@
01:15
14:19