fix: 优化邮件通知域名显示与错误信息提炼并升级版本号至v1.52.4
Some checks failed
Some checks failed
This commit is contained in:
parent
fb2b877350
commit
cdc7967aae
16
README.md
16
README.md
@ -143,11 +143,11 @@ go build -trimpath -o ../bin/scert-admin ./cmd/scert-admin
|
||||
项目配备统一的打包脚本 `deploy/package.mjs`,产物严格遵循 **`项目名+版本+架构`** 的命名规范:
|
||||
|
||||
```bash
|
||||
# 打包 Linux amd64 归档包 (生成 Scert_v1.52.3_linux_amd64.tar.gz)
|
||||
node deploy/package.mjs --target=linux_amd64 --version=v1.52.3
|
||||
# 打包 Linux amd64 归档包 (生成 Scert_v1.52.4_linux_amd64.tar.gz)
|
||||
node deploy/package.mjs --target=linux_amd64 --version=v1.52.4
|
||||
|
||||
# 打包 Windows amd64 压缩包 (生成 Scert_v1.52.3_windows_amd64.zip)
|
||||
node deploy/package.mjs --target=windows_amd64 --version=v1.52.3
|
||||
# 打包 Windows amd64 压缩包 (生成 Scert_v1.52.4_windows_amd64.zip)
|
||||
node deploy/package.mjs --target=windows_amd64 --version=v1.52.4
|
||||
```
|
||||
|
||||
发布包内包含:
|
||||
@ -157,7 +157,7 @@ node deploy/package.mjs --target=windows_amd64 --version=v1.52.3
|
||||
- `systemd/` 与 `nginx/` 配置示例模板
|
||||
- `SHA256SUMS` 完整性校验文件
|
||||
|
||||
推送版本标签(例如 `git tag v1.52.3 && git push Scert v1.52.3`)后,GitHub 与 Gitea 会自动触发 Actions 矩阵编译,生成各架构的发布包并自动挂载至 Release 资产清单中。
|
||||
推送版本标签(例如 `git tag v1.52.4 && git push Scert v1.52.4`)后,GitHub 与 Gitea 会自动触发 Actions 矩阵编译,生成各架构的发布包并自动挂载至 Release 资产清单中。
|
||||
|
||||
---
|
||||
|
||||
@ -167,8 +167,8 @@ node deploy/package.mjs --target=windows_amd64 --version=v1.52.3
|
||||
|
||||
1. 从 Release 页面下载对应架构的发布包并解压:
|
||||
```bash
|
||||
tar -zxvf Scert_v1.52.3_linux_amd64.tar.gz
|
||||
cd Scert_v1.52.3_linux_amd64
|
||||
tar -zxvf Scert_v1.52.4_linux_amd64.tar.gz
|
||||
cd Scert_v1.52.4_linux_amd64
|
||||
```
|
||||
|
||||
2. 执行安装脚本:
|
||||
@ -188,7 +188,7 @@ node deploy/package.mjs --target=windows_amd64 --version=v1.52.3
|
||||
|
||||
### Windows
|
||||
|
||||
1. 解压 `Scert_v1.52.3_windows_amd64.zip`。
|
||||
1. 解压 `Scert_v1.52.4_windows_amd64.zip`。
|
||||
2. 以管理员权限启动 PowerShell 并执行:
|
||||
```powershell
|
||||
powershell -ExecutionPolicy Bypass -File .\install-windows.ps1 -SourceDirectory .
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
package buildinfo
|
||||
package buildinfo
|
||||
|
||||
const Version = "1.52.3"
|
||||
const Version = "1.52.4"
|
||||
|
||||
@ -401,9 +401,11 @@ func (s *Service) buildPayload(event Event) (mailPayload, error) {
|
||||
}
|
||||
status := eventStatus(event.Status)
|
||||
domainName := strings.TrimSpace(event.Domain)
|
||||
if domainName == "" {
|
||||
if domainName == "" || isLikelyInternalIdentifier(domainName) {
|
||||
for _, domain := range event.Domains {
|
||||
if domainName = strings.TrimSpace(domain); domainName != "" {
|
||||
candidate := strings.TrimSpace(domain)
|
||||
if candidate != "" && !isLikelyInternalIdentifier(candidate) {
|
||||
domainName = candidate
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -519,3 +521,28 @@ func sleepContext(ctx context.Context, duration time.Duration) error {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func isLikelyInternalIdentifier(value string) bool {
|
||||
value = strings.TrimSpace(value)
|
||||
if value == "" {
|
||||
return false
|
||||
}
|
||||
if strings.HasPrefix(value, "internal-") || strings.HasPrefix(value, "domain-") || strings.HasPrefix(value, "task-") || strings.HasPrefix(value, "cert-") {
|
||||
return true
|
||||
}
|
||||
if len(value) == 36 && strings.Count(value, "-") == 4 {
|
||||
isHexUUID := true
|
||||
for _, r := range value {
|
||||
if r == '-' || (r >= '0' && r <= '9') || (r >= 'a' && r <= 'f') || (r >= 'A' && r <= 'F') {
|
||||
continue
|
||||
}
|
||||
isHexUUID = false
|
||||
break
|
||||
}
|
||||
if isHexUUID {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@ -97,20 +97,25 @@ func TestVerifiedRecoveryDoesNotRequireManualUnlock(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestMailUsesCertificateDomainInsteadOfInternalID(t *testing.T) {
|
||||
for _, domains := range [][]string{{" ", "example.test"}, nil} {
|
||||
for _, tc := range []struct {
|
||||
domain string
|
||||
domainID string
|
||||
domains []string
|
||||
expected string
|
||||
}{
|
||||
{domain: "", domainID: "internal-domain-id", domains: []string{" ", "example.test"}, expected: "example.test"},
|
||||
{domain: "", domainID: "internal-domain-id", domains: nil, expected: "未指定域名"},
|
||||
{domain: "b6824906-fea9-4f2a-a682-3c2b1ade1ee3", domains: []string{"scert-multi-20260930.apmmk.cn"}, expected: "scert-multi-20260930.apmmk.cn"},
|
||||
} {
|
||||
payload, err := New(newTestConfig("http://mail.example.test"), nil).buildPayload(Event{
|
||||
Status: "success", DomainID: "internal-domain-id", Domains: domains,
|
||||
Status: "success", Domain: tc.domain, DomainID: tc.domainID, Domains: tc.domains,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
expected := "未指定域名"
|
||||
if len(domains) > 0 {
|
||||
expected = "example.test"
|
||||
}
|
||||
for _, body := range []string{payload.Subject, payload.Text, payload.HTML} {
|
||||
if strings.Contains(body, "internal-domain-id") || !strings.Contains(body, expected) {
|
||||
t.Fatal("用户邮件应显示证书域名而非内部记录编号")
|
||||
if (tc.domainID != "" && strings.Contains(body, tc.domainID)) || strings.Contains(body, "b6824906-fea9-4f2a-a682-3c2b1ade1ee3") || !strings.Contains(body, tc.expected) {
|
||||
t.Fatalf("用户邮件应显示证书域名而非内部记录编号或UUID: %s", body)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
4
frontend/package-lock.json
generated
4
frontend/package-lock.json
generated
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "scert-frontend",
|
||||
"version": "1.52.3",
|
||||
"version": "1.52.4",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "scert-frontend",
|
||||
"version": "1.52.3",
|
||||
"version": "1.52.4",
|
||||
"dependencies": {
|
||||
"vue": "3.5.41"
|
||||
},
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "scert-frontend",
|
||||
"private": true,
|
||||
"version": "1.52.3",
|
||||
"version": "1.52.4",
|
||||
"type": "module",
|
||||
"packageManager": "npm@11.17.0",
|
||||
"engines": {
|
||||
|
||||
@ -85,7 +85,7 @@ defineEmits(["select", "settings"]);
|
||||
<div v-if="currentUser" class="navigation-account-card" aria-label="当前登录账号">
|
||||
<div class="navigation-account-header">
|
||||
<span class="navigation-account-label">当前账号</span>
|
||||
<span class="navigation-version-label">版本 {{ version ? (version.startsWith("v") || version.startsWith("V") ? version : "V" + version) : "V1.52.3" }}</span>
|
||||
<span class="navigation-version-label">版本 {{ version ? (version.startsWith("v") || version.startsWith("V") ? version : "V" + version) : "V1.52.4" }}</span>
|
||||
</div>
|
||||
<div class="navigation-account-row">
|
||||
<strong class="navigation-account-name" :title="currentUser.account">{{ currentUser.account || "未命名账号" }}</strong>
|
||||
|
||||
@ -60,7 +60,7 @@ test("系统设置导航仅对当前已确认的超级管理员显示", async ()
|
||||
const html = await renderComponent("../Dashboard/DashboardNavigation.vue", {
|
||||
activeSection: "overview", sections: [],
|
||||
currentUser: role ? { account: "测试", role } : null,
|
||||
version: "1.52.3",
|
||||
version: "1.52.4",
|
||||
roleLabels: workspaceRoleLabels,
|
||||
loggingOut: false, error: "", logout() {},
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user