fix(GODT-2333): Do not allow modifications to All Mail label

Rather than waiting for API to reply, prevent these operations from
taking place in the first place.
This commit is contained in:
Leander Beernaert
2023-02-02 15:57:25 +01:00
parent 2db5a04e7a
commit 0b35b275d3

View File

@ -275,6 +275,10 @@ func (conn *imapConnector) CreateMessage(
) (imap.Message, []byte, error) { ) (imap.Message, []byte, error) {
defer conn.goPollAPIEvents(false) defer conn.goPollAPIEvents(false)
if mailboxID == proton.AllMailLabel {
return imap.Message{}, nil, fmt.Errorf("not allowed")
}
// Compute the hash of the message (to match it against SMTP messages). // Compute the hash of the message (to match it against SMTP messages).
hash, err := getMessageHash(literal) hash, err := getMessageHash(literal)
if err != nil { if err != nil {
@ -378,6 +382,10 @@ func (conn *imapConnector) GetMessageLiteral(ctx context.Context, id imap.Messag
func (conn *imapConnector) AddMessagesToMailbox(ctx context.Context, messageIDs []imap.MessageID, mailboxID imap.MailboxID) error { func (conn *imapConnector) AddMessagesToMailbox(ctx context.Context, messageIDs []imap.MessageID, mailboxID imap.MailboxID) error {
defer conn.goPollAPIEvents(false) defer conn.goPollAPIEvents(false)
if mailboxID == proton.AllMailLabel {
return fmt.Errorf("not allowed")
}
return conn.client.LabelMessages(ctx, mapTo[imap.MessageID, string](messageIDs), string(mailboxID)) return conn.client.LabelMessages(ctx, mapTo[imap.MessageID, string](messageIDs), string(mailboxID))
} }
@ -385,6 +393,10 @@ func (conn *imapConnector) AddMessagesToMailbox(ctx context.Context, messageIDs
func (conn *imapConnector) RemoveMessagesFromMailbox(ctx context.Context, messageIDs []imap.MessageID, mailboxID imap.MailboxID) error { func (conn *imapConnector) RemoveMessagesFromMailbox(ctx context.Context, messageIDs []imap.MessageID, mailboxID imap.MailboxID) error {
defer conn.goPollAPIEvents(false) defer conn.goPollAPIEvents(false)
if mailboxID == proton.AllMailLabel {
return fmt.Errorf("not allowed")
}
if err := conn.client.UnlabelMessages(ctx, mapTo[imap.MessageID, string](messageIDs), string(mailboxID)); err != nil { if err := conn.client.UnlabelMessages(ctx, mapTo[imap.MessageID, string](messageIDs), string(mailboxID)); err != nil {
return err return err
} }
@ -429,7 +441,9 @@ func (conn *imapConnector) MoveMessages(ctx context.Context, messageIDs []imap.M
defer conn.goPollAPIEvents(false) defer conn.goPollAPIEvents(false)
if (labelFromID == proton.InboxLabel && labelToID == proton.SentLabel) || if (labelFromID == proton.InboxLabel && labelToID == proton.SentLabel) ||
(labelFromID == proton.SentLabel && labelToID == proton.InboxLabel) { (labelFromID == proton.SentLabel && labelToID == proton.InboxLabel) ||
labelFromID == proton.AllMailLabel ||
labelToID == proton.AllMailLabel {
return false, fmt.Errorf("not allowed") return false, fmt.Errorf("not allowed")
} }