| @ -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 | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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] | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user