0
0
Fork 0

Add Digest header to requests with body, handle acct and URI keyId (#4565)

This commit is contained in:
Eugen Rochko 2017-08-09 23:54:14 +02:00 committed by GitHub
parent 4e1bf082ce
commit fdea173237
3 changed files with 100 additions and 25 deletions

View file

@ -12,15 +12,21 @@ class Request
@headers = {}
set_common_headers!
set_digest! if options.key?(:body)
end
def on_behalf_of(account)
def on_behalf_of(account, key_id_format = :acct)
raise ArgumentError unless account.local?
@account = account
@account = account
@key_id_format = key_id_format
self
end
def add_headers(new_headers)
@headers.merge!(new_headers)
self
end
def perform
@ -40,8 +46,11 @@ class Request
@headers['Date'] = Time.now.utc.httpdate
end
def set_digest!
@headers['Digest'] = "SHA-256=#{Digest::SHA256.base64digest(@options[:body])}"
end
def signature
key_id = @account.to_webfinger_s
algorithm = 'rsa-sha256'
signature = Base64.strict_encode64(@account.keypair.sign(OpenSSL::Digest::SHA256.new, signed_string))
@ -60,6 +69,15 @@ class Request
@user_agent ||= "#{HTTP::Request::USER_AGENT} (Mastodon/#{Mastodon::Version}; +#{root_url})"
end
def key_id
case @key_id_format
when :acct
@account.to_webfinger_s
when :uri
[ActivityPub::TagManager.instance.uri_for(@account), '#main-key'].join
end
end
def timeout
{ write: 10, connect: 10, read: 10 }
end