api-auth 1.5.0 → 2.0.0

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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +10 -44
  3. data/.rubocop.yml +102 -0
  4. data/.travis.yml +1 -0
  5. data/Appraisals +8 -0
  6. data/CHANGELOG.md +8 -1
  7. data/Gemfile +3 -0
  8. data/README.md +33 -5
  9. data/VERSION +1 -1
  10. data/api_auth.gemspec +17 -17
  11. data/gemfiles/rails_23.gemfile +3 -0
  12. data/gemfiles/rails_30.gemfile +3 -0
  13. data/gemfiles/rails_31.gemfile +5 -0
  14. data/gemfiles/rails_32.gemfile +5 -0
  15. data/gemfiles/rails_4.gemfile +2 -0
  16. data/gemfiles/rails_41.gemfile +2 -0
  17. data/gemfiles/rails_42.gemfile +2 -0
  18. data/lib/api-auth.rb +1 -1
  19. data/lib/api_auth/base.rb +21 -25
  20. data/lib/api_auth/errors.rb +4 -3
  21. data/lib/api_auth/headers.rb +11 -27
  22. data/lib/api_auth/helpers.rb +2 -6
  23. data/lib/api_auth/railtie.rb +5 -50
  24. data/lib/api_auth/request_drivers/action_controller.rb +7 -13
  25. data/lib/api_auth/request_drivers/action_dispatch.rb +0 -6
  26. data/lib/api_auth/request_drivers/curb.rb +8 -14
  27. data/lib/api_auth/request_drivers/faraday.rb +11 -21
  28. data/lib/api_auth/request_drivers/httpi.rb +8 -14
  29. data/lib/api_auth/request_drivers/net_http.rb +8 -14
  30. data/lib/api_auth/request_drivers/rack.rb +10 -16
  31. data/lib/api_auth/request_drivers/rest_client.rb +9 -15
  32. data/spec/api_auth_spec.rb +90 -88
  33. data/spec/headers_spec.rb +69 -84
  34. data/spec/helpers_spec.rb +7 -9
  35. data/spec/railtie_spec.rb +42 -72
  36. data/spec/request_drivers/action_controller_spec.rb +53 -55
  37. data/spec/request_drivers/action_dispatch_spec.rb +52 -55
  38. data/spec/request_drivers/curb_spec.rb +25 -28
  39. data/spec/request_drivers/faraday_spec.rb +54 -56
  40. data/spec/request_drivers/httpi_spec.rb +42 -48
  41. data/spec/request_drivers/net_http_spec.rb +51 -53
  42. data/spec/request_drivers/rack_spec.rb +58 -60
  43. data/spec/request_drivers/rest_client_spec.rb +86 -89
  44. data/spec/spec_helper.rb +9 -9
  45. metadata +4 -11
  46. data/Gemfile.lock +0 -115
  47. data/gemfiles/rails_23.gemfile.lock +0 -70
  48. data/gemfiles/rails_30.gemfile.lock +0 -92
  49. data/gemfiles/rails_31.gemfile.lock +0 -98
  50. data/gemfiles/rails_32.gemfile.lock +0 -97
  51. data/gemfiles/rails_4.gemfile.lock +0 -94
  52. data/gemfiles/rails_41.gemfile.lock +0 -98
  53. data/gemfiles/rails_42.gemfile.lock +0 -115
@@ -3,12 +3,11 @@ require 'spec_helper'
3
3
  if defined?(ActionController::Request)
4
4
 
5
5
  describe ApiAuth::RequestDrivers::ActionControllerRequest do
6
-
7
- let(:timestamp){ Time.now.utc.httpdate }
6
+ let(:timestamp) { Time.now.utc.httpdate }
8
7
 
9
8
  let(:request) do
10
9
  ActionController::Request.new(
11
- 'AUTHORIZATION' => 'APIAuth 1044:12345',
10
+ 'AUTHORIZATION' => 'APIAuth 1044:12345',
12
11
  'PATH_INFO' => '/resource.xml',
13
12
  'QUERY_STRING' => 'foo=bar&bar=foo',
14
13
  'REQUEST_METHOD' => 'PUT',
@@ -20,65 +19,65 @@ if defined?(ActionController::Request)
20
19
  )
