- 内置 SSH 终端(/terminal):复用已保存的 SSH 密码/私钥与独立 known_hosts 校验 - 终端二次认证、会话审计(/terminal/audits)、录像审计与常用命令 - DDNS 服务商名称与自定义 IP,新增迁移 037/038/039 - CHANGELOG 与 VERSION 更新至 2.0.0
This commit is contained in:
@@ -34,7 +34,7 @@ func Load() Config {
|
||||
dataDir = abs
|
||||
}
|
||||
return Config{
|
||||
ListenAddr: envOr("HAVLINE_LISTEN", ":6893"),
|
||||
ListenAddr: envOrAllowEmpty("HAVLINE_LISTEN", ":6893"),
|
||||
GatewaySocket: envOr("HAVLINE_GATEWAY_SOCKET", ""),
|
||||
GatewayPrefix: envOr("HAVLINE_GATEWAY_PREFIX", ""),
|
||||
DataDir: dataDir,
|
||||
@@ -48,7 +48,7 @@ func Load() Config {
|
||||
FrpPIDFile: envOr("HAVLINE_FRP_PID", dataDir+"/frp/frpc.pid"),
|
||||
UpdaterSocket: updaterSocket(),
|
||||
UpdaterToken: envOr("HAVLINE_UPDATER_TOKEN", ""),
|
||||
UpdaterTokenFile: envOr("HAVLINE_UPDATER_TOKEN_FILE", defaultUpdaterTokenFile()),
|
||||
UpdaterTokenFile: envOrAllowEmpty("HAVLINE_UPDATER_TOKEN_FILE", defaultUpdaterTokenFile()),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,6 +222,15 @@ func envOr(key, fallback string) string {
|
||||
return fallback
|
||||
}
|
||||
|
||||
// envOrAllowEmpty 区分“未配置”和“显式配置为空”。
|
||||
// 原生版用它关闭 TCP 监听(避免与 Docker 版争用 6893)并禁用 updater Token 文件。
|
||||
func envOrAllowEmpty(key, fallback string) string {
|
||||
if v, ok := os.LookupEnv(key); ok {
|
||||
return v
|
||||
}
|
||||
return fallback
|
||||
}
|
||||
|
||||
func defaultMimeTypes() string {
|
||||
candidates := []string{
|
||||
"/etc/nginx/mime.types",
|
||||
|
||||
@@ -44,6 +44,24 @@ func TestLoadUpdaterTokenFile(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadListenAddrAllowsExplicitEmpty(t *testing.T) {
|
||||
t.Setenv("HAVLINE_LISTEN", "")
|
||||
|
||||
cfg := Load()
|
||||
if cfg.ListenAddr != "" {
|
||||
t.Fatalf("listen addr %q, want empty for unix-socket-only mode", cfg.ListenAddr)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadUpdaterTokenFileAllowsExplicitEmpty(t *testing.T) {
|
||||
t.Setenv("HAVLINE_UPDATER_TOKEN_FILE", "")
|
||||
|
||||
cfg := Load()
|
||||
if cfg.UpdaterTokenFile != "" {
|
||||
t.Fatalf("updater token file %q, want empty", cfg.UpdaterTokenFile)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSSHKnownHostsPathForServer(t *testing.T) {
|
||||
cfg := Config{DataDir: "/data"}
|
||||
want := filepath.Join("/data", "ssh_known_hosts", "server-3")
|
||||
|
||||
Reference in New Issue
Block a user