mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 17:47:03 +00:00
feat: Add RemoteAddr to SMTPSession (#548)
Signed-off-by: James Hillyerd <james@hillyerd.com>
This commit is contained in:
@@ -50,6 +50,7 @@ type SMTPResponse struct {
|
||||
|
||||
// SMTPSession captures SMTP `MAIL FROM` & `RCPT TO` values prior to mail DATA being received.
|
||||
type SMTPSession struct {
|
||||
From *mail.Address
|
||||
To []*mail.Address
|
||||
From *mail.Address
|
||||
To []*mail.Address
|
||||
RemoteAddr string
|
||||
}
|
||||
|
||||
@@ -47,20 +47,22 @@ func checkSMTPSession(ls *lua.LState, pos int) *event.SMTPSession {
|
||||
// Gets a field value from SMTPSession user object. This emulates a Lua table,
|
||||
// allowing `msg.subject` instead of a Lua object syntax of `msg:subject()`.
|
||||
func smtpSessionIndex(ls *lua.LState) int {
|
||||
m := checkSMTPSession(ls, 1)
|
||||
session := checkSMTPSession(ls, 1)
|
||||
field := ls.CheckString(2)
|
||||
|
||||
// Push the requested field's value onto the stack.
|
||||
switch field {
|
||||
case "from":
|
||||
ls.Push(wrapMailAddress(ls, m.From))
|
||||
ls.Push(wrapMailAddress(ls, session.From))
|
||||
case "to":
|
||||
lt := &lua.LTable{}
|
||||
for _, v := range m.To {
|
||||
for _, v := range session.To {
|
||||
addr := v
|
||||
lt.Append(wrapMailAddress(ls, addr))
|
||||
}
|
||||
ls.Push(lt)
|
||||
case "remote_addr":
|
||||
ls.Push(lua.LString(session.RemoteAddr))
|
||||
default:
|
||||
// Unknown field.
|
||||
ls.Push(lua.LNil)
|
||||
|
||||
@@ -16,23 +16,26 @@ func TestSMTPSessionGetters(t *testing.T) {
|
||||
{Name: "name2", Address: "addr2"},
|
||||
{Name: "name3", Address: "addr3"},
|
||||
},
|
||||
RemoteAddr: "1.2.3.4",
|
||||
}
|
||||
script := `
|
||||
assert(msg, "msg should not be nil")
|
||||
assert(session, "session should not be nil")
|
||||
|
||||
assert_eq(msg.from.name, "name1", "from.name")
|
||||
assert_eq(msg.from.address, "addr1", "from.address")
|
||||
assert_eq(session.from.name, "name1", "from.name")
|
||||
assert_eq(session.from.address, "addr1", "from.address")
|
||||
|
||||
assert_eq(#msg.to, 2, "#msg.to")
|
||||
assert_eq(msg.to[1].name, "name2", "to[1].name")
|
||||
assert_eq(msg.to[1].address, "addr2", "to[1].address")
|
||||
assert_eq(msg.to[2].name, "name3", "to[2].name")
|
||||
assert_eq(msg.to[2].address, "addr3", "to[2].address")
|
||||
assert_eq(#session.to, 2, "#session.to")
|
||||
assert_eq(session.to[1].name, "name2", "to[1].name")
|
||||
assert_eq(session.to[1].address, "addr2", "to[1].address")
|
||||
assert_eq(session.to[2].name, "name3", "to[2].name")
|
||||
assert_eq(session.to[2].address, "addr3", "to[2].address")
|
||||
|
||||
assert_eq(session.remote_addr, "1.2.3.4")
|
||||
`
|
||||
|
||||
ls, _ := test.NewLuaState()
|
||||
registerSMTPSessionType(ls)
|
||||
registerMailAddressType(ls)
|
||||
ls.SetGlobal("msg", wrapSMTPSession(ls, want))
|
||||
ls.SetGlobal("session", wrapSMTPSession(ls, want))
|
||||
require.NoError(t, ls.DoString(script))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user