From 030147ddcb27c1dc2e9de9a3113eb49b37b87c07 Mon Sep 17 00:00:00 2001 From: Danny Date: Mon, 6 Mar 2023 18:32:38 -0800 Subject: [PATCH] Corso: Exchange: Mail: Backup Details to include recipients --JSON ONLY (#2689) #### Adds Email recipients to the backup details for Exchange Mail. If the recipients are of length greater than one, the list of individuals is included and separated by a `,` --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :sunflower: Feature #### Issue(s) * closes #2687 #### Test Plan - [x] :zap: Unit test --- src/internal/connector/exchange/api/mail.go | 35 +++++++----- .../connector/exchange/api/mail_test.go | 55 ++++++++++++------- src/internal/connector/graph/shared.go | 18 ++++++ src/pkg/backup/details/details.go | 1 + src/pkg/backup/details/details_test.go | 1 + 5 files changed, 76 insertions(+), 34 deletions(-) create mode 100644 src/internal/connector/graph/shared.go diff --git a/src/internal/connector/exchange/api/mail.go b/src/internal/connector/exchange/api/mail.go index e4aee4fd8..ce5549404 100644 --- a/src/internal/connector/exchange/api/mail.go +++ b/src/internal/connector/exchange/api/mail.go @@ -357,22 +357,31 @@ func (c Mail) Serialize( // --------------------------------------------------------------------------- func MailInfo(msg models.Messageable) *details.ExchangeInfo { - sender := "" - subject := ptr.Val(msg.GetSubject()) - received := ptr.Val(msg.GetReceivedDateTime()) - created := ptr.Val(msg.GetCreatedDateTime()) + var ( + sender = graph.UnwrapEmailAddress(msg.GetSender()) + subject = ptr.Val(msg.GetSubject()) + received = ptr.Val(msg.GetReceivedDateTime()) + created = ptr.Val(msg.GetCreatedDateTime()) + recipients = make([]string, 0) + ) - if msg.GetSender() != nil && - msg.GetSender().GetEmailAddress() != nil { - sender = ptr.Val(msg.GetSender().GetEmailAddress().GetAddress()) + if msg.GetToRecipients() != nil { + ppl := msg.GetToRecipients() + for _, entry := range ppl { + temp := graph.UnwrapEmailAddress(entry) + if len(temp) > 0 { + recipients = append(recipients, temp) + } + } } return &details.ExchangeInfo{ - ItemType: details.ExchangeMail, - Sender: sender, - Subject: subject, - Received: received, - Created: created, - Modified: ptr.OrNow(msg.GetLastModifiedDateTime()), + ItemType: details.ExchangeMail, + Sender: sender, + Recipient: recipients, + Subject: subject, + Received: received, + Created: created, + Modified: ptr.OrNow(msg.GetLastModifiedDateTime()), } } diff --git a/src/internal/connector/exchange/api/mail_test.go b/src/internal/connector/exchange/api/mail_test.go index 45c3a3126..505db67d3 100644 --- a/src/internal/connector/exchange/api/mail_test.go +++ b/src/internal/connector/exchange/api/mail_test.go @@ -35,9 +35,10 @@ func (suite *MailAPIUnitSuite) TestMailInfo() { msg.SetLastModifiedDateTime(&initial) i := &details.ExchangeInfo{ - ItemType: details.ExchangeMail, - Created: initial, - Modified: initial, + ItemType: details.ExchangeMail, + Recipient: []string{}, + Created: initial, + Modified: initial, } return msg, i }, @@ -55,10 +56,11 @@ func (suite *MailAPIUnitSuite) TestMailInfo() { msg.SetLastModifiedDateTime(&initial) msg.SetSender(sr) i := &details.ExchangeInfo{ - ItemType: details.ExchangeMail, - Sender: sender, - Created: initial, - Modified: initial, + ItemType: details.ExchangeMail, + Recipient: []string{}, + Sender: sender, + Created: initial, + Modified: initial, } return msg, i }, @@ -72,10 +74,11 @@ func (suite *MailAPIUnitSuite) TestMailInfo() { msg.SetCreatedDateTime(&initial) msg.SetLastModifiedDateTime(&initial) i := &details.ExchangeInfo{ - ItemType: details.ExchangeMail, - Subject: subject, - Created: initial, - Modified: initial, + ItemType: details.ExchangeMail, + Subject: subject, + Created: initial, + Recipient: []string{}, + Modified: initial, } return msg, i }, @@ -89,10 +92,11 @@ func (suite *MailAPIUnitSuite) TestMailInfo() { msg.SetLastModifiedDateTime(&initial) msg.SetReceivedDateTime(&now) i := &details.ExchangeInfo{ - ItemType: details.ExchangeMail, - Received: now, - Created: initial, - Modified: initial, + ItemType: details.ExchangeMail, + Recipient: []string{}, + Received: now, + Created: initial, + Modified: initial, } return msg, i }, @@ -101,25 +105,34 @@ func (suite *MailAPIUnitSuite) TestMailInfo() { name: "All fields", msgAndRP: func() (models.Messageable, *details.ExchangeInfo) { sender := "foo@bar.com" + receiver := "foofoo@bar.com" subject := "Hello world" now := time.Now() sr := models.NewRecipient() sea := models.NewEmailAddress() + recv := models.NewRecipient() + req := models.NewEmailAddress() + recvs := make([]models.Recipientable, 0) msg := models.NewMessage() msg.SetCreatedDateTime(&initial) msg.SetLastModifiedDateTime(&initial) sea.SetAddress(&sender) sr.SetEmailAddress(sea) msg.SetSender(sr) + req.SetAddress(&receiver) + recv.SetEmailAddress(req) msg.SetSubject(&subject) msg.SetReceivedDateTime(&now) + recvs = append(recvs, recv, sr) + msg.SetToRecipients(recvs) i := &details.ExchangeInfo{ - ItemType: details.ExchangeMail, - Sender: sender, - Subject: subject, - Received: now, - Created: initial, - Modified: initial, + ItemType: details.ExchangeMail, + Sender: sender, + Subject: subject, + Recipient: []string{receiver, sender}, + Received: now, + Created: initial, + Modified: initial, } return msg, i }, diff --git a/src/internal/connector/graph/shared.go b/src/internal/connector/graph/shared.go new file mode 100644 index 000000000..090e46fcd --- /dev/null +++ b/src/internal/connector/graph/shared.go @@ -0,0 +1,18 @@ +package graph + +// Contains helper methods that are common across multiple +// Microsoft Graph Applications. + +import ( + "github.com/alcionai/corso/src/internal/common/ptr" + "github.com/microsoftgraph/msgraph-sdk-go/models" +) + +func UnwrapEmailAddress(contact models.Recipientable) string { + var empty string + if contact == nil || contact.GetEmailAddress() == nil { + return empty + } + + return ptr.Val(contact.GetEmailAddress().GetAddress()) +} diff --git a/src/pkg/backup/details/details.go b/src/pkg/backup/details/details.go index a70343d61..edb545cb2 100644 --- a/src/pkg/backup/details/details.go +++ b/src/pkg/backup/details/details.go @@ -516,6 +516,7 @@ type ExchangeInfo struct { ItemType ItemType `json:"itemType,omitempty"` Sender string `json:"sender,omitempty"` Subject string `json:"subject,omitempty"` + Recipient []string `json:"recipient,omitempty"` ParentPath string `json:"parentPath,omitempty"` Received time.Time `json:"received,omitempty"` EventStart time.Time `json:"eventStart,omitempty"` diff --git a/src/pkg/backup/details/details_test.go b/src/pkg/backup/details/details_test.go index 45adc053e..fb75526a3 100644 --- a/src/pkg/backup/details/details_test.go +++ b/src/pkg/backup/details/details_test.go @@ -94,6 +94,7 @@ func (suite *DetailsUnitSuite) TestDetailsEntry_HeadersValues() { ItemType: ExchangeMail, Sender: "sender", ParentPath: "Parent", + Recipient: []string{"receiver"}, Subject: "subject", Received: now, },