diff --git a/cmd/headscale/cli/utils.go b/cmd/headscale/cli/utils.go index d8d0987b..af4391a3 100644 --- a/cmd/headscale/cli/utils.go +++ b/cmd/headscale/cli/utils.go @@ -9,7 +9,6 @@ import ( "io/fs" "net/url" "os" - "path/filepath" "reflect" "strconv" "strings" @@ -272,19 +271,6 @@ func GetDNSConfig() (*tailcfg.DNSConfig, string) { return nil, "" } -func AbsolutePathFromConfigPath(path string) string { - // If a relative path is provided, prefix it with the the directory where - // the config file was found. - if (path != "") && !strings.HasPrefix(path, string(os.PathSeparator)) { - dir, _ := filepath.Split(viper.ConfigFileUsed()) - if dir != "" { - path = filepath.Join(dir, path) - } - } - - return path -} - func GetHeadscaleConfig() headscale.Config { dnsConfig, baseDomain := GetDNSConfig() derpConfig := GetDERPConfig() @@ -350,7 +336,7 @@ func GetHeadscaleConfig() headscale.Config { GRPCAllowInsecure: viper.GetBool("grpc_allow_insecure"), IPPrefixes: prefixes, - PrivateKeyPath: AbsolutePathFromConfigPath(viper.GetString("private_key_path")), + PrivateKeyPath: headscale.AbsolutePathFromConfigPath(viper.GetString("private_key_path")), BaseDomain: baseDomain, DERP: derpConfig, @@ -360,7 +346,7 @@ func GetHeadscaleConfig() headscale.Config { ), DBtype: viper.GetString("db_type"), - DBpath: AbsolutePathFromConfigPath(viper.GetString("db_path")), + DBpath: headscale.AbsolutePathFromConfigPath(viper.GetString("db_path")), DBhost: viper.GetString("db_host"), DBport: viper.GetInt("db_port"), DBname: viper.GetString("db_name"), @@ -369,13 +355,13 @@ func GetHeadscaleConfig() headscale.Config { TLSLetsEncryptHostname: viper.GetString("tls_letsencrypt_hostname"), TLSLetsEncryptListen: viper.GetString("tls_letsencrypt_listen"), - TLSLetsEncryptCacheDir: AbsolutePathFromConfigPath( + TLSLetsEncryptCacheDir: headscale.AbsolutePathFromConfigPath( viper.GetString("tls_letsencrypt_cache_dir"), ), TLSLetsEncryptChallengeType: viper.GetString("tls_letsencrypt_challenge_type"), - TLSCertPath: AbsolutePathFromConfigPath(viper.GetString("tls_cert_path")), - TLSKeyPath: AbsolutePathFromConfigPath(viper.GetString("tls_key_path")), + TLSCertPath: headscale.AbsolutePathFromConfigPath(viper.GetString("tls_cert_path")), + TLSKeyPath: headscale.AbsolutePathFromConfigPath(viper.GetString("tls_key_path")), TLSClientAuthMode: tlsClientAuthMode, DNSConfig: dnsConfig, @@ -436,7 +422,7 @@ func getHeadscaleApp() (*headscale.Headscale, error) { // We are doing this here, as in the future could be cool to have it also hot-reload if cfg.ACL.PolicyPath != "" { - aclPath := AbsolutePathFromConfigPath(cfg.ACL.PolicyPath) + aclPath := headscale.AbsolutePathFromConfigPath(cfg.ACL.PolicyPath) err = app.LoadACLPolicy(aclPath) if err != nil { log.Fatal(). diff --git a/utils.go b/utils.go index e7a7a739..6dddf4c5 100644 --- a/utils.go +++ b/utils.go @@ -12,10 +12,13 @@ import ( "encoding/json" "fmt" "net" + "os" + "path/filepath" "reflect" "strings" "github.com/rs/zerolog/log" + "github.com/spf13/viper" "inet.af/netaddr" "tailscale.com/tailcfg" "tailscale.com/types/key" @@ -334,3 +337,16 @@ func IsStringInSlice(slice []string, str string) bool { return false } + +func AbsolutePathFromConfigPath(path string) string { + // If a relative path is provided, prefix it with the the directory where + // the config file was found. + if (path != "") && !strings.HasPrefix(path, string(os.PathSeparator)) { + dir, _ := filepath.Split(viper.ConfigFileUsed()) + if dir != "" { + path = filepath.Join(dir, path) + } + } + + return path +}