warden 1.2.7 → 1.2.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +27 -0
  3. data/.gitignore +6 -0
  4. data/.rspec +3 -0
  5. data/{History.rdoc → CHANGELOG.md} +74 -39
  6. data/Gemfile +2 -2
  7. data/LICENSE +2 -1
  8. data/README.md +18 -0
  9. data/Rakefile +3 -8
  10. data/lib/warden/config.rb +1 -1
  11. data/lib/warden/errors.rb +2 -2
  12. data/lib/warden/hooks.rb +1 -1
  13. data/lib/warden/manager.rb +2 -2
  14. data/lib/warden/mixins/common.rb +1 -1
  15. data/lib/warden/proxy.rb +24 -5
  16. data/lib/warden/session_serializer.rb +1 -1
  17. data/lib/warden/strategies/base.rb +2 -1
  18. data/lib/warden/test/helpers.rb +2 -2
  19. data/lib/warden/test/mock.rb +5 -5
  20. data/lib/warden/test/warden_helpers.rb +1 -1
  21. data/lib/warden/version.rb +2 -2
  22. data/lib/warden.rb +1 -1
  23. data/warden.gemspec +18 -18
  24. metadata +18 -36
  25. data/README.textile +0 -9
  26. data/spec/helpers/request_helper.rb +0 -52
  27. data/spec/helpers/strategies/fail_with_user.rb +0 -11
  28. data/spec/helpers/strategies/failz.rb +0 -9
  29. data/spec/helpers/strategies/invalid.rb +0 -9
  30. data/spec/helpers/strategies/pass.rb +0 -9
  31. data/spec/helpers/strategies/pass_with_message.rb +0 -9
  32. data/spec/helpers/strategies/password.rb +0 -14
  33. data/spec/helpers/strategies/single.rb +0 -13
  34. data/spec/spec_helper.rb +0 -26
  35. data/spec/warden/authenticated_data_store_spec.rb +0 -115
  36. data/spec/warden/config_spec.rb +0 -49
  37. data/spec/warden/errors_spec.rb +0 -48
  38. data/spec/warden/hooks_spec.rb +0 -374
  39. data/spec/warden/manager_spec.rb +0 -341
  40. data/spec/warden/proxy_spec.rb +0 -1051
  41. data/spec/warden/scoped_session_serializer.rb +0 -124
  42. data/spec/warden/session_serializer_spec.rb +0 -54
  43. data/spec/warden/strategies/base_spec.rb +0 -314
  44. data/spec/warden/strategies_spec.rb +0 -95
  45. data/spec/warden/test/helpers_spec.rb +0 -94
  46. data/spec/warden/test/mock_spec.rb +0 -16
  47. data/spec/warden/test/test_mode_spec.rb +0 -76
