Add HTTP signatures to all outgoing ActivityPub GET requests (#11284)
This commit is contained in:
@ -77,19 +77,12 @@ module JsonLdHelper
|
||||
end
|
||||
|
||||
def fetch_resource_without_id_validation(uri, on_behalf_of = nil, raise_on_temporary_error = false)
|
||||
on_behalf_of ||= Account.representative
|
||||
|
||||
build_request(uri, on_behalf_of).perform do |response|
|
||||
raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) || response_error_unsalvageable?(response) || !raise_on_temporary_error
|
||||
|
||||
return body_to_json(response.body_with_limit) if response.code == 200
|
||||
end
|
||||
|
||||
# If request failed, retry without doing it on behalf of a user
|
||||
return if on_behalf_of.nil?
|
||||
|
||||
build_request(uri).perform do |response|
|
||||
raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) || response_error_unsalvageable?(response) || !raise_on_temporary_error
|
||||
|
||||
response.code == 200 ? body_to_json(response.body_with_limit) : nil
|
||||
body_to_json(response.body_with_limit) if response.code == 200
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -40,8 +40,8 @@ class Request
|
||||
set_digest! if options.key?(:body)
|
||||
end
|
||||
|
||||
def on_behalf_of(account, key_id_format = :acct, sign_with: nil)
|
||||
raise ArgumentError, 'account must be local' unless account&.local?
|
||||
def on_behalf_of(account, key_id_format = :uri, sign_with: nil)
|
||||
raise ArgumentError, 'account must not be nil' if account.nil?
|
||||
|
||||
@account = account
|
||||
@keypair = sign_with.present? ? OpenSSL::PKey::RSA.new(sign_with) : @account.keypair
|
||||
|
@ -23,7 +23,7 @@ class FetchResourceService < BaseService
|
||||
end
|
||||
|
||||
def perform_request(&block)
|
||||
Request.new(:get, @url).add_headers('Accept' => ACCEPT_HEADER).perform(&block)
|
||||
Request.new(:get, @url).add_headers('Accept' => ACCEPT_HEADER).on_behalf_of(Account.representative).perform(&block)
|
||||
end
|
||||
|
||||
def process_response(response, terminal = false)
|
||||
|
Reference in New Issue
Block a user