21
20
  end
22
21
 
23
- subject(:driven_request){ ApiAuth::RequestDrivers::ActionControllerRequest.new(request) }
22
+ subject(:driven_request) { ApiAuth::RequestDrivers::ActionControllerRequest.new(request) }
24
23
 
25
- describe "getting headers correctly" do
26
- it "gets the content_type" do
24
+ describe 'getting headers correctly' do
25
+ it 'gets the content_type' do
27
26
  expect(driven_request.content_type).to eq('text/plain')
28
27
  end
29
28
 
30
- it "gets the content_md5" do
29
+ it 'gets the content_md5' do
31
30
  expect(driven_request.content_md5).to eq('1B2M2Y8AsgTpgAmY7PhCfg==')
32
31
  end
33
32
 
34
- it "gets the request_uri" do
33
+ it 'gets the request_uri' do
35
34
  expect(driven_request.request_uri).to eq('/resource.xml?foo=bar&bar=foo')
36
35
  end
37
36
 
38
- it "gets the timestamp" do
37
+ it 'gets the timestamp' do
39
38
  expect(driven_request.timestamp).to eq(timestamp)
40
39
  end
41
40
 
42
- it "gets the authorization_header" do
41
+ it 'gets the authorization_header' do
43
42
  expect(driven_request.authorization_header).to eq('APIAuth 1044:12345')
44
43
  end
45
44
 
46
- describe "#calculated_md5" do
47
- it "calculates md5 from the body" do
45
+ describe '#calculated_md5' do
46
+ it 'calculates md5 from the body' do
48
47
  expect(driven_request.calculated_md5).to eq('kZXQvrKoieG+Be1rsZVINw==')
49
48
  end
50
49
 
51
- it "treats no body as empty string" do
50
+ it 'treats no body as empty string' do
52
51
  request.env['rack.input'] = StringIO.new
53
52
  request.env['CONTENT_LENGTH'] = 0
54
53
  expect(driven_request.calculated_md5).to eq('1B2M2Y8AsgTpgAmY7PhCfg==')
55
54
  end
56
55
  end
57
56
 
58
- describe "http_method" do
59
- context "when put request" do
57
+ describe 'http_method' do
58
+ context 'when put request' do
60
59
  let(:request) do
61
60
  ActionController::Request.new('REQUEST_METHOD' => 'PUT')
62
61
  end
63
62
 
64
- it "returns upcased put" do
63
+ it 'returns upcased put' do
65
64
  expect(driven_request.http_method).to eq('PUT')
66
65
  end
67
66
  end
68
67
 
69
- context "when get request" do
68
+ context 'when get request' do
70
69
  let(:request) do
71
70
  ActionController::Request.new('REQUEST_METHOD' => 'GET')
72
71
  end
73
72
 
74
- it "returns upcased get" do
73
+ it 'returns upcased get' do
75
74
  expect(driven_request.http_method).to eq('GET')
76
75
  end
77
76
  end
78
77
  end
79
78
  end
80
79
 
81
- describe "setting headers correctly" do
80
+ describe 'setting headers correctly' do
82
81
  let(:request) do
83
82
  ActionController::Request.new(
84
83
  'PATH_INFO' => '/resource.xml',
@@ -90,144 +89,143 @@ if defined?(ActionController::Request)
90
89
  )
91
90
  end
92
91
 
93
- describe "#populate_content_md5" do
94
- context "when getting" do
92
+ describe '#populate_content_md5' do
93
+ context 'when getting' do
95
94
  it "doesn't populate content-md5" do
96
95
  request.env['REQUEST_METHOD'] = 'GET'
97
96
  driven_request.populate_content_md5
98
- expect(request.env["Content-MD5"]).to be_nil
97
+ expect(request.env['Content-MD5']).to be_nil
99
98
  end
100
99
  end
101
100
 
102
- context "when posting" do
103
- it "populates content-md5" do
101
+ context 'when posting' do
102
+ it 'populates content-md5' do
104
103
  request.env['REQUEST_METHOD'] = 'POST'
105
104
  driven_request.populate_content_md5
