diff options
author | Fire Demon <firedemon@creature.cafe> | 2020-08-12 22:33:12 -0500 |
---|---|---|
committer | Fire Demon <firedemon@creature.cafe> | 2020-08-30 05:45:17 -0500 |
commit | e76a34ee42763fbf0d0252e54002ebe5fcb4b92c (patch) | |
tree | c1a968df4c99e7b67dce31e093cc0f4c821e6ff4 /app | |
parent | 57b3aa056b792cff4b1c9294323f9c07528a82e1 (diff) |
[Moderation] Limit scope of admin-level silences to timelines, search, and accounts not following or followed by the user
Diffstat (limited to 'app')
-rw-r--r-- | app/lib/status_filter.rb | 5 | ||||
-rw-r--r-- | app/models/concerns/status_threading_concern.rb | 2 | ||||
-rw-r--r-- | app/services/notify_service.rb | 7 | ||||
-rw-r--r-- | app/services/search_service.rb | 2 |
4 files changed, 11 insertions, 5 deletions
diff --git a/app/lib/status_filter.rb b/app/lib/status_filter.rb index 725031a7f..7555243c0 100644 --- a/app/lib/status_filter.rb +++ b/app/lib/status_filter.rb @@ -3,15 +3,16 @@ class StatusFilter attr_reader :status, :account - def initialize(status, account, preloaded_relations = {}) + def initialize(status, account, filter_silenced, preloaded_relations = {}) @status = status @account = account @preloaded_relations = preloaded_relations + @filter_silenced = filter_silenced end def filtered? return false if !account.nil? && account.id == status.account_id - blocked_by_policy? || (account_present? && filtered_status?) || silenced_account? + blocked_by_policy? || (account_present? && filtered_status?) || (@filter_silenced && silenced_account?) end private diff --git a/app/models/concerns/status_threading_concern.rb b/app/models/concerns/status_threading_concern.rb index a0ead1995..50d081811 100644 --- a/app/models/concerns/status_threading_concern.rb +++ b/app/models/concerns/status_threading_concern.rb @@ -86,7 +86,7 @@ module StatusThreadingConcern domains = statuses.map(&:account_domain).compact.uniq relations = relations_map_for_account(account, account_ids, domains) - statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? } + statuses.reject! { |status| StatusFilter.new(status, account, false, relations).filtered? } # Order ancestors/descendants by tree path statuses.sort_by! { |status| ids.index(status.id) } diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index 9364a6ae8..5f12a6b97 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -47,6 +47,11 @@ class NotifyService < BaseService @following_sender = @recipient.following?(@notification.from_account) || @recipient.requested?(@notification.from_account) end + def following_recipient? + return @following_recipient if defined?(@following_recipient) + @following_recipient = @notification.from_account.following?(@recipient) + end + def optional_non_follower? @recipient.user.settings.interactions['must_be_follower'] && !@notification.from_account.following?(@recipient) end @@ -79,7 +84,7 @@ class NotifyService < BaseService end def hellbanned? - @notification.from_account.silenced? && !following_sender? + @notification.from_account.silenced? && !(following_sender? || following_recipient?) end def from_self? diff --git a/app/services/search_service.rb b/app/services/search_service.rb index 19500a8d4..819ce2c16 100644 --- a/app/services/search_service.rb +++ b/app/services/search_service.rb @@ -53,7 +53,7 @@ class SearchService < BaseService account_domains = results.map(&:account_domain) preloaded_relations = relations_map_for_account(@account, account_ids, account_domains) - results.reject { |status| StatusFilter.new(status, @account, preloaded_relations).filtered? } + results.reject { |status| StatusFilter.new(status, @account, true, preloaded_relations).filtered? } rescue Faraday::ConnectionFailed, Parslet::ParseFailed [] end |