Skip to content

Commit

Permalink
Avoid panic if user.Current() fails; add logging to "ntfy subscribe" …
Browse files Browse the repository at this point in the history
…to help figure out what's wrong
  • Loading branch information
binwiederhier committed Mar 7, 2024
1 parent 7ab8ef7 commit ef302d2
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 14 deletions.
2 changes: 2 additions & 0 deletions client/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package client

import (
"gopkg.in/yaml.v2"
"heckel.io/ntfy/v2/log"
"os"
)

Expand Down Expand Up @@ -44,6 +45,7 @@ func NewConfig() *Config {

// LoadConfig loads the Client config from a yaml file
func LoadConfig(filename string) (*Config, error) {
log.Debug("Loading client config from %s", filename)
b, err := os.ReadFile(filename)
if err != nil {
return nil, err
Expand Down
37 changes: 26 additions & 11 deletions cmd/subscribe.go
Original file line number Diff line number Diff line change
Expand Up @@ -310,28 +310,43 @@ func loadConfig(c *cli.Context) (*client.Config, error) {
if filename != "" {
return client.LoadConfig(filename)
}
configFile := defaultClientConfigFile()
if s, _ := os.Stat(configFile); s != nil {
return client.LoadConfig(configFile)
configFile, err := defaultClientConfigFile()
if err != nil {
log.Warn("Could not determine default client config file: %s", err.Error())
} else {
if s, _ := os.Stat(configFile); s != nil {
return client.LoadConfig(configFile)
}
log.Debug("Config file %s not found", configFile)
}
log.Debug("Loading default config")
return client.NewConfig(), nil
}

//lint:ignore U1000 Conditionally used in different builds
func defaultClientConfigFileUnix() string {
u, _ := user.Current()
func defaultClientConfigFileUnix() (string, error) {
u, err := user.Current()
if err != nil {
return "", fmt.Errorf("could not determine current user: %w", err)
}
configFile := clientRootConfigFileUnixAbsolute
if u.Uid != "0" {
homeDir, _ := os.UserConfigDir()
return filepath.Join(homeDir, clientUserConfigFileUnixRelative)
homeDir, err := os.UserConfigDir()
if err != nil {
return "", fmt.Errorf("could not determine user config dir: %w", err)
}
return filepath.Join(homeDir, clientUserConfigFileUnixRelative), nil
}
return configFile
return configFile, nil
}

//lint:ignore U1000 Conditionally used in different builds
func defaultClientConfigFileWindows() string {
homeDir, _ := os.UserConfigDir()
return filepath.Join(homeDir, clientUserConfigFileWindowsRelative)
func defaultClientConfigFileWindows() (string, error) {
homeDir, err := os.UserConfigDir()
if err != nil {
return "", fmt.Errorf("could not determine user config dir: %w", err)
}
return filepath.Join(homeDir, clientUserConfigFileWindowsRelative), nil
}

func logMessagePrefix(m *client.Message) string {
Expand Down
2 changes: 1 addition & 1 deletion cmd/subscribe_darwin.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ var (
scriptLauncher = []string{"sh", "-c"}
)

func defaultClientConfigFile() string {
func defaultClientConfigFile() (string, error) {
return defaultClientConfigFileUnix()
}
2 changes: 1 addition & 1 deletion cmd/subscribe_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ var (
scriptLauncher = []string{"sh", "-c"}
)

func defaultClientConfigFile() string {
func defaultClientConfigFile() (string, error) {
return defaultClientConfigFileUnix()
}
2 changes: 1 addition & 1 deletion cmd/subscribe_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ var (
scriptLauncher = []string{"cmd.exe", "/Q", "/C"}
)

func defaultClientConfigFile() string {
func defaultClientConfigFile() (string, error) {
return defaultClientConfigFileWindows()
}

0 comments on commit ef302d2

Please sign in to comment.