return if tag['href'].blank?
account = account_from_uri(tag['href'])
- account = ::FetchRemoteAccountService.new.call(tag['href']) if account.nil?
+ account = ActivityPub::FetchRemoteAccountService.new.call(tag['href']) if account.nil?
return if account.nil?
+++ /dev/null
-# frozen_string_literal: true
-
-class FetchRemoteAccountService < BaseService
- def call(url, prefetched_body = nil, protocol = :ostatus)
- if prefetched_body.nil?
- resource_url, resource_options, protocol = FetchResourceService.new.call(url)
- else
- resource_url = url
- resource_options = { prefetched_body: prefetched_body }
- end
-
- case protocol
- when :activitypub
- ActivityPub::FetchRemoteAccountService.new.call(resource_url, **resource_options)
- end
- end
-end
# frozen_string_literal: true
class FetchRemoteStatusService < BaseService
- def call(url, prefetched_body = nil, protocol = :ostatus)
+ def call(url, prefetched_body = nil)
if prefetched_body.nil?
- resource_url, resource_options, protocol = FetchResourceService.new.call(url)
+ resource_url, resource_options = FetchResourceService.new.call(url)
else
resource_url = url
resource_options = { prefetched_body: prefetched_body }
end
- case protocol
- when :activitypub
- ActivityPub::FetchRemoteStatusService.new.call(resource_url, **resource_options)
- end
+ ActivityPub::FetchRemoteStatusService.new.call(resource_url, **resource_options)
end
end
body = response.body_with_limit
json = body_to_json(body)
- [json['id'], { prefetched_body: body, id: true }, :activitypub] if supported_context?(json) && (equals_or_includes_any?(json['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) || expected_type?(json))
+ [json['id'], { prefetched_body: body, id: true }] if supported_context?(json) && (equals_or_includes_any?(json['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) || expected_type?(json))
elsif !terminal
link_header = response['Link'] && parse_link_header(response)
def process_url
if equals_or_includes_any?(type, ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES)
- FetchRemoteAccountService.new.call(resource_url, body, protocol)
+ ActivityPub::FetchRemoteAccountService.new.call(resource_url, prefetched_body: body)
elsif equals_or_includes_any?(type, ActivityPub::Activity::Create::SUPPORTED_TYPES + ActivityPub::Activity::Create::CONVERTED_TYPES)
- status = FetchRemoteStatusService.new.call(resource_url, body, protocol)
+ status = FetchRemoteStatusService.new.call(resource_url, body)
authorize_with @on_behalf_of, status, :show? unless status.nil?
status
elsif fetched_resource.nil? && @on_behalf_of.present?
fetched_resource.second[:prefetched_body]
end
- def protocol
- fetched_resource.third
- end
-
def type
- return json_data['type'] if protocol == :activitypub
+ json_data['type']
end
def json_data
+++ /dev/null
-require 'rails_helper'
-
-RSpec.describe FetchRemoteAccountService, type: :service do
- let(:url) { 'https://example.com/alice' }
- let(:prefetched_body) { nil }
- let(:protocol) { :ostatus }
-
- subject { FetchRemoteAccountService.new.call(url, prefetched_body, protocol) }
-
- let(:actor) do
- {
- '@context': 'https://www.w3.org/ns/activitystreams',
- id: 'https://example.com/alice',
- type: 'Person',
- preferredUsername: 'alice',
- name: 'Alice',
- summary: 'Foo bar',
- inbox: 'http://example.com/alice/inbox',
- }
- end
-
- let(:webfinger) { { subject: 'acct:alice@example.com', links: [{ rel: 'self', href: 'https://example.com/alice' }] } }
- let(:xml) { File.read(Rails.root.join('spec', 'fixtures', 'xml', 'mastodon.atom')) }
-
- shared_examples 'return Account' do
- it { is_expected.to be_an Account }
- end
-
- context 'protocol is :activitypub' do
- let(:prefetched_body) { Oj.dump(actor) }
- let(:protocol) { :activitypub }
-
- before do
- stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
- end
-
- include_examples 'return Account'
- end
-
- context 'when prefetched_body is nil' do
- context 'protocol is :activitypub' do
- before do
- stub_request(:get, url).to_return(status: 200, body: Oj.dump(actor), headers: { 'Content-Type' => 'application/activity+json' })
- stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
- end
-
- include_examples 'return Account'
- end
- end
-end
end
context 'protocol is :activitypub' do
- subject { described_class.new.call(note[:id], prefetched_body, protocol) }
+ subject { described_class.new.call(note[:id], prefetched_body) }
let(:prefetched_body) { Oj.dump(note) }
- let(:protocol) { :activitypub }
before do
account.update(uri: ActivityPub::TagManager.instance.uri_for(account))
</entry>
XML
- expect(subject.call('https://fake.domain/foo', status_body, :ostatus)).to be_nil
+ expect(subject.call('https://fake.domain/foo', status_body)).to be_nil
end
it 'does not create status with wrong id when id uses http format' do
</entry>
XML
- expect(subject.call('https://real.domain/statuses/456', status_body, :ostatus)).to be_nil
+ expect(subject.call('https://real.domain/statuses/456', status_body)).to be_nil
end
end
end
let(:content_type) { 'application/activity+json; charset=utf-8' }
let(:body) { json }
- it { is_expected.to eq [1, { prefetched_body: body, id: true }, :activitypub] }
+ it { is_expected.to eq [1, { prefetched_body: body, id: true }] }
end
context 'when content type is ld+json with profile' do
let(:content_type) { 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"' }
let(:body) { json }
- it { is_expected.to eq [1, { prefetched_body: body, id: true }, :activitypub] }
+ it { is_expected.to eq [1, { prefetched_body: body, id: true }] }
end
before do
context 'when link header is present' do
let(:headers) { { 'Link' => '<http://example.com/foo>; rel="alternate"; type="application/activity+json"', } }
- it { is_expected.to eq [1, { prefetched_body: json, id: true }, :activitypub] }
+ it { is_expected.to eq [1, { prefetched_body: json, id: true }] }
end
context 'when content type is text/html' do
let(:content_type) { 'text/html' }
let(:body) { '<html><head><link rel="alternate" href="http://example.com/foo" type="application/activity+json"/></head></html>' }
- it { is_expected.to eq [1, { prefetched_body: json, id: true }, :activitypub] }
+ it { is_expected.to eq [1, { prefetched_body: json, id: true }] }
end
end
end