Add Digest header to requests with body, handle acct and URI keyId (#4565)
This commit is contained in:
parent
4e1bf082ce
commit
fdea173237
3 changed files with 100 additions and 25 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue