allow empty password in client.yml

fixes #374
pull/434/head
Hunter Kehoe 2022-10-09 07:50:37 -06:00
parent cbc912d1e3
commit ce392de0a8
3 changed files with 86 additions and 15 deletions

View File

@ -12,14 +12,14 @@ const (
// Config is the config struct for a Client // Config is the config struct for a Client
type Config struct { type Config struct {
DefaultHost string `yaml:"default-host"` DefaultHost string `yaml:"default-host"`
DefaultUser string `yaml:"default-user"` DefaultUser string `yaml:"default-user"`
DefaultPassword string `yaml:"default-password"` DefaultPassword *string `yaml:"default-password"`
DefaultCommand string `yaml:"default-command"` DefaultCommand string `yaml:"default-command"`
Subscribe []struct { Subscribe []struct {
Topic string `yaml:"topic"` Topic string `yaml:"topic"`
User string `yaml:"user"` User string `yaml:"user"`
Password string `yaml:"password"` Password *string `yaml:"password"`
Command string `yaml:"command"` Command string `yaml:"command"`
If map[string]string `yaml:"if"` If map[string]string `yaml:"if"`
} `yaml:"subscribe"` } `yaml:"subscribe"`
@ -30,7 +30,7 @@ func NewConfig() *Config {
return &Config{ return &Config{
DefaultHost: DefaultBaseURL, DefaultHost: DefaultBaseURL,
DefaultUser: "", DefaultUser: "",
DefaultPassword: "", DefaultPassword: nil,
DefaultCommand: "", DefaultCommand: "",
Subscribe: nil, Subscribe: nil,
} }

View File

@ -12,7 +12,7 @@ func TestConfig_Load(t *testing.T) {
filename := filepath.Join(t.TempDir(), "client.yml") filename := filepath.Join(t.TempDir(), "client.yml")
require.Nil(t, os.WriteFile(filename, []byte(` require.Nil(t, os.WriteFile(filename, []byte(`
default-host: http://localhost default-host: http://localhost
default-user: phil default-user: philipp
default-password: mypass default-password: mypass
default-command: 'echo "Got the message: $message"' default-command: 'echo "Got the message: $message"'
subscribe: subscribe:
@ -31,14 +31,14 @@ subscribe:
conf, err := client.LoadConfig(filename) conf, err := client.LoadConfig(filename)
require.Nil(t, err) require.Nil(t, err)
require.Equal(t, "http://localhost", conf.DefaultHost) require.Equal(t, "http://localhost", conf.DefaultHost)
require.Equal(t, "phil", conf.DefaultUser) require.Equal(t, "philipp", conf.DefaultUser)
require.Equal(t, "mypass", conf.DefaultPassword) require.Equal(t, "mypass", *conf.DefaultPassword)
require.Equal(t, `echo "Got the message: $message"`, conf.DefaultCommand) require.Equal(t, `echo "Got the message: $message"`, conf.DefaultCommand)
require.Equal(t, 4, len(conf.Subscribe)) require.Equal(t, 4, len(conf.Subscribe))
require.Equal(t, "no-command-with-auth", conf.Subscribe[0].Topic) require.Equal(t, "no-command-with-auth", conf.Subscribe[0].Topic)
require.Equal(t, "", conf.Subscribe[0].Command) require.Equal(t, "", conf.Subscribe[0].Command)
require.Equal(t, "phil", conf.Subscribe[0].User) require.Equal(t, "phil", conf.Subscribe[0].User)
require.Equal(t, "mypass", conf.Subscribe[0].Password) require.Equal(t, "mypass", *conf.Subscribe[0].Password)
require.Equal(t, "echo-this", conf.Subscribe[1].Topic) require.Equal(t, "echo-this", conf.Subscribe[1].Topic)
require.Equal(t, `echo "Message received: $message"`, conf.Subscribe[1].Command) require.Equal(t, `echo "Message received: $message"`, conf.Subscribe[1].Command)
require.Equal(t, "alerts", conf.Subscribe[2].Topic) require.Equal(t, "alerts", conf.Subscribe[2].Topic)
@ -46,3 +46,73 @@ subscribe:
require.Equal(t, "high,urgent", conf.Subscribe[2].If["priority"]) require.Equal(t, "high,urgent", conf.Subscribe[2].If["priority"])
require.Equal(t, "defaults", conf.Subscribe[3].Topic) require.Equal(t, "defaults", conf.Subscribe[3].Topic)
} }
func TestConfig_EmptyPassword(t *testing.T) {
filename := filepath.Join(t.TempDir(), "client.yml")
require.Nil(t, os.WriteFile(filename, []byte(`
default-host: http://localhost
default-user: philipp
default-password: ""
subscribe:
- topic: no-command-with-auth
user: phil
password: ""
`), 0600))
conf, err := client.LoadConfig(filename)
require.Nil(t, err)
require.Equal(t, "http://localhost", conf.DefaultHost)
require.Equal(t, "philipp", conf.DefaultUser)
require.Equal(t, "", *conf.DefaultPassword)
require.Equal(t, 1, 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)
require.Equal(t, "", *conf.Subscribe[0].Password)
}
func TestConfig_NullPassword(t *testing.T) {
filename := filepath.Join(t.TempDir(), "client.yml")
require.Nil(t, os.WriteFile(filename, []byte(`
default-host: http://localhost
default-user: philipp
default-password: ~
subscribe:
- topic: no-command-with-auth
user: phil
password: ~
`), 0600))
conf, err := client.LoadConfig(filename)
require.Nil(t, err)
require.Equal(t, "http://localhost", conf.DefaultHost)
require.Equal(t, "philipp", conf.DefaultUser)
require.Nil(t, conf.DefaultPassword)
require.Equal(t, 1, 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)
require.Nil(t, conf.Subscribe[0].Password)
}
func TestConfig_NoPassword(t *testing.T) {
filename := filepath.Join(t.TempDir(), "client.yml")
require.Nil(t, os.WriteFile(filename, []byte(`
default-host: http://localhost
default-user: philipp
subscribe:
- topic: no-command-with-auth
user: phil
`), 0600))
conf, err := client.LoadConfig(filename)
require.Nil(t, err)
require.Equal(t, "http://localhost", conf.DefaultHost)
require.Equal(t, "philipp", conf.DefaultUser)
require.Nil(t, conf.DefaultPassword)
require.Equal(t, 1, 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)
require.Nil(t, conf.Subscribe[0].Password)
}

View File

@ -175,19 +175,20 @@ func doSubscribe(c *cli.Context, cl *client.Client, conf *client.Config, topic,
for filter, value := range s.If { for filter, value := range s.If {
topicOptions = append(topicOptions, client.WithFilter(filter, value)) topicOptions = append(topicOptions, client.WithFilter(filter, value))
} }
var user, password string var user string
var password *string
if s.User != "" { if s.User != "" {
user = s.User user = s.User
} else if conf.DefaultUser != "" { } else if conf.DefaultUser != "" {
user = conf.DefaultUser user = conf.DefaultUser
} }
if s.Password != "" { if s.Password != nil {
password = s.Password password = s.Password
} else if conf.DefaultPassword != "" { } else if conf.DefaultPassword != nil {
password = conf.DefaultPassword password = conf.DefaultPassword
} }
if user != "" && password != "" { if user != "" && password != nil {
topicOptions = append(topicOptions, client.WithBasicAuth(user, password)) topicOptions = append(topicOptions, client.WithBasicAuth(user, *password))
} }
subscriptionID := cl.Subscribe(s.Topic, topicOptions...) subscriptionID := cl.Subscribe(s.Topic, topicOptions...)
if s.Command != "" { if s.Command != "" {