106
- expect(request.env["Content-MD5"]).to eq('kZXQvrKoieG+Be1rsZVINw==')
105
+ expect(request.env['Content-MD5']).to eq('kZXQvrKoieG+Be1rsZVINw==')
107
106
  end
108
107
 
109
- it "refreshes the cached headers" do
108
+ it 'refreshes the cached headers' do
110
109
  driven_request.populate_content_md5
111
110
  expect(driven_request.content_md5).to eq('kZXQvrKoieG+Be1rsZVINw==')
112
111
  end
113
112
  end
114
113
 
115
- context "when putting" do
116
- it "populates content-md5" do
114
+ context 'when putting' do
115
+ it 'populates content-md5' do
117
116
  request.env['REQUEST_METHOD'] = 'PUT'
118
117
  driven_request.populate_content_md5
119
- expect(request.env["Content-MD5"]).to eq('kZXQvrKoieG+Be1rsZVINw==')
118
+ expect(request.env['Content-MD5']).to eq('kZXQvrKoieG+Be1rsZVINw==')
120
119
  end
121
120
 
122
- it "refreshes the cached headers" do
121
+ it 'refreshes the cached headers' do
123
122
  driven_request.populate_content_md5
124
123
  expect(driven_request.content_md5).to eq('kZXQvrKoieG+Be1rsZVINw==')
125
124
  end
126
125
  end
127
126
 
128
- context "when deleting" do
127
+ context 'when deleting' do
129
128
  it "doesn't populate content-md5" do
130
129
  request.env['REQUEST_METHOD'] = 'DELETE'
131
130
  driven_request.populate_content_md5
132
- expect(request.env["Content-MD5"]).to be_nil
131
+ expect(request.env['Content-MD5']).to be_nil
133
132
  end
134
133
  end
135
-
136
134
  end
137
135
 
138
- describe "#set_date" do
136
+ describe '#set_date' do
139
137
  before do
140
138
  allow(Time).to receive_message_chain(:now, :utc, :httpdate).and_return(timestamp)
141
139
  end
142
140
 
143
- it "sets the date header of the request" do
141
+ it 'sets the date header of the request' do
144
142
  driven_request.set_date
145
143
  expect(request.env['HTTP_DATE']).to eq(timestamp)
146
144
  end
147
145
 
148
- it "refreshes the cached headers" do
146
+ it 'refreshes the cached headers' do
149
147
  driven_request.set_date
150
148
  expect(driven_request.timestamp).to eq(timestamp)
151
149
  end
152
150
  end
153
151
 
154
- describe "#set_auth_header" do
155
- it "sets the auth header" do
152
+ describe '#set_auth_header' do
153
+ it 'sets the auth header' do
156
154
  driven_request.set_auth_header('APIAuth 1044:54321')
157
155
  expect(request.env['Authorization']).to eq('APIAuth 1044:54321')
158
156
  end
159
157
  end
160
158
  end
161
159
 
162
- describe "md5_mismatch?" do
163
- context "when getting" do
160
+ describe 'md5_mismatch?' do
161
+ context 'when getting' do
164
162
  before do
165
163
  request.env['REQUEST_METHOD'] = 'GET'
166
164
  end
167
165
 
168
- it "is false" do
166
+ it 'is false' do
169
167
  expect(driven_request.md5_mismatch?).to be false
170
168
  end
171
169
  end
172
170
 
173
- context "when posting" do
171
+ context 'when posting' do
174
172
  before do
175
173
  request.env['REQUEST_METHOD'] = 'POST'
176
174
  end
177
175
 
178
- context "when calculated matches sent" do
176
+ context 'when calculated matches sent' do
179
177
  before do
180
- request.env["CONTENT_MD5"] = 'kZXQvrKoieG+Be1rsZVINw=='
178
+ request.env['CONTENT_MD5'] = 'kZXQvrKoieG+Be1rsZVINw=='
181
179
  end
182
180
 
183
- it "is false" do
181
+ it 'is false' do
184
182
  expect(driven_request.md5_mismatch?).to be false
185
183
  end
186
184
  end
187
185
 
188
186
  context "when calculated doesn't match sent" do
189
187
  before do
