Ver a proveniência

Clean up OStatus-related codepaths (#12173)

* Remove “protocol” argument and return value, as only ActivityPub is supported

* Remove FetchRemoteAccountService, only use ActivityPub::FetchRemoteAccountService

* Fix tests
master^2
ThibG há 4 anos
committed by Eugen Rochko
ascendente
cometimento
2ee5a9d9c3
8 ficheiros alterados com 15 adições e 90 eliminações
  1. +1
    -1
      app/lib/activitypub/activity/create.rb
  2. +0
    -17
      app/services/fetch_remote_account_service.rb
  3. +3
    -6
      app/services/fetch_remote_status_service.rb
  4. +1
    -1
      app/services/fetch_resource_service.rb
  5. +3
    -7
      app/services/resolve_url_service.rb
  6. +0
    -50
      spec/services/fetch_remote_account_service_spec.rb
  7. +3
    -4
      spec/services/fetch_remote_status_service_spec.rb
  8. +4
    -4
      spec/services/fetch_resource_service_spec.rb

+ 1
- 1
app/lib/activitypub/activity/create.rb Ver ficheiro

@@ -167,7 +167,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
return if tag['href'].blank? return if tag['href'].blank?


account = account_from_uri(tag['href']) 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? return if account.nil?




+ 0
- 17
app/services/fetch_remote_account_service.rb Ver ficheiro

@@ -1,17 +0,0 @@
# 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

+ 3
- 6
app/services/fetch_remote_status_service.rb Ver ficheiro

@@ -1,17 +1,14 @@
# frozen_string_literal: true # frozen_string_literal: true


class FetchRemoteStatusService < BaseService class FetchRemoteStatusService < BaseService
def call(url, prefetched_body = nil, protocol = :ostatus)
def call(url, prefetched_body = nil)
if 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 else
resource_url = url resource_url = url
resource_options = { prefetched_body: prefetched_body } resource_options = { prefetched_body: prefetched_body }
end end


case protocol
when :activitypub
ActivityPub::FetchRemoteStatusService.new.call(resource_url, **resource_options)
end
ActivityPub::FetchRemoteStatusService.new.call(resource_url, **resource_options)
end end
end end

+ 1
- 1
app/services/fetch_resource_service.rb Ver ficheiro

@@ -33,7 +33,7 @@ class FetchResourceService < BaseService
body = response.body_with_limit body = response.body_with_limit
json = body_to_json(body) 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 elsif !terminal
link_header = response['Link'] && parse_link_header(response) link_header = response['Link'] && parse_link_header(response)




+ 3
- 7
app/services/resolve_url_service.rb Ver ficheiro

@@ -19,9 +19,9 @@ class ResolveURLService < BaseService


def process_url def process_url
if equals_or_includes_any?(type, ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) 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) 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? authorize_with @on_behalf_of, status, :show? unless status.nil?
status status
elsif fetched_resource.nil? && @on_behalf_of.present? elsif fetched_resource.nil? && @on_behalf_of.present?
@@ -45,12 +45,8 @@ class ResolveURLService < BaseService
fetched_resource.second[:prefetched_body] fetched_resource.second[:prefetched_body]
end end


def protocol
fetched_resource.third
end

def type def type
return json_data['type'] if protocol == :activitypub
json_data['type']
end end


def json_data def json_data


+ 0
- 50
spec/services/fetch_remote_account_service_spec.rb Ver ficheiro

@@ -1,50 +0,0 @@
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

+ 3
- 4
spec/services/fetch_remote_status_service_spec.rb Ver ficheiro

@@ -16,9 +16,8 @@ RSpec.describe FetchRemoteStatusService, type: :service do
end end


context 'protocol is :activitypub' do 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(:prefetched_body) { Oj.dump(note) }
let(:protocol) { :activitypub }


before do before do
account.update(uri: ActivityPub::TagManager.instance.uri_for(account)) account.update(uri: ActivityPub::TagManager.instance.uri_for(account))
@@ -59,7 +58,7 @@ RSpec.describe FetchRemoteStatusService, type: :service do
</entry> </entry>
XML 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 end


it 'does not create status with wrong id when id uses http format' do it 'does not create status with wrong id when id uses http format' do
@@ -81,7 +80,7 @@ RSpec.describe FetchRemoteStatusService, type: :service do
</entry> </entry>
XML 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 end
end end

+ 4
- 4
spec/services/fetch_resource_service_spec.rb Ver ficheiro

@@ -71,14 +71,14 @@ RSpec.describe FetchResourceService, type: :service do
let(:content_type) { 'application/activity+json; charset=utf-8' } let(:content_type) { 'application/activity+json; charset=utf-8' }
let(:body) { json } 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 end


context 'when content type is ld+json with profile' do context 'when content type is ld+json with profile' do
let(:content_type) { 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"' } let(:content_type) { 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"' }
let(:body) { json } 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 end


before do before do
@@ -89,14 +89,14 @@ RSpec.describe FetchResourceService, type: :service do
context 'when link header is present' do context 'when link header is present' do
let(:headers) { { 'Link' => '<http://example.com/foo>; rel="alternate"; type="application/activity+json"', } } 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 end


context 'when content type is text/html' do context 'when content type is text/html' do
let(:content_type) { 'text/html' } let(:content_type) { 'text/html' }
let(:body) { '<html><head><link rel="alternate" href="http://example.com/foo" type="application/activity+json"/></head></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 end
end end


Carregando…
Cancelar
Guardar