Compare commits

...

6 Commits

Author SHA1 Message Date
xiaojunnuo e05ec53eb5 chore: 1 2026-07-07 10:21:01 +08:00
xiaojunnuo 8d9dad9c82 fix: 修复企业模式下弹出邮箱绑定提醒的问题 2026-07-07 09:43:10 +08:00
xiaojunnuo 0071bcb0e4 fix: 修复火山视频点播源站选择不到自定义源站的bug 2026-07-07 09:42:41 +08:00
xiaojunnuo dbdc1ccd1b build: release 2026-07-07 00:35:25 +08:00
xiaojunnuo 2a606fdb1d build: publish 2026-07-07 00:22:06 +08:00
xiaojunnuo 3b86f30bcf build: trigger build image 2026-07-07 00:21:54 +08:00
18 changed files with 50 additions and 28 deletions
+13
View File
@@ -3,6 +3,19 @@
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.42.1](https://github.com/certd/certd/compare/v1.42.0...v1.42.1) (2026-07-06)
### Bug Fixes
* 修复多域名无法使用passkey登录的bug ([d176f9c](https://github.com/certd/certd/commit/d176f9cc0ebd051a614bfac74d1616d1945fc9a3))
* 修复企业模式下登录报projectId不能为空的问题 ([a65366b](https://github.com/certd/certd/commit/a65366bbe1aadea8baaffbdadab58a5b631d9417))
* **login:** 修复输入法 composing 状态下回车触发提交的问题 ([b74db81](https://github.com/certd/certd/commit/b74db81304bbe68476bbec5ea4307a2264060e92))
### Performance Improvements
* **certd-server:** 使用 jks-go转换jks证书,大幅精简镜像大小 ([c78898e](https://github.com/certd/certd/commit/c78898e4c10dd1701467d2e42e3f72bd8f2a352f))
* **pipeline:** 将默认历史保留条数从30调整为100 ([d3e4677](https://github.com/certd/certd/commit/d3e4677ea4fac8e7533749d7f4187e410489e536))
# [1.42.0](https://github.com/certd/certd/compare/v1.41.4...v1.42.0) (2026-07-05) # [1.42.0](https://github.com/certd/certd/compare/v1.41.4...v1.42.0) (2026-07-05)
### Bug Fixes ### Bug Fixes
+1 -1
View File
@@ -75,5 +75,5 @@
"bugs": { "bugs": {
"url": "https://github.com/publishlab/node-acme-client/issues" "url": "https://github.com/publishlab/node-acme-client/issues"
}, },
"gitHead": "b46948c0ba67069ebcd2bb71b21b6c289d99f1b8" "gitHead": "7808d028e9c7e1b1e3ebc41f12b023d7b553300b"
} }
+1 -1
View File
@@ -54,5 +54,5 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "b46948c0ba67069ebcd2bb71b21b6c289d99f1b8" "gitHead": "7808d028e9c7e1b1e3ebc41f12b023d7b553300b"
} }
+1 -1
View File
@@ -51,5 +51,5 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "b46948c0ba67069ebcd2bb71b21b6c289d99f1b8" "gitHead": "7808d028e9c7e1b1e3ebc41f12b023d7b553300b"
} }
+1 -1
View File
@@ -30,5 +30,5 @@
"prettier": "3.3.3", "prettier": "3.3.3",
"tslib": "^2.8.1" "tslib": "^2.8.1"
}, },
"gitHead": "b46948c0ba67069ebcd2bb71b21b6c289d99f1b8" "gitHead": "7808d028e9c7e1b1e3ebc41f12b023d7b553300b"
} }
+1 -1
View File
@@ -37,5 +37,5 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "b46948c0ba67069ebcd2bb71b21b6c289d99f1b8" "gitHead": "7808d028e9c7e1b1e3ebc41f12b023d7b553300b"
} }
+1 -1
View File
@@ -62,5 +62,5 @@
"fetch" "fetch"
] ]
}, },
"gitHead": "b46948c0ba67069ebcd2bb71b21b6c289d99f1b8" "gitHead": "7808d028e9c7e1b1e3ebc41f12b023d7b553300b"
} }
+1 -1
View File
@@ -38,5 +38,5 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "b46948c0ba67069ebcd2bb71b21b6c289d99f1b8" "gitHead": "7808d028e9c7e1b1e3ebc41f12b023d7b553300b"
} }
+1 -1
View File
@@ -69,5 +69,5 @@
"typeorm": "^0.3.20", "typeorm": "^0.3.20",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "b46948c0ba67069ebcd2bb71b21b6c289d99f1b8" "gitHead": "7808d028e9c7e1b1e3ebc41f12b023d7b553300b"
} }
+1 -1
View File
@@ -52,5 +52,5 @@
"typeorm": "^0.3.20", "typeorm": "^0.3.20",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "b46948c0ba67069ebcd2bb71b21b6c289d99f1b8" "gitHead": "7808d028e9c7e1b1e3ebc41f12b023d7b553300b"
} }
+1 -1
View File
@@ -38,5 +38,5 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "b46948c0ba67069ebcd2bb71b21b6c289d99f1b8" "gitHead": "7808d028e9c7e1b1e3ebc41f12b023d7b553300b"
} }
+1 -1
View File
@@ -45,5 +45,5 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "b46948c0ba67069ebcd2bb71b21b6c289d99f1b8" "gitHead": "7808d028e9c7e1b1e3ebc41f12b023d7b553300b"
} }
@@ -15,11 +15,14 @@ import { Modal, notification } from "ant-design-vue";
import { useI18n } from "/src/locales"; import { useI18n } from "/src/locales";
import { request } from "/@/api/service"; import { request } from "/@/api/service";
import { useFormDialog } from "/@/use/use-dialog"; import { useFormDialog } from "/@/use/use-dialog";
import { useSettingStore } from "/@/store/settings/index.jsx";
const { t } = useI18n(); const { t } = useI18n();
const { openFormDialog } = useFormDialog(); const { openFormDialog } = useFormDialog();
const userStore = useUserStore(); const userStore = useUserStore();
const settingStore = useSettingStore();
const changePasswordButtonRef = ref(); const changePasswordButtonRef = ref();
const emailFormWrapperRef = ref<any>(); const emailFormWrapperRef = ref<any>();
@@ -34,6 +37,9 @@ const validateEmailConfirm = async (_rule: any, value: string) => {
}; };
async function checkAndSetupAccount() { async function checkAndSetupAccount() {
if (settingStore.isEnterprise) {
return;
}
try { try {
const userInfo = userStore.getUserInfo as any; const userInfo = userStore.getUserInfo as any;
if (!userInfo.needInitAccount) { if (!userInfo.needInitAccount) {
@@ -1,4 +1,4 @@
import { AccessGetter, AccessService, BaseController, Constants, SysSettingsService } from "@certd/lib-server"; import { AccessGetter, AccessService, BaseController, Constants, isEnterprise, SysSettingsService } from "@certd/lib-server";
import { ALL, Body, Controller, Inject, Post, Provide } from "@midwayjs/core"; import { ALL, Body, Controller, Inject, Post, Provide } from "@midwayjs/core";
import { PasskeyService } from "../../../modules/login/service/passkey-service.js"; import { PasskeyService } from "../../../modules/login/service/passkey-service.js";
import { RoleService } from "../../../modules/sys/authority/service/role-service.js"; import { RoleService } from "../../../modules/sys/authority/service/role-service.js";
@@ -54,14 +54,18 @@ export class MineController extends BaseController {
delete user.password; delete user.password;
//@ts-ignore //@ts-ignore
user.needInitPassword = needInitPassword; user.needInitPassword = needInitPassword;
//@ts-ignore
const existingAccess = await this.accessService.findOne({ user.needInitAccount = false;
where: { type: "acmeAccount", subtype: "letsencrypt", userId }, if (!isEnterprise()) {
}); const existingAccess = await this.accessService.findOne({
if (!existingAccess) { where: { type: "acmeAccount", subtype: "letsencrypt", userId },
//@ts-ignore });
user.needInitAccount = true; if (!existingAccess) {
//@ts-ignore
user.needInitAccount = true;
}
} }
return this.ok(user); return this.ok(user);
} }
@@ -146,8 +150,7 @@ export class MineController extends BaseController {
@Post("/accountInit", { description: Constants.per.authOnly, summary: "初始化Let's Encrypt ACME账号和邮件通知" }) @Post("/accountInit", { description: Constants.per.authOnly, summary: "初始化Let's Encrypt ACME账号和邮件通知" })
public async accountInit(@Body("email") email?: string) { public async accountInit(@Body("email") email?: string) {
const { projectId, userId } = await this.getProjectUserIdWrite(); let userId = this.getUserId();
let userEmail = email; let userEmail = email;
let user: any = null; let user: any = null;
if (!userEmail) { if (!userEmail) {
@@ -169,10 +172,10 @@ export class MineController extends BaseController {
await this.emailService.add(userId, userEmail); await this.emailService.add(userId, userEmail);
await this.notificationService.getOrCreateDefault(userEmail, userId, projectId); await this.notificationService.getOrCreateDefault(userEmail, userId);
const getAccessById = this.accessService.getById.bind(this.accessService); const getAccessById = this.accessService.getById.bind(this.accessService);
const accessGetter = new AccessGetter(userId, projectId, getAccessById); const accessGetter = new AccessGetter(userId, undefined, getAccessById);
const accessContext = { const accessContext = {
http, http,
logger, logger,
@@ -187,7 +190,7 @@ export class MineController extends BaseController {
type: "acmeAccount", type: "acmeAccount",
name: "Let's Encrypt", name: "Let's Encrypt",
userId, userId,
projectId, projectId:undefined,
setting: JSON.stringify({ setting: JSON.stringify({
caType: "letsencrypt", caType: "letsencrypt",
email: userEmail, email: userEmail,
@@ -199,7 +199,7 @@ export class AsiaIspClient {
const list = await this.getCertList(); const list = await this.getCertList();
const found = list.find((item: any) => item.name === certName); const found = list.find((item: any) => item.name === certName);
if (!found) { if (!found) {
throw new Error(`证书已存在但无法查询到: ${certName}`); throw new Error(`证书已存在但无法查询到: 请重新申请一份证书,或者将已有证书名称修改为:${certName}`);
} }
const certId = Number(found.certId); const certId = Number(found.certId);
this.logger.info(`复用已有证书,证书ID: ${certId}`); this.logger.info(`复用已有证书,证书ID: ${certId}`);
@@ -88,6 +88,7 @@ export class VolcengineDeployToVOD extends AbstractTaskPlugin {
@TaskInput({ @TaskInput({
title: "源站类型", title: "源站类型",
helper: "选择源站类型", helper: "选择源站类型",
value: 1,
component: { component: {
name: "a-select", name: "a-select",
vModel: "value", vModel: "value",
@@ -95,7 +96,6 @@ export class VolcengineDeployToVOD extends AbstractTaskPlugin {
{ value: 1, label: "点播源站" }, { value: 1, label: "点播源站" },
{ value: 2, label: "自定义源站" }, { value: 2, label: "自定义源站" },
], ],
value: 1,
helper: "注意:封面加速域名不支持自定义源站", helper: "注意:封面加速域名不支持自定义源站",
}, },
required: false, required: false,
+1 -1
View File
@@ -1 +1 @@
19:31 00:21
+1 -1
View File
@@ -1 +1 @@
21:41 00:35