notify/email: Throw error if no auth mechanism matches (#1608)
Signed-off-by: glefloch <glfloch@gmail.com>
This commit is contained in:
parent
3a577968a0
commit
108388a72f
|
@ -220,12 +220,13 @@ func NewEmail(c *config.EmailConfig, t *template.Template, l log.Logger) *Email
|
||||||
// auth resolves a string of authentication mechanisms.
|
// auth resolves a string of authentication mechanisms.
|
||||||
func (n *Email) auth(mechs string) (smtp.Auth, error) {
|
func (n *Email) auth(mechs string) (smtp.Auth, error) {
|
||||||
username := n.conf.AuthUsername
|
username := n.conf.AuthUsername
|
||||||
|
err := &types.MultiError{}
|
||||||
for _, mech := range strings.Split(mechs, " ") {
|
for _, mech := range strings.Split(mechs, " ") {
|
||||||
switch mech {
|
switch mech {
|
||||||
case "CRAM-MD5":
|
case "CRAM-MD5":
|
||||||
secret := string(n.conf.AuthSecret)
|
secret := string(n.conf.AuthSecret)
|
||||||
if secret == "" {
|
if secret == "" {
|
||||||
|
err.Add(errors.New("missing secret for CRAM-MD5 auth mechanism"))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
return smtp.CRAMMD5Auth(username, secret), nil
|
return smtp.CRAMMD5Auth(username, secret), nil
|
||||||
|
@ -233,6 +234,7 @@ func (n *Email) auth(mechs string) (smtp.Auth, error) {
|
||||||
case "PLAIN":
|
case "PLAIN":
|
||||||
password := string(n.conf.AuthPassword)
|
password := string(n.conf.AuthPassword)
|
||||||
if password == "" {
|
if password == "" {
|
||||||
|
err.Add(errors.New("missing password for PLAIN auth mechanism"))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
identity := n.conf.AuthIdentity
|
identity := n.conf.AuthIdentity
|
||||||
|
@ -246,12 +248,16 @@ func (n *Email) auth(mechs string) (smtp.Auth, error) {
|
||||||
case "LOGIN":
|
case "LOGIN":
|
||||||
password := string(n.conf.AuthPassword)
|
password := string(n.conf.AuthPassword)
|
||||||
if password == "" {
|
if password == "" {
|
||||||
|
err.Add(errors.New("missing password for LOGIN auth mechanism"))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
return LoginAuth(username, password), nil
|
return LoginAuth(username, password), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, nil
|
if err.Len() == 0 {
|
||||||
|
err.Add(errors.New("unknown auth mechanism: " + mechs))
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notify implements the Notifier interface.
|
// Notify implements the Notifier interface.
|
||||||
|
|
|
@ -290,3 +290,35 @@ func TestOpsGenie(t *testing.T) {
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
require.Equal(t, err.Error(), "templating error: template: :1: function \"kaput\" not defined")
|
require.Equal(t, err.Error(), "templating error: template: :1: function \"kaput\" not defined")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEmailConfigNoAuthMechs(t *testing.T) {
|
||||||
|
|
||||||
|
email := &Email{
|
||||||
|
conf: &config.EmailConfig{}, tmpl: &template.Template{}, logger: log.NewNopLogger(),
|
||||||
|
}
|
||||||
|
_, err := email.auth("")
|
||||||
|
require.Error(t, err)
|
||||||
|
require.Equal(t, err.Error(), "unknown auth mechanism: ")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEmailConfigMissingAuthParam(t *testing.T) {
|
||||||
|
|
||||||
|
email := &Email{
|
||||||
|
conf: &config.EmailConfig{}, tmpl: &template.Template{}, logger: log.NewNopLogger(),
|
||||||
|
}
|
||||||
|
_, err := email.auth("CRAM-MD5")
|
||||||
|
require.Error(t, err)
|
||||||
|
require.Equal(t, err.Error(), "missing secret for CRAM-MD5 auth mechanism")
|
||||||
|
|
||||||
|
_, err = email.auth("PLAIN")
|
||||||
|
require.Error(t, err)
|
||||||
|
require.Equal(t, err.Error(), "missing password for PLAIN auth mechanism")
|
||||||
|
|
||||||
|
_, err = email.auth("LOGIN")
|
||||||
|
require.Error(t, err)
|
||||||
|
require.Equal(t, err.Error(), "missing password for LOGIN auth mechanism")
|
||||||
|
|
||||||
|
_, err = email.auth("PLAIN LOGIN")
|
||||||
|
require.Error(t, err)
|
||||||
|
require.Equal(t, err.Error(), "missing password for PLAIN auth mechanism; missing password for LOGIN auth mechanism")
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue