in smtp/main.go [86:144]
func getMailConfig(ctx context.Context, sg notifiers.SecretGetter, spec *notifiers.Spec) (mailConfig, error) {
delivery := spec.Notification.Delivery
server, ok := delivery["server"].(string)
if !ok {
return mailConfig{}, fmt.Errorf("expected delivery config %v to have string field `server`", delivery)
}
port, ok := delivery["port"].(string)
if !ok {
return mailConfig{}, fmt.Errorf("expected delivery config %v to have string field `port`", delivery)
}
sender, ok := delivery["sender"].(string)
if !ok {
return mailConfig{}, fmt.Errorf("expected delivery config %v to have string field `sender`", delivery)
}
from, ok := delivery["from"].(string)
if !ok {
return mailConfig{}, fmt.Errorf("expected delivery config %v to have string field `from`", delivery)
}
ris, ok := delivery["recipients"].([]interface{})
if !ok {
return mailConfig{}, fmt.Errorf("expected delivery config %v to have repeated field `recipients`", delivery)
}
recipients := make([]string, 0, len(ris))
for _, ri := range ris {
r, ok := ri.(string)
if !ok {
return mailConfig{}, fmt.Errorf("failed to convert recipient (%v) into a string", ri)
}
recipients = append(recipients, r)
}
passwordRef, err := notifiers.GetSecretRef(delivery, "password")
if err != nil {
return mailConfig{}, fmt.Errorf("failed to get ref for secret field `password`: %w", err)
}
passwordResource, err := notifiers.FindSecretResourceName(spec.Secrets, passwordRef)
if err != nil {
return mailConfig{}, fmt.Errorf("failed to find Secret resource name for reference %q: %w", passwordRef, err)
}
password, err := sg.GetSecret(ctx, passwordResource)
if err != nil {
return mailConfig{}, fmt.Errorf("failed to get SMTP password: %w", err)
}
return mailConfig{
server: server,
port: port,
sender: sender,
from: from,
password: password,
recipients: recipients,
}, nil
}