Skip to content

Commit ef302d2

Browse files
committed
Avoid panic if user.Current() fails; add logging to "ntfy subscribe" to help figure out what's wrong
1 parent 7ab8ef7 commit ef302d2

File tree

5 files changed

+31
-14
lines changed

5 files changed

+31
-14
lines changed

client/config.go

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package client
22

33
import (
44
"gopkg.in/yaml.v2"
5+
"heckel.io/ntfy/v2/log"
56
"os"
67
)
78

@@ -44,6 +45,7 @@ func NewConfig() *Config {
4445

4546
// LoadConfig loads the Client config from a yaml file
4647
func LoadConfig(filename string) (*Config, error) {
48+
log.Debug("Loading client config from %s", filename)
4749
b, err := os.ReadFile(filename)
4850
if err != nil {
4951
return nil, err

cmd/subscribe.go

+26-11
Original file line numberDiff line numberDiff line change
@@ -310,28 +310,43 @@ func loadConfig(c *cli.Context) (*client.Config, error) {
310310
if filename != "" {
311311
return client.LoadConfig(filename)
312312
}
313-
configFile := defaultClientConfigFile()
314-
if s, _ := os.Stat(configFile); s != nil {
315-
return client.LoadConfig(configFile)
313+
configFile, err := defaultClientConfigFile()
314+
if err != nil {
315+
log.Warn("Could not determine default client config file: %s", err.Error())
316+
} else {
317+
if s, _ := os.Stat(configFile); s != nil {
318+
return client.LoadConfig(configFile)
319+
}
320+
log.Debug("Config file %s not found", configFile)
316321
}
322+
log.Debug("Loading default config")
317323
return client.NewConfig(), nil
318324
}
319325

320326
//lint:ignore U1000 Conditionally used in different builds
321-
func defaultClientConfigFileUnix() string {
322-
u, _ := user.Current()
327+
func defaultClientConfigFileUnix() (string, error) {
328+
u, err := user.Current()
329+
if err != nil {
330+
return "", fmt.Errorf("could not determine current user: %w", err)
331+
}
323332
configFile := clientRootConfigFileUnixAbsolute
324333
if u.Uid != "0" {
325-
homeDir, _ := os.UserConfigDir()
326-
return filepath.Join(homeDir, clientUserConfigFileUnixRelative)
334+
homeDir, err := os.UserConfigDir()
335+
if err != nil {
336+
return "", fmt.Errorf("could not determine user config dir: %w", err)
337+
}
338+
return filepath.Join(homeDir, clientUserConfigFileUnixRelative), nil
327339
}
328-
return configFile
340+
return configFile, nil
329341
}
330342

331343
//lint:ignore U1000 Conditionally used in different builds
332-
func defaultClientConfigFileWindows() string {
333-
homeDir, _ := os.UserConfigDir()
334-
return filepath.Join(homeDir, clientUserConfigFileWindowsRelative)
344+
func defaultClientConfigFileWindows() (string, error) {
345+
homeDir, err := os.UserConfigDir()
346+
if err != nil {
347+
return "", fmt.Errorf("could not determine user config dir: %w", err)
348+
}
349+
return filepath.Join(homeDir, clientUserConfigFileWindowsRelative), nil
335350
}
336351

337352
func logMessagePrefix(m *client.Message) string {

cmd/subscribe_darwin.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ var (
1111
scriptLauncher = []string{"sh", "-c"}
1212
)
1313

14-
func defaultClientConfigFile() string {
14+
func defaultClientConfigFile() (string, error) {
1515
return defaultClientConfigFileUnix()
1616
}

cmd/subscribe_unix.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ var (
1313
scriptLauncher = []string{"sh", "-c"}
1414
)
1515

16-
func defaultClientConfigFile() string {
16+
func defaultClientConfigFile() (string, error) {
1717
return defaultClientConfigFileUnix()
1818
}

cmd/subscribe_windows.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ var (
1010
scriptLauncher = []string{"cmd.exe", "/Q", "/C"}
1111
)
1212

13-
func defaultClientConfigFile() string {
13+
func defaultClientConfigFile() (string, error) {
1414
return defaultClientConfigFileWindows()
1515
}

0 commit comments

Comments
 (0)