warden 0.10.7 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.rdoc +23 -0
- data/Rakefile +1 -1
- data/TODO.textile +1 -3
- data/lib/warden/config.rb +1 -1
- data/lib/warden/errors.rb +0 -5
- data/lib/warden/hooks.rb +0 -1
- data/lib/warden/proxy.rb +28 -13
- data/lib/warden/strategies/base.rb +6 -0
- data/lib/warden/version.rb +1 -1
- data/spec/helpers/request_helper.rb +5 -7
- data/spec/helpers/strategies/single.rb +12 -0
- data/spec/warden/proxy_spec.rb +107 -63
- data/warden.gemspec +7 -5
- metadata +10 -10
data/History.rdoc
CHANGED
@@ -1,3 +1,26 @@
|
|
1
|
+
== Version 1.0.0
|
2
|
+
* Bump!
|
3
|
+
* Allow strategies to configure if user should be stored or not
|
4
|
+
* Force session id renewal when user is set
|
5
|
+
|
6
|
+
== Version 0.10.7
|
7
|
+
* Performance boost. config object to use raw accessors
|
8
|
+
* Add per strategy storage option
|
9
|
+
|
10
|
+
== Version 0.10.6 / 0.10.7 / 2010-05-22
|
11
|
+
* Bugfix set_user was not respecting logouts in hooks
|
12
|
+
|
13
|
+
== Version 0.10.4 / 0.10.5 / 2010-05-20
|
14
|
+
* Add action specifying in scope_defaults
|
15
|
+
|
16
|
+
== Version 0.10.3 / 2010-03-01
|
17
|
+
* Bugfix prevent halted winning strategy from being skipped in subsequent runs
|
18
|
+
|
19
|
+
== Version 0.10.2 / 2010-03-26
|
20
|
+
* Halt on fail!. Add fail to allow cascading
|
21
|
+
* cache the winning strategy
|
22
|
+
* Make the config object Dupable
|
23
|
+
|
1
24
|
== Version 0.10.1 / 2010-03-23
|
2
25
|
* Merge previous from master
|
3
26
|
* tag
|
data/Rakefile
CHANGED
@@ -15,7 +15,7 @@ begin
|
|
15
15
|
gem.authors = ["Daniel Neighman"]
|
16
16
|
gem.rubyforge_project = "warden"
|
17
17
|
gem.add_dependency "rack", ">= 1.0.0"
|
18
|
-
gem.add_development_dependency "rspec", "
|
18
|
+
gem.add_development_dependency "rspec", "~>1"
|
19
19
|
end
|
20
20
|
|
21
21
|
Jeweler::GemcutterTasks.new
|
data/TODO.textile
CHANGED
data/lib/warden/config.rb
CHANGED
@@ -47,7 +47,7 @@ module Warden
|
|
47
47
|
deep_dup(:default_strategies, other)
|
48
48
|
end
|
49
49
|
|
50
|
-
# Do not raise an error if a missing strategy is given
|
50
|
+
# Do not raise an error if a missing strategy is given.
|
51
51
|
# :api: plugin
|
52
52
|
def silence_missing_strategies!
|
53
53
|
self[:silence_missing_strategies] = true
|
data/lib/warden/errors.rb
CHANGED
data/lib/warden/hooks.rb
CHANGED
data/lib/warden/proxy.rb
CHANGED
@@ -15,6 +15,9 @@ module Warden
|
|
15
15
|
extend ::Forwardable
|
16
16
|
include ::Warden::Mixins::Common
|
17
17
|
|
18
|
+
ENV_WARDEN_ERRORS = 'warden.errors'.freeze
|
19
|
+
ENV_SESSION_OPTIONS = 'rack.session.options'.freeze
|
20
|
+
|
18
21
|
# :api: private
|
19
22
|
def_delegators :winning_strategy, :headers, :status, :custom_response
|
20
23
|
|
@@ -25,10 +28,15 @@ module Warden
|
|
25
28
|
@env, @users, @winning_strategies = env, {}, {}
|
26
29
|
@manager, @config = manager, manager.config.dup
|
27
30
|
@strategies = Hash.new { |h,k| h[k] = {} }
|
28
|
-
errors # setup the error object in the session
|
29
31
|
manager._run_callbacks(:on_request, self)
|
30
32
|
end
|
31
33
|
|
34
|
+
# Lazily initiate errors object in session.
|
35
|
+
# :api: public
|
36
|
+
def errors
|
37
|
+
@env[ENV_WARDEN_ERRORS] ||= Errors.new
|
38
|
+
end
|
39
|
+
|
32
40
|
# Points to a SessionSerializer instance responsible for handling
|
33
41
|
# everything related with storing, fetching and removing the user
|
34
42
|
# session.
|
@@ -140,14 +148,17 @@ module Warden
|
|
140
148
|
#
|
141
149
|
# :api: public
|
142
150
|
def set_user(user, opts = {})
|
143
|
-
return unless user
|
144
151
|
scope = (opts[:scope] ||= @config.default_scope)
|
145
152
|
|
146
153
|
# Get the default options from the master configuration for the given scope
|
147
|
-
opts = @config
|
148
|
-
|
154
|
+
opts = (@config[:scope_defaults][scope] || {}).merge(opts)
|
149
155
|
@users[scope] = user
|
150
|
-
|
156
|
+
|
157
|
+
unless opts[:store] == false
|
158
|
+
options = env[ENV_SESSION_OPTIONS]
|
159
|
+
options[:renew] = true if options
|
160
|
+
session_serializer.store(user, scope)
|
161
|
+
end
|
151
162
|
|
152
163
|
opts[:event] ||= :set_user
|
153
164
|
manager._run_callbacks(:after_set_user, user, self, opts)
|
@@ -167,8 +178,10 @@ module Warden
|
|
167
178
|
#
|
168
179
|
# :api: public
|
169
180
|
def user(scope = @config.default_scope)
|
170
|
-
@users[scope] ||=
|
171
|
-
|
181
|
+
@users[scope] ||= begin
|
182
|
+
user = session_serializer.fetch(scope)
|
183
|
+
set_user(user, :scope => scope, :event => :fetch) if user
|
184
|
+
end
|
172
185
|
end
|
173
186
|
|
174
187
|
# Provides a scoped session data for authenticated users.
|
@@ -258,6 +271,7 @@ module Warden
|
|
258
271
|
_run_strategies_for(scope, args)
|
259
272
|
|
260
273
|
if winning_strategy && winning_strategy.user
|
274
|
+
opts[:store] = opts.fetch(:store, winning_strategy.store?)
|
261
275
|
set_user(winning_strategy.user, opts.merge!(:event => :authentication))
|
262
276
|
end
|
263
277
|
|
@@ -267,7 +281,7 @@ module Warden
|
|
267
281
|
def _retrieve_scope_and_opts(args) #:nodoc:
|
268
282
|
opts = args.last.is_a?(Hash) ? args.pop : {}
|
269
283
|
scope = opts[:scope] || @config.default_scope
|
270
|
-
opts = (config[:scope_defaults][scope] || {}).merge(opts)
|
284
|
+
opts = (@config[:scope_defaults][scope] || {}).merge(opts)
|
271
285
|
[scope, opts]
|
272
286
|
end
|
273
287
|
|
@@ -276,9 +290,12 @@ module Warden
|
|
276
290
|
self.winning_strategy = @winning_strategies[scope]
|
277
291
|
return if winning_strategy && winning_strategy.halted?
|
278
292
|
|
279
|
-
|
293
|
+
if args.empty?
|
294
|
+
defaults = @config[:default_strategies]
|
295
|
+
strategies = defaults[scope] || defaults[:_all]
|
296
|
+
end
|
280
297
|
|
281
|
-
strategies.each do |name|
|
298
|
+
(strategies || args).each do |name|
|
282
299
|
strategy = _fetch_strategy(name, scope)
|
283
300
|
next unless strategy && !strategy.performed? && strategy.valid?
|
284
301
|
|
@@ -290,9 +307,7 @@ module Warden
|
|
290
307
|
|
291
308
|
# Fetchs strategies and keep them in a hash cache.
|
292
309
|
def _fetch_strategy(name, scope)
|
293
|
-
|
294
|
-
|
295
|
-
@strategies[scope][name] = if klass = Warden::Strategies[name]
|
310
|
+
@strategies[scope][name] ||= if klass = Warden::Strategies[name]
|
296
311
|
klass.new(@env, scope)
|
297
312
|
elsif @config.silence_missing_strategies?
|
298
313
|
nil
|
@@ -98,6 +98,12 @@ module Warden
|
|
98
98
|
!!@halted
|
99
99
|
end
|
100
100
|
|
101
|
+
# Checks to see if a strategy should result in a permanent login
|
102
|
+
# :api: public
|
103
|
+
def store?
|
104
|
+
true
|
105
|
+
end
|
106
|
+
|
101
107
|
# A simple method to return from authenticate! if you want to ignore this strategy
|
102
108
|
# :api: public
|
103
109
|
def pass; end
|
data/lib/warden/version.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
module Warden::Spec
|
3
3
|
module Helpers
|
4
|
-
|
5
4
|
FAILURE_APP = lambda{|e|[401, {"Content-Type" => "text/plain"}, ["You Fail!"]] }
|
6
5
|
|
7
|
-
def env_with_params(path = "/", params = {})
|
8
|
-
method = params.
|
9
|
-
|
10
|
-
|
11
|
-
'REQUEST_METHOD' => "#{method}")
|
6
|
+
def env_with_params(path = "/", params = {}, env = {})
|
7
|
+
method = params.delete(:method) || "GET"
|
8
|
+
env = { 'HTTP_VERSION' => '1.1', 'REQUEST_METHOD' => "#{method}" }.merge(env)
|
9
|
+
Rack::MockRequest.env_for("#{path}?#{Rack::Utils.build_query(params)}", env)
|
12
10
|
end
|
13
11
|
|
14
12
|
def setup_rack(app = nil, opts = {}, &block)
|
@@ -19,7 +17,7 @@ module Warden::Spec
|
|
19
17
|
opts[:default_serializers] ||= [:session]
|
20
18
|
|
21
19
|
Rack::Builder.new do
|
22
|
-
use Warden::Spec::Helpers::Session
|
20
|
+
use opts[:session] || Warden::Spec::Helpers::Session
|
23
21
|
use Warden::Manager, opts
|
24
22
|
run app
|
25
23
|
end
|
data/spec/warden/proxy_spec.rb
CHANGED
@@ -17,8 +17,7 @@ describe Warden::Proxy do
|
|
17
17
|
[401,{'Content-Type' => 'text/plain'},"You Fail"]
|
18
18
|
end
|
19
19
|
end
|
20
|
-
@env =
|
21
|
-
env_for('/', 'HTTP_VERSION' => '1.1', 'REQUEST_METHOD' => 'GET')
|
20
|
+
@env = env_with_params("/")
|
22
21
|
end # before(:each)
|
23
22
|
|
24
23
|
describe "authentication" do
|
@@ -70,39 +69,35 @@ describe Warden::Proxy do
|
|
70
69
|
end
|
71
70
|
|
72
71
|
it "should raise error on missing strategies" do
|
73
|
-
env = env_with_params('/')
|
74
72
|
app = lambda do |env|
|
75
73
|
env['warden'].authenticate(:unknown)
|
76
74
|
end
|
77
75
|
lambda {
|
78
|
-
setup_rack(app).call(env)
|
76
|
+
setup_rack(app).call(@env)
|
79
77
|
}.should raise_error(RuntimeError, "Invalid strategy unknown")
|
80
78
|
end
|
81
79
|
|
82
80
|
it "should not raise error on missing strategies if silencing" do
|
83
|
-
env = env_with_params('/')
|
84
81
|
app = lambda do |env|
|
85
82
|
env['warden'].authenticate
|
86
83
|
valid_response
|
87
84
|
end
|
88
85
|
lambda {
|
89
|
-
setup_rack(app, :silence_missing_strategies => true, :default_strategies => [:unknown]).call(env)
|
86
|
+
setup_rack(app, :silence_missing_strategies => true, :default_strategies => [:unknown]).call(@env)
|
90
87
|
}.should_not raise_error
|
91
88
|
end
|
92
89
|
|
93
90
|
it "should allow me to get access to the user at warden.user." do
|
94
|
-
env = env_with_params("/")
|
95
91
|
app = lambda do |env|
|
96
92
|
env['warden'].authenticate(:pass)
|
97
93
|
env['warden'].should be_authenticated
|
98
94
|
env['warden.spec.strategies'].should == [:pass]
|
99
95
|
valid_response
|
100
96
|
end
|
101
|
-
setup_rack(app).call(env)
|
97
|
+
setup_rack(app).call(@env)
|
102
98
|
end
|
103
99
|
|
104
100
|
it "should run strategies when authenticate? is asked" do
|
105
|
-
env = env_with_params("/")
|
106
101
|
app = lambda do |env|
|
107
102
|
env['warden'].should_not be_authenticated
|
108
103
|
env['warden'].authenticate?(:pass)
|
@@ -110,29 +105,27 @@ describe Warden::Proxy do
|
|
110
105
|
env['warden.spec.strategies'].should == [:pass]
|
111
106
|
valid_response
|
112
107
|
end
|
113
|
-
setup_rack(app).call(env)
|
108
|
+
setup_rack(app).call(@env)
|
114
109
|
end
|
115
110
|
|
116
111
|
it "should properly send the scope to the strategy" do
|
117
|
-
env = env_with_params("/")
|
118
112
|
app = lambda do |env|
|
119
113
|
env['warden'].authenticate(:pass, :scope => :failz)
|
120
114
|
env['warden'].should_not be_authenticated
|
121
115
|
env['warden.spec.strategies'].should == [:pass]
|
122
116
|
valid_response
|
123
117
|
end
|
124
|
-
setup_rack(app).call(env)
|
118
|
+
setup_rack(app).call(@env)
|
125
119
|
end
|
126
120
|
|
127
121
|
it "should try multiple authentication strategies" do
|
128
|
-
env = env_with_params("/")
|
129
122
|
app = lambda do |env|
|
130
123
|
env['warden'].authenticate(:password,:pass)
|
131
124
|
env['warden'].should be_authenticated
|
132
125
|
env['warden.spec.strategies'].should == [:password, :pass]
|
133
126
|
valid_response
|
134
127
|
end
|
135
|
-
setup_rack(app).call(env)
|
128
|
+
setup_rack(app).call(@env)
|
136
129
|
end
|
137
130
|
|
138
131
|
it "should look for an active user in the session with authenticate" do
|
@@ -141,9 +134,8 @@ describe Warden::Proxy do
|
|
141
134
|
env['warden'].authenticate(:pass)
|
142
135
|
valid_response
|
143
136
|
end
|
144
|
-
env
|
145
|
-
|
146
|
-
env['warden'].user.should == "foo as a user"
|
137
|
+
setup_rack(app).call(@env)
|
138
|
+
@env['warden'].user.should == "foo as a user"
|
147
139
|
end
|
148
140
|
|
149
141
|
it "should look for an active user in the session with authenticate?" do
|
@@ -152,9 +144,8 @@ describe Warden::Proxy do
|
|
152
144
|
env['warden'].authenticate?(:pass, :scope => :foo_scope)
|
153
145
|
valid_response
|
154
146
|
end
|
155
|
-
env
|
156
|
-
|
157
|
-
env['warden'].user(:foo_scope).should == "a foo user"
|
147
|
+
setup_rack(app).call(@env)
|
148
|
+
@env['warden'].user(:foo_scope).should == "a foo user"
|
158
149
|
end
|
159
150
|
|
160
151
|
it "should look for an active user in the session with authenticate!" do
|
@@ -163,9 +154,8 @@ describe Warden::Proxy do
|
|
163
154
|
env['warden'].authenticate!(:pass, :scope => :foo_scope)
|
164
155
|
valid_response
|
165
156
|
end
|
166
|
-
env
|
167
|
-
|
168
|
-
env['warden'].user(:foo_scope).should == "a foo user"
|
157
|
+
setup_rack(app).call(@env)
|
158
|
+
@env['warden'].user(:foo_scope).should == "a foo user"
|
169
159
|
end
|
170
160
|
|
171
161
|
it "should throw an error when authenticate!" do
|
@@ -173,8 +163,7 @@ describe Warden::Proxy do
|
|
173
163
|
env['warden'].authenticate!(:pass, :scope => :failz)
|
174
164
|
raise "OMG"
|
175
165
|
end
|
176
|
-
env
|
177
|
-
setup_rack(app).call(env)
|
166
|
+
setup_rack(app).call(@env)
|
178
167
|
end
|
179
168
|
|
180
169
|
it "should login 2 different users from the session" do
|
@@ -186,11 +175,10 @@ describe Warden::Proxy do
|
|
186
175
|
env['warden'].should_not be_authenticated # default scope
|
187
176
|
valid_response
|
188
177
|
end
|
189
|
-
env
|
190
|
-
|
191
|
-
env['warden'].user(:
|
192
|
-
env['warden'].user
|
193
|
-
env['warden'].user.should be_nil
|
178
|
+
setup_rack(app).call(@env)
|
179
|
+
@env['warden'].user(:foo).should == 'foo user'
|
180
|
+
@env['warden'].user(:bar).should == 'bar user'
|
181
|
+
@env['warden'].user.should be_nil
|
194
182
|
end
|
195
183
|
|
196
184
|
it "should not authenticate other scopes just because the first is authenticated" do
|
@@ -201,14 +189,66 @@ describe Warden::Proxy do
|
|
201
189
|
env['warden'].should_not be_authenticated(:bar)
|
202
190
|
valid_response
|
203
191
|
end
|
204
|
-
env
|
205
|
-
|
192
|
+
setup_rack(app).call(@env)
|
193
|
+
end
|
194
|
+
|
195
|
+
SID_REGEXP = /rack\.session=([^;]*);/
|
196
|
+
|
197
|
+
it "should renew session" do
|
198
|
+
app = lambda do |env|
|
199
|
+
env["rack.session"]["counter"] ||= 0
|
200
|
+
env["rack.session"]["counter"] += 1
|
201
|
+
if env["warden.on"]
|
202
|
+
env["warden"].authenticate!(:pass)
|
203
|
+
env['warden'].should be_authenticated
|
204
|
+
end
|
205
|
+
valid_response
|
206
|
+
end
|
207
|
+
|
208
|
+
# Setup a rack app with Pool session.
|
209
|
+
app = setup_rack(app, :session => Rack::Session::Pool).to_app
|
210
|
+
response = app.call(@env)
|
211
|
+
@env["rack.session"]["counter"].should == 1
|
212
|
+
|
213
|
+
# Ensure a cookie was given back
|
214
|
+
cookie = response[1]["Set-Cookie"]
|
215
|
+
cookie.should_not be_nil
|
216
|
+
|
217
|
+
# Ensure a session id was given
|
218
|
+
sid = cookie.match(SID_REGEXP)[1]
|
219
|
+
sid.should_not be_nil
|
220
|
+
|
221
|
+
# Do another request, but now passing the session id cookie
|
222
|
+
env = env_with_params("/", {}, "HTTP_COOKIE" => cookie)
|
223
|
+
response = app.call(env)
|
224
|
+
env["rack.session"]["counter"].should == 2
|
225
|
+
|
226
|
+
# Depending on rack version, a cookie will be returned with the
|
227
|
+
# same session id or no cookie is given back (becase it did not change).
|
228
|
+
# If we don't get any of these two behaviors, raise an error.
|
229
|
+
new_cookie = response[1]["Set-Cookie"]
|
230
|
+
if new_cookie && new_cookie.match(SID_REGEXP)[1] != sid
|
231
|
+
raise "Expected a cookie to not be sent or session id to match"
|
232
|
+
end
|
233
|
+
|
234
|
+
# Do another request, giving a cookie but turning on warden authentication
|
235
|
+
env = env_with_params("/", {}, "HTTP_COOKIE" => cookie, "warden.on" => true)
|
236
|
+
response = app.call(env)
|
237
|
+
@env["rack.session"]["counter"].should == 3
|
238
|
+
|
239
|
+
# Regardless of rack version, a cookie should be sent back
|
240
|
+
new_cookie = response[1]["Set-Cookie"]
|
241
|
+
new_cookie.should_not be_nil
|
242
|
+
|
243
|
+
# And the session id in this cookie should not be the same as the previous one
|
244
|
+
new_sid = new_cookie.match(SID_REGEXP)[1]
|
245
|
+
new_sid.should_not be_nil
|
246
|
+
new_sid.should_not == sid
|
206
247
|
end
|
207
248
|
end
|
208
249
|
|
209
250
|
describe "authentication cache" do
|
210
251
|
it "should run strategies just once for a given scope" do
|
211
|
-
env = env_with_params("/")
|
212
252
|
app = lambda do |env|
|
213
253
|
env['warden'].authenticate(:password, :pass, :scope => :failz)
|
214
254
|
env['warden'].should_not be_authenticated(:failz)
|
@@ -217,11 +257,10 @@ describe Warden::Proxy do
|
|
217
257
|
env['warden.spec.strategies'].should == [:password, :pass]
|
218
258
|
valid_response
|
219
259
|
end
|
220
|
-
setup_rack(app).call(env)
|
260
|
+
setup_rack(app).call(@env)
|
221
261
|
end
|
222
262
|
|
223
263
|
it "should run strategies for a given scope several times if cache is cleaned" do
|
224
|
-
env = env_with_params("/")
|
225
264
|
app = lambda do |env|
|
226
265
|
env['warden'].authenticate(:password, :pass, :scope => :failz)
|
227
266
|
env['warden'].clear_strategies_cache!(:scope => :failz)
|
@@ -229,11 +268,10 @@ describe Warden::Proxy do
|
|
229
268
|
env['warden.spec.strategies'].should == [:password, :pass, :password, :pass]
|
230
269
|
valid_response
|
231
270
|
end
|
232
|
-
setup_rack(app).call(env)
|
271
|
+
setup_rack(app).call(@env)
|
233
272
|
end
|
234
273
|
|
235
274
|
it "should clear the cache for a specified strategy" do
|
236
|
-
env = env_with_params("/")
|
237
275
|
app = lambda do |env|
|
238
276
|
env['warden'].authenticate(:password, :pass, :scope => :failz)
|
239
277
|
env['warden'].clear_strategies_cache!(:password, :scope => :failz)
|
@@ -241,11 +279,10 @@ describe Warden::Proxy do
|
|
241
279
|
env['warden.spec.strategies'].should == [:password, :pass, :password]
|
242
280
|
valid_response
|
243
281
|
end
|
244
|
-
setup_rack(app).call(env)
|
282
|
+
setup_rack(app).call(@env)
|
245
283
|
end
|
246
284
|
|
247
285
|
it "should run the strategies several times for different scopes" do
|
248
|
-
env = env_with_params("/")
|
249
286
|
app = lambda do |env|
|
250
287
|
env['warden'].authenticate(:password, :pass, :scope => :failz)
|
251
288
|
env['warden'].should_not be_authenticated(:failz)
|
@@ -254,11 +291,10 @@ describe Warden::Proxy do
|
|
254
291
|
env['warden.spec.strategies'].should == [:password, :pass, :password, :pass]
|
255
292
|
valid_response
|
256
293
|
end
|
257
|
-
setup_rack(app).call(env)
|
294
|
+
setup_rack(app).call(@env)
|
258
295
|
end
|
259
296
|
|
260
297
|
it "should not run strategies until cache is cleaned if latest winning strategy halted" do
|
261
|
-
env = env_with_params("/")
|
262
298
|
app = lambda do |env|
|
263
299
|
env['warden'].authenticate(:failz)
|
264
300
|
env['warden'].should_not be_authenticated
|
@@ -266,14 +302,25 @@ describe Warden::Proxy do
|
|
266
302
|
env['warden'].winning_strategy.message.should == "The Fails Strategy Has Failed You"
|
267
303
|
valid_response
|
268
304
|
end
|
269
|
-
setup_rack(app).call(env)
|
305
|
+
setup_rack(app).call(@env)
|
306
|
+
end
|
307
|
+
|
308
|
+
it "should not store user if strategy isn't meant for permanent login" do
|
309
|
+
session = Warden::SessionSerializer.new(@env)
|
310
|
+
app = lambda do |env|
|
311
|
+
env['warden'].authenticate(:single)
|
312
|
+
env['warden'].should be_authenticated
|
313
|
+
env['warden'].user.should == "Valid User"
|
314
|
+
session.should_not be_stored(:default)
|
315
|
+
valid_response
|
316
|
+
end
|
317
|
+
setup_rack(app).call(@env)
|
270
318
|
end
|
271
319
|
|
272
320
|
end
|
273
321
|
|
274
322
|
describe "set user" do
|
275
323
|
it "should store the user into the session" do
|
276
|
-
env = env_with_params("/")
|
277
324
|
app = lambda do |env|
|
278
325
|
env['warden'].authenticate(:pass)
|
279
326
|
env['warden'].should be_authenticated
|
@@ -281,19 +328,18 @@ describe Warden::Proxy do
|
|
281
328
|
env['rack.session']["warden.user.default.key"].should == "Valid User"
|
282
329
|
valid_response
|
283
330
|
end
|
284
|
-
setup_rack(app).call(env)
|
331
|
+
setup_rack(app).call(@env)
|
285
332
|
end
|
286
333
|
|
287
334
|
it "should not store the user if the :store option is set to false" do
|
288
|
-
|
289
|
-
app = lambda do |e|
|
335
|
+
app = lambda do |env|
|
290
336
|
env['warden'].authenticate(:pass, :store => false)
|
291
337
|
env['warden'].should be_authenticated
|
292
338
|
env['warden'].user.should == "Valid User"
|
293
339
|
env['rack.session']['warden.user.default.key'].should be_nil
|
294
340
|
valid_response
|
295
341
|
end
|
296
|
-
setup_rack(app).call(env)
|
342
|
+
setup_rack(app).call(@env)
|
297
343
|
end
|
298
344
|
end
|
299
345
|
|
@@ -348,10 +394,9 @@ describe Warden::Proxy do
|
|
348
394
|
describe "logout" do
|
349
395
|
|
350
396
|
before(:each) do
|
351
|
-
@env = env = env_with_params
|
352
397
|
@env['rack.session'] = {"warden.user.default.key" => "default key", "warden.user.foo.key" => "foo key", :foo => "bar"}
|
353
398
|
@app = lambda do |e|
|
354
|
-
e['warden'].logout(
|
399
|
+
e['warden'].logout(e['warden.spec.which_logout'])
|
355
400
|
valid_response
|
356
401
|
end
|
357
402
|
end
|
@@ -428,7 +473,7 @@ describe Warden::Proxy do
|
|
428
473
|
app = lambda do |e|
|
429
474
|
e['warden'].authenticate! :failz
|
430
475
|
end
|
431
|
-
result = setup_rack(app, :failure_app => failure).call(
|
476
|
+
result = setup_rack(app, :failure_app => failure).call(@env)
|
432
477
|
result.last.should == ["The Fails Strategy Has Failed You"]
|
433
478
|
end
|
434
479
|
|
@@ -440,7 +485,7 @@ describe Warden::Proxy do
|
|
440
485
|
e['warden'].authenticate! :pass_with_message
|
441
486
|
success.call(e)
|
442
487
|
end
|
443
|
-
result = setup_rack(app).call(
|
488
|
+
result = setup_rack(app).call(@env)
|
444
489
|
result.last.should == ["The Success Strategy Has Accepted You"]
|
445
490
|
end
|
446
491
|
|
@@ -448,7 +493,7 @@ describe Warden::Proxy do
|
|
448
493
|
app = lambda do |e|
|
449
494
|
[200, {"Content-Type" => "text/plain"}, [e['warden'].message]]
|
450
495
|
end
|
451
|
-
result = setup_rack(app).call(
|
496
|
+
result = setup_rack(app).call(@env)
|
452
497
|
result[2].should == [nil]
|
453
498
|
end
|
454
499
|
end
|
@@ -546,9 +591,8 @@ describe Warden::Proxy do
|
|
546
591
|
env['warden'].authenticated?(:foo_scope)
|
547
592
|
valid_response
|
548
593
|
end
|
549
|
-
env
|
550
|
-
|
551
|
-
env['warden'].user(:foo_scope).should be_nil
|
594
|
+
setup_rack(app).call(@env)
|
595
|
+
@env['warden'].user(:foo_scope).should be_nil
|
552
596
|
ensure
|
553
597
|
Warden::Manager.serialize_from_session { |k| k }
|
554
598
|
end
|
@@ -686,6 +730,7 @@ describe "dynamic default_strategies" do
|
|
686
730
|
|
687
731
|
before(:each) do
|
688
732
|
@app = lambda{|e| e['warden'].authenticate! }
|
733
|
+
@env = env_with_params("/")
|
689
734
|
$captures = []
|
690
735
|
end
|
691
736
|
|
@@ -705,7 +750,7 @@ describe "dynamic default_strategies" do
|
|
705
750
|
e['warden'].authenticate!
|
706
751
|
Rack::Response.new("OK").finish
|
707
752
|
end
|
708
|
-
setup_rack(app).call(
|
753
|
+
setup_rack(app).call(@env)
|
709
754
|
|
710
755
|
$captures.should == [:one]
|
711
756
|
end
|
@@ -717,7 +762,7 @@ describe "dynamic default_strategies" do
|
|
717
762
|
e['warden'].authenticate!
|
718
763
|
Rack::Response.new("OK").finish
|
719
764
|
end
|
720
|
-
setup_rack(app).call(
|
765
|
+
setup_rack(app).call(@env)
|
721
766
|
|
722
767
|
$captures.should == [:one]
|
723
768
|
end
|
@@ -734,7 +779,7 @@ describe "dynamic default_strategies" do
|
|
734
779
|
w.authenticate
|
735
780
|
$captures.should == [:two]
|
736
781
|
end
|
737
|
-
setup_rack(app).call(
|
782
|
+
setup_rack(app).call(@env)
|
738
783
|
$captures.should == [:two]
|
739
784
|
end
|
740
785
|
|
@@ -756,7 +801,7 @@ describe "dynamic default_strategies" do
|
|
756
801
|
$captures << :complete
|
757
802
|
end)
|
758
803
|
end
|
759
|
-
builder.to_app.call(
|
804
|
+
builder.to_app.call(@env)
|
760
805
|
$captures.should include(:complete)
|
761
806
|
end
|
762
807
|
|
@@ -768,7 +813,7 @@ describe "dynamic default_strategies" do
|
|
768
813
|
e['warden'].authenticate!
|
769
814
|
Rack::Response.new("OK").finish
|
770
815
|
end
|
771
|
-
setup_rack(app).call(
|
816
|
+
setup_rack(app).call(@env)
|
772
817
|
|
773
818
|
$captures.should == [:one]
|
774
819
|
end
|
@@ -821,9 +866,8 @@ describe "dynamic default_strategies" do
|
|
821
866
|
Rack::Response.new("OK").finish
|
822
867
|
end)
|
823
868
|
end
|
824
|
-
env =
|
825
|
-
|
826
|
-
builder.to_app.call(env)
|
869
|
+
session = @env["rack.session"] = {}
|
870
|
+
builder.to_app.call(@env)
|
827
871
|
$captures.should include(:complete)
|
828
872
|
session['warden.user.default.key'].should == "User"
|
829
873
|
session['warden.user.foo.key'].should == "User"
|
data/warden.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{warden}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Daniel Neighman"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-09-24}
|
13
13
|
s.email = %q{has.sox@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"LICENSE",
|
@@ -43,6 +43,7 @@ Gem::Specification.new do |s|
|
|
43
43
|
"spec/helpers/strategies/pass.rb",
|
44
44
|
"spec/helpers/strategies/pass_with_message.rb",
|
45
45
|
"spec/helpers/strategies/password.rb",
|
46
|
+
"spec/helpers/strategies/single.rb",
|
46
47
|
"spec/spec_helper.rb",
|
47
48
|
"spec/warden/authenticated_data_store_spec.rb",
|
48
49
|
"spec/warden/config_spec.rb",
|
@@ -71,6 +72,7 @@ Gem::Specification.new do |s|
|
|
71
72
|
"spec/helpers/strategies/pass.rb",
|
72
73
|
"spec/helpers/strategies/pass_with_message.rb",
|
73
74
|
"spec/helpers/strategies/password.rb",
|
75
|
+
"spec/helpers/strategies/single.rb",
|
74
76
|
"spec/spec_helper.rb",
|
75
77
|
"spec/warden/authenticated_data_store_spec.rb",
|
76
78
|
"spec/warden/config_spec.rb",
|
@@ -92,14 +94,14 @@ Gem::Specification.new do |s|
|
|
92
94
|
|
93
95
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
94
96
|
s.add_runtime_dependency(%q<rack>, [">= 1.0.0"])
|
95
|
-
s.add_development_dependency(%q<rspec>, ["
|
97
|
+
s.add_development_dependency(%q<rspec>, ["~> 1"])
|
96
98
|
else
|
97
99
|
s.add_dependency(%q<rack>, [">= 1.0.0"])
|
98
|
-
s.add_dependency(%q<rspec>, ["
|
100
|
+
s.add_dependency(%q<rspec>, ["~> 1"])
|
99
101
|
end
|
100
102
|
else
|
101
103
|
s.add_dependency(%q<rack>, [">= 1.0.0"])
|
102
|
-
s.add_dependency(%q<rspec>, ["
|
104
|
+
s.add_dependency(%q<rspec>, ["~> 1"])
|
103
105
|
end
|
104
106
|
end
|
105
107
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: warden
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 0.10.7
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Daniel Neighman
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-09-24 00:00:00 +10:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -40,14 +40,12 @@ dependencies:
|
|
40
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
hash:
|
45
|
+
hash: 1
|
46
46
|
segments:
|
47
47
|
- 1
|
48
|
-
|
49
|
-
- 0
|
50
|
-
version: 1.0.0
|
48
|
+
version: "1"
|
51
49
|
type: :development
|
52
50
|
version_requirements: *id002
|
53
51
|
description:
|
@@ -87,6 +85,7 @@ files:
|
|
87
85
|
- spec/helpers/strategies/pass.rb
|
88
86
|
- spec/helpers/strategies/pass_with_message.rb
|
89
87
|
- spec/helpers/strategies/password.rb
|
88
|
+
- spec/helpers/strategies/single.rb
|
90
89
|
- spec/spec_helper.rb
|
91
90
|
- spec/warden/authenticated_data_store_spec.rb
|
92
91
|
- spec/warden/config_spec.rb
|
@@ -142,6 +141,7 @@ test_files:
|
|
142
141
|
- spec/helpers/strategies/pass.rb
|
143
142
|
- spec/helpers/strategies/pass_with_message.rb
|
144
143
|
- spec/helpers/strategies/password.rb
|
144
|
+
- spec/helpers/strategies/single.rb
|
145
145
|
- spec/spec_helper.rb
|
146
146
|
- spec/warden/authenticated_data_store_spec.rb
|
147
147
|
- spec/warden/config_spec.rb
|