From d64e2167cee4addea0c184656205a274cf8c0ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rton=20Elek?= Date: Mon, 16 Oct 2023 09:51:08 +0200 Subject: [PATCH] satellite: do not validate smtp from / host when emails are disabled Today we got the following error address, even if: `mail.auth-type: nomail` ``` Error: SMTP server address '' couldn't be parsed: missing port in address ``` It's make more sense to print the error message only if the SMTP address (or from address) is expected. Change-Id: Ie07620099b6aac27630fcfd1cda9921ef4b6060c --- satellite/peer.go | 46 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/satellite/peer.go b/satellite/peer.go index 5c6e4434f..2f093a86b 100644 --- a/satellite/peer.go +++ b/satellite/peer.go @@ -228,21 +228,24 @@ type Config struct { } func setupMailService(log *zap.Logger, config Config) (*mailservice.Service, error) { + fromAndHost := func(cfg mailservice.Config) (*mail.Address, string, error) { + // validate from mail address + from, err := mail.ParseAddress(cfg.From) + if err != nil { + return nil, "", errs.New("SMTP from address '%s' couldn't be parsed: %v", cfg.From, err) + } + + // validate smtp server address + host, _, err := net.SplitHostPort(cfg.SMTPServerAddress) + if err != nil && cfg.AuthType != "simulate" && cfg.AuthType != "nologin" { + return nil, "", errs.New("SMTP server address '%s' couldn't be parsed: %v", cfg.SMTPServerAddress, err) + } + return from, host, err + } + // TODO(yar): test multiple satellites using same OAUTH credentials mailConfig := config.Mail - // validate from mail address - from, err := mail.ParseAddress(mailConfig.From) - if err != nil { - return nil, errs.New("SMTP from address '%s' couldn't be parsed: %v", mailConfig.From, err) - } - - // validate smtp server address - host, _, err := net.SplitHostPort(mailConfig.SMTPServerAddress) - if err != nil && mailConfig.AuthType != "simulate" && mailConfig.AuthType != "nologin" { - return nil, errs.New("SMTP server address '%s' couldn't be parsed: %v", mailConfig.SMTPServerAddress, err) - } - var sender mailservice.Sender switch mailConfig.AuthType { case "oauth2": @@ -256,6 +259,11 @@ func setupMailService(log *zap.Logger, config Config) (*mailservice.Service, err return nil, err } + from, _, err := fromAndHost(mailConfig) + if err != nil { + return nil, err + } + sender = &post.SMTPSender{ From: *from, Auth: &oauth2.Auth{ @@ -265,12 +273,22 @@ func setupMailService(log *zap.Logger, config Config) (*mailservice.Service, err ServerAddress: mailConfig.SMTPServerAddress, } case "plain": + from, host, err := fromAndHost(mailConfig) + if err != nil { + return nil, err + } + sender = &post.SMTPSender{ From: *from, Auth: smtp.PlainAuth("", mailConfig.Login, mailConfig.Password, host), ServerAddress: mailConfig.SMTPServerAddress, } case "login": + from, _, err := fromAndHost(mailConfig) + if err != nil { + return nil, err + } + sender = &post.SMTPSender{ From: *from, Auth: post.LoginAuth{ @@ -280,6 +298,10 @@ func setupMailService(log *zap.Logger, config Config) (*mailservice.Service, err ServerAddress: mailConfig.SMTPServerAddress, } case "insecure": + from, _, err := fromAndHost(mailConfig) + if err != nil { + return nil, err + } sender = &post.SMTPSender{ From: *from, ServerAddress: mailConfig.SMTPServerAddress,