]> cat aescling's git repositories - mastodon.git/commitdiff
When must_be_following_dm is on, only notify if recipient dm'ed user (#6283)
authorRenato "Lond" Cerqueira <renato@lond.com.br>
Thu, 18 Jan 2018 15:12:10 +0000 (16:12 +0100)
committerEugen Rochko <eugen@zeonfederated.com>
Thu, 18 Jan 2018 15:12:10 +0000 (16:12 +0100)
* When must_be_following_dm is on, only notify if recipient dm'ed user
Currently, when must_be_following_dm is on, if a user sends a direct
message replying to any status from the recipient, the recipient gets a
notification. This should not be the case, as if the recipient posted
something publicly this can be used to spam their notifications.

* Refactor replied_to_status_is_direct_message?
Following suggestion in PR

app/services/notify_service.rb
spec/services/notify_service_spec.rb

index d5960c3adc6401d5a60d261062e0fb8ff68049e3..ba086449cc1e4f2834ab6fe05b8e10dd775b7c59 100644 (file)
@@ -54,7 +54,7 @@ class NotifyService < BaseService
   end
 
   def response_to_recipient?
-    @notification.target_status.in_reply_to_account_id == @recipient.id
+    @notification.target_status.in_reply_to_account_id == @recipient.id && @notification.target_status.thread&.direct_visibility?
   end
 
   def optional_non_following_and_direct?
index eb6210a1e7816db82f591e44d921679db6c39bf6..abe557cf382a8caaa640c9928885ebd3ed888c33 100644 (file)
@@ -62,10 +62,19 @@ RSpec.describe NotifyService do
         is_expected.to_not change(Notification, :count)
       end
 
-      context 'if the message chain initiated by recipient' do
+      context 'if the message chain initiated by recipient, but is not direct message' do
         let(:reply_to) { Fabricate(:status, account: recipient) }
         let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct, thread: reply_to)) }
 
+        it 'does not notify' do
+          is_expected.to_not change(Notification, :count)
+        end
+      end
+
+      context 'if the message chain initiated by recipient and is direct message' do
+        let(:reply_to) { Fabricate(:status, account: recipient, visibility: :direct) }
+        let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct, thread: reply_to)) }
+
         it 'does notify' do
           is_expected.to change(Notification, :count)
         end