190
- request.env["CONTENT_MD5"] = "3"
188
+ request.env['CONTENT_MD5'] = '3'
191
189
  end
192
190
 
193
- it "is true" do
191
+ it 'is true' do
194
192
  expect(driven_request.md5_mismatch?).to be true
195
193
  end
196
194
  end
197
195
  end
198
196
 
199
- context "when putting" do
197
+ context 'when putting' do
200
198
  before do
201
199
  request.env['REQUEST_METHOD'] = 'PUT'
202
200
  end
203
201
 
204
- context "when calculated matches sent" do
202
+ context 'when calculated matches sent' do
205
203
  before do
206
- request.env["CONTENT_MD5"] = 'kZXQvrKoieG+Be1rsZVINw=='
204
+ request.env['CONTENT_MD5'] = 'kZXQvrKoieG+Be1rsZVINw=='
207
205
  end
208
206
 
209
- it "is false" do
207
+ it 'is false' do
210
208
  expect(driven_request.md5_mismatch?).to be false
211
209
  end
212
210
  end
213
211
 
214
212
  context "when calculated doesn't match sent" do
215
213
  before do
216
- request.env["CONTENT_MD5"] = "3"
214
+ request.env['CONTENT_MD5'] = '3'
217
215
  end
218
216
 
219
- it "is true" do
217
+ it 'is true' do
220
218
  expect(driven_request.md5_mismatch?).to be true
221
219
  end
222
220
  end
223
221
  end
224
222
 
225
- context "when deleting" do
223
+ context 'when deleting' do
226
224
  before do
227
225
  request.env['REQUEST_METHOD'] = 'DELETE'
228
226
  end
229
227
 
230
- it "is false" do
228
+ it 'is false' do
231
229
  expect(driven_request.md5_mismatch?).to be false
232
230
  end
233
231
  end
@@ -3,8 +3,7 @@ require 'spec_helper'
3
3
  if defined?(ActionDispatch::Request)
4
4
 
5
5
  describe ApiAuth::RequestDrivers::ActionDispatchRequest do
6
-
7
- let(:timestamp){ Time.now.utc.httpdate }
6
+ let(:timestamp) { Time.now.utc.httpdate }
8
7
 
9
8
  let(:request) do
10
9
  ActionDispatch::Request.new(
@@ -20,66 +19,65 @@ if defined?(ActionDispatch::Request)
20
19
  )
21
20
  end
22
21
 
23
- subject(:driven_request){ ApiAuth::RequestDrivers::ActionDispatchRequest.new(request) }
22
+ subject(:driven_request) { ApiAuth::RequestDrivers::ActionDispatchRequest.new(request) }
24
23
 
25
- describe "getting headers correctly" do
26
- it "gets the content_type" do
24
+ describe 'getting headers correctly' do
25
+ it 'gets the content_type' do
27
26
  expect(driven_request.content_type).to eq('text/plain')
28
27
  end
29
28
 
30
- it "gets the content_md5" do
29
+ it 'gets the content_md5' do
31
30
  expect(driven_request.content_md5).to eq('1B2M2Y8AsgTpgAmY7PhCfg==')
32
31
  end
33
32
 
34
- it "gets the request_uri" do
33
+ it 'gets the request_uri' do
35
34
  expect(driven_request.request_uri).to eq('/resource.xml?foo=bar&bar=foo')
36
35
  end
37
36
 
38
- it "gets the timestamp" do
37
+ it 'gets the timestamp' do
39
38
  expect(driven_request.timestamp).to eq(timestamp)
40
39
  end
41
40
 
42
- it "gets the authorization_header" do
41
+ it 'gets the authorization_header' do
43
42
  expect(driven_request.authorization_header).to eq('APIAuth 1044:12345')
44
43
  end
45
44
 
46
- describe "#calculated_md5" do
47
- it "calculates md5 from the body" do
45
+ describe '#calculated_md5' do
46
+ it 'calculates md5 from the body' do
48
47
  expect(driven_request.calculated_md5).to eq('kZXQvrKoieG+Be1rsZVINw==')
49
48
  end
50
49
 
51
- it "treats no body as empty string" do
50
+ it 'treats no body as empty string' do
52
51
  request.env['rack.input'] = StringIO.new
