logo

mastofe

My custom branche(s) on git.pleroma.social/pleroma/mastofe git clone https://hacktivis.me/git/mastofe.git
commit: f890d2a766ae4c7fd8611dd4f3a15a13408f68c3
parent 33513753b979dc0526cfeb31bcd4a5bad2e952f1
Author: Eugen Rochko <eugen@zeonfederated.com>
Date:   Mon,  2 Apr 2018 02:10:53 +0200

Support all ActivityPub actor types (#6997)

Fix #6973

Diffstat:

Mapp/services/activitypub/fetch_remote_account_service.rb4+++-
Mapp/services/activitypub/fetch_remote_key_service.rb4++--
Mapp/services/fetch_atom_service.rb2+-
Mapp/services/resolve_account_service.rb2+-
Mapp/services/resolve_url_service.rb2+-
5 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/app/services/activitypub/fetch_remote_account_service.rb b/app/services/activitypub/fetch_remote_account_service.rb @@ -3,6 +3,8 @@ class ActivityPub::FetchRemoteAccountService < BaseService include JsonLdHelper + SUPPORTED_TYPES = %w(Application Group Organization Person Service).freeze + # Should be called when uri has already been checked for locality # Does a WebFinger roundtrip on each call def call(uri, id: true, prefetched_body: nil) @@ -54,6 +56,6 @@ class ActivityPub::FetchRemoteAccountService < BaseService end def expected_type? - @json['type'] == 'Person' + SUPPORTED_TYPES.include?(@json['type']) end end diff --git a/app/services/activitypub/fetch_remote_key_service.rb b/app/services/activitypub/fetch_remote_key_service.rb @@ -43,7 +43,7 @@ class ActivityPub::FetchRemoteKeyService < BaseService end def person? - @json['type'] == 'Person' + ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES.include?(@json['type']) end def public_key? @@ -55,6 +55,6 @@ class ActivityPub::FetchRemoteKeyService < BaseService end def confirmed_owner? - @owner['type'] == 'Person' && value_or_id(@owner['publicKey']) == @json['id'] + ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES.include?(@owner['type']) && value_or_id(@owner['publicKey']) == @json['id'] end end diff --git a/app/services/fetch_atom_service.rb b/app/services/fetch_atom_service.rb @@ -42,7 +42,7 @@ class FetchAtomService < BaseService elsif ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(response.mime_type) body = response.body_with_limit json = body_to_json(body) - if supported_context?(json) && json['type'] == 'Person' && json['inbox'].present? + if supported_context?(json) && ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES.include?(json['type']) && json['inbox'].present? [json['id'], { prefetched_body: body, id: true }, :activitypub] elsif supported_context?(json) && expected_type?(json) [json['id'], { prefetched_body: body, id: true }, :activitypub] diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb @@ -189,7 +189,7 @@ class ResolveAccountService < BaseService return @actor_json if defined?(@actor_json) json = fetch_resource(actor_url, false) - @actor_json = supported_context?(json) && json['type'] == 'Person' ? json : nil + @actor_json = supported_context?(json) && ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES.include?(json['type']) ? json : nil end def atom diff --git a/app/services/resolve_url_service.rb b/app/services/resolve_url_service.rb @@ -17,7 +17,7 @@ class ResolveURLService < BaseService def process_url case type - when 'Person' + when 'Application', 'Group', 'Organization', 'Person', 'Service' FetchRemoteAccountService.new.call(atom_url, body, protocol) when 'Note', 'Article', 'Image', 'Video' FetchRemoteStatusService.new.call(atom_url, body, protocol)