diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2017-08-09 23:54:14 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-09 23:54:14 +0200 |
commit | fdea173237cfcd3a6b36f6ebccb0cb1a21cf9294 (patch) | |
tree | ef762e7053214fc07b1a9e04218316c252603253 /app/lib | |
parent | 4e1bf082ce83ca941f20993fcfb8b6f9597624c6 (diff) |
Add Digest header to requests with body, handle acct and URI keyId (#4565)
Diffstat (limited to 'app/lib')
-rw-r--r-- | app/lib/request.rb | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/app/lib/request.rb b/app/lib/request.rb index e73c5ac20..c01e07925 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -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 |