forked from Silverfish/proton-bridge
fix(GODT-2617): Validate user can send from the SMTP sender address
https://github.com/ProtonMail/go-proton-api/pull/126
This commit is contained in:
@ -17,9 +17,24 @@
|
||||
|
||||
package smtp
|
||||
|
||||
import "errors"
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
var ErrInvalidRecipient = errors.New("invalid recipient")
|
||||
var ErrInvalidReturnPath = errors.New("invalid return path")
|
||||
var ErrNoSuchUser = errors.New("no such user")
|
||||
var ErrTooManyErrors = errors.New("too many failed requests, please try again later")
|
||||
|
||||
type ErrCanNotSendOnAddress struct {
|
||||
address string
|
||||
}
|
||||
|
||||
func NewErrCanNotSendOnAddress(address string) *ErrCanNotSendOnAddress {
|
||||
return &ErrCanNotSendOnAddress{address: address}
|
||||
}
|
||||
|
||||
func (e ErrCanNotSendOnAddress) Error() string {
|
||||
return fmt.Sprintf("can't send on address: %v", e.address)
|
||||
}
|
||||
|
||||
@ -97,11 +97,16 @@ func (s *Service) smtpSendMail(ctx context.Context, authID string, from string,
|
||||
from = sender
|
||||
fromAddr, err = s.identityState.GetAddr(from)
|
||||
if err != nil {
|
||||
logrus.WithError(err).Errorf("Failed to get identity from sender address %v", sender)
|
||||
logrus.WithError(err).Errorf("Failed to get identity for from address %v", sender)
|
||||
return ErrInvalidReturnPath
|
||||
}
|
||||
}
|
||||
|
||||
if !fromAddr.Send {
|
||||
s.log.Errorf("Can't send emails on address: %v", fromAddr.Email)
|
||||
return &ErrCanNotSendOnAddress{address: fromAddr.Email}
|
||||
}
|
||||
|
||||
// Load the user's mail settings.
|
||||
settings, err := s.client.GetMailSettings(ctx)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user