Files
mrlee fc16fb2dc2 fix(agent,acme,cert,web): 修 frps 安装 404 与 nginx 探测两处,证书颁发机构用 LiteSSL 替换 Buypass(v1.2.14)
- frps 安装/升级一直 404:frp 官方校验文件名始终是 frp_sha256_checksums.txt(不带版本号),代码却拼 frp_<版本>_sha256sums.txt;现按候选名依次尝试并在失败时列出尝试项。同一条 bug 也存在于本机下载 frpc 的路径,一并修复(SHA-256 校验逻辑未改)

- nginx 探测(agent):nginxPath() 不再回落到配置里的裸名字 nginx(否则「未安装」被误报为配置校验失败,且一键安装入口永不出现);vhost 目录探测不再要求被加载文件带 .conf 后缀(Debian 的 sites-enabled/default 不带,导致只剩主配置目录可试,报「均无法放置完整 server 配置」),失败信息补上具体原因

- 证书 CA:LiteSSL(亚数 TrustAsia,90 天,支持单域名/通配符/多域名)替换 Buypass。LiteSSL 目录 meta.externalAccountRequired=true,强制 EAB——在 FreeSSL 创建后填 Kid/HMAC 即可,HMAC 只回掩码;Buypass 保留常量与展示元数据但不再可选

- 前端申请证书弹窗的颁发机构卡片改为前端可控清单(原先后端 /api/certs/options 的结果不参与渲染,后端改了弹窗不变)

- 测试:internal/frp 校验文件候选名与 sha256sum 解析;internal/acme LiteSSL 目录/别名/通配符/Buypass 停用提示。gofmt / go build / go vet / go test / vue-tsc / vite build 全绿

- AgentVersion 0.12.4 → 0.12.7,双架构二进制已重编:VPS 上需点「升级 Agent」
2026-09-27 13:44:03 +08:00

43 lines
1.6 KiB
Go

package frp
import (
"strings"
"testing"
)
// 官方校验文件名不带版本号;这里钉住候选顺序,避免以后又被改回不存在的名字。
func TestChecksumAssetCandidates(t *testing.T) {
got := checksumAssetCandidates("0.71.0")
if len(got) < 2 {
t.Fatalf("应至少有一个候选与一个兜底,实际 %v", got)
}
if got[0] != "frp_sha256_checksums.txt" {
t.Fatalf("首选应为官方现行名字,实际 %q", got[0])
}
if got[1] != "frp_0.71.0_sha256sums.txt" {
t.Fatalf("兜底名字应带版本号,实际 %q", got[1])
}
}
// 解析真实格式:<hash> <文件名>(也兼容 * 前缀与多余空白)
func TestFindChecksumLine(t *testing.T) {
content := []byte(strings.Join([]string{
"845b486c63686990e671f13cc5e3bd130ce7be659ab3c6f043008353451858cb frp_0.71.0_android_arm64.tar.gz",
"84f27e39f11169f7adcef8e8b70c9329de17747b1f14dad9fb95eef5682ea716 frp_0.71.0_linux_amd64.tar.gz",
"96b8a4a09d7cd6a5ea0e1f9f0b1e4a35b0e0f0b4a4f7c0b0e0f0b4a4f7c0b0e0 *frp_0.71.0_linux_arm64.tar.gz",
"",
}, "\n"))
sum, ok := findChecksumLine(content, "frp_0.71.0_linux_amd64.tar.gz")
if !ok || sum != "84f27e39f11169f7adcef8e8b70c9329de17747b1f14dad9fb95eef5682ea716" {
t.Fatalf("未解析出 linux_amd64 的哈希:%q ok=%v", sum, ok)
}
sum, ok = findChecksumLine(content, "frp_0.71.0_linux_arm64.tar.gz")
if !ok || sum != "96b8a4a09d7cd6a5ea0e1f9f0b1e4a35b0e0f0b4a4f7c0b0e0f0b4a4f7c0b0e0" {
t.Fatalf("带 * 前缀的文件名应能匹配:%q ok=%v", sum, ok)
}
if _, ok := findChecksumLine(content, "frp_0.71.0_windows_amd64.zip"); ok {
t.Fatal("不存在的文件不应匹配到哈希")
}
}