summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorClaire <claire.github-309c@sitedethib.com>2021-03-24 10:19:40 +0100
committerGitHub <noreply@github.com>2021-03-24 10:19:40 +0100
commit1c4dee4554fdf0658c370dd7d4edfc49fd0494f7 (patch)
tree55ce2bad9ee0cad088610e56958536f829907504 /app
parent034f37b85a716872f78a72048a5a225cdcaa840a (diff)
Fix Mastodon not understanding as:Public and Public (#15948)
Fixes #5551
Diffstat (limited to 'app')
-rw-r--r--app/lib/activitypub/activity/announce.rb4
-rw-r--r--app/lib/activitypub/activity/create.rb6
-rw-r--r--app/lib/activitypub/tag_manager.rb4
3 files changed, 9 insertions, 5 deletions
diff --git a/app/lib/activitypub/activity/announce.rb b/app/lib/activitypub/activity/announce.rb
index 349e8f77e71..ae8b2db754e 100644
--- a/app/lib/activitypub/activity/announce.rb
+++ b/app/lib/activitypub/activity/announce.rb
@@ -43,9 +43,9 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
end
def visibility_from_audience
- if audience_to.include?(ActivityPub::TagManager::COLLECTIONS[:public])
+ if audience_to.any? { |to| ActivityPub::TagManager.instance.public_collection?(to) }
:public
- elsif audience_cc.include?(ActivityPub::TagManager::COLLECTIONS[:public])
+ elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) }
:unlisted
elsif audience_to.include?(@account.followers_url)
:private
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
index 6127446763d..0fa306cddd0 100644
--- a/app/lib/activitypub/activity/create.rb
+++ b/app/lib/activitypub/activity/create.rb
@@ -123,7 +123,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
def process_audience
(audience_to + audience_cc).uniq.each do |audience|
- next if audience == ActivityPub::TagManager::COLLECTIONS[:public]
+ next if ActivityPub::TagManager.instance.public_collection?(audience)
# Unlike with tags, there is no point in resolving accounts we don't already
# know here, because silent mentions would only be used for local access
@@ -356,9 +356,9 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
end
def visibility_from_audience
- if audience_to.include?(ActivityPub::TagManager::COLLECTIONS[:public])
+ if audience_to.any? { |to| ActivityPub::TagManager.instance.public_collection?(to) }
:public
- elsif audience_cc.include?(ActivityPub::TagManager::COLLECTIONS[:public])
+ elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) }
:unlisted
elsif audience_to.include?(@account.followers_url)
:private
diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb
index 3f2ae1106b6..f6b5e10d39e 100644
--- a/app/lib/activitypub/tag_manager.rb
+++ b/app/lib/activitypub/tag_manager.rb
@@ -12,6 +12,10 @@ class ActivityPub::TagManager
public: 'https://www.w3.org/ns/activitystreams#Public',
}.freeze
+ def public_collection?(uri)
+ uri == COLLECTIONS[:public] || uri == 'as:Public' || uri == 'Public'
+ end
+
def url_for(target)
return target.url if target.respond_to?(:local?) && !target.local?