diff --git a/client/config.go b/client/config.go index 0866cd1b..2bbe9d51 100644 --- a/client/config.go +++ b/client/config.go @@ -12,8 +12,11 @@ const ( // Config is the config struct for a Client type Config struct { - DefaultHost string `yaml:"default-host"` - Subscribe []struct { + DefaultHost string `yaml:"default-host"` + DefaultUser string `yaml:"default-user"` + DefaultPassword string `yaml:"default-password"` + DefaultCommand string `yaml:"default-command"` + Subscribe []struct { Topic string `yaml:"topic"` User string `yaml:"user"` Password string `yaml:"password"` @@ -25,8 +28,11 @@ type Config struct { // NewConfig creates a new Config struct for a Client func NewConfig() *Config { return &Config{ - DefaultHost: DefaultBaseURL, - Subscribe: nil, + DefaultHost: DefaultBaseURL, + DefaultUser: "", + DefaultPassword: "", + DefaultCommand: "", + Subscribe: nil, } } diff --git a/client/config_test.go b/client/config_test.go index d601cdb4..240d5ac7 100644 --- a/client/config_test.go +++ b/client/config_test.go @@ -12,6 +12,9 @@ func TestConfig_Load(t *testing.T) { filename := filepath.Join(t.TempDir(), "client.yml") require.Nil(t, os.WriteFile(filename, []byte(` default-host: http://localhost +default-user: phil +default-password: mypass +default-command: 'echo "Got the message: $message"' subscribe: - topic: no-command-with-auth user: phil @@ -22,12 +25,16 @@ subscribe: command: notify-send -i /usr/share/ntfy/logo.png "Important" "$m" if: priority: high,urgent + - topic: defaults `), 0600)) conf, err := client.LoadConfig(filename) require.Nil(t, err) require.Equal(t, "http://localhost", conf.DefaultHost) - require.Equal(t, 3, len(conf.Subscribe)) + require.Equal(t, "phil", conf.DefaultUser) + require.Equal(t, "mypass", conf.DefaultPassword) + require.Equal(t, `echo "Got the message: $message"`, conf.DefaultCommand) + require.Equal(t, 4, len(conf.Subscribe)) require.Equal(t, "no-command-with-auth", conf.Subscribe[0].Topic) require.Equal(t, "", conf.Subscribe[0].Command) require.Equal(t, "phil", conf.Subscribe[0].User) @@ -37,4 +44,5 @@ subscribe: require.Equal(t, "alerts", conf.Subscribe[2].Topic) require.Equal(t, `notify-send -i /usr/share/ntfy/logo.png "Important" "$m"`, conf.Subscribe[2].Command) require.Equal(t, "high,urgent", conf.Subscribe[2].If["priority"]) + require.Equal(t, "defaults", conf.Subscribe[3].Topic) } diff --git a/cmd/subscribe.go b/cmd/subscribe.go index 94c11b4d..2c737870 100644 --- a/cmd/subscribe.go +++ b/cmd/subscribe.go @@ -175,11 +175,32 @@ func doSubscribe(c *cli.Context, cl *client.Client, conf *client.Config, topic, for filter, value := range s.If { topicOptions = append(topicOptions, client.WithFilter(filter, value)) } - if s.User != "" && s.Password != "" { - topicOptions = append(topicOptions, client.WithBasicAuth(s.User, s.Password)) + var user, password string + if s.User != "" { + user = s.User + } else if conf.DefaultUser != "" { + user = conf.DefaultUser + } else { + user = "" + } + if s.Password != "" { + password = s.Password + } else if conf.DefaultPassword != "" { + password = conf.DefaultPassword + } else { + password = "" + } + if user != "" && password != "" { + topicOptions = append(topicOptions, client.WithBasicAuth(user, password)) } subscriptionID := cl.Subscribe(s.Topic, topicOptions...) - cmds[subscriptionID] = s.Command + if s.Command != "" { + cmds[subscriptionID] = s.Command + } else if conf.DefaultCommand != "" { + cmds[subscriptionID] = conf.DefaultCommand + } else { + cmds[subscriptionID] = "" + } } if topic != "" { subscriptionID := cl.Subscribe(topic, options...)