53
52
  request.env['CONTENT_LENGTH'] = 0
54
53
  expect(driven_request.calculated_md5).to eq('1B2M2Y8AsgTpgAmY7PhCfg==')
55
54
  end
56
55
  end
57
56
 
58
-
59
- describe "http_method" do
60
- context "when put request" do
57
+ describe 'http_method' do
58
+ context 'when put request' do
61
59
  let(:request) do
62
60
  ActionDispatch::Request.new('REQUEST_METHOD' => 'PUT')
63
61
  end
64
62
 
65
- it "returns upcased put" do
63
+ it 'returns upcased put' do
66
64
  expect(driven_request.http_method).to eq('PUT')
67
65
  end
68
66
  end
69
67
 
70
- context "when get request" do
68
+ context 'when get request' do
71
69
  let(:request) do
72
70
  ActionDispatch::Request.new('REQUEST_METHOD' => 'GET')
73
71
  end
74
72
 
75
- it "returns upcased get" do
73
+ it 'returns upcased get' do
76
74
  expect(driven_request.http_method).to eq('GET')
77
75
  end
78
76
  end
79
77
  end
80
78
  end
81
79
 
82
- describe "setting headers correctly" do
80
+ describe 'setting headers correctly' do
83
81
  let(:request) do
84
82
  ActionDispatch::Request.new(
85
83
  'PATH_INFO' => '/resource.xml',
@@ -91,144 +89,143 @@ if defined?(ActionDispatch::Request)
91
89
  )
92
90
  end
93
91
 
94
- describe "#populate_content_md5" do
95
- context "when getting" do
92
+ describe '#populate_content_md5' do
93
+ context 'when getting' do
96
94
  it "doesn't populate content-md5" do
97
95
  request.env['REQUEST_METHOD'] = 'GET'
98
96
  driven_request.populate_content_md5
99
- expect(request.env["Content-MD5"]).to be_nil
97
+ expect(request.env['Content-MD5']).to be_nil
100
98
  end
101
99
  end
102
100
 
103
- context "when posting" do
104
- it "populates content-md5" do
101
+ context 'when posting' do
102
+ it 'populates content-md5' do
105
103
  request.env['REQUEST_METHOD'] = 'POST'
106
104
  driven_request.populate_content_md5
107
- expect(request.env["Content-MD5"]).to eq('kZXQvrKoieG+Be1rsZVINw==')
105
+ expect(request.env['Content-MD5']).to eq('kZXQvrKoieG+Be1rsZVINw==')
108
106
  end
109
107
 
110
- it "refreshes the cached headers" do
108
+ it 'refreshes the cached headers' do
111
109
  driven_request.populate_content_md5
112
110
  expect(driven_request.content_md5).to eq('kZXQvrKoieG+Be1rsZVINw==')
113
111
  end
114
112
  end
115
113
 
116
- context "when putting" do
117
- it "populates content-md5" do
114
+ context 'when putting' do
115
+ it 'populates content-md5' do
118
116
  request.env['REQUEST_METHOD'] = 'PUT'
119
117
  driven_request.populate_content_md5
120
- expect(request.env["Content-MD5"]).to eq('kZXQvrKoieG+Be1rsZVINw==')
118
+ expect(request.env['Content-MD5']).to eq('kZXQvrKoieG+Be1rsZVINw==')
121
119
  end
122
120
 
123
- it "refreshes the cached headers" do
121
+ it 'refreshes the cached headers' do
124
122
  driven_request.populate_content_md5
125
123
  expect(driven_request.content_md5).to eq('kZXQvrKoieG+Be1rsZVINw==')
126
124
  end
127
125
  end
128
126
 
129
- context "when deleting" do
127
+ context 'when deleting' do
130
128
  it "doesn't populate content-md5" do
131
129
  request.env['REQUEST_METHOD'] = 'DELETE'
132
130
  driven_request.populate_content_md5
133
- expect(request.env["Content-MD5"]).to be_nil
131
+ expect(request.env['Content-MD5']).to be_nil
134
132
  end
135
133
  end
136
-
137
134
  end
138
135
 
