about summary refs log tree commit diff
path: root/app/lib
diff options
context:
space:
mode:
authormultiple creatures <dev@multiple-creature.party>2019-12-21 13:22:18 -0600
committermultiple creatures <dev@multiple-creature.party>2019-12-21 13:22:18 -0600
commit8312a6e51017498c417070cbcbf115da184b786d (patch)
tree21adc50927a531cc204bc6abd6165abdf930d3a6 /app/lib
parentb8f7ccf22729b77fbb5a44ecda01de5329d07adc (diff)
add option to use phrase filters as an allow list
Diffstat (limited to 'app/lib')
-rw-r--r--app/lib/status_filter.rb9
1 files changed, 6 insertions, 3 deletions
diff --git a/app/lib/status_filter.rb b/app/lib/status_filter.rb
index 81faf129f..fb675cbbd 100644
--- a/app/lib/status_filter.rb
+++ b/app/lib/status_filter.rb
@@ -15,7 +15,7 @@ class StatusFilter
   def filtered?
     return true if status.nil? || account.nil?
     return false if !account.nil? && account.id == status.account_id
-    return true if redis.sismember("filtered_statuses:#{account.id}", status.id)
+    return !account.user.invert_filters if redis.sismember("filtered_statuses:#{account.id}", status.id)
     if blocked_by_policy? || (account_present? && filtered_status?) || silenced_account?
       redis.sadd("filtered_statuses:#{account.id}", status.id)
       return true
@@ -40,7 +40,7 @@ class StatusFilter
     return true if account.user_hides_replies_of_blocker? && reply_to_blocker?
 
     # filtered by user?
-    return true if phrase_filtered?(status, account.id)
+    return true if !account.user.invert_filters && phrase_filtered?(status, account.id)
 
     # kajiht has no filters if status has no mentions
     return false if status&.mentions.blank?
@@ -74,7 +74,10 @@ class StatusFilter
     return true if !@preloaded_relations[:muting] && account.user_hides_mentions_of_muted? && account.muting?(mentioned_account_ids)
     return true if !@preloaded_relations[:blocking] && account.user_hides_mentions_of_blocked? && account.blocking?(mentioned_account_ids)
     return false unless status.reply? && status.private_visibility? && account.user_hides_mentions_outside_scope?
-    !@preloaded_relations[:following] && (mentioned_account_ids - account.following_ids).any?
+    return true if !@preloaded_relations[:following] && (mentioned_account_ids - account.following_ids).any?
+
+    # filtered by user?
+    account.user.invert_filters && !phrase_filtered?(status, account.id)
   end
 
   def reply_to_blocked?