Prevent ActivityPub movedTo recursion (#8092)

Fix #8051
master
Eugen Rochko 6 years ago committed by nightpool
parent 2ccef52a4f
commit cc94b1d95a
  1. 4
      app/services/activitypub/fetch_remote_account_service.rb
  2. 2
      app/services/activitypub/process_account_service.rb

@ -7,14 +7,14 @@ class ActivityPub::FetchRemoteAccountService < BaseService
# Should be called when uri has already been checked for locality # Should be called when uri has already been checked for locality
# Does a WebFinger roundtrip on each call # Does a WebFinger roundtrip on each call
def call(uri, id: true, prefetched_body: nil) def call(uri, id: true, prefetched_body: nil, break_on_redirect: false)
@json = if prefetched_body.nil? @json = if prefetched_body.nil?
fetch_resource(uri, id) fetch_resource(uri, id)
else else
body_to_json(prefetched_body) body_to_json(prefetched_body)
end end
return unless supported_context? && expected_type? return if !supported_context? || !expected_type? || (break_on_redirect && @json['movedTo'].present?)
@uri = @json['id'] @uri = @json['id']
@username = @json['preferredUsername'] @username = @json['preferredUsername']

@ -175,7 +175,7 @@ class ActivityPub::ProcessAccountService < BaseService
def moved_account def moved_account
account = ActivityPub::TagManager.instance.uri_to_resource(@json['movedTo'], Account) account = ActivityPub::TagManager.instance.uri_to_resource(@json['movedTo'], Account)
account ||= ActivityPub::FetchRemoteAccountService.new.call(@json['movedTo'], id: true) account ||= ActivityPub::FetchRemoteAccountService.new.call(@json['movedTo'], id: true, break_on_redirect: true)
account account
end end

Loading…
Cancel
Save