139
- describe "#set_date" do
136
+ describe '#set_date' do
140
137
  before do
141
138
  allow(Time).to receive_message_chain(:now, :utc, :httpdate).and_return(timestamp)
142
139
  end
143
140
 
144
- it "sets the date header of the request" do
141
+ it 'sets the date header of the request' do
145
142
  driven_request.set_date
146
143
  expect(request.env['HTTP_DATE']).to eq(timestamp)
147
144
  end
148
145
 
149
- it "refreshes the cached headers" do
146
+ it 'refreshes the cached headers' do
150
147
  driven_request.set_date
151
148
  expect(driven_request.timestamp).to eq(timestamp)
152
149
  end
153
150
  end
154
151
 
155
- describe "#set_auth_header" do
156
- it "sets the auth header" do
152
+ describe '#set_auth_header' do
153
+ it 'sets the auth header' do
157
154
  driven_request.set_auth_header('APIAuth 1044:54321')
158
155
  expect(request.env['Authorization']).to eq('APIAuth 1044:54321')
159
156
  end
160
157
  end
161
158
  end
162
159
 
163
- describe "md5_mismatch?" do
164
- context "when getting" do
160
+ describe 'md5_mismatch?' do
161
+ context 'when getting' do
165
162
  before do
166
163
  request.env['REQUEST_METHOD'] = 'GET'
167
164
  end
168
165
 
169
- it "is false" do
166
+ it 'is false' do
170
167
  expect(driven_request.md5_mismatch?).to be false
171
168
  end
172
169
  end
173
170
 
174
- context "when posting" do
171
+ context 'when posting' do
175
172
  before do
176
173
  request.env['REQUEST_METHOD'] = 'POST'
177
174
  end
178
175
 
179
- context "when calculated matches sent" do
176
+ context 'when calculated matches sent' do
180
177
  before do
181
- request.env["CONTENT_MD5"] = 'kZXQvrKoieG+Be1rsZVINw=='
178
+ request.env['CONTENT_MD5'] = 'kZXQvrKoieG+Be1rsZVINw=='
182
179
  end
183
180
 
184
- it "is false" do
181
+ it 'is false' do
185
182
  expect(driven_request.md5_mismatch?).to be false
186
183
  end
187
184
  end
188
185
 
189
186
  context "when calculated doesn't match sent" do
190
187
  before do
191
- request.env["CONTENT_MD5"] = "3"
188
+ request.env['CONTENT_MD5'] = '3'
192
189
  end
193
190
 
194
- it "is true" do
191
+ it 'is true' do
195
192
  expect(driven_request.md5_mismatch?).to be true
196
193
  end
197
194
  end
198
195
  end
199
196
 
200
- context "when putting" do
197
+ context 'when putting' do
201
198
  before do
202
199
  request.env['REQUEST_METHOD'] = 'PUT'
203
200
  end
204
201
 
205
- context "when calculated matches sent" do
202
+ context 'when calculated matches sent' do
206
203
  before do
207
- request.env["CONTENT_MD5"] = 'kZXQvrKoieG+Be1rsZVINw=='
204
+ request.env['CONTENT_MD5'] = 'kZXQvrKoieG+Be1rsZVINw=='
208
205
  end
209
206
 
210
- it "is false" do
207
+ it 'is false' do
211
208
  expect(driven_request.md5_mismatch?).to be false
212
209
  end
213
210
  end
214
211
 
215
212
  context "when calculated doesn't match sent" do
216
213
  before do
217
- request.env["CONTENT_MD5"] = "3"
214
+ request.env['CONTENT_MD5'] = '3'
218
215
  end
219
216
 
220
- it "is true" do
217
+ it 'is true' do
221
218
  expect(driven_request.md5_mismatch?).to be true
222
219
  end
223
220
  end
224
221
  end
225
222
 
226
- context "when deleting" do
223
+ context 'when deleting' do
227
224
  before do
228
225
  request.env['REQUEST_METHOD'] = 'DELETE'
229
226
  end
230
227
 
231
- it "is false" do
228
+ it 'is false' do
232
229
  expect(driven_request.md5_mismatch?).to be false
233
230
  end
234
231
  end