rack-contrib-sign 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rack/contrib/sign.rb +1 -0
- data/lib/rack/contrib/sign/middleware.rb +2 -0
- data/lib/rack/contrib/sign/receipt.rb +16 -4
- data/lib/rack/contrib/sign/version.rb +1 -1
- data/spec/rack/contrib/sign/middleware_spec.rb +17 -5
- data/spec/rack/contrib/sign/receipt_spec.rb +30 -6
- 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: 0f04f49f937e4e268755732df3b62e1fa36a0646
|
4
|
+
data.tar.gz: f93c5ed88d1dd26885d43014f1b25818a77e0617
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5152592a6cbcae4aa188c8fdd81cbe647a74dcd0bdc84898a8693e1624579edbb8fe2d7003d93c9c3442eccafd2f23f25a0fe7d64f25676e6a895a7625464cec
|
7
|
+
data.tar.gz: b6b67f84cadd35298807bb9136ef20c43cdb802b8061e72eb05102dfc39d93674e25fb34c405ab4ecf738d309d0fc8c6fc126fe014ab8d9a42fde35f39f7bc91
|
data/lib/rack/contrib/sign.rb
CHANGED
@@ -47,9 +47,11 @@ module Rack
|
|
47
47
|
# Extract environmental data into a Receipt
|
48
48
|
def build_receipt env, credentials
|
49
49
|
receipt = Rack::Contrib::Sign::Receipt.new
|
50
|
+
receipt.host = env['rack.url_scheme'] + '://' + env['HTTP_HOST']
|
50
51
|
receipt.uri = env['REQUEST_URI']
|
51
52
|
receipt.request_method = env['REQUEST_METHOD']
|
52
53
|
receipt.body = extract_body env
|
54
|
+
receipt.content_type = env['HTTP_CONTENT_TYPE'] || ''
|
53
55
|
|
54
56
|
extract_headers(env).each { |h,v| receipt.headers[h] = v }
|
55
57
|
|
@@ -8,7 +8,9 @@ module Rack
|
|
8
8
|
attr_accessor :api_key
|
9
9
|
attr_accessor :api_secret
|
10
10
|
attr_accessor :body
|
11
|
+
attr_accessor :content_type
|
11
12
|
attr_accessor :uri
|
13
|
+
attr_accessor :host
|
12
14
|
|
13
15
|
def initialize
|
14
16
|
@headers = {}
|
@@ -18,17 +20,27 @@ module Rack
|
|
18
20
|
@request_method = s.upcase
|
19
21
|
end
|
20
22
|
|
23
|
+
def body_md5
|
24
|
+
Digest::MD5.hexdigest(body)
|
25
|
+
end
|
26
|
+
|
27
|
+
def body_length
|
28
|
+
body.length
|
29
|
+
end
|
30
|
+
|
21
31
|
def to_s
|
22
32
|
preamble + header_text
|
23
33
|
end
|
24
34
|
|
25
35
|
def preamble
|
26
36
|
s = ""
|
27
|
-
s << "%s
|
37
|
+
s << "%s\n" % request_method
|
38
|
+
s << "%s\n" % host
|
39
|
+
s << "%s\n" % uri
|
28
40
|
s << "%s\n" % api_key
|
29
|
-
s << "%s\n" %
|
30
|
-
s << "%s\n" %
|
31
|
-
s << "
|
41
|
+
s << "%s\n" % content_type
|
42
|
+
s << "%s\n" % body_length
|
43
|
+
s << "%s\n" % body_md5
|
32
44
|
s
|
33
45
|
end
|
34
46
|
|
@@ -29,7 +29,10 @@ describe Rack::Contrib::Sign::Middleware do
|
|
29
29
|
it "sets various options" do
|
30
30
|
env = {
|
31
31
|
'REQUEST_METHOD' => 'POST',
|
32
|
-
'
|
32
|
+
'HTTP_HOST' => '127.0.0.1:9292',
|
33
|
+
'rack.url_scheme' => 'http',
|
34
|
+
'HTTP_CONTENT_TYPE' => 'text/plain',
|
35
|
+
'REQUEST_URI' => '/foo/bar',
|
33
36
|
'HTTP_HI_FOOO' => 'YIPEE',
|
34
37
|
'rack.input' => StringIO.new('foo=bar')
|
35
38
|
}
|
@@ -38,7 +41,9 @@ describe Rack::Contrib::Sign::Middleware do
|
|
38
41
|
|
39
42
|
receipt = ware.build_receipt(env, creds)
|
40
43
|
|
41
|
-
receipt.
|
44
|
+
receipt.host.should eq('http://127.0.0.1:9292')
|
45
|
+
receipt.content_type.should eq('text/plain')
|
46
|
+
receipt.uri.should eq('/foo/bar')
|
42
47
|
receipt.request_method.should eq('POST')
|
43
48
|
receipt.body.should eq('foo=bar')
|
44
49
|
receipt.api_key.should eq('123')
|
@@ -130,6 +135,8 @@ describe Rack::Contrib::Sign::Middleware do
|
|
130
135
|
env = {
|
131
136
|
'HTTP_AUTHORIZATION' => 'foo-bar 123:foo',
|
132
137
|
'REQUEST_METHOD' => '?',
|
138
|
+
'HTTP_HOST' => '127.0.0.1:9292',
|
139
|
+
'rack.url_scheme' => 'http',
|
133
140
|
'rack.input' => StringIO.new()
|
134
141
|
}
|
135
142
|
|
@@ -143,7 +150,9 @@ describe Rack::Contrib::Sign::Middleware do
|
|
143
150
|
env = {
|
144
151
|
'HTTP_AUTHORIZATION' => 'foo-bar abc:YABBA DABBA DOOO',
|
145
152
|
'REQUEST_METHOD' => 'POST',
|
146
|
-
'
|
153
|
+
'HTTP_HOST' => '127.0.0.1:9292',
|
154
|
+
'rack.url_scheme' => 'http',
|
155
|
+
'REQUEST_URI' => '/foo/bar/baz',
|
147
156
|
'rack.input' => StringIO.new('foo=bar'),
|
148
157
|
}
|
149
158
|
|
@@ -154,9 +163,12 @@ describe Rack::Contrib::Sign::Middleware do
|
|
154
163
|
it "works when I sign it right" do
|
155
164
|
cred_provider['123'] = 'abc'
|
156
165
|
env = {
|
157
|
-
'HTTP_AUTHORIZATION' => 'foo-bar 123:
|
166
|
+
'HTTP_AUTHORIZATION' => 'foo-bar 123:75e8d7d1c4eeb07a049f9f7c1395aa2e61e5a879',
|
158
167
|
'REQUEST_METHOD' => 'POST',
|
159
|
-
'
|
168
|
+
'HTTP_HOST' => '127.0.0.1:9292',
|
169
|
+
'HTTP_CONTENT_TYPE' => 'text/plain',
|
170
|
+
'rack.url_scheme' => 'http',
|
171
|
+
'REQUEST_URI' => '/foo/bar/baz',
|
160
172
|
'rack.input' => StringIO.new('foo=bar'),
|
161
173
|
'HTTP_HI_FOOOO' => 'aoenuoneuh',
|
162
174
|
'HTTP_BYE_FOOO' => 'oeucorgcgc'
|
@@ -9,8 +9,12 @@ describe Rack::Contrib::Sign::Receipt do
|
|
9
9
|
it { should respond_to(:api_secret=) }
|
10
10
|
it { should respond_to(:body) }
|
11
11
|
it { should respond_to(:body=) }
|
12
|
+
it { should respond_to(:content_type) }
|
13
|
+
it { should respond_to(:content_type=) }
|
12
14
|
it { should respond_to(:request_method) }
|
13
15
|
it { should respond_to(:request_method=) }
|
16
|
+
it { should respond_to(:host) }
|
17
|
+
it { should respond_to(:host=) }
|
14
18
|
it { should respond_to(:uri) }
|
15
19
|
it { should respond_to(:uri=) }
|
16
20
|
it { should respond_to(:headers) }
|
@@ -22,6 +26,22 @@ describe Rack::Contrib::Sign::Receipt do
|
|
22
26
|
end
|
23
27
|
end
|
24
28
|
|
29
|
+
describe "#body_md5" do
|
30
|
+
it "returns the md5 of the body" do
|
31
|
+
receipt.body = 'herro'
|
32
|
+
|
33
|
+
receipt.body_md5.should eq("18f1072de45420e57fd22ee5bd59df9e")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#body_length" do
|
38
|
+
it "returns the length of the body" do
|
39
|
+
receipt.body = 'herro'
|
40
|
+
|
41
|
+
receipt.body_length.should eq(5)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
25
45
|
describe "#headers" do
|
26
46
|
it "defaults to an empty hash" do
|
27
47
|
receipt.headers.should eq({})
|
@@ -43,18 +63,22 @@ describe Rack::Contrib::Sign::Receipt do
|
|
43
63
|
describe "#preamble" do
|
44
64
|
it "incorporates all the preamble elements in a string block" do
|
45
65
|
receipt.api_key = 'abc'
|
46
|
-
receipt.api_secret = '123'
|
47
66
|
receipt.body = 'foo=bar'
|
48
67
|
receipt.request_method = 'post'
|
49
|
-
receipt.
|
68
|
+
receipt.host = 'http://example.com'
|
69
|
+
receipt.uri = '/123?foo=bar'
|
70
|
+
receipt.content_type = "text/json"
|
50
71
|
|
51
72
|
returned = receipt.preamble
|
52
73
|
|
53
|
-
r = "
|
74
|
+
r = ""
|
75
|
+
r << "POST\n"
|
76
|
+
r << "http://example.com\n"
|
77
|
+
r << "/123?foo=bar\n"
|
54
78
|
r << "abc\n"
|
55
|
-
r << "
|
56
|
-
r << "
|
57
|
-
r << "
|
79
|
+
r << "text/json\n"
|
80
|
+
r << "7\n"
|
81
|
+
r << "06ad47d8e64bd28de537b62ff85357c4\n"
|
58
82
|
|
59
83
|
returned.should eq(r)
|
60
84
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-contrib-sign
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Graham Christensen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|