summaryrefslogtreecommitdiffstats
path: root/app/lib
diff options
context:
space:
mode:
authorThibG <thib@sitedethib.com>2019-11-30 19:58:00 +0100
committerEugen Rochko <eugen@zeonfederated.com>2019-11-30 19:58:00 +0100
commitf05b0463dbc83a85dee7490e07bd79859132ee48 (patch)
tree32e2f196821f790d0d873f20fe3adb95eb75147b /app/lib
parentd8f96028c54bb47e6edddbd936bc8f2301dc9fa3 (diff)
Fallback to Create audience when object has no defined audience (#12249)
Fixes #11137
Diffstat (limited to 'app/lib')
-rw-r--r--app/lib/activitypub/activity/create.rb20
1 files changed, 14 insertions, 6 deletions
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
index 76bf9b2e55b..8a12a2b08b7 100644
--- a/app/lib/activitypub/activity/create.rb
+++ b/app/lib/activitypub/activity/create.rb
@@ -25,6 +25,14 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
private
+ def audience_to
+ @object['to'] || @json['to']
+ end
+
+ def audience_cc
+ @object['cc'] || @json['cc']
+ end
+
def process_status
@tags = []
@mentions = []
@@ -75,7 +83,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
end
def process_audience
- (as_array(@object['to']) + as_array(@object['cc'])).uniq.each do |audience|
+ (as_array(audience_to) + as_array(audience_cc)).uniq.each do |audience|
next if audience == ActivityPub::TagManager::COLLECTIONS[:public]
# Unlike with tags, there is no point in resolving accounts we don't already
@@ -291,11 +299,11 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
end
def visibility_from_audience
- if equals_or_includes?(@object['to'], ActivityPub::TagManager::COLLECTIONS[:public])
+ if equals_or_includes?(audience_to, ActivityPub::TagManager::COLLECTIONS[:public])
:public
- elsif equals_or_includes?(@object['cc'], ActivityPub::TagManager::COLLECTIONS[:public])
+ elsif equals_or_includes?(audience_cc, ActivityPub::TagManager::COLLECTIONS[:public])
:unlisted
- elsif equals_or_includes?(@object['to'], @account.followers_url)
+ elsif equals_or_includes?(audience_to, @account.followers_url)
:private
else
:direct
@@ -304,7 +312,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
def audience_includes?(account)
uri = ActivityPub::TagManager.instance.uri_for(account)
- equals_or_includes?(@object['to'], uri) || equals_or_includes?(@object['cc'], uri)
+ equals_or_includes?(audience_to, uri) || equals_or_includes?(audience_cc, uri)
end
def replied_to_status
@@ -415,7 +423,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
def addresses_local_accounts?
return true if @options[:delivered_to_account_id]
- local_usernames = (as_array(@object['to']) + as_array(@object['cc'])).uniq.select { |uri| ActivityPub::TagManager.instance.local_uri?(uri) }.map { |uri| ActivityPub::TagManager.instance.uri_to_local_id(uri, :username) }
+ local_usernames = (as_array(audience_to) + as_array(audience_cc)).uniq.select { |uri| ActivityPub::TagManager.instance.local_uri?(uri) }.map { |uri| ActivityPub::TagManager.instance.uri_to_local_id(uri, :username) }
return false if local_usernames.empty?