From f17bab4a35cfc168f2c2d7a22bebdfa1e8c72876 Mon Sep 17 00:00:00 2001 From: Fire Demon Date: Sat, 1 Aug 2020 15:58:53 -0500 Subject: [Federation] cc implicit participants of limited-audience messages --- app/lib/activitypub/tag_manager.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index 7951c130a..c26301f7e 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -104,6 +104,24 @@ class ActivityPub::TagManager cc << account_followers_url(status.account) when 'unlisted' cc << COLLECTIONS[:public] + when 'limited' + if status.account.silenced? + # Only notify followers if the account is locally silenced + account_ids = status.silent_mentions.pluck(:account_id) + cc.concat(status.account.followers.where(id: account_ids).each_with_object([]) do |account, result| + result << uri_for(account) + result << account_followers_url(account) if account.group? + end) + cc.concat(FollowRequest.where(target_account_id: status.account_id, account_id: account_ids).each_with_object([]) do |request, result| + result << uri_for(request.account) + result << account_followers_url(request.account) if request.account.group? + end) + else + cc.concat(status.silent_mentions.each_with_object([]) do |mention, result| + result << uri_for(mention.account) + result << account_followers_url(mention.account) if mention.account.group? + end) + end end unless %w(direct limited).include?(visibility) -- cgit