]> source.dussan.org Git - redmine.git/commitdiff
Add MissingContainer exception to MailHandler (#38273).
authorGo MAEDA <maeda@farend.jp>
Sun, 26 Mar 2023 05:11:26 +0000 (05:11 +0000)
committerGo MAEDA <maeda@farend.jp>
Sun, 26 Mar 2023 05:11:26 +0000 (05:11 +0000)
Patch by Felix Schäfer.

git-svn-id: https://svn.redmine.org/redmine/trunk@22158 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/mail_handler.rb
test/unit/mail_handler_test.rb

index 5925608bda8cec89d44bd74f7aa18f0cec30fd64..738feb30e3b7faeb5a7388f708f2c75906cbdb7a 100644 (file)
@@ -25,6 +25,7 @@ class MailHandler < ActionMailer::Base
   class NotAllowedInProject < UnauthorizedAction; end
   class InsufficientPermissions < UnauthorizedAction; end
   class MissingInformation < StandardError; end
+  class MissingContainer < StandardError; end
 
   attr_reader :email, :user, :handler_options
 
@@ -172,6 +173,9 @@ class MailHandler < ActionMailer::Base
   rescue MissingInformation => e
     logger&.error "MailHandler: missing information from #{user}: #{e.message}"
     false
+  rescue MissingContainer => e
+    logger&.error "MailHandler: reply to nonexistant object from #{user}: #{e.message}"
+    false
   rescue UnauthorizedAction => e
     logger&.error "MailHandler: unauthorized attempt from #{user}: #{e.message}"
     false
@@ -225,8 +229,7 @@ class MailHandler < ActionMailer::Base
   def receive_issue_reply(issue_id, from_journal=nil)
     issue = Issue.find_by(:id => issue_id)
     if issue.nil?
-      logger&.info "MailHandler: ignoring reply from [#{email.from.first}] to a nonexistent issue"
-      return nil
+      raise MissingContainer, "reply to nonexistant issue [##{issue_id}]"
     end
 
     # Never receive emails to projects where adding issue notes is not possible
@@ -270,8 +273,7 @@ class MailHandler < ActionMailer::Base
       logger&.info "MailHandler: reply to a nonexistant journal, calling receive_issue_reply with issue from subject"
       receive_issue_reply(m[1].to_i)
     else
-      logger&.info "MailHandler: ignoring reply to a nonexistant journal or issue"
-      return nil
+      raise MissingContainer, "reply to nonexistant journal [#{journal_id}]"
     end
   end
 
@@ -279,8 +281,7 @@ class MailHandler < ActionMailer::Base
   def receive_message_reply(message_id)
     message = Message.find_by(:id => message_id)&.root
     if message.nil?
-      logger&.info "MailHandler: ignoring reply from [#{email.from.first}] to a nonexistent message"
-      return nil
+      raise MissingContainer, "reply to nonexistant message [#{message_id}]"
     end
 
     # Never receive emails to projects where adding messages is not possible
index 01279a11796059e0edd2a6b40fe291a5e16a765d..a038d59b19ba84b6558ca3f3bf3c7b492352bf6a 100644 (file)
@@ -1084,7 +1084,7 @@ class MailHandlerTest < ActiveSupport::TestCase
     assert_no_difference 'Issue.count' do
       assert_no_difference 'Journal.count' do
         journal = submit_email('ticket_reply_with_status.eml')
-        assert_nil journal
+        assert_not journal
       end
     end
   end
@@ -1109,7 +1109,7 @@ class MailHandlerTest < ActiveSupport::TestCase
         journal = submit_email('ticket_reply.eml') do |email|
           email.sub! %r{^In-Reply-To:.*$}, "In-Reply-To: <redmine.journal-#{journal_id}.20060719210421@osiris>"
         end
-        assert_nil journal
+        assert_not journal
       end
     end
   end
@@ -1163,7 +1163,7 @@ class MailHandlerTest < ActiveSupport::TestCase
     Message.find(2).destroy
     assert_no_difference('Message.count') do
       m = submit_email('message_reply_by_subject.eml')
-      assert_nil m
+      assert_not m
     end
   end