mirror of
https://github.com/certd/certd.git
synced 2026-04-24 12:27:25 +08:00
Merge branch 'v2' of https://github.com/certd/certd into v2
This commit is contained in:
@@ -3,6 +3,18 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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)
|
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|||||||
@@ -3,6 +3,18 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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)
|
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|||||||
+1
-1
@@ -9,5 +9,5 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"npmClient": "pnpm",
|
"npmClient": "pnpm",
|
||||||
"version": "1.39.4"
|
"version": "1.39.5"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [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)
|
## [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
|
**Note:** Version bump only for package @certd/acme-client
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"description": "Simple and unopinionated ACME client",
|
"description": "Simple and unopinionated ACME client",
|
||||||
"private": false,
|
"private": false,
|
||||||
"author": "nmorsman",
|
"author": "nmorsman",
|
||||||
"version": "1.39.4",
|
"version": "1.39.5",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"module": "scr/index.js",
|
"module": "scr/index.js",
|
||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
"types"
|
"types"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@certd/basic": "^1.39.4",
|
"@certd/basic": "^1.39.5",
|
||||||
"@peculiar/x509": "^1.11.0",
|
"@peculiar/x509": "^1.11.0",
|
||||||
"asn1js": "^3.0.5",
|
"asn1js": "^3.0.5",
|
||||||
"axios": "^1.9.0",
|
"axios": "^1.9.0",
|
||||||
@@ -70,5 +70,5 @@
|
|||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/publishlab/node-acme-client/issues"
|
"url": "https://github.com/publishlab/node-acme-client/issues"
|
||||||
},
|
},
|
||||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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)
|
||||||
|
|
||||||
|
**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)
|
## [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
|
**Note:** Version bump only for package @certd/basic
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@certd/basic",
|
"name": "@certd/basic",
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "1.39.4",
|
"version": "1.39.5",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
"module": "./dist/index.js",
|
"module": "./dist/index.js",
|
||||||
@@ -47,5 +47,5 @@
|
|||||||
"tslib": "^2.8.1",
|
"tslib": "^2.8.1",
|
||||||
"typescript": "^5.4.2"
|
"typescript": "^5.4.2"
|
||||||
},
|
},
|
||||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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)
|
||||||
|
|
||||||
|
**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)
|
## [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
|
**Note:** Version bump only for package @certd/pipeline
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@certd/pipeline",
|
"name": "@certd/pipeline",
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "1.39.4",
|
"version": "1.39.5",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
"module": "./dist/index.js",
|
"module": "./dist/index.js",
|
||||||
@@ -18,8 +18,8 @@
|
|||||||
"compile": "tsc --skipLibCheck --watch"
|
"compile": "tsc --skipLibCheck --watch"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@certd/basic": "^1.39.4",
|
"@certd/basic": "^1.39.5",
|
||||||
"@certd/plus-core": "^1.39.4",
|
"@certd/plus-core": "^1.39.5",
|
||||||
"dayjs": "^1.11.7",
|
"dayjs": "^1.11.7",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"reflect-metadata": "^0.1.13"
|
"reflect-metadata": "^0.1.13"
|
||||||
@@ -45,5 +45,5 @@
|
|||||||
"tslib": "^2.8.1",
|
"tslib": "^2.8.1",
|
||||||
"typescript": "^5.4.2"
|
"typescript": "^5.4.2"
|
||||||
},
|
},
|
||||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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)
|
||||||
|
|
||||||
|
**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)
|
## [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
|
**Note:** Version bump only for package @certd/lib-huawei
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@certd/lib-huawei",
|
"name": "@certd/lib-huawei",
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "1.39.4",
|
"version": "1.39.5",
|
||||||
"main": "./dist/bundle.js",
|
"main": "./dist/bundle.js",
|
||||||
"module": "./dist/bundle.js",
|
"module": "./dist/bundle.js",
|
||||||
"types": "./dist/d/index.d.ts",
|
"types": "./dist/d/index.d.ts",
|
||||||
@@ -24,5 +24,5 @@
|
|||||||
"prettier": "^2.8.8",
|
"prettier": "^2.8.8",
|
||||||
"tslib": "^2.8.1"
|
"tslib": "^2.8.1"
|
||||||
},
|
},
|
||||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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)
|
||||||
|
|
||||||
|
**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)
|
## [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
|
**Note:** Version bump only for package @certd/lib-iframe
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@certd/lib-iframe",
|
"name": "@certd/lib-iframe",
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "1.39.4",
|
"version": "1.39.5",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
"module": "./dist/index.js",
|
"module": "./dist/index.js",
|
||||||
@@ -31,5 +31,5 @@
|
|||||||
"tslib": "^2.8.1",
|
"tslib": "^2.8.1",
|
||||||
"typescript": "^5.4.2"
|
"typescript": "^5.4.2"
|
||||||
},
|
},
|
||||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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)
|
||||||
|
|
||||||
|
**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)
|
## [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
|
**Note:** Version bump only for package @certd/jdcloud
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@certd/jdcloud",
|
"name": "@certd/jdcloud",
|
||||||
"version": "1.39.4",
|
"version": "1.39.5",
|
||||||
"description": "jdcloud openApi sdk",
|
"description": "jdcloud openApi sdk",
|
||||||
"main": "./dist/bundle.js",
|
"main": "./dist/bundle.js",
|
||||||
"module": "./dist/bundle.js",
|
"module": "./dist/bundle.js",
|
||||||
@@ -56,5 +56,5 @@
|
|||||||
"fetch"
|
"fetch"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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)
|
||||||
|
|
||||||
|
**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)
|
## [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
|
**Note:** Version bump only for package @certd/lib-k8s
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@certd/lib-k8s",
|
"name": "@certd/lib-k8s",
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "1.39.4",
|
"version": "1.39.5",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
"module": "./dist/index.js",
|
"module": "./dist/index.js",
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
"pub": "npm publish"
|
"pub": "npm publish"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@certd/basic": "^1.39.4",
|
"@certd/basic": "^1.39.5",
|
||||||
"@kubernetes/client-node": "0.21.0"
|
"@kubernetes/client-node": "0.21.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -32,5 +32,5 @@
|
|||||||
"tslib": "^2.8.1",
|
"tslib": "^2.8.1",
|
||||||
"typescript": "^5.4.2"
|
"typescript": "^5.4.2"
|
||||||
},
|
},
|
||||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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)
|
||||||
|
|
||||||
|
**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)
|
## [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
|
**Note:** Version bump only for package @certd/lib-server
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@certd/lib-server",
|
"name": "@certd/lib-server",
|
||||||
"version": "1.39.4",
|
"version": "1.39.5",
|
||||||
"description": "midway with flyway, sql upgrade way ",
|
"description": "midway with flyway, sql upgrade way ",
|
||||||
"private": false,
|
"private": false,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@@ -28,11 +28,11 @@
|
|||||||
],
|
],
|
||||||
"license": "AGPL",
|
"license": "AGPL",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@certd/acme-client": "^1.39.4",
|
"@certd/acme-client": "^1.39.5",
|
||||||
"@certd/basic": "^1.39.4",
|
"@certd/basic": "^1.39.5",
|
||||||
"@certd/pipeline": "^1.39.4",
|
"@certd/pipeline": "^1.39.5",
|
||||||
"@certd/plugin-lib": "^1.39.4",
|
"@certd/plugin-lib": "^1.39.5",
|
||||||
"@certd/plus-core": "^1.39.4",
|
"@certd/plus-core": "^1.39.5",
|
||||||
"@midwayjs/cache": "3.14.0",
|
"@midwayjs/cache": "3.14.0",
|
||||||
"@midwayjs/core": "3.20.11",
|
"@midwayjs/core": "3.20.11",
|
||||||
"@midwayjs/i18n": "3.20.13",
|
"@midwayjs/i18n": "3.20.13",
|
||||||
@@ -64,5 +64,5 @@
|
|||||||
"typeorm": "^0.3.11",
|
"typeorm": "^0.3.11",
|
||||||
"typescript": "^5.4.2"
|
"typescript": "^5.4.2"
|
||||||
},
|
},
|
||||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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)
|
||||||
|
|
||||||
|
**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)
|
## [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
|
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@certd/midway-flyway-js",
|
"name": "@certd/midway-flyway-js",
|
||||||
"version": "1.39.4",
|
"version": "1.39.5",
|
||||||
"description": "midway with flyway, sql upgrade way ",
|
"description": "midway with flyway, sql upgrade way ",
|
||||||
"private": false,
|
"private": false,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@@ -46,5 +46,5 @@
|
|||||||
"typeorm": "^0.3.11",
|
"typeorm": "^0.3.11",
|
||||||
"typescript": "^5.4.2"
|
"typescript": "^5.4.2"
|
||||||
},
|
},
|
||||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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)
|
||||||
|
|
||||||
|
**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)
|
## [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
|
**Note:** Version bump only for package @certd/plugin-cert
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@certd/plugin-cert",
|
"name": "@certd/plugin-cert",
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "1.39.4",
|
"version": "1.39.5",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
"types": "./dist/index.d.ts",
|
"types": "./dist/index.d.ts",
|
||||||
@@ -17,10 +17,10 @@
|
|||||||
"compile": "tsc --skipLibCheck --watch"
|
"compile": "tsc --skipLibCheck --watch"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@certd/acme-client": "^1.39.4",
|
"@certd/acme-client": "^1.39.5",
|
||||||
"@certd/basic": "^1.39.4",
|
"@certd/basic": "^1.39.5",
|
||||||
"@certd/pipeline": "^1.39.4",
|
"@certd/pipeline": "^1.39.5",
|
||||||
"@certd/plugin-lib": "^1.39.4",
|
"@certd/plugin-lib": "^1.39.5",
|
||||||
"psl": "^1.9.0",
|
"psl": "^1.9.0",
|
||||||
"punycode.js": "^2.3.1"
|
"punycode.js": "^2.3.1"
|
||||||
},
|
},
|
||||||
@@ -38,5 +38,5 @@
|
|||||||
"tslib": "^2.8.1",
|
"tslib": "^2.8.1",
|
||||||
"typescript": "^5.4.2"
|
"typescript": "^5.4.2"
|
||||||
},
|
},
|
||||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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)
|
||||||
|
|
||||||
|
**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)
|
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@certd/plugin-lib",
|
"name": "@certd/plugin-lib",
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "1.39.4",
|
"version": "1.39.5",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
"types": "./dist/index.d.ts",
|
"types": "./dist/index.d.ts",
|
||||||
@@ -22,10 +22,10 @@
|
|||||||
"@alicloud/pop-core": "^1.7.10",
|
"@alicloud/pop-core": "^1.7.10",
|
||||||
"@alicloud/tea-util": "^1.4.11",
|
"@alicloud/tea-util": "^1.4.11",
|
||||||
"@aws-sdk/client-s3": "^3.964.0",
|
"@aws-sdk/client-s3": "^3.964.0",
|
||||||
"@certd/acme-client": "^1.39.4",
|
"@certd/acme-client": "^1.39.5",
|
||||||
"@certd/basic": "^1.39.4",
|
"@certd/basic": "^1.39.5",
|
||||||
"@certd/pipeline": "^1.39.4",
|
"@certd/pipeline": "^1.39.5",
|
||||||
"@certd/plus-core": "^1.39.4",
|
"@certd/plus-core": "^1.39.5",
|
||||||
"@kubernetes/client-node": "0.21.0",
|
"@kubernetes/client-node": "0.21.0",
|
||||||
"ali-oss": "^6.22.0",
|
"ali-oss": "^6.22.0",
|
||||||
"basic-ftp": "^5.0.5",
|
"basic-ftp": "^5.0.5",
|
||||||
@@ -57,5 +57,5 @@
|
|||||||
"tslib": "^2.8.1",
|
"tslib": "^2.8.1",
|
||||||
"typescript": "^5.4.2"
|
"typescript": "^5.4.2"
|
||||||
},
|
},
|
||||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
"gitHead": "5f9341ad8edd08bb553c2d04e71f0838032e727f"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,17 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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 支持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)
|
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@certd/ui-client",
|
"name": "@certd/ui-client",
|
||||||
"version": "1.39.4",
|
"version": "1.39.5",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite --open",
|
"dev": "vite --open",
|
||||||
@@ -106,8 +106,8 @@
|
|||||||
"zod-defaults": "^0.1.3"
|
"zod-defaults": "^0.1.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@certd/lib-iframe": "^1.39.4",
|
"@certd/lib-iframe": "^1.39.5",
|
||||||
"@certd/pipeline": "^1.39.4",
|
"@certd/pipeline": "^1.39.5",
|
||||||
"@rollup/plugin-commonjs": "^25.0.7",
|
"@rollup/plugin-commonjs": "^25.0.7",
|
||||||
"@rollup/plugin-node-resolve": "^15.2.3",
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
||||||
"@types/chai": "^4.3.12",
|
"@types/chai": "^4.3.12",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<a-dropdown>
|
<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>
|
<template #overlay>
|
||||||
<a-menu>
|
<a-menu>
|
||||||
<a-menu-item>
|
<a-menu-item>
|
||||||
|
|||||||
@@ -48,6 +48,9 @@ const avatar = computed(() => {
|
|||||||
async function handleLogout() {
|
async function handleLogout() {
|
||||||
await userStore.logout(true);
|
await userStore.logout(true);
|
||||||
}
|
}
|
||||||
|
function goUserProfile() {
|
||||||
|
router.push("/certd/mine/user-profile");
|
||||||
|
}
|
||||||
|
|
||||||
const settingStore = useSettingStore();
|
const settingStore = useSettingStore();
|
||||||
|
|
||||||
@@ -90,7 +93,7 @@ const projectStore = useProjectStore();
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #user-dropdown>
|
<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>
|
||||||
<template #lock-screen>
|
<template #lock-screen>
|
||||||
<LockScreen :avatar @to-login="handleLogout" />
|
<LockScreen :avatar @to-login="handleLogout" />
|
||||||
|
|||||||
@@ -103,4 +103,6 @@ export default {
|
|||||||
deviceNameHelper: "Please enter the device name, used to identify the device",
|
deviceNameHelper: "Please enter the device name, used to identify the device",
|
||||||
passkeyRegisterHelper: "Site domain change will invalidate passkey",
|
passkeyRegisterHelper: "Site domain change will invalidate passkey",
|
||||||
userInfo: "User Info",
|
userInfo: "User Info",
|
||||||
|
securitySettingTip: "2FA Setting",
|
||||||
|
securitySetting: "2FA Setting",
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -105,4 +105,6 @@ export default {
|
|||||||
deviceNameHelper: "请输入当前设备名称,绑定多个时好做区分",
|
deviceNameHelper: "请输入当前设备名称,绑定多个时好做区分",
|
||||||
passkeyRegisterHelper: "1、站点域名变更会导致passkey失效;\n2、同一设备同一个用户绑定多次只有最后一次的有效,之前绑定的会失效,需要手动删除",
|
passkeyRegisterHelper: "1、站点域名变更会导致passkey失效;\n2、同一设备同一个用户绑定多次只有最后一次的有效,之前绑定的会失效,需要手动删除",
|
||||||
userInfo: "账号信息",
|
userInfo: "账号信息",
|
||||||
|
securitySettingTip: "2FA设置",
|
||||||
|
securitySetting: "2FA设置",
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ const props = withDefaults(defineProps<Props>(), {
|
|||||||
hoverDelay: 500,
|
hoverDelay: 500,
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits<{ logout: [] }>();
|
const emit = defineEmits<{ logout: []; userProfile: [] }>();
|
||||||
|
|
||||||
const { globalLockScreenShortcutKey, globalLogoutShortcutKey } = usePreferences();
|
const { globalLockScreenShortcutKey, globalLogoutShortcutKey } = usePreferences();
|
||||||
const lockStore = useLockStore();
|
const lockStore = useLockStore();
|
||||||
@@ -132,6 +132,11 @@ function handleSubmitLogout() {
|
|||||||
logoutModalApi.close();
|
logoutModalApi.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleUserProfile() {
|
||||||
|
emit("userProfile");
|
||||||
|
openPopover.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (enableShortcutKey.value) {
|
if (enableShortcutKey.value) {
|
||||||
const keys = useMagicKeys();
|
const keys = useMagicKeys();
|
||||||
whenever(keys["Alt+KeyQ"]!, () => {
|
whenever(keys["Alt+KeyQ"]!, () => {
|
||||||
@@ -173,7 +178,7 @@ if (enableShortcutKey.value) {
|
|||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent class="mr-2 min-w-[240px] p-0 pb-1">
|
<DropdownMenuContent class="mr-2 min-w-[240px] p-0 pb-1">
|
||||||
<div ref="refContent">
|
<div ref="refContent">
|
||||||
<DropdownMenuLabel class="flex items-center p-3">
|
<DropdownMenuLabel class="flex items-center p-3 pointer" @click="handleUserProfile">
|
||||||
<VbenAvatar :alt="text" :src="avatar" class="size-12" dot dot-class="bottom-0 right-1 border-2 size-4 bg-green-500" />
|
<VbenAvatar :alt="text" :src="avatar" class="size-12" dot dot-class="bottom-0 right-1 border-2 size-4 bg-green-500" />
|
||||||
<div class="ml-2 w-full">
|
<div class="ml-2 w-full">
|
||||||
<div v-if="tagText || text || $slots.tagText" class="text-foreground mb-1 flex items-center text-sm font-medium">
|
<div v-if="tagText || text || $slots.tagText" class="text-foreground mb-1 flex items-center text-sm font-medium">
|
||||||
|
|||||||
@@ -35,11 +35,15 @@
|
|||||||
</a-tag>
|
</a-tag>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="action-buttons">
|
<div class="action-buttons gap-2">
|
||||||
<a-button type="primary" class="action-btn" @click="doUpdate">
|
<a-button type="primary" class="action-btn" @click="doUpdate">
|
||||||
{{ t("authentication.updateProfile") }}
|
{{ t("authentication.updateProfile") }}
|
||||||
</a-button>
|
</a-button>
|
||||||
<change-password-button class="ml-10" :show-button="true" />
|
<change-password-button :show-button="true" />
|
||||||
|
|
||||||
|
<a-button type="primary" class="action-btn" @click="goSecuritySetting">
|
||||||
|
{{ t("authentication.securitySettingTip") }}
|
||||||
|
</a-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -142,6 +146,7 @@ import { useSettingStore } from "/@/store/settings";
|
|||||||
import { isEmpty } from "lodash-es";
|
import { isEmpty } from "lodash-es";
|
||||||
import { dict } from "@fast-crud/fast-crud";
|
import { dict } from "@fast-crud/fast-crud";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
||||||
@@ -175,6 +180,11 @@ function doUpdate() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
function goSecuritySetting() {
|
||||||
|
router.push("/certd/mine/security");
|
||||||
|
}
|
||||||
|
|
||||||
const oauthBounds = ref([]);
|
const oauthBounds = ref([]);
|
||||||
const oauthProviders = ref([]);
|
const oauthProviders = ref([]);
|
||||||
|
|
||||||
@@ -294,6 +304,12 @@ async function doRegisterPasskey(deviceName: string) {
|
|||||||
name: userInfo.value.username + "@" + deviceName,
|
name: userInfo.value.username + "@" + deviceName,
|
||||||
displayName: deviceName,
|
displayName: deviceName,
|
||||||
},
|
},
|
||||||
|
// 关键配置在这里 👇
|
||||||
|
authenticatorSelection: {
|
||||||
|
residentKey: "required", // 或 "preferred",请求创建可发现凭证
|
||||||
|
requireResidentKey: true, // 为兼容旧浏览器,设置与 residentKey 相同的值
|
||||||
|
userVerification: "preferred", // 用户验证策略
|
||||||
|
},
|
||||||
};
|
};
|
||||||
console.log("passkey register publicKey:", publicKey, JSON.stringify(publicKey));
|
console.log("passkey register publicKey:", publicKey, JSON.stringify(publicKey));
|
||||||
const credential = await (navigator.credentials as any).create({
|
const credential = await (navigator.credentials as any).create({
|
||||||
|
|||||||
@@ -46,21 +46,11 @@
|
|||||||
</a-form-item>
|
</a-form-item>
|
||||||
</template>
|
</template>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
<a-tab-pane v-if="settingStore.sysPublic.passkeyEnabled && settingStore.isPlus" key="passkey" :tab="t('authentication.passkeyTab')">
|
|
||||||
<template v-if="formState.loginType === 'passkey'">
|
|
||||||
<div v-if="!passkeySupported" class="text-red-500 text-sm mt-2 text-center mb-10">
|
|
||||||
{{ t("authentication.passkeyNotSupported") }}
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</a-tab-pane>
|
|
||||||
</a-tabs>
|
</a-tabs>
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button v-if="formState.loginType !== 'passkey'" type="primary" size="large" html-type="button" :loading="loading" class="login-button" @click="handleFinish">
|
<a-button type="primary" size="large" html-type="button" :loading="loading" class="login-button" @click="handleFinish">
|
||||||
{{ queryBindCode ? t("authentication.bindButton") : t("authentication.loginButton") }}
|
{{ queryBindCode ? t("authentication.bindButton") : t("authentication.loginButton") }}
|
||||||
</a-button>
|
</a-button>
|
||||||
<a-button v-else type="primary" size="large" html-type="button" :loading="loading" class="login-button" :disabled="!passkeySupported" @click="handlePasskeyLogin">
|
|
||||||
{{ t("authentication.passkeyLogin") }}
|
|
||||||
</a-button>
|
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<div class="mt-2 flex justify-between items-center">
|
<div class="mt-2 flex justify-between items-center">
|
||||||
@@ -73,7 +63,6 @@
|
|||||||
{{ t("authentication.forgotPassword") }}
|
{{ t("authentication.forgotPassword") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<router-link v-if="hasRegisterTypeEnabled() && !queryBindCode" class="register" :to="{ name: 'register' }">
|
<router-link v-if="hasRegisterTypeEnabled() && !queryBindCode" class="register" :to="{ name: 'register' }">
|
||||||
{{ t("authentication.registerLink") }}
|
{{ t("authentication.registerLink") }}
|
||||||
</router-link>
|
</router-link>
|
||||||
@@ -81,7 +70,7 @@
|
|||||||
</a-form-item>
|
</a-form-item>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div v-if="!queryBindCode && settingStore.sysPublic.oauthEnabled && settingStore.isPlus" class="w-full">
|
<div v-if="!queryBindCode && (settingStore.sysPublic.oauthEnabled || settingStore.sysPublic.passkeyEnabled) && settingStore.isPlus" class="w-full">
|
||||||
<oauth-footer :oauth-only="isOauthOnly"></oauth-footer>
|
<oauth-footer :oauth-only="isOauthOnly"></oauth-footer>
|
||||||
</div>
|
</div>
|
||||||
</a-form>
|
</a-form>
|
||||||
@@ -195,64 +184,6 @@ const twoFactor = reactive({
|
|||||||
verifyCode: "",
|
verifyCode: "",
|
||||||
});
|
});
|
||||||
|
|
||||||
const passkeySupported = ref(false);
|
|
||||||
const passkeyEnabled = ref(false);
|
|
||||||
|
|
||||||
const checkPasskeySupport = () => {
|
|
||||||
passkeySupported.value = false;
|
|
||||||
if (typeof window !== "undefined" && "credentials" in navigator && "PublicKeyCredential" in window) {
|
|
||||||
passkeySupported.value = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handlePasskeyLogin = async () => {
|
|
||||||
if (!passkeySupported.value) {
|
|
||||||
notification.error({ message: t("authentication.passkeyNotSupported") });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
loading.value = true;
|
|
||||||
try {
|
|
||||||
const optionsResponse: any = await request({
|
|
||||||
url: "/passkey/generateAuthentication",
|
|
||||||
method: "post",
|
|
||||||
});
|
|
||||||
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认证失败");
|
|
||||||
}
|
|
||||||
|
|
||||||
const loginRes: any = await UserApi.loginByPasskey({
|
|
||||||
credential,
|
|
||||||
challenge: options.challenge,
|
|
||||||
});
|
|
||||||
|
|
||||||
await userStore.onLoginSuccess(loginRes);
|
|
||||||
} catch (e: any) {
|
|
||||||
console.error("Passkey登录失败:", e);
|
|
||||||
notification.error({ message: e.message || "Passkey登录失败" });
|
|
||||||
} finally {
|
|
||||||
loading.value = false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleFinish = async () => {
|
const handleFinish = async () => {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
try {
|
try {
|
||||||
@@ -301,9 +232,7 @@ const isOauthOnly = computed(() => {
|
|||||||
return sysPublicSettings.oauthOnly && settingStore.isPlus && sysPublicSettings.oauthEnabled;
|
return sysPublicSettings.oauthOnly && settingStore.isPlus && sysPublicSettings.oauthEnabled;
|
||||||
});
|
});
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {});
|
||||||
checkPasskeySupport();
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less">
|
<style lang="less">
|
||||||
|
|||||||
@@ -0,0 +1,85 @@
|
|||||||
|
<template>
|
||||||
|
<div v-if="passkeyEnabled && isPlus" class="oauth-icon-button" :class="{ pointer: passkeySupported }" @click="handlePasskeyLogin">
|
||||||
|
<div><fs-icon icon="ion:finger-print-outline" :class="{ 'text-blue-600': passkeySupported, 'text-gray-400': !passkeySupported }" class="text-40" /></div>
|
||||||
|
<div class="ellipsis title" :title="t('authentication.passkeyLogin')" :class="{ 'text-gray-400': !passkeySupported }">{{ t("authentication.passkeyLogin") }}</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, computed, onMounted } from "vue";
|
||||||
|
import { useI18n } from "/@/locales";
|
||||||
|
import { useSettingStore } from "/@/store/settings";
|
||||||
|
import { notification } from "ant-design-vue";
|
||||||
|
import { request } from "/src/api/service";
|
||||||
|
import * as UserApi from "/src/store/user/api.user";
|
||||||
|
import { useUserStore } from "/src/store/user";
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
const settingStore = useSettingStore();
|
||||||
|
const userStore = useUserStore();
|
||||||
|
|
||||||
|
const loading = ref(false);
|
||||||
|
const passkeySupported = ref(false);
|
||||||
|
|
||||||
|
const passkeyEnabled = computed(() => settingStore.sysPublic.passkeyEnabled);
|
||||||
|
const isPlus = computed(() => settingStore.isPlus);
|
||||||
|
|
||||||
|
const checkPasskeySupport = () => {
|
||||||
|
passkeySupported.value = false;
|
||||||
|
if (typeof window !== "undefined" && "credentials" in navigator && "PublicKeyCredential" in window) {
|
||||||
|
passkeySupported.value = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handlePasskeyLogin = async () => {
|
||||||
|
if (!passkeySupported.value) {
|
||||||
|
notification.error({ message: t("authentication.passkeyNotSupported") });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
loading.value = true;
|
||||||
|
try {
|
||||||
|
const optionsResponse: any = await request({
|
||||||
|
url: "/passkey/generateAuthentication",
|
||||||
|
method: "post",
|
||||||
|
});
|
||||||
|
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,
|
||||||
|
authenticatorSelection: {
|
||||||
|
residentKey: "required",
|
||||||
|
requireResidentKey: true,
|
||||||
|
userVerification: "preferred",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("passkey authentication credential:", credential, JSON.stringify(credential));
|
||||||
|
if (!credential) {
|
||||||
|
throw new Error("Passkey认证失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
const loginRes: any = await UserApi.loginByPasskey({
|
||||||
|
credential,
|
||||||
|
challenge: options.challenge,
|
||||||
|
});
|
||||||
|
|
||||||
|
await userStore.onLoginSuccess(loginRes);
|
||||||
|
} catch (e: any) {
|
||||||
|
console.error("Passkey登录失败:", e);
|
||||||
|
notification.error({ message: e.message || "Passkey登录失败" });
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
checkPasskeySupport();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -4,6 +4,7 @@
|
|||||||
<div class="oauth-title-text">{{ computedTitle }}</div>
|
<div class="oauth-title-text">{{ computedTitle }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-center items-center gap-4 flex-wrap md:flex-nowrap">
|
<div class="flex justify-center items-center gap-4 flex-wrap md:flex-nowrap">
|
||||||
|
<passkey-login></passkey-login>
|
||||||
<template v-for="item in oauthProviderList" :key="item.type">
|
<template v-for="item in oauthProviderList" :key="item.type">
|
||||||
<div v-if="item.addonId" class="oauth-icon-button pointer" @click="goOauthLogin(item.name)">
|
<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>
|
<div><fs-icon :icon="item.icon" class="text-blue-600 text-40" /></div>
|
||||||
@@ -19,6 +20,7 @@ import * as api from "./api";
|
|||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
import { useSettingStore } from "/@/store/settings";
|
import { useSettingStore } from "/@/store/settings";
|
||||||
import { useRoute } from "vue-router";
|
import { useRoute } from "vue-router";
|
||||||
|
import PasskeyLogin from "../login/passkey-login.vue";
|
||||||
|
|
||||||
const oauthProviderList = ref([]);
|
const oauthProviderList = ref([]);
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
|
|||||||
@@ -3,6 +3,14 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
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)
|
||||||
|
|
||||||
|
### 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)
|
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@certd/ui-server",
|
"name": "@certd/ui-server",
|
||||||
"version": "1.39.4",
|
"version": "1.39.5",
|
||||||
"description": "fast-server base midway",
|
"description": "fast-server base midway",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@@ -50,20 +50,20 @@
|
|||||||
"@aws-sdk/client-route-53": "^3.964.0",
|
"@aws-sdk/client-route-53": "^3.964.0",
|
||||||
"@aws-sdk/client-s3": "^3.964.0",
|
"@aws-sdk/client-s3": "^3.964.0",
|
||||||
"@aws-sdk/client-sts": "^3.990.0",
|
"@aws-sdk/client-sts": "^3.990.0",
|
||||||
"@certd/acme-client": "^1.39.4",
|
"@certd/acme-client": "^1.39.5",
|
||||||
"@certd/basic": "^1.39.4",
|
"@certd/basic": "^1.39.5",
|
||||||
"@certd/commercial-core": "^1.39.4",
|
"@certd/commercial-core": "^1.39.5",
|
||||||
"@certd/cv4pve-api-javascript": "^8.4.2",
|
"@certd/cv4pve-api-javascript": "^8.4.2",
|
||||||
"@certd/jdcloud": "^1.39.4",
|
"@certd/jdcloud": "^1.39.5",
|
||||||
"@certd/lib-huawei": "^1.39.4",
|
"@certd/lib-huawei": "^1.39.5",
|
||||||
"@certd/lib-k8s": "^1.39.4",
|
"@certd/lib-k8s": "^1.39.5",
|
||||||
"@certd/lib-server": "^1.39.4",
|
"@certd/lib-server": "^1.39.5",
|
||||||
"@certd/midway-flyway-js": "^1.39.4",
|
"@certd/midway-flyway-js": "^1.39.5",
|
||||||
"@certd/pipeline": "^1.39.4",
|
"@certd/pipeline": "^1.39.5",
|
||||||
"@certd/plugin-cert": "^1.39.4",
|
"@certd/plugin-cert": "^1.39.5",
|
||||||
"@certd/plugin-lib": "^1.39.4",
|
"@certd/plugin-lib": "^1.39.5",
|
||||||
"@certd/plugin-plus": "^1.39.4",
|
"@certd/plugin-plus": "^1.39.5",
|
||||||
"@certd/plus-core": "^1.39.4",
|
"@certd/plus-core": "^1.39.5",
|
||||||
"@google-cloud/publicca": "^1.3.0",
|
"@google-cloud/publicca": "^1.3.0",
|
||||||
"@huaweicloud/huaweicloud-sdk-cdn": "^3.1.185",
|
"@huaweicloud/huaweicloud-sdk-cdn": "^3.1.185",
|
||||||
"@huaweicloud/huaweicloud-sdk-core": "^3.1.185",
|
"@huaweicloud/huaweicloud-sdk-core": "^3.1.185",
|
||||||
|
|||||||
@@ -190,8 +190,10 @@ export class PipelineController extends CrudController<PipelineService> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Post('/update', { description: Constants.per.authOnly })
|
@Post('/update', { description: Constants.per.authOnly })
|
||||||
async update(@Body(ALL) bean) {
|
async update(@Body(ALL) bean:PipelineEntity) {
|
||||||
return await this.save(bean);
|
await this.checkOwner(this.getService(), bean.id,"write",true);
|
||||||
|
await this.service.update(bean as any);
|
||||||
|
return this.ok({});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Post('/save', { description: Constants.per.authOnly, summary: '新增/更新流水线' })
|
@Post('/save', { description: Constants.per.authOnly, summary: '新增/更新流水线' })
|
||||||
|
|||||||
@@ -230,9 +230,10 @@ export class PasskeyService extends BaseService<PasskeyEntity> {
|
|||||||
throw new AuthException("Passkey不存在");
|
throw new AuthException("Passkey不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verification.counter <= passkey.counter) {
|
// 可同步密钥 各个客户端的计数器不是单调递增的,此规范基本上都不遵守了
|
||||||
throw new AuthException("认证失败:计数器异常");
|
// if (verification.counter <= passkey.counter && passkey.counter > 0) {
|
||||||
}
|
// throw new AuthException("认证失败:计数器异常");
|
||||||
|
// }
|
||||||
|
|
||||||
passkey.counter = verification.counter;
|
passkey.counter = verification.counter;
|
||||||
passkey.updateTime = new Date();
|
passkey.updateTime = new Date();
|
||||||
|
|||||||
@@ -259,6 +259,9 @@ export class PipelineService extends BaseService<PipelineEntity> {
|
|||||||
bean.order = old.order;
|
bean.order = old.order;
|
||||||
bean.userId = old.userId;
|
bean.userId = old.userId;
|
||||||
bean.projectId = old.projectId;
|
bean.projectId = old.projectId;
|
||||||
|
if (bean.content == null) {
|
||||||
|
bean.content = old.content;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!old || !old.webhookKey) {
|
if (!old || !old.webhookKey) {
|
||||||
bean.webhookKey = await this.genWebhookKey();
|
bean.webhookKey = await this.genWebhookKey();
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
01:13
|
00:52
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
01:30
|
01:11
|
||||||
|
|||||||
Reference in New Issue
Block a user