mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 09:37:02 +00:00
chore: Update BeforeMailAccepted (#547)
* chore: rename BeforeMailAccepted to BeforeMailFromAccepted Signed-off-by: James Hillyerd <james@hillyerd.com> * chore: update BeforeMailAccepted to use SMTPSession Signed-off-by: James Hillyerd <james@hillyerd.com> --------- Signed-off-by: James Hillyerd <james@hillyerd.com>
This commit is contained in:
@@ -408,7 +408,7 @@ func (s *Session) parseMailFromCmd(arg string) {
|
||||
s.logger.Debug().Msgf("Mail sender is %v", from)
|
||||
|
||||
// Parse from address.
|
||||
localpart, domain, err := policy.ParseEmailAddress(from)
|
||||
_, domain, err := policy.ParseEmailAddress(from)
|
||||
s.logger.Debug().Msgf("Origin domain is %v", domain)
|
||||
if from != "" && err != nil {
|
||||
s.send("501 Bad sender address syntax")
|
||||
@@ -446,10 +446,17 @@ func (s *Session) parseMailFromCmd(arg string) {
|
||||
}
|
||||
}
|
||||
|
||||
// Parse origin (from) address.
|
||||
origin, err := s.addrPolicy.ParseOrigin(from)
|
||||
if err != nil {
|
||||
s.send("501 Bad origin address syntax")
|
||||
s.logger.Warn().Str("from", from).Err(err).Msg("Bad address as MAIL arg")
|
||||
return
|
||||
}
|
||||
|
||||
// Process through extensions.
|
||||
extAction := event.ActionDefer
|
||||
extResult := s.extHost.Events.BeforeMailAccepted.Emit(
|
||||
&event.AddressParts{Local: localpart, Domain: domain})
|
||||
extResult := s.extHost.Events.BeforeMailFromAccepted.Emit(&event.SMTPSession{From: &origin.Address})
|
||||
if extResult != nil {
|
||||
extAction = extResult.Action
|
||||
}
|
||||
@@ -460,12 +467,6 @@ func (s *Session) parseMailFromCmd(arg string) {
|
||||
}
|
||||
|
||||
// Sender was permitted by an extension, or no extension rejected it.
|
||||
origin, err := s.addrPolicy.ParseOrigin(from)
|
||||
if err != nil {
|
||||
s.send("501 Bad origin address syntax")
|
||||
s.logger.Warn().Str("from", from).Err(err).Msg("Bad address as MAIL arg")
|
||||
return
|
||||
}
|
||||
s.from = origin
|
||||
// Ignore ShouldAccept if extensions explicitly allowed this From.
|
||||
if extAction == event.ActionDefer && !s.from.ShouldAccept() {
|
||||
|
||||
@@ -385,17 +385,17 @@ Hi!
|
||||
_, _, _ = c.ReadCodeLine(221)
|
||||
}
|
||||
|
||||
// Tests "MAIL FROM" emits BeforeMailAccepted event.
|
||||
func TestBeforeMailAcceptedEventEmitted(t *testing.T) {
|
||||
// Tests "MAIL FROM" emits BeforeMailFromAccepted event.
|
||||
func TestBeforeMailFromAcceptedEventEmitted(t *testing.T) {
|
||||
ds := test.NewStore()
|
||||
extHost := extension.NewHost()
|
||||
server := setupSMTPServer(ds, extHost)
|
||||
|
||||
var got *event.AddressParts
|
||||
extHost.Events.BeforeMailAccepted.AddListener(
|
||||
var got *event.SMTPSession
|
||||
extHost.Events.BeforeMailFromAccepted.AddListener(
|
||||
"test",
|
||||
func(addr event.AddressParts) *event.SMTPResponse {
|
||||
got = &addr
|
||||
func(session event.SMTPSession) *event.SMTPResponse {
|
||||
got = &session
|
||||
return &event.SMTPResponse{Action: event.ActionDefer}
|
||||
})
|
||||
|
||||
@@ -407,22 +407,22 @@ func TestBeforeMailAcceptedEventEmitted(t *testing.T) {
|
||||
playSession(t, server, script)
|
||||
|
||||
assert.NotNil(t, got, "BeforeMailListener did not receive Address")
|
||||
assert.Equal(t, "john", got.Local, "Address local part had wrong value")
|
||||
assert.Equal(t, "gmail.com", got.Domain, "Address domain part had wrong value")
|
||||
assert.Equal(t, "john@gmail.com", got.From.Address, "Address had wrong value")
|
||||
}
|
||||
|
||||
// Test "MAIL FROM" acts on BeforeMailAccepted event result.
|
||||
func TestBeforeMailAcceptedEventResponse(t *testing.T) {
|
||||
// Test "MAIL FROM" acts on BeforeMailFromAccepted event result.
|
||||
func TestBeforeMailFromAcceptedEventResponse(t *testing.T) {
|
||||
ds := test.NewStore()
|
||||
extHost := extension.NewHost()
|
||||
server := setupSMTPServer(ds, extHost)
|
||||
|
||||
var shouldReturn *event.SMTPResponse
|
||||
var gotEvent *event.AddressParts
|
||||
extHost.Events.BeforeMailAccepted.AddListener(
|
||||
var gotEvent *event.SMTPSession
|
||||
|
||||
extHost.Events.BeforeMailFromAccepted.AddListener(
|
||||
"test",
|
||||
func(addr event.AddressParts) *event.SMTPResponse {
|
||||
gotEvent = &addr
|
||||
func(session event.SMTPSession) *event.SMTPResponse {
|
||||
gotEvent = &session
|
||||
return shouldReturn
|
||||
})
|
||||
|
||||
@@ -462,7 +462,7 @@ func TestBeforeMailAcceptedEventResponse(t *testing.T) {
|
||||
{"QUIT", 221}}
|
||||
playSession(t, server, script)
|
||||
|
||||
assert.NotNil(t, gotEvent, "BeforeMailListener did not receive Address")
|
||||
assert.NotNil(t, gotEvent, "BeforeMailFromAccepted did not receive event")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user