mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
[AWS|Signaturev4] allow symbols to be used as header/query keys
This commit is contained in:
parent
b2b218b0d6
commit
0fa0a9c7f1
2 changed files with 28 additions and 19 deletions
|
@ -39,8 +39,8 @@ DATA
|
|||
|
||||
def canonical_query_string(query)
|
||||
canonical_query_string = []
|
||||
for key in (query || {}).keys.sort
|
||||
component = "#{Fog::AWS.escape(key)}=#{Fog::AWS.escape(query[key].to_s)}"
|
||||
for key in (query || {}).keys.sort_by {|k| k.to_s}
|
||||
component = "#{Fog::AWS.escape(key.to_s)}=#{Fog::AWS.escape(query[key].to_s)}"
|
||||
canonical_query_string << component
|
||||
end
|
||||
canonical_query_string.join("&")
|
||||
|
@ -49,14 +49,14 @@ DATA
|
|||
def canonical_headers(headers)
|
||||
canonical_headers = ''
|
||||
|
||||
for key in headers.keys.sort
|
||||
canonical_headers << "#{key.downcase}:#{headers[key].to_s.strip}\n"
|
||||
for key in headers.keys.sort_by {|k| k.to_s}
|
||||
canonical_headers << "#{key.to_s.downcase}:#{headers[key].to_s.strip}\n"
|
||||
end
|
||||
canonical_headers
|
||||
end
|
||||
|
||||
def signed_headers(headers)
|
||||
headers.keys.sort.collect {|key| key.downcase}.join(';')
|
||||
headers.keys.collect {|key| key.to_s}.sort.collect {|key| key.downcase}.join(';')
|
||||
end
|
||||
|
||||
def derived_hmac(date)
|
||||
|
|
|
@ -7,26 +7,35 @@ Shindo.tests('AWS | signaturev4', ['aws']) do
|
|||
|
||||
Fog::Time.now = ::Time.utc(2011,9,9,23,36,0)
|
||||
|
||||
#get-vanilla
|
||||
returns(@signer.sign({:headers => {'Host' => 'host.foo.com', 'Date' => 'Mon, 09 Sep 2011 23:36:00 GMT'}, :method => :get, :path => '/'}, Fog::Time.now)) do
|
||||
'AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=b27ccfbfa7df52a200ff74193ca6e32d4b48b8856fab7ebf1c595d0670a7e470'
|
||||
tests('get-vanilla') do
|
||||
returns(@signer.sign({:headers => {'Host' => 'host.foo.com', 'Date' => 'Mon, 09 Sep 2011 23:36:00 GMT'}, :method => :get, :path => '/'}, Fog::Time.now)) do
|
||||
'AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=b27ccfbfa7df52a200ff74193ca6e32d4b48b8856fab7ebf1c595d0670a7e470'
|
||||
end
|
||||
end
|
||||
|
||||
#get-vanilla-query-order-key
|
||||
returns(@signer.sign({:query => {'a' => 'foo', 'b' => 'foo'}, :headers => {'Host' => 'host.foo.com', 'Date' => 'Mon, 09 Sep 2011 23:36:00 GMT'}, :method => :get, :path => '/'}, Fog::Time.now)) do
|
||||
'AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=0dc122f3b28b831ab48ba65cb47300de53fbe91b577fe113edac383730254a3b'
|
||||
tests('get-vanilla-query-order-key with symbol keys') do
|
||||
returns(@signer.sign({:query => {:'a' => 'foo', :'b' => 'foo'}, :headers => {:'Host' => 'host.foo.com', 'Date' => 'Mon, 09 Sep 2011 23:36:00 GMT'}, :method => :get, :path => '/'}, Fog::Time.now)) do
|
||||
'AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=0dc122f3b28b831ab48ba65cb47300de53fbe91b577fe113edac383730254a3b'
|
||||
end
|
||||
end
|
||||
|
||||
tests('get-vanilla-query-order-key') do
|
||||
returns(@signer.sign({:query => {'a' => 'foo', 'b' => 'foo'}, :headers => {'Host' => 'host.foo.com', 'Date' => 'Mon, 09 Sep 2011 23:36:00 GMT'}, :method => :get, :path => '/'}, Fog::Time.now)) do
|
||||
'AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=0dc122f3b28b831ab48ba65cb47300de53fbe91b577fe113edac383730254a3b'
|
||||
end
|
||||
end
|
||||
|
||||
#get-unreserved
|
||||
returns(@signer.sign({:headers => {'Host' => 'host.foo.com', 'Date' => 'Mon, 09 Sep 2011 23:36:00 GMT'}, :method => :get, :path => '/-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'}, Fog::Time.now)) do
|
||||
'AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=830cc36d03f0f84e6ee4953fbe701c1c8b71a0372c63af9255aa364dd183281e'
|
||||
tests('get-unreserved') do
|
||||
returns(@signer.sign({:headers => {'Host' => 'host.foo.com', 'Date' => 'Mon, 09 Sep 2011 23:36:00 GMT'}, :method => :get, :path => '/-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'}, Fog::Time.now)) do
|
||||
'AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=830cc36d03f0f84e6ee4953fbe701c1c8b71a0372c63af9255aa364dd183281e'
|
||||
end
|
||||
end
|
||||
|
||||
#post-x-www-form-urlencoded-parameter
|
||||
returns(@signer.sign({:headers => {'Content-type' => 'application/x-www-form-urlencoded; charset=utf8', 'Host' => 'host.foo.com', 'Date' => 'Mon, 09 Sep 2011 23:36:00 GMT'}, :method => :post, :path => '/',
|
||||
:body => 'foo=bar'}, Fog::Time.now)) do
|
||||
'AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=content-type;date;host, Signature=b105eb10c6d318d2294de9d49dd8b031b55e3c3fe139f2e637da70511e9e7b71'
|
||||
tests('post-x-www-form-urlencoded-parameter') do
|
||||
returns(@signer.sign({:headers => {'Content-type' => 'application/x-www-form-urlencoded; charset=utf8', 'Host' => 'host.foo.com', 'Date' => 'Mon, 09 Sep 2011 23:36:00 GMT'}, :method => :post, :path => '/',
|
||||
:body => 'foo=bar'}, Fog::Time.now)) do
|
||||
'AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=content-type;date;host, Signature=b105eb10c6d318d2294de9d49dd8b031b55e3c3fe139f2e637da70511e9e7b71'
|
||||
end
|
||||
end
|
||||
|
||||
Fog::Time.now = ::Time.now
|
||||
end
|
Loading…
Reference in a new issue