escher 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/escher/auth.rb +8 -2
- data/lib/escher/request/action_dispatch_request.rb +7 -2
- data/lib/escher/version.rb +1 -1
- data/spec/escher/auth_spec.rb +16 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b2aaa51a97cbcacb8f91e5ee93053a4bbe4e5a1
|
4
|
+
data.tar.gz: d7b41ccf26d7f5a94562b092f88072bdb5691f75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e2d44cc276b8bf74e66148e298f02286241233ed020139c426cb5fc6fd6e0b1b4e3c7f089996903a223df929528c67cba68cb48152a9575ee5eeeca460997e8
|
7
|
+
data.tar.gz: a565aa6cc4ce556d81cf566c0d14fac90087789495e3ffb383582f84a3afacecf8976938ab8c5c5273f27bb4820b605d72a657329453a97daf14300c9e01b6de
|
data/README.md
CHANGED
@@ -6,3 +6,5 @@ Escher helps you creating secure HTTP requests (for APIs) by signing HTTP(s) req
|
|
6
6
|
The algorithm is based on [Amazon's _AWS Signature Version 4_](http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html), but we have generalized and extended it.
|
7
7
|
|
8
8
|
More details will be available at our [documentation site](http://escherauth.io/).
|
9
|
+
|
10
|
+
Check out a [working example] (https://github.com/emartech/escher-ruby-example).
|
data/lib/escher/auth.rb
CHANGED
@@ -106,7 +106,13 @@ module Escher
|
|
106
106
|
|
107
107
|
def generate_signed_url(url_to_sign, client, expires = 86400)
|
108
108
|
uri = Addressable::URI.parse(url_to_sign)
|
109
|
-
|
109
|
+
|
110
|
+
if (uri.port.present?) && (uri.port != uri.default_port)
|
111
|
+
host = "#{uri.host}:#{uri.port}"
|
112
|
+
else
|
113
|
+
host = uri.host
|
114
|
+
end
|
115
|
+
|
110
116
|
path = uri.path
|
111
117
|
query_parts = (uri.query || '')
|
112
118
|
.split('&', -1)
|
@@ -128,7 +134,7 @@ module Escher
|
|
128
134
|
signature = generate_signature(client[:api_secret], body, headers, 'GET', headers_to_sign, path, query_parts)
|
129
135
|
query_parts_with_signature = (query_parts.map { |k, v| [uri_encode(k), uri_encode(v)] } << query_pair('Signature', signature))
|
130
136
|
|
131
|
-
uri.scheme
|
137
|
+
"#{uri.scheme}://#{host}#{path}?#{query_parts_with_signature.map { |k, v| k + '=' + v }.join('&')}#{(fragment === nil ? '' : '#' + fragment)}"
|
132
138
|
end
|
133
139
|
|
134
140
|
|
@@ -17,13 +17,18 @@ module Escher
|
|
17
17
|
|
18
18
|
|
19
19
|
def body
|
20
|
-
request.body
|
20
|
+
case request.body
|
21
|
+
when StringIO
|
22
|
+
request.body.string
|
23
|
+
else
|
24
|
+
request.body.to_s
|
25
|
+
end
|
21
26
|
end
|
22
27
|
|
23
28
|
|
24
29
|
|
25
30
|
def path
|
26
|
-
request.env['REQUEST_PATH']
|
31
|
+
request.env['REQUEST_PATH'] || request.path
|
27
32
|
end
|
28
33
|
|
29
34
|
|
data/lib/escher/version.rb
CHANGED
data/spec/escher/auth_spec.rb
CHANGED
@@ -189,6 +189,22 @@ module Escher
|
|
189
189
|
end
|
190
190
|
|
191
191
|
|
192
|
+
[
|
193
|
+
['http://iam.amazonaws.com:5000/', 'iam.amazonaws.com:5000'],
|
194
|
+
['https://iam.amazonaws.com:5000/', 'iam.amazonaws.com:5000'],
|
195
|
+
['http://iam.amazonaws.com:80/', 'iam.amazonaws.com'],
|
196
|
+
['https://iam.amazonaws.com:443/', 'iam.amazonaws.com'],
|
197
|
+
['http://iam.amazonaws.com:443/', 'iam.amazonaws.com:443'],
|
198
|
+
['https://iam.amazonaws.com:80/', 'iam.amazonaws.com:80']
|
199
|
+
].each do |input, expected_output|
|
200
|
+
it 'should automagically handle ports' do
|
201
|
+
escher = described_class.new('us-east-1/host/aws4_request', ESCHER_MIXED_OPTIONS.merge(current_time: Time.parse('2011/05/11 12:00:00 UTC')))
|
202
|
+
client = {:api_key_id => 'th3K3y', :api_secret => 'very_secure'}
|
203
|
+
expect(escher.generate_signed_url("#{input}something?foo=bar&baz=barbaz#hash", client, 123456)).to include expected_output
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
|
192
208
|
it 'should validate presigned url' do
|
193
209
|
escher = described_class.new('us-east-1/host/aws4_request', ESCHER_MIXED_OPTIONS.merge(current_time: Time.parse('2011/05/12 21:59:00 UTC')))
|
194
210
|
presigned_uri =
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: escher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andras Barthazi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04
|
11
|
+
date: 2015-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|