From 730abadfc39ef6756d2bfebf0403f5106ca0eca6 Mon Sep 17 00:00:00 2001 From: Michal Horejsek Date: Fri, 4 Sep 2020 13:13:08 +0200 Subject: [PATCH] Do not allow deleting messages from All Mail --- Changelog.md | 1 + internal/imap/mailbox_messages.go | 2 +- internal/store/mailbox_message.go | 6 ++++++ test/features/bridge/imap/message/delete.feature | 6 ++++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index 54860390..087ea073 100644 --- a/Changelog.md +++ b/Changelog.md @@ -71,6 +71,7 @@ Changelog [format](http://keepachangelog.com/en/1.0.0/) * IE: Removed `onLoginFinished` * Structure for transfer rules in QML * GODT-213 Convert panics from message parser to error. +* GODT-585 Do not allow deleting messages from All Mail. ### Fixed * GODT-655 Fix date picker with automatic Windows DST diff --git a/internal/imap/mailbox_messages.go b/internal/imap/mailbox_messages.go index e58842d5..f45a7062 100644 --- a/internal/imap/mailbox_messages.go +++ b/internal/imap/mailbox_messages.go @@ -57,7 +57,7 @@ func (im *imapMailbox) UpdateMessagesFlags(uid bool, seqSet *imap.SeqSet, operat return im.addOrRemoveFlags(operation, messageIDs, flags) } -func (im *imapMailbox) setFlags(messageIDs, flags []string) error { +func (im *imapMailbox) setFlags(messageIDs, flags []string) error { //nolint seen := false flagged := false deleted := false diff --git a/internal/store/mailbox_message.go b/internal/store/mailbox_message.go index 90043b2c..23486a58 100644 --- a/internal/store/mailbox_message.go +++ b/internal/store/mailbox_message.go @@ -180,6 +180,9 @@ func (storeMailbox *Mailbox) MarkMessagesDeleted(apiIDs []string) error { "label": storeMailbox.labelID, "mailbox": storeMailbox.Name, }).Trace("Marking messages as deleted") + if storeMailbox.labelID == pmapi.AllMailLabel { + return ErrAllMailOpNotAllowed + } return storeMailbox.store.db.Update(func(tx *bolt.Tx) error { return storeMailbox.txMarkMessagesAsDeleted(tx, apiIDs, true) }) @@ -193,6 +196,9 @@ func (storeMailbox *Mailbox) MarkMessagesUndeleted(apiIDs []string) error { "label": storeMailbox.labelID, "mailbox": storeMailbox.Name, }).Trace("Marking messages as undeleted") + if storeMailbox.labelID == pmapi.AllMailLabel { + return ErrAllMailOpNotAllowed + } return storeMailbox.store.db.Update(func(tx *bolt.Tx) error { return storeMailbox.txMarkMessagesAsDeleted(tx, apiIDs, false) }) diff --git a/test/features/bridge/imap/message/delete.feature b/test/features/bridge/imap/message/delete.feature index f7789129..6bfffe73 100644 --- a/test/features/bridge/imap/message/delete.feature +++ b/test/features/bridge/imap/message/delete.feature @@ -93,3 +93,9 @@ Feature: IMAP remove messages from mailbox | LOGOUT | 9 | | UNSELECT | 10 | + Scenario: Not possible to delete from All Mail + Given there are 1 messages in mailbox "All Mail" for "user" + And there is IMAP client logged in as "user" + And there is IMAP client selected in "All Mail" + When IMAP client marks message "1" as deleted + Then IMAP response is "IMAP error: NO operation not allowed for 'All Mail' folder"