warden 1.2.7 → 1.2.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +5 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +7 -0
  5. data/{History.rdoc → CHANGELOG.md} +7 -3
  6. data/Gemfile +1 -1
  7. data/Gemfile.lock +40 -0
  8. data/LICENSE +1 -1
  9. data/README.md +18 -0
  10. data/Rakefile +3 -8
  11. data/lib/warden.rb +1 -1
  12. data/lib/warden/config.rb +1 -1
  13. data/lib/warden/errors.rb +2 -2
  14. data/lib/warden/hooks.rb +1 -1
  15. data/lib/warden/manager.rb +2 -2
  16. data/lib/warden/mixins/common.rb +1 -1
  17. data/lib/warden/proxy.rb +15 -4
  18. data/lib/warden/session_serializer.rb +1 -1
  19. data/lib/warden/strategies/base.rb +1 -1
  20. data/lib/warden/test/helpers.rb +2 -2
  21. data/lib/warden/test/mock.rb +5 -5
  22. data/lib/warden/test/warden_helpers.rb +1 -1
  23. data/lib/warden/version.rb +2 -2
  24. data/warden.gemspec +20 -18
  25. metadata +18 -33
  26. data/README.textile +0 -9
  27. data/spec/helpers/request_helper.rb +0 -52
  28. data/spec/helpers/strategies/fail_with_user.rb +0 -11
  29. data/spec/helpers/strategies/failz.rb +0 -9
  30. data/spec/helpers/strategies/invalid.rb +0 -9
  31. data/spec/helpers/strategies/pass.rb +0 -9
  32. data/spec/helpers/strategies/pass_with_message.rb +0 -9
  33. data/spec/helpers/strategies/password.rb +0 -14
  34. data/spec/helpers/strategies/single.rb +0 -13
  35. data/spec/spec_helper.rb +0 -26
  36. data/spec/warden/authenticated_data_store_spec.rb +0 -115
  37. data/spec/warden/config_spec.rb +0 -49
  38. data/spec/warden/errors_spec.rb +0 -48
  39. data/spec/warden/hooks_spec.rb +0 -374
  40. data/spec/warden/manager_spec.rb +0 -341
  41. data/spec/warden/proxy_spec.rb +0 -1051
  42. data/spec/warden/scoped_session_serializer.rb +0 -124
  43. data/spec/warden/session_serializer_spec.rb +0 -54
  44. data/spec/warden/strategies/base_spec.rb +0 -314
  45. data/spec/warden/strategies_spec.rb +0 -95
  46. data/spec/warden/test/helpers_spec.rb +0 -94
  47. data/spec/warden/test/mock_spec.rb +0 -16
  48. data/spec/warden/test/test_mode_spec.rb +0 -76
