mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 17:47:03 +00:00
Replace message.Metadata usage with event.MessageMetadata (#333)
Signed-off-by: James Hillyerd <james@hillyerd.com>
This commit is contained in:
@@ -20,4 +20,5 @@ type MessageMetadata struct {
|
|||||||
Date time.Time
|
Date time.Time
|
||||||
Subject string
|
Subject string
|
||||||
Size int64
|
Size int64
|
||||||
|
Seen bool
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ type Manager interface {
|
|||||||
prefix string,
|
prefix string,
|
||||||
content []byte,
|
content []byte,
|
||||||
) (id string, err error)
|
) (id string, err error)
|
||||||
GetMetadata(mailbox string) ([]*Metadata, error)
|
GetMetadata(mailbox string) ([]*event.MessageMetadata, error)
|
||||||
GetMessage(mailbox, id string) (*Message, error)
|
GetMessage(mailbox, id string) (*Message, error)
|
||||||
MarkSeen(mailbox, id string) error
|
MarkSeen(mailbox, id string) error
|
||||||
PurgeMessages(mailbox string) error
|
PurgeMessages(mailbox string) error
|
||||||
@@ -68,7 +68,7 @@ func (s *StoreManager) Deliver(
|
|||||||
|
|
||||||
log.Debug().Str("module", "message").Str("mailbox", to.Mailbox).Msg("Delivering message")
|
log.Debug().Str("module", "message").Str("mailbox", to.Mailbox).Msg("Delivering message")
|
||||||
delivery := &Delivery{
|
delivery := &Delivery{
|
||||||
Meta: Metadata{
|
Meta: event.MessageMetadata{
|
||||||
Mailbox: to.Mailbox,
|
Mailbox: to.Mailbox,
|
||||||
From: fromaddr[0],
|
From: fromaddr[0],
|
||||||
To: toaddr,
|
To: toaddr,
|
||||||
@@ -83,27 +83,20 @@ func (s *StoreManager) Deliver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Emit message stored event.
|
// Emit message stored event.
|
||||||
event := event.MessageMetadata{
|
event := delivery.Meta
|
||||||
Mailbox: to.Mailbox,
|
event.ID = id
|
||||||
ID: id,
|
|
||||||
From: delivery.From(),
|
|
||||||
To: delivery.To(),
|
|
||||||
Subject: delivery.Subject(),
|
|
||||||
Date: delivery.Date(),
|
|
||||||
Size: delivery.Size(),
|
|
||||||
}
|
|
||||||
go s.ExtHost.Events.AfterMessageStored.Emit(&event)
|
go s.ExtHost.Events.AfterMessageStored.Emit(&event)
|
||||||
|
|
||||||
return id, nil
|
return id, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMetadata returns a slice of metadata for the specified mailbox.
|
// GetMetadata returns a slice of metadata for the specified mailbox.
|
||||||
func (s *StoreManager) GetMetadata(mailbox string) ([]*Metadata, error) {
|
func (s *StoreManager) GetMetadata(mailbox string) ([]*event.MessageMetadata, error) {
|
||||||
messages, err := s.Store.GetMessages(mailbox)
|
messages, err := s.Store.GetMessages(mailbox)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
metas := make([]*Metadata, len(messages))
|
metas := make([]*event.MessageMetadata, len(messages))
|
||||||
for i, sm := range messages {
|
for i, sm := range messages {
|
||||||
metas[i] = makeMetadata(sm)
|
metas[i] = makeMetadata(sm)
|
||||||
}
|
}
|
||||||
@@ -126,7 +119,7 @@ func (s *StoreManager) GetMessage(mailbox, id string) (*Message, error) {
|
|||||||
}
|
}
|
||||||
_ = r.Close()
|
_ = r.Close()
|
||||||
header := makeMetadata(sm)
|
header := makeMetadata(sm)
|
||||||
return &Message{Metadata: *header, env: env}, nil
|
return &Message{MessageMetadata: *header, env: env}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarkSeen marks the message as having been read.
|
// MarkSeen marks the message as having been read.
|
||||||
@@ -161,8 +154,8 @@ func (s *StoreManager) MailboxForAddress(mailbox string) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// makeMetadata populates Metadata from a storage.Message.
|
// makeMetadata populates Metadata from a storage.Message.
|
||||||
func makeMetadata(m storage.Message) *Metadata {
|
func makeMetadata(m storage.Message) *event.MessageMetadata {
|
||||||
return &Metadata{
|
return &event.MessageMetadata{
|
||||||
Mailbox: m.Mailbox(),
|
Mailbox: m.Mailbox(),
|
||||||
ID: m.ID(),
|
ID: m.ID(),
|
||||||
From: m.From(),
|
From: m.From(),
|
||||||
|
|||||||
@@ -8,32 +8,21 @@ import (
|
|||||||
"net/textproto"
|
"net/textproto"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/inbucket/inbucket/pkg/extension/event"
|
||||||
"github.com/inbucket/inbucket/pkg/storage"
|
"github.com/inbucket/inbucket/pkg/storage"
|
||||||
"github.com/jhillyerd/enmime"
|
"github.com/jhillyerd/enmime"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Metadata holds information about a message, but not the content.
|
|
||||||
type Metadata struct {
|
|
||||||
Mailbox string
|
|
||||||
ID string
|
|
||||||
From *mail.Address
|
|
||||||
To []*mail.Address
|
|
||||||
Date time.Time
|
|
||||||
Subject string
|
|
||||||
Size int64
|
|
||||||
Seen bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// Message holds both the metadata and content of a message.
|
// Message holds both the metadata and content of a message.
|
||||||
type Message struct {
|
type Message struct {
|
||||||
Metadata
|
event.MessageMetadata
|
||||||
env *enmime.Envelope
|
env *enmime.Envelope
|
||||||
}
|
}
|
||||||
|
|
||||||
// New constructs a new Message
|
// New constructs a new Message
|
||||||
func New(m Metadata, e *enmime.Envelope) *Message {
|
func New(m event.MessageMetadata, e *enmime.Envelope) *Message {
|
||||||
return &Message{
|
return &Message{
|
||||||
Metadata: m,
|
MessageMetadata: m,
|
||||||
env: e,
|
env: e,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -65,7 +54,7 @@ func (m *Message) Text() string {
|
|||||||
|
|
||||||
// Delivery is used to add a message to storage.
|
// Delivery is used to add a message to storage.
|
||||||
type Delivery struct {
|
type Delivery struct {
|
||||||
Meta Metadata
|
Meta event.MessageMetadata
|
||||||
Reader io.Reader
|
Reader io.Reader
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/inbucket/inbucket/pkg/extension/event"
|
||||||
"github.com/inbucket/inbucket/pkg/message"
|
"github.com/inbucket/inbucket/pkg/message"
|
||||||
"github.com/inbucket/inbucket/pkg/test"
|
"github.com/inbucket/inbucket/pkg/test"
|
||||||
"github.com/jhillyerd/enmime"
|
"github.com/jhillyerd/enmime"
|
||||||
@@ -67,7 +68,7 @@ func TestRestMailboxList(t *testing.T) {
|
|||||||
// Test JSON message headers
|
// Test JSON message headers
|
||||||
tzPDT := time.FixedZone("PDT", -7*3600)
|
tzPDT := time.FixedZone("PDT", -7*3600)
|
||||||
tzPST := time.FixedZone("PST", -8*3600)
|
tzPST := time.FixedZone("PST", -8*3600)
|
||||||
meta1 := message.Metadata{
|
meta1 := event.MessageMetadata{
|
||||||
Mailbox: "good",
|
Mailbox: "good",
|
||||||
ID: "0001",
|
ID: "0001",
|
||||||
From: &mail.Address{Name: "", Address: "from1@host"},
|
From: &mail.Address{Name: "", Address: "from1@host"},
|
||||||
@@ -75,7 +76,7 @@ func TestRestMailboxList(t *testing.T) {
|
|||||||
Subject: "subject 1",
|
Subject: "subject 1",
|
||||||
Date: time.Date(2012, 2, 1, 10, 11, 12, 253, tzPST),
|
Date: time.Date(2012, 2, 1, 10, 11, 12, 253, tzPST),
|
||||||
}
|
}
|
||||||
meta2 := message.Metadata{
|
meta2 := event.MessageMetadata{
|
||||||
Mailbox: "good",
|
Mailbox: "good",
|
||||||
ID: "0002",
|
ID: "0002",
|
||||||
From: &mail.Address{Name: "", Address: "from2@host"},
|
From: &mail.Address{Name: "", Address: "from2@host"},
|
||||||
@@ -83,8 +84,8 @@ func TestRestMailboxList(t *testing.T) {
|
|||||||
Subject: "subject 2",
|
Subject: "subject 2",
|
||||||
Date: time.Date(2012, 7, 1, 10, 11, 12, 253, tzPDT),
|
Date: time.Date(2012, 7, 1, 10, 11, 12, 253, tzPDT),
|
||||||
}
|
}
|
||||||
mm.AddMessage("good", &message.Message{Metadata: meta1})
|
mm.AddMessage("good", &message.Message{MessageMetadata: meta1})
|
||||||
mm.AddMessage("good", &message.Message{Metadata: meta2})
|
mm.AddMessage("good", &message.Message{MessageMetadata: meta2})
|
||||||
|
|
||||||
// Check return code
|
// Check return code
|
||||||
w, err = testRestGet("http://localhost/api/v1/mailbox/good")
|
w, err = testRestGet("http://localhost/api/v1/mailbox/good")
|
||||||
@@ -178,7 +179,7 @@ func TestRestMessage(t *testing.T) {
|
|||||||
// Test JSON message headers
|
// Test JSON message headers
|
||||||
tzPST := time.FixedZone("PST", -8*3600)
|
tzPST := time.FixedZone("PST", -8*3600)
|
||||||
msg1 := message.New(
|
msg1 := message.New(
|
||||||
message.Metadata{
|
event.MessageMetadata{
|
||||||
Mailbox: "good",
|
Mailbox: "good",
|
||||||
ID: "0001",
|
ID: "0001",
|
||||||
From: &mail.Address{Name: "", Address: "from1@host"},
|
From: &mail.Address{Name: "", Address: "from1@host"},
|
||||||
@@ -254,7 +255,7 @@ func TestRestMarkSeen(t *testing.T) {
|
|||||||
// Create some messages.
|
// Create some messages.
|
||||||
tzPDT := time.FixedZone("PDT", -7*3600)
|
tzPDT := time.FixedZone("PDT", -7*3600)
|
||||||
tzPST := time.FixedZone("PST", -8*3600)
|
tzPST := time.FixedZone("PST", -8*3600)
|
||||||
meta1 := message.Metadata{
|
meta1 := event.MessageMetadata{
|
||||||
Mailbox: "good",
|
Mailbox: "good",
|
||||||
ID: "0001",
|
ID: "0001",
|
||||||
From: &mail.Address{Name: "", Address: "from1@host"},
|
From: &mail.Address{Name: "", Address: "from1@host"},
|
||||||
@@ -262,7 +263,7 @@ func TestRestMarkSeen(t *testing.T) {
|
|||||||
Subject: "subject 1",
|
Subject: "subject 1",
|
||||||
Date: time.Date(2012, 2, 1, 10, 11, 12, 253, tzPST),
|
Date: time.Date(2012, 2, 1, 10, 11, 12, 253, tzPST),
|
||||||
}
|
}
|
||||||
meta2 := message.Metadata{
|
meta2 := event.MessageMetadata{
|
||||||
Mailbox: "good",
|
Mailbox: "good",
|
||||||
ID: "0002",
|
ID: "0002",
|
||||||
From: &mail.Address{Name: "", Address: "from2@host"},
|
From: &mail.Address{Name: "", Address: "from2@host"},
|
||||||
@@ -270,8 +271,8 @@ func TestRestMarkSeen(t *testing.T) {
|
|||||||
Subject: "subject 2",
|
Subject: "subject 2",
|
||||||
Date: time.Date(2012, 7, 1, 10, 11, 12, 253, tzPDT),
|
Date: time.Date(2012, 7, 1, 10, 11, 12, 253, tzPDT),
|
||||||
}
|
}
|
||||||
mm.AddMessage("good", &message.Message{Metadata: meta1})
|
mm.AddMessage("good", &message.Message{MessageMetadata: meta1})
|
||||||
mm.AddMessage("good", &message.Message{Metadata: meta2})
|
mm.AddMessage("good", &message.Message{MessageMetadata: meta2})
|
||||||
// Mark one read.
|
// Mark one read.
|
||||||
w, err := testRestPatch("http://localhost/api/v1/mailbox/good/0002", `{"seen":true}`)
|
w, err := testRestPatch("http://localhost/api/v1/mailbox/good/0002", `{"seen":true}`)
|
||||||
expectCode := 200
|
expectCode := 200
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/inbucket/inbucket/pkg/config"
|
"github.com/inbucket/inbucket/pkg/config"
|
||||||
|
"github.com/inbucket/inbucket/pkg/extension/event"
|
||||||
"github.com/inbucket/inbucket/pkg/message"
|
"github.com/inbucket/inbucket/pkg/message"
|
||||||
"github.com/inbucket/inbucket/pkg/storage"
|
"github.com/inbucket/inbucket/pkg/storage"
|
||||||
"github.com/inbucket/inbucket/pkg/test"
|
"github.com/inbucket/inbucket/pkg/test"
|
||||||
@@ -211,7 +212,7 @@ func setupDataStore(cfg config.Storage) (*Store, *bytes.Buffer) {
|
|||||||
// the size of the generated message.
|
// the size of the generated message.
|
||||||
func deliverMessage(ds *Store, mbName string, subject string, date time.Time) (string, int64) {
|
func deliverMessage(ds *Store, mbName string, subject string, date time.Time) (string, int64) {
|
||||||
// Build message for delivery
|
// Build message for delivery
|
||||||
meta := message.Metadata{
|
meta := event.MessageMetadata{
|
||||||
Mailbox: mbName,
|
Mailbox: mbName,
|
||||||
To: []*mail.Address{{Name: "", Address: "somebody@host"}},
|
To: []*mail.Address{{Name: "", Address: "somebody@host"}},
|
||||||
From: &mail.Address{Name: "", Address: "somebodyelse@host"},
|
From: &mail.Address{Name: "", Address: "somebodyelse@host"},
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/inbucket/inbucket/pkg/config"
|
"github.com/inbucket/inbucket/pkg/config"
|
||||||
|
"github.com/inbucket/inbucket/pkg/extension/event"
|
||||||
"github.com/inbucket/inbucket/pkg/message"
|
"github.com/inbucket/inbucket/pkg/message"
|
||||||
"github.com/inbucket/inbucket/pkg/storage"
|
"github.com/inbucket/inbucket/pkg/storage"
|
||||||
"github.com/inbucket/inbucket/pkg/test"
|
"github.com/inbucket/inbucket/pkg/test"
|
||||||
@@ -59,7 +60,7 @@ func TestDoRetentionScan(t *testing.T) {
|
|||||||
// stubMessage creates a message stub of a specific age
|
// stubMessage creates a message stub of a specific age
|
||||||
func stubMessage(mailbox string, ageHours int) storage.Message {
|
func stubMessage(mailbox string, ageHours int) storage.Message {
|
||||||
return &message.Delivery{
|
return &message.Delivery{
|
||||||
Meta: message.Metadata{
|
Meta: event.MessageMetadata{
|
||||||
Mailbox: mailbox,
|
Mailbox: mailbox,
|
||||||
ID: fmt.Sprintf("MSG[age=%vh]", ageHours),
|
ID: fmt.Sprintf("MSG[age=%vh]", ageHours),
|
||||||
Date: time.Now().Add(time.Duration(ageHours*-1) * time.Hour),
|
Date: time.Now().Add(time.Duration(ageHours*-1) * time.Hour),
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/inbucket/inbucket/pkg/config"
|
"github.com/inbucket/inbucket/pkg/config"
|
||||||
|
"github.com/inbucket/inbucket/pkg/extension/event"
|
||||||
"github.com/inbucket/inbucket/pkg/message"
|
"github.com/inbucket/inbucket/pkg/message"
|
||||||
"github.com/inbucket/inbucket/pkg/policy"
|
"github.com/inbucket/inbucket/pkg/policy"
|
||||||
"github.com/inbucket/inbucket/pkg/storage"
|
"github.com/inbucket/inbucket/pkg/storage"
|
||||||
@@ -42,14 +43,14 @@ func (m *ManagerStub) GetMessage(mailbox, id string) (*message.Message, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetMetadata gets all the metadata for the specified mailbox.
|
// GetMetadata gets all the metadata for the specified mailbox.
|
||||||
func (m *ManagerStub) GetMetadata(mailbox string) ([]*message.Metadata, error) {
|
func (m *ManagerStub) GetMetadata(mailbox string) ([]*event.MessageMetadata, error) {
|
||||||
if mailbox == "messageserr" {
|
if mailbox == "messageserr" {
|
||||||
return nil, errors.New("internal error")
|
return nil, errors.New("internal error")
|
||||||
}
|
}
|
||||||
messages := m.mailboxes[mailbox]
|
messages := m.mailboxes[mailbox]
|
||||||
metas := make([]*message.Metadata, len(messages))
|
metas := make([]*event.MessageMetadata, len(messages))
|
||||||
for i, msg := range messages {
|
for i, msg := range messages {
|
||||||
metas[i] = &msg.Metadata
|
metas[i] = &msg.MessageMetadata
|
||||||
}
|
}
|
||||||
return metas, nil
|
return metas, nil
|
||||||
}
|
}
|
||||||
@@ -69,7 +70,7 @@ func (m *ManagerStub) MarkSeen(mailbox, id string) error {
|
|||||||
}
|
}
|
||||||
for _, msg := range m.mailboxes[mailbox] {
|
for _, msg := range m.mailboxes[mailbox] {
|
||||||
if msg.ID == id {
|
if msg.ID == id {
|
||||||
msg.Metadata.Seen = true
|
msg.MessageMetadata.Seen = true
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/inbucket/inbucket/pkg/config"
|
"github.com/inbucket/inbucket/pkg/config"
|
||||||
|
"github.com/inbucket/inbucket/pkg/extension/event"
|
||||||
"github.com/inbucket/inbucket/pkg/message"
|
"github.com/inbucket/inbucket/pkg/message"
|
||||||
"github.com/inbucket/inbucket/pkg/storage"
|
"github.com/inbucket/inbucket/pkg/storage"
|
||||||
)
|
)
|
||||||
@@ -61,7 +62,7 @@ func testMetadata(t *testing.T, store storage.Store) {
|
|||||||
subject := "fantastic test subject line"
|
subject := "fantastic test subject line"
|
||||||
content := "doesn't matter"
|
content := "doesn't matter"
|
||||||
delivery := &message.Delivery{
|
delivery := &message.Delivery{
|
||||||
Meta: message.Metadata{
|
Meta: event.MessageMetadata{
|
||||||
// ID and Size will be determined by the Store.
|
// ID and Size will be determined by the Store.
|
||||||
Mailbox: mailbox,
|
Mailbox: mailbox,
|
||||||
From: from,
|
From: from,
|
||||||
@@ -130,7 +131,7 @@ func testContent(t *testing.T, store storage.Store) {
|
|||||||
date := time.Now()
|
date := time.Now()
|
||||||
subject := "fantastic test subject line"
|
subject := "fantastic test subject line"
|
||||||
delivery := &message.Delivery{
|
delivery := &message.Delivery{
|
||||||
Meta: message.Metadata{
|
Meta: event.MessageMetadata{
|
||||||
// ID and Size will be determined by the Store.
|
// ID and Size will be determined by the Store.
|
||||||
Mailbox: mailbox,
|
Mailbox: mailbox,
|
||||||
From: from,
|
From: from,
|
||||||
@@ -408,7 +409,7 @@ func DeliverToStore(
|
|||||||
date time.Time,
|
date time.Time,
|
||||||
) (string, int64) {
|
) (string, int64) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
meta := message.Metadata{
|
meta := event.MessageMetadata{
|
||||||
Mailbox: mailbox,
|
Mailbox: mailbox,
|
||||||
To: []*mail.Address{{Name: "Some Body", Address: "somebody@host"}},
|
To: []*mail.Address{{Name: "Some Body", Address: "somebody@host"}},
|
||||||
From: &mail.Address{Name: "Some B. Else", Address: "somebodyelse@host"},
|
From: &mail.Address{Name: "Some B. Else", Address: "somebodyelse@host"},
|
||||||
|
|||||||
Reference in New Issue
Block a user