@@ -1,341 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- require 'spec_helper'
4
-
5
- describe Warden::Manager do
6
-
7
- before(:all) do
8
- load_strategies
9
- end
10
-
11
- it "should insert a Proxy object into the rack env" do
12
- env = env_with_params
13
- setup_rack(success_app).call(env)
14
- expect(env["warden"]).to be_an_instance_of(Warden::Proxy)
15
- end
16
-
17
- describe "thrown auth" do
18
- before(:each) do
19
- @basic_app = lambda{|env| [200,{'Content-Type' => 'text/plain'},'OK']}
20
- @authd_app = lambda do |e|
21
- if e['warden'].authenticated?
22
- [200,{'Content-Type' => 'text/plain'},"OK"]
23
- else
24
- [401,{'Content-Type' => 'text/plain'},"Fail From The App"]
25
- end
26
- end
27
- @env = Rack::MockRequest.
28
- env_for('/', 'HTTP_VERSION' => '1.1', 'REQUEST_METHOD' => 'GET')
29
- end # before(:each)
30
-
31
- describe "Failure" do
32
- it "should respond with a 401 response if the strategy fails authentication" do
33
- env = env_with_params("/", :foo => "bar")
34
- app = lambda do |_env|
35
- _env['warden'].authenticate(:failz)
36
- throw(:warden, :action => :unauthenticated)
37
- end
38
- result = setup_rack(app, :failure_app => @fail_app).call(env) # TODO: What is @fail_app?
39
- expect(result.first).to eq(401)
40
- end
41
-
42
- it "should use the failure message given to the failure method" do
43
- env = env_with_params("/", {})
44
- app = lambda do |_env|
45
- _env['warden'].authenticate(:failz)
46
- throw(:warden)
47
- end
48
- result = setup_rack(app, :failure_app => @fail_app).call(env) # TODO: What is @fail_app?
49
- expect(result.last).to eq(["You Fail!"])
50
- end
51
-
52
- it "should set the message from the winning strategy in warden.options hash" do
53
- env = env_with_params("/", {})
54
- app = lambda do |_env|
55
- _env['warden'].authenticate(:failz)
56
- throw(:warden)
57
- end
58
- setup_rack(app, :failure_app => @fail_app).call(env) # TODO: What is @fail_app?
59
- expect(env["warden.options"][:message]).to eq("The Fails Strategy Has Failed You")
60
- end
61
-
62
- it "should render the failure app when there's a failure" do
63
- app = lambda do |e|
64
- throw(:warden, :action => :unauthenticated) unless e['warden'].authenticated?(:failz)
65
- end
66
- fail_app = lambda do |e|
67
- [401, {"Content-Type" => "text/plain"}, ["Failure App"]]
68
- end
69
- result = setup_rack(app, :failure_app => fail_app).call(env_with_params)
70
- expect(result.last).to eq(["Failure App"])
71
- end
72
-
73
- it "should call failure app if warden is thrown even after successful authentication" do
74
- env = env_with_params("/", {})
75
- app = lambda do |_env|
76
- _env['warden'].authenticate(:pass)
77
- throw(:warden)
78
- end
79
- result = setup_rack(app, :failure_app => @fail_app).call(env)
80
- expect(result.first).to eq(401)
81
- expect(result.last).to eq(["You Fail!"])
82
- end
83
-
84
- it "should set the attempted url in warden.options hash" do
85
- env = env_with_params("/access/path", {})
86
- app = lambda do |_env|
87
- _env['warden'].authenticate(:pass)
88
- throw(:warden)
89
- end
90
- result = setup_rack(app, :failure_app => @fail_app).call(env) # TODO: What is @fail_app?
91
- expect(result.first).to eq(401)
92
- expect(env["warden.options"][:attempted_path]).to eq("/access/path")
93
- end
94
-
95
- it "should catch a resubmitted request" do
96
- # this is a bit convoluted. but it's occurred in the field with Rack::OpenID
97
- $count = 0
98
- $throw_count = 0
99
- env = env_with_params("/foo")
100
- class ::ResubmittingMiddleware
101
- @@app = nil
102
- def initialize(app)
103
- @@app = app
104
- end
105
-
106
- def self.call(env)
107
- if $count > 1
108
- Rack::Response.new("Bad", 401)
109
- else
110
- $count += 1
111
- @@app.call(env)
112
- end
113
- end
114
-
115
- def call(env)
116
- $count += 1
117
- @@app.call(env)
118
- end
119
-
120
- end
121
-
122
- app = lambda do |e|
123
- $throw_count += 1
124
- throw(:warden)
125
- end
126
-
127
- builder = Rack::Builder.new do
128
- use ResubmittingMiddleware
129
- use Warden::Manager do |config|
130
- config.failure_app = ResubmittingMiddleware
131
- end
132
- run app
133
- end
134
-
135
- result = builder.to_app.call(env)
136
- expect(result[0]).to eq(401)
137
- expect(result[2].body).to eq(["Bad"])
138
- expect($throw_count).to eq(2)
139
- end
140
-
141
- it "should use the default scopes action when a bare throw is used" do
142
- env = env_with_params("/", :foo => "bar")
143
- action = nil
144
-
145
- failure = lambda do |_env|
146
- action = _env['PATH_INFO']
147
- [401, {}, ['fail']]
148
- end
149
-
150
- app = lambda do |_env|
151
- throw(:warden)
152
- end
153
- result = setup_rack(app,
154
- :failure_app => failure,
155
- :configurator => lambda{ |c| c.scope_defaults(:default, :action => 'my_action', :strategies => [:password]) }
156
- ).call(env)
157
-
158
- expect(action).to eq("/my_action")
159
- expect(result.first).to eq(401)
160
- end
161
- end # failure
162
- end
163
-
164
- describe "integrated strategies" do
165
- before(:each) do
166
- RAS = Warden::Strategies unless defined?(RAS)
167
- Warden::Strategies.clear!
168
- @app = setup_rack do |env|
169
- env['warden'].authenticate!(:foobar)
170
- [200, {"Content-Type" => "text/plain"}, ["Foo Is A Winna"]]
171
- end
172
- end
173
-
174
- describe "redirecting" do
175
-
176
- it "should redirect with a message" do
177
- RAS.add(:foobar) do
178
- def authenticate!
179
- redirect!("/foo/bar", {:foo => "bar"}, :message => "custom redirection message")
180
- end
181
- end
182
- result = @app.call(env_with_params)
183
- expect(result[0]).to be(302)
184
- expect(result[1]["Location"]).to eq("/foo/bar?foo=bar")
185
- expect(result[2]).to eq(["custom redirection message"])
186
- end
187
-
188
- it "should redirect with a default message" do
189
- RAS.add(:foobar) do
190
- def authenticate!
191
- redirect!("/foo/bar", {:foo => "bar"})
192
- end
193
- end
194
- result = @app.call(env_with_params)
195
- expect(result[0]).to eq(302)
196
- expect(result[1]['Location']).to eq("/foo/bar?foo=bar")
197
- expect(result[2]).to eq(["You are being redirected to /foo/bar?foo=bar"])
198
- end
199
-
200
- it "should redirect with a permanent redirect" do
201
- RAS.add(:foobar) do
202
- def authenticate!
203
- redirect!("/foo/bar", {}, :permanent => true)
204
- end
205
- end
206
- result = @app.call(env_with_params)
207
- expect(result[0]).to eq(301)
208
- end
209
-
210
- it "should redirect with a content type" do
211
- RAS.add(:foobar) do
212
- def authenticate!
213
- redirect!("/foo/bar", {:foo => "bar"}, :content_type => "text/xml")
214
- end
215
- end
216
- result = @app.call(env_with_params)
217
- expect(result[0]).to eq(302)
218
- expect(result[1]["Location"]).to eq("/foo/bar?foo=bar")
219
- expect(result[1]["Content-Type"]).to eq("text/xml")
220
- end
221
-
222
- it "should redirect with a default content type" do
223
- RAS.add(:foobar) do
224
- def authenticate!
225
- redirect!("/foo/bar", {:foo => "bar"})
226
- end
227
- end
228
- result = @app.call(env_with_params)
229
- expect(result[0]).to eq(302)
230
- expect(result[1]["Location"]).to eq("/foo/bar?foo=bar")
231
- expect(result[1]["Content-Type"]).to eq("text/plain")
232
- end
233
- end
234
-
235
- describe "failing" do
236
- it "should fail according to the failure app" do
237
- RAS.add(:foobar) do
238
- def authenticate!
239
- fail!
240
- end
241
- end
242
- env = env_with_params
243
- result = @app.call(env)
244
- expect(result[0]).to eq(401)
245
- expect(result[2]).to eq(["You Fail!"])
246
- expect(env['PATH_INFO']).to eq("/unauthenticated")
247
- end
248
-
249
- it "should allow you to customize the response" do
250
- app = lambda do |e|
251
- e['warden'].custom_failure!
252
- [401,{'Content-Type' => 'text/plain'},["Fail From The App"]]
253
- end
254
- env = env_with_params
255
- result = setup_rack(app).call(env)
256
- expect(result[0]).to eq(401)
257
- expect(result[2]).to eq(["Fail From The App"])
258
- end
259
-
260
- it "should allow you to customize the response without the explicit call to custom_failure! if not intercepting 401" do
261
- app = lambda do |e|
262
- [401,{'Content-Type' => 'text/plain'},["Fail From The App"]]
263
- end
264
- env = env_with_params
265
- result = setup_rack(app, :intercept_401 => false).call(env)
266
- expect(result[0]).to eq(401)
267
- expect(result[2]).to eq(["Fail From The App"])
268
- end
269
-
270
- it "should render the failure application for a 401 if no custom_failure flag is set" do
271
- app = lambda do |e|
272
- [401,{'Content-Type' => 'text/plain'},["Fail From The App"]]
273
- end
274
- result = setup_rack(app).call(env_with_params)
275
- expect(result[0]).to eq(401)
276
- expect(result[2]).to eq(["You Fail!"])
277
- end
278
-
279
- end # failing
280
-
281
- describe "custom rack response" do
282
- it "should return a custom rack response" do
283
- RAS.add(:foobar) do
284
- def authenticate!
285
- custom!([523, {"Content-Type" => "text/plain", "Custom-Header" => "foo"}, ["Custom Stuff"]])
286
- end
287
- end
288
- result = @app.call(env_with_params)
289
- expect(result[0]).to be(523)
290
- expect(result[1]["Custom-Header"]).to eq("foo")
291
- expect(result[2]).to eq(["Custom Stuff"])
292
- end
293
- end
294
-
295
- describe "app returns Rack::Response" do
296
- it "should return it" do
297
- RAS.add(:foobar) do
298
- def authenticate!
299
- custom!(Rack::Response.new(['body'], 201, {"Content-Type" => "text/plain"}))
300
- end
301
- end
302
- result = @app.call(env_with_params)
303
- expect(result.status).to eq(201)
304
- expect(result.body).to eq(['body'])
305
- expect(result.header['Content-Type']).to eq('text/plain')
306
- end
307
- end
308
-
309
- describe "success" do
310
- it "should pass through to the application when there is success" do
311
- RAS.add(:foobar) do
312
- def authenticate!
313
- success!("A User")
314
- end
315
- end
316
- env = env_with_params
317
- result = @app.call(env)
318
- expect(result[0]).to eq(200)
319
- expect(result[2]).to eq(["Foo Is A Winna"])
320
- end
321
- end
322
- end # integrated strategies
323
-
324
- it "should allow me to set a different default scope for warden" do
325
- Rack::Builder.new do
326
- use Warden::Manager, :default_scope => :default do |manager|
327
- expect(manager.default_scope).to eq(:default)
328
- manager.default_scope = :other
329
- expect(manager.default_scope).to eq(:other)
330
- end
331
- end
332
- end
333
-
334
- it "should allow me to access strategies through manager" do
335
- Rack::Builder.new do
336
- use Warden::Manager do |manager|
337
- expect(manager.strategies).to eq(Warden::Strategies)
338
- end
339
- end
340
- end
341
- end