Files
-Fonu/internal/frp/frps_template_mask_test.go
mrlee 2236259a52
CI / verify (push) Canceled after 0s
fix(web,agent,frp): frps 配置预览脱敏、日志界面倒序与来源中文化,agent 0.12.4 重写日志日期格式(v1.2.12)
- frps.toml 同源配置预览泄露明文密钥:FRPSServerConfig(对外预览入口)改为走 maskFRPSSecrets,auth.token / auth.oidc.clientSecret 的值换成 ********(键名与结构保留、注释行不动);下发路径 PushFRPSConfigToAgent 与安装流程仍用未脱敏内容。弹窗补说明,「复制」改「复制(已脱敏)」

- agent 0.12.4:frps 日志 6 行 → 最近 20 行、最新在最上面;日期由 short-iso 的 2026-09-22T18:43:34+08:00 RainYun-XXX 重写为 2026-09-22 18:43:34 进程: 消息(去掉 T 分隔、时区偏移与每行重复的主机名),frps/action 失败日志一并统一

- 日志界面:FRP 日志「来源」列由 Go 源码文件名(client/control.go:174)改为中文模块名;规则详情「日志」页签倒序;「公网服务端」弹窗改为显示 VPS 上的 frps 服务日志

- 测试:maskFRPSSecrets 脱敏(明文不出现、非敏感行不误伤)与注释行不改写;gofmt / go build / go vet / go test / vue-tsc / vite build 全绿

- AgentVersion 0.12.2 → 0.12.4,双架构内嵌二进制已重编:需在 VPS 上点一次「升级 Agent」才生效
2026-09-25 13:56:07 +08:00

44 lines
1.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package frp
import (
"strings"
"testing"
)
// frps.toml 的预览(FRPSServerConfig 返回的内容)绝不能带明文密钥:
// 拉到的内容会直接渲染在浏览器的「即将下发的内容」里。
func TestMaskFRPSSecrets(t *testing.T) {
content := strings.Join([]string{
`bindPort = 7000`,
`auth.method = "token"`,
`auth.token = "s3cr3t-token"`,
`auth.oidc.clientSecret = "s3cr3t-oidc"`,
`# auth.token = "注释里的示例不应受影响"`,
`webServer.addr = "0.0.0.0"`,
}, "\n")
masked := maskFRPSSecrets(content)
if strings.Contains(masked, "s3cr3t-token") || strings.Contains(masked, "s3cr3t-oidc") {
t.Fatalf("预览里仍能看到明文密钥:\n%s", masked)
}
for _, expected := range []string{
`auth.token = "********"`,
`auth.oidc.clientSecret = "********"`,
`bindPort = 7000`,
`auth.method = "token"`,
`webServer.addr = "0.0.0.0"`,
} {
if !strings.Contains(masked, expected) {
t.Fatalf("脱敏后缺少 %q:\n%s", expected, masked)
}
}
}
// 注释行不是生效配置,不参与脱敏(保持模板原样)
func TestMaskFRPSSecretsKeepsComments(t *testing.T) {
content := `# auth.token = "说明文字"`
if got := maskFRPSSecrets(content); got != content {
t.Fatalf("注释行被改写:%q", got)
}
}