@@ -1,9 +0,0 @@
1
- Please see the "Warden Wiki":http://wiki.github.com/hassox/warden for overview documentation.
2
-
3
- h2. Maintainers
4
-
5
- * Daniel Neighman (hassox)
6
- * José Valim (josevalim)
7
- * Justin Smestad (jsmestad)
8
-
9
- "A list of all contributors is available on Github.":https://github.com/hassox/warden/contributors
@@ -1,52 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- module Warden::Spec
4
- module Helpers
5
- FAILURE_APP = lambda{|e|[401, {"Content-Type" => "text/plain"}, ["You Fail!"]] }
6
-
7
- def env_with_params(path = "/", params = {}, env = {})
8
- method = params.delete(:method) || "GET"
9
- env = { 'HTTP_VERSION' => '1.1', 'REQUEST_METHOD' => "#{method}" }.merge(env)
10
- Rack::MockRequest.env_for("#{path}?#{Rack::Utils.build_query(params)}", env)
11
- end
12
-
13
- def setup_rack(app = nil, opts = {}, &block)
14
- app ||= block if block_given?
15
-
16
- opts[:failure_app] ||= failure_app
17
- opts[:default_strategies] ||= [:password]
18
- opts[:default_serializers] ||= [:session]
19
- blk = opts[:configurator] || proc{}
20
-
21
- Rack::Builder.new do
22
- use opts[:session] || Warden::Spec::Helpers::Session unless opts[:nil_session]
23
- use Warden::Manager, opts, &blk
24
- run app
25
- end
26
- end
27
-
28
- def valid_response
29
- Rack::Response.new("OK").finish
30
- end
31
-
32
- def failure_app
33
- Warden::Spec::Helpers::FAILURE_APP
34
- end
35
-
36
- def success_app
37
- lambda{|e| [200, {"Content-Type" => "text/plain"}, ["You Win"]]}
38
- end
39
-
40
- class Session
41
- attr_accessor :app
42
- def initialize(app,configs = {})
43
- @app = app
44
- end
45
-
46
- def call(e)
47
- e['rack.session'] ||= {}
48
- @app.call(e)
49
- end
50
- end # session
51
- end
52
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- Warden::Strategies.add(:fail_with_user) do
4
- def authenticate!
5
- request.env['warden.spec.strategies'] ||= []
6
- request.env['warden.spec.strategies'] << :fail_with_user
7
- self.user = 'Valid User'
8
- fail!
9
- end
10
- end
11
-
@@ -1,9 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- Warden::Strategies.add(:failz) do
4
- def authenticate!
5
- request.env['warden.spec.strategies'] ||= []
6
- request.env['warden.spec.strategies'] << :failz
7
- fail!("The Fails Strategy Has Failed You")
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- Warden::Strategies.add(:invalid) do
4
- def valid?
5
- false
6
- end
7
-
8
- def authenticate!; end
9
- end
@@ -1,9 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- Warden::Strategies.add(:pass) do
4
- def authenticate!
5
- request.env['warden.spec.strategies'] ||= []
6
- request.env['warden.spec.strategies'] << :pass
7
- success!("Valid User") unless scope == :failz
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- Warden::Strategies.add(:pass_with_message) do
4
- def authenticate!
5
- request.env['warden.spec.strategies'] ||= []
6
- request.env['warden.spec.strategies'] << :pass_with_message
7
- success!("Valid User", "The Success Strategy Has Accepted You") unless scope == :failz
8
- end
9
- end
@@ -1,14 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- Warden::Strategies.add(:password) do
4
- def authenticate!
5
- request.env['warden.spec.strategies'] ||= []
6
- request.env['warden.spec.strategies'] << :password
7
- if params["password"] || params["username"]
8
- params["password"] == "sekrit" && params["username"] == "fred" ?
9
- success!("Authenticated User") : fail!("Username or password is incorrect")
10
- else
11
- pass
12
- end
13
- end
14
- end
@@ -1,13 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- Warden::Strategies.add(:single) do
4
- def authenticate!
5
- request.env['warden.spec.strategies'] ||= []
6
- request.env['warden.spec.strategies'] << :single
7
- success!("Valid User")
8
- end
9
-
10
- def store?
11
- false
12
- end
13
- end
@@ -1,26 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- $TESTING=true
4
-
5
- $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
6
- $:.unshift File.expand_path(File.join(File.dirname(__FILE__)))
7
- require 'warden'
8
-
9
- require 'rubygems'
10
- require 'rack'
11
-
12
- Dir[File.join(File.dirname(__FILE__), "helpers", "**/*.rb")].each do |f|
13
- require f
14
- end
15
-
16
- RSpec.configure do |config|
17
- config.include(Warden::Spec::Helpers)
18
- config.include(Warden::Test::Helpers)
19
- config.include(Warden::Test::Mock)
20
-
21
- def load_strategies
22
- Dir[File.join(File.dirname(__FILE__), "helpers", "strategies", "**/*.rb")].each do |f|
23
- load f
24
- end
25
- end
26
- end
@@ -1,115 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- require 'spec_helper'
4
-
5
- describe "authenticated data store" do
6
-
7
- before(:each) do
8
- @env = env_with_params
9
- @env['rack.session'] = {
10
- "warden.user.foo.key" => "foo user",
11
- "warden.user.default.key" => "default user",
12
- :foo => "bar"
13
- }
14
- end
15
-
16
- it "should store data for the default scope" do
17
- app = lambda do |e|
18
- e['warden'].authenticate(:pass)
19
- e['warden'].authenticate(:pass, :scope => :foo)
20
- expect(e['warden']).to be_authenticated
21
- expect(e['warden']).to be_authenticated(:foo)
22
-
23
- # Store the data for :default
24
- e['warden'].session[:key] = "value"
25
- valid_response
26
- end
27
- setup_rack(app).call(@env)
28
- expect(@env['rack.session']['warden.user.default.session']).to eq(key: "value")
29
- expect(@env['rack.session']['warden.user.foo.session']).to be_nil
30
- end
31
-
32
- it "should store data for the foo user" do
33
- app = lambda do |e|
34
- e['warden'].session(:foo)[:key] = "value"
35
- valid_response
36
- end
37
- setup_rack(app).call(@env)
38
- expect(@env['rack.session']['warden.user.foo.session']).to eq(key: "value")
39
- end
40
-
41
- it "should store the data separately" do
42
- app = lambda do |e|
43
- e['warden'].session[:key] = "value"
44
- e['warden'].session(:foo)[:key] = "another value"
45
- valid_response
46
- end
47
- setup_rack(app).call(@env)
48
- expect(@env['rack.session']['warden.user.default.session']).to eq(key: "value")
49
- expect(@env['rack.session']['warden.user.foo.session' ]).to eq(key: "another value")
50
- end
51
-
52
- it "should clear the foo scoped data when foo logs out" do
53
- app = lambda do |e|
54
- e['warden'].session[:key] = "value"
55
- e['warden'].session(:foo)[:key] = "another value"
56
- e['warden'].logout(:foo)
57
- valid_response
58
- end
59
- setup_rack(app).call(@env)
60
- expect(@env['rack.session']['warden.user.default.session']).to eq(key: "value")
61
- expect(@env['rack.session']['warden.user.foo.session' ]).to be_nil
62
- end
63
-
64
- it "should clear out the default data when :default logs out" do
65
- app = lambda do |e|
66
- e['warden'].session[:key] = "value"
67
- e['warden'].session(:foo)[:key] = "another value"
68
- e['warden'].logout(:default)
69
- valid_response
70
- end
71
- setup_rack(app).call(@env)
72
- expect(@env['rack.session']['warden.user.default.session']).to be_nil
73
- expect(@env['rack.session']['warden.user.foo.session' ]).to eq(key: "another value")
74
- end
75
-
76
- it "should clear out all data when a general logout is performed" do
77
- app = lambda do |e|
78
- e['warden'].session[:key] = "value"
79
- e['warden'].session(:foo)[:key] = "another value"
80
- e['warden'].logout
81
- valid_response
82
- end
83
- setup_rack(app).call(@env)
84
- expect(@env['rack.session']['warden.user.default.session']).to be_nil
85
- expect(@env['rack.session']['warden.user.foo.session' ]).to be_nil
86
- end
87
-
88
- it "should logout multiple persons at once" do
89
- @env['rack.session']['warden.user.bar.key'] = "bar user"
90
-
91
- app = lambda do |e|
92
- e['warden'].session[:key] = "value"
93
- e['warden'].session(:foo)[:key] = "another value"
94
- e['warden'].session(:bar)[:key] = "yet another"
95
- e['warden'].logout(:bar, :default)
96
- valid_response
97
- end
98
- setup_rack(app).call(@env)
99
- expect(@env['rack.session']['warden.user.default.session']).to be_nil
100
- expect(@env['rack.session']['warden.user.foo.session' ]).to eq(key: "another value")
101
- expect(@env['rack.session']['warden.user.bar.session' ]).to be_nil
102
- end
103
-
104
- it "should not store data for a user who is not logged in" do
105
- @env['rack.session']
106
- app = lambda do |e|
107
- e['warden'].session(:not_here)[:key] = "value"
108
- valid_response
109
- end
110
-
111
- expect {
112
- setup_rack(app).call(@env)
113
- }.to raise_error(Warden::NotAuthenticated)
114
- end
115
- end
@@ -1,49 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- require 'spec_helper'
4
-
5
- describe Warden::Config do
6
-
7
- before(:each) do
8
- @config = Warden::Config.new
9
- end
10
-
11
- it "should behave like a hash" do
12
- @config[:foo] = :bar
13
- expect(@config[:foo]).to eq(:bar)
14
- end
15
-
16
- it "should provide hash accessors" do
17
- @config.failure_app = :foo
18
- expect(@config[:failure_app]).to eq(:foo)
19
- @config[:failure_app] = :bar
20
- expect(@config.failure_app).to eq(:bar)
21
- end
22
-
23
- it "should allow to read and set default strategies" do
24
- @config.default_strategies :foo, :bar
25
- expect(@config.default_strategies).to eq([:foo, :bar])
26
- end
27
-
28
- it "should allow to silence missing strategies" do
29
- @config.silence_missing_strategies!
30
- expect(@config.silence_missing_strategies?).to eq(true)
31
- end
32
-
33
- it "should set the default_scope" do
34
- expect(@config.default_scope).to eq(:default)
35
- @config.default_scope = :foo
36
- expect(@config.default_scope).to eq(:foo)
37
- end
38
-
39
- it "should merge given options on initialization" do
40
- expect(Warden::Config.new(:foo => :bar)[:foo]).to eq(:bar)
41
- end
42
-
43
- it "should setup defaults with the scope_defaults method" do
44
- c = Warden::Config.new
45
- c.scope_defaults :foo, :strategies => [:foo, :bar], :store => false
46
- expect(c.default_strategies(:scope => :foo)).to eq([:foo, :bar])
47
- expect(c.scope_defaults(:foo)).to eq(store: false)
48
- end
49
- end
@@ -1,48 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- require 'spec_helper'
4
-
5
- describe Warden::Proxy::Errors do
6
-
7
- before(:each) do
8
- @errors = Warden::Proxy::Errors.new
9
- end
10
-
11
- it "should report that it is empty on first creation" do
12
- expect(@errors).to be_empty
13
- end
14
-
15
- it "should continue to report that it is empty even after being checked" do
16
- @errors.on(:foo)
17
- expect(@errors).to be_empty
18
- end
19
-
20
- it "should add an error" do
21
- @errors.add(:login, "Login or password incorrect")
22
- expect(@errors[:login]).to eq(["Login or password incorrect"])
23
- end
24
-
25
- it "should allow many errors to be added to the same field" do
26
- @errors.add(:login, "bad 1")
27
- @errors.add(:login, "bad 2")
28
- expect(@errors.on(:login)).to eq(["bad 1", "bad 2"])
29
- end
30
-
31
- it "should give the full messages for an error" do
32
- @errors.add(:login, "login wrong")
33
- @errors.add(:password, "password wrong")
34
- ["password wrong", "login wrong"].each do |msg|
35
- expect(@errors.full_messages).to include(msg)
36
- end
37
- end
38
-
39
- it "should return the error for a specific field / label" do
40
- @errors.add(:login, "wrong")
41
- expect(@errors.on(:login)).to eq(["wrong"])
42
- end
43
-
44
- it "should return nil for a specific field if it's not been set" do
45
- expect(@errors.on(:not_there)).to be_nil
46
- end
47
-
48
- end
@@ -1,374 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- require 'spec_helper'
4
-
5
- describe "standard authentication hooks" do
6
-
7
- before(:all) do
8
- load_strategies
9
- end
10
-
11
- describe "after_set_user" do
12
- before(:each) do
13
- RAM = Warden::Manager unless defined?(RAM)
14
- RAM._after_set_user.clear
15
- end
16
-
17
- after(:each) do
18
- RAM._after_set_user.clear
19
- end
20
-
21
- it "should allow me to add an after_set_user hook" do
22
- RAM.after_set_user do |user, auth, opts|
23
- "boo"
24
- end
25
- expect(RAM._after_set_user.length).to eq(1)
26
- end
27
-
28
- it "should allow me to add multiple after_set_user hooks" do
29
- RAM.after_set_user{|user, auth, opts| "foo"}
30
- RAM.after_set_user{|u,a| "bar"}
31
- expect(RAM._after_set_user.length).to eq(2)
32
- end
33
-
34
- it "should run each after_set_user hook after the user is set" do
35
- RAM.after_set_user{|u,a,o| a.env['warden.spec.hook.foo'] = "run foo"}
36
- RAM.after_set_user{|u,a,o| a.env['warden.spec.hook.bar'] = "run bar"}
37
- RAM.after_set_user{|u,a,o| a.logout}
38
- app = lambda do |e|
39
- e['warden'].set_user("foo")
40
- valid_response
41
- end
42
- env = env_with_params
43
- setup_rack(app).call(env)
44
- expect(env['warden'].user).to be_nil
45
- expect(env['warden.spec.hook.foo']).to eq("run foo")
46
- expect(env['warden.spec.hook.bar']).to eq("run bar")
47
- end
48
-
49
- it "should not run the event specified with except" do
50
- RAM.after_set_user(:except => :set_user){|u,a,o| fail}
51
- app = lambda do |e|
52
- e['warden'].set_user("foo")
53
- valid_response
54
- end
55
- env = env_with_params
56
- setup_rack(app).call(env)
57
- end
58
-
59
- it "should only run the event specified with only" do
60
- RAM.after_set_user(:only => :set_user){|u,a,o| fail}
61
- app = lambda do |e|
62
- e['warden'].authenticate(:pass)
63
- valid_response
64
- end
65
- env = env_with_params
66
- setup_rack(app).call(env)
67
- end
68
-
69
- it "should run filters in the given order" do
70
- RAM.after_set_user{|u,a,o| a.env['warden.spec.order'] << 2}
71
- RAM.after_set_user{|u,a,o| a.env['warden.spec.order'] << 3}
72
- RAM.prepend_after_set_user{|u,a,o| a.env['warden.spec.order'] << 1}
73
- app = lambda do |e|
74
- e['warden.spec.order'] = []
75
- e['warden'].set_user("foo")
76
- valid_response
77
- end
78
- env = env_with_params
79
- setup_rack(app).call(env)
80
- expect(env['warden.spec.order']).to eq([1,2,3])
81
- end
82
-
83
- context "after_authentication" do
84
- it "should be a wrapper to after_set_user behavior" do
85
- RAM.after_authentication{|u,a,o| a.env['warden.spec.hook.baz'] = "run baz"}
86
- RAM.after_authentication{|u,a,o| a.env['warden.spec.hook.paz'] = "run paz"}
87
- RAM.after_authentication{|u,a,o| expect(o[:event]).to eq(:authentication) }
88
- app = lambda do |e|
89
- e['warden'].authenticate(:pass)
90
- valid_response
91
- end
92
- env = env_with_params
93
- setup_rack(app).call(env)
94
- expect(env['warden.spec.hook.baz']).to eq('run baz')
95
- expect(env['warden.spec.hook.paz']).to eq('run paz')
96
- end
97
-
98
- it "should not be invoked on default after_set_user scenario" do
99
- RAM.after_authentication{|u,a,o| fail}
100
- app = lambda do |e|
101
- e['warden'].set_user("foo")
102
- valid_response
103
- end
104
- env = env_with_params
105
- setup_rack(app).call(env)
106
- end
107
-
108
- it "should run filters in the given order" do
109
- RAM.after_authentication{|u,a,o| a.env['warden.spec.order'] << 2}
110
- RAM.after_authentication{|u,a,o| a.env['warden.spec.order'] << 3}
111
- RAM.prepend_after_authentication{|u,a,o| a.env['warden.spec.order'] << 1}
112
- app = lambda do |e|
113
- e['warden.spec.order'] = []
114
- e['warden'].authenticate(:pass)
115
- valid_response
116
- end
117
- env = env_with_params
118
- setup_rack(app).call(env)
119
- expect(env['warden.spec.order']).to eq([1,2,3])
120
- end
121
-
122
- it "should allow me to log out a user in an after_set_user block" do
123
- RAM.after_set_user{|u,a,o| a.logout}
124
-
125
- app = lambda do |e|
126
- e['warden'].authenticate(:pass)
127
- valid_response
128
- end
129
- env = env_with_params
130
- setup_rack(app).call(env)
131
- expect(env['warden']).not_to be_authenticated
132
- end
133
- end
134
-
135
- context "after_fetch" do
136
- it "should be a wrapper to after_set_user behavior" do
137
- RAM.after_fetch{|u,a,o| a.env['warden.spec.hook.baz'] = "run baz"}
138
- RAM.after_fetch{|u,a,o| a.env['warden.spec.hook.paz'] = "run paz"}
139
- RAM.after_fetch{|u,a,o| expect(o[:event]).to eq(:fetch) }
140
- env = env_with_params
141
- setup_rack(lambda { |e| valid_response }).call(env)
142
- env['rack.session']['warden.user.default.key'] = "Foo"
143
- expect(env['warden'].user).to eq("Foo")
144
- expect(env['warden.spec.hook.baz']).to eq('run baz')
145
- expect(env['warden.spec.hook.paz']).to eq('run paz')
146
- end
147
-
148
- it "should not be invoked on default after_set_user scenario" do
149
- RAM.after_fetch{|u,a,o| fail}
150
- app = lambda do |e|
151
- e['warden'].set_user("foo")
152
- valid_response
153
- end
154
- env = env_with_params
155
- setup_rack(app).call(env)
156
- end
157
-
158
- it "should not be invoked if fetched user is nil" do
159
- RAM.after_fetch{|u,a,o| fail}
160
- env = env_with_params
161
- setup_rack(lambda { |e| valid_response }).call(env)
162
- env['rack.session']['warden.user.default.key'] = nil
163
- expect(env['warden'].user).to be_nil
164
- end
165
-
166
- it "should run filters in the given order" do
167
- RAM.after_fetch{|u,a,o| a.env['warden.spec.order'] << 2}
168
- RAM.after_fetch{|u,a,o| a.env['warden.spec.order'] << 3}
169
- RAM.prepend_after_fetch{|u,a,o| a.env['warden.spec.order'] << 1}
170
- app = lambda do |e|
171
- e['warden.spec.order'] = []
172
- e['rack.session']['warden.user.default.key'] = "Foo"
173
- e['warden'].user
174
- valid_response
175
- end
176
- env = env_with_params
177
- setup_rack(app).call(env)
178
- expect(env['warden.spec.order']).to eq([1,2,3])
179
- end
180
- end
181
- end
182
-
183
-
184
- describe "after_failed_fetch" do
185
- before(:each) do
186
- RAM = Warden::Manager unless defined?(RAM)
187
- RAM._after_failed_fetch.clear
188
- end
189
-
190
- after(:each) do
191
- RAM._after_failed_fetch.clear
192
- end
193
-
194
- it "should not be called when user is fetched" do
195
- RAM.after_failed_fetch{|u,a,o| fail }
196
- env = env_with_params
197
- setup_rack(lambda { |e| valid_response }).call(env)
198
- env['rack.session']['warden.user.default.key'] = "Foo"
199
- expect(env['warden'].user).to eq("Foo")
200
- end
201
-
202
- it "should be called if fetched user is nil" do
203
- calls = 0
204
- RAM.after_failed_fetch{|u,a,o| calls += 1 }
205
- env = env_with_params
206
- setup_rack(lambda { |e| valid_response }).call(env)
207
- expect(env['warden'].user).to be_nil
208
- expect(calls).to eq(1)
209
- end
210
- end
211
-
212
- describe "before_failure" do
213
- before(:each) do
214
- RAM = Warden::Manager unless defined?(RAM)
215
- RAM._before_failure.clear
216
- end
217
-
218
- after(:each) do
219
- RAM._before_failure.clear
220
- end
221
-
222
- it "should allow me to add a before_failure hook" do
223
- RAM.before_failure{|env, opts| "foo"}
224
- expect(RAM._before_failure.length).to eq(1)
225
- end
226
-
227
- it "should allow me to add multiple before_failure hooks" do
228
- RAM.before_failure{|env, opts| "foo"}
229
- RAM.before_failure{|env, opts| "bar"}
230
- expect(RAM._before_failure.length).to eq(2)
231
- end
232
-
233
- it "should run each before_failure hooks before failing" do
234
- RAM.before_failure{|e,o| e['warden.spec.before_failure.foo'] = "foo"}
235
- RAM.before_failure{|e,o| e['warden.spec.before_failure.bar'] = "bar"}
236
- app = lambda{|e| e['warden'].authenticate!(:failz); valid_response}
237
- env = env_with_params
238
- setup_rack(app).call(env)
239
- expect(env['warden.spec.before_failure.foo']).to eq("foo")
240
- expect(env['warden.spec.before_failure.bar']).to eq("bar")
241
- end
242
-
243
- it "should run filters in the given order" do
244
- RAM.before_failure{|e,o| e['warden.spec.order'] << 2}
245
- RAM.before_failure{|e,o| e['warden.spec.order'] << 3}
246
- RAM.prepend_before_failure{|e,o| e['warden.spec.order'] << 1}
247
- app = lambda do |e|
248
- e['warden.spec.order'] = []
249
- e['warden'].authenticate!(:failz)
250
- valid_response
251
- end
252
- env = env_with_params
253
- setup_rack(app).call(env)
254
- expect(env['warden.spec.order']).to eq([1,2,3])
255
- end
256
- end
257
-
258
- describe "before_logout" do
259
- before(:each) do
260
- RAM = Warden::Manager unless defined?(RAM)
261
- RAM._before_logout.clear
262
- end
263
-
264
- after(:each) do
265
- RAM._before_logout.clear
266
- end
267
-
268
- it "should allow me to add an before_logout hook" do
269
- RAM.before_logout{|user, auth, scopes| "foo"}
270
- expect(RAM._before_logout.length).to eq(1)
271
- end
272
-
273
- it "should allow me to add multiple after_authentication hooks" do
274
- RAM.before_logout{|u,a,o| "bar"}
275
- RAM.before_logout{|u,a,o| "baz"}
276
- expect(RAM._before_logout.length).to eq(2)
277
- end
278
-
279
- it "should run each before_logout hook before logout is run" do
280
- RAM.before_logout{|u,a,o| a.env['warden.spec.hook.lorem'] = "run lorem"}
281
- RAM.before_logout{|u,a,o| a.env['warden.spec.hook.ipsum'] = "run ipsum"}
282
- app = lambda{|e| e['warden'].authenticate(:pass); valid_response}
283
- env = env_with_params
284
- setup_rack(app).call(env)
285
- env['warden'].logout
286
- expect(env['warden.spec.hook.lorem']).to eq('run lorem')
287
- expect(env['warden.spec.hook.ipsum']).to eq('run ipsum')
288
- end
289
-
290
- it "should run before_logout hook for a specified scope" do
291
- RAM.before_logout(:scope => :scope1){|u,a,o| a.env["warden.spec.hook.a"] << :scope1 }
292
- RAM.before_logout(:scope => [:scope2]){|u,a,o| a.env["warden.spec.hook.b"] << :scope2 }
293
-
294
- app = lambda do |e|
295
- e['warden'].authenticate(:pass, :scope => :scope1)
296
- e['warden'].authenticate(:pass, :scope => :scope2)
297
- valid_response
298
- end
299
- env = env_with_params
300
- env["warden.spec.hook.a"] ||= []
301
- env["warden.spec.hook.b"] ||= []
302
- setup_rack(app).call(env)
303
-
304
- env['warden'].logout(:scope1)
305
- expect(env['warden.spec.hook.a']).to eq([:scope1])
306
- expect(env['warden.spec.hook.b']).to eq([])
307
-
308
- env['warden'].logout(:scope2)
309
- expect(env['warden.spec.hook.a']).to eq([:scope1])
310
- expect(env['warden.spec.hook.b']).to eq([:scope2])
311
- end
312
-
313
- it "should run filters in the given order" do
314
- RAM.before_logout{|u,a,o| a.env['warden.spec.order'] << 2}
315
- RAM.before_logout{|u,a,o| a.env['warden.spec.order'] << 3}
316
- RAM.prepend_before_logout{|u,a,o| a.env['warden.spec.order'] << 1}
317
- app = lambda do |e|
318
- e['warden.spec.order'] = []
319
- e['warden'].authenticate(:pass)
320
- e['warden'].logout
321
- valid_response
322
- end
323
- env = env_with_params
324
- setup_rack(app).call(env)
325
- expect(env['warden.spec.order']).to eq([1,2,3])
326
- end
327
- end
328
-
329
- describe "on_request" do
330
- before(:each) do
331
- RAM = Warden::Manager unless defined?(RAM)
332
- @old_on_request = RAM._on_request.dup
333
- RAM._on_request.clear
334
- end
335
-
336
- after(:each) do
337
- RAM._on_request.clear
338
- RAM._on_request.replace(@old_on_request)
339
- end
340
-
341
- it "should allow me to add an on_request hook" do
342
- RAM.on_request{|proxy| "foo"}
343
- expect(RAM._on_request.length).to eq(1)
344
- end
345
-
346
- it "should allow me to add multiple on_request hooks" do
347
- RAM.on_request{|proxy| "foo"}
348
- RAM.on_request{|proxy| "bar"}
349
- expect(RAM._on_request.length).to eq(2)
350
- end
351
-
352
- it "should run each on_request hooks when initializing" do
353
- RAM.on_request{|proxy| proxy.env['warden.spec.on_request.foo'] = "foo"}
354
- RAM.on_request{|proxy| proxy.env['warden.spec.on_request.bar'] = "bar"}
355
- app = lambda{|e| valid_response}
356
- env = env_with_params
357
- setup_rack(app).call(env)
358
- expect(env['warden.spec.on_request.foo']).to eq("foo")
359
- expect(env['warden.spec.on_request.bar']).to eq("bar")
360
- end
361
-
362
- it "should run filters in the given order" do
363
- RAM.on_request{|proxy| proxy.env['warden.spec.order'] << 2}
364
- RAM.on_request{|proxy| proxy.env['warden.spec.order'] << 3}
365
- RAM.prepend_on_request{|proxy| proxy.env['warden.spec.order'] << 1}
366
- app = lambda do |e|
367
- valid_response
368
- end
369
- env = Rack::MockRequest.env_for("/", "warden.spec.order" => [])
370
- setup_rack(app).call(env)
371
- expect(env['warden.spec.order']).to eq([1,2,3])
372
- end
373
- end
374
- end