warden 0.7.0 → 0.8.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.
- data/History.rdoc +13 -2
- data/lib/warden/config.rb +95 -0
- data/lib/warden/hooks.rb +61 -33
- data/lib/warden/manager.rb +22 -129
- data/lib/warden/manager_deprecation.rb +62 -0
- data/lib/warden/proxy.rb +49 -64
- data/lib/warden/version.rb +1 -1
- data/spec/helpers/request_helper.rb +4 -6
- data/spec/warden/config_spec.rb +55 -0
- data/spec/warden/hooks_spec.rb +83 -33
- data/spec/warden/manager_spec.rb +15 -12
- data/spec/warden/proxy_spec.rb +1 -1
- data/warden.gemspec +6 -4
- metadata +6 -4
- data/spec/helpers/strategies/pass_without_user.rb +0 -7
data/History.rdoc
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
== Version 0.8.0 / 2010-01-06
|
2
|
+
|
3
|
+
* enhancements
|
4
|
+
* Add conditionals to callbacks (josevalim)
|
5
|
+
* Extract Warden::Config from Warden::Manager (josevalim)
|
6
|
+
|
7
|
+
== Version 0.7.0 / 2010-01-04
|
8
|
+
|
9
|
+
* enhancements
|
10
|
+
* Expose config in warden proxy (hassox)
|
11
|
+
|
1
12
|
== Version 0.6.0 / 2009-11-16
|
2
13
|
|
3
14
|
* enhancements
|
@@ -6,9 +17,9 @@
|
|
6
17
|
* deprecation
|
7
18
|
* serializer_into_session and serializer_from_session are deprecated, overwrite serialize and deserializer in Warden::Serializers::Session instead (josevalim)
|
8
19
|
|
9
|
-
== Version 0.5.3 / 2009-11-
|
20
|
+
== Version 0.5.3 / 2009-11-10
|
10
21
|
* bug fixes
|
11
|
-
* authenticated? and unauthenticated? should return true or false, not the user or false.
|
22
|
+
* authenticated? and unauthenticated? should return true or false, not the user or false. (hassox)
|
12
23
|
|
13
24
|
== Version 0.5.2 / 2009-11-09
|
14
25
|
* enhancements
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module Warden
|
2
|
+
# This is a class which is yielded on use Warden::Manager. If you have a plugin
|
3
|
+
# and wants to add more configuration to warden, you just need to extend this
|
4
|
+
# class.
|
5
|
+
class Config < Hash
|
6
|
+
# Creates an accessor that simply sets and reads a key in the hash:
|
7
|
+
#
|
8
|
+
# class Config < Hash
|
9
|
+
# hash_accessor :failure_app
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# config = Config.new
|
13
|
+
# config.failure_app = Foo
|
14
|
+
# config[:failure_app] #=> Foo
|
15
|
+
#
|
16
|
+
# config[:failure_app] = Bar
|
17
|
+
# config.failure_app #=> Bar
|
18
|
+
#
|
19
|
+
def self.hash_accessor(*names) #:nodoc:
|
20
|
+
names.each do |name|
|
21
|
+
class_eval <<-METHOD, __FILE__, __LINE__ + 1
|
22
|
+
def #{name}
|
23
|
+
self[:#{name}]
|
24
|
+
end
|
25
|
+
|
26
|
+
def #{name}=(value)
|
27
|
+
self[:#{name}] = value
|
28
|
+
end
|
29
|
+
METHOD
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
hash_accessor :failure_app, :default_scope
|
34
|
+
|
35
|
+
def initialize(other={})
|
36
|
+
merge!(other)
|
37
|
+
|
38
|
+
self[:default_scope] ||= :default
|
39
|
+
self[:default_strategies] ||= []
|
40
|
+
self[:default_serializers] ||= [ :session ]
|
41
|
+
end
|
42
|
+
|
43
|
+
# Do not raise an error if a missing strategy is given by default.
|
44
|
+
# :api: plugin
|
45
|
+
def silence_missing_strategies!
|
46
|
+
self[:silence_missing_strategies] = true
|
47
|
+
end
|
48
|
+
|
49
|
+
def silence_missing_strategies? #:nodoc:
|
50
|
+
!!self[:silence_missing_strategies]
|
51
|
+
end
|
52
|
+
|
53
|
+
# Do not raise an error if a missing serializer is given by default.
|
54
|
+
# :api: plugin
|
55
|
+
def silence_missing_serializers!
|
56
|
+
self[:silence_missing_serializers] = true
|
57
|
+
end
|
58
|
+
|
59
|
+
def silence_missing_serializers? #:nodoc:
|
60
|
+
!!self[:silence_missing_serializers]
|
61
|
+
end
|
62
|
+
|
63
|
+
# Set the default strategies to use.
|
64
|
+
# :api: public
|
65
|
+
def default_strategies(*strategies)
|
66
|
+
if strategies.empty?
|
67
|
+
self[:default_strategies]
|
68
|
+
else
|
69
|
+
self[:default_strategies] = strategies.flatten
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# Set the default serializers to use. By default, only session is enabled.
|
74
|
+
# :api: public
|
75
|
+
def default_serializers(*serializers)
|
76
|
+
if serializers.empty?
|
77
|
+
self[:default_serializers]
|
78
|
+
else
|
79
|
+
self[:default_serializers] = serializers.flatten
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# Quick accessor to strategies from manager
|
84
|
+
# :api: public
|
85
|
+
def serializers
|
86
|
+
Warden::Serializers
|
87
|
+
end
|
88
|
+
|
89
|
+
# Quick accessor to strategies from manager
|
90
|
+
# :api: public
|
91
|
+
def strategies
|
92
|
+
Warden::Strategies
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
data/lib/warden/hooks.rb
CHANGED
@@ -2,11 +2,32 @@
|
|
2
2
|
module Warden
|
3
3
|
module Hooks
|
4
4
|
|
5
|
+
# Hook to _run_callbacks asserting for conditions.
|
6
|
+
def _run_callbacks(kind, *args) #:nodoc:
|
7
|
+
options = args.last # Last callback args MUST be a Hash
|
8
|
+
|
9
|
+
send("_#{kind}").each do |callback, conditions|
|
10
|
+
invalid = conditions.find do |key, value|
|
11
|
+
value.is_a?(Array) ? !value.include?(options[key]) : (value != options[key])
|
12
|
+
end
|
13
|
+
|
14
|
+
callback.call(*args) unless invalid
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
5
18
|
# A callback hook set to run every time after a user is set.
|
6
|
-
# This
|
7
|
-
#
|
19
|
+
# This callback is triggered the first time one of those three events happens during a request:
|
20
|
+
# :authentication, :fetch (from one of the serializers, like session) and :set_user (when manually set).
|
21
|
+
# You can supply as many hooks as you like, and they will be run in order of decleration.
|
22
|
+
#
|
23
|
+
# If you want to run the callbacks for a given scope and/or event, you can specify them as options.
|
24
|
+
# See parameters and example below.
|
8
25
|
#
|
9
26
|
# Parameters:
|
27
|
+
# <options> Some options which specify when the callback should be executed
|
28
|
+
# scope - Executes the callback only if it maches the scope(s) given
|
29
|
+
# only - Executes the callback only if it matches the event(s) given
|
30
|
+
# except - Executes the callback except if it matches the event(s) given
|
10
31
|
# <block> A block where you can set arbitrary logic to run every time a user is set
|
11
32
|
# Block Parameters: |user, auth, opts|
|
12
33
|
# user - The user object that is being set
|
@@ -23,10 +44,21 @@ module Warden
|
|
23
44
|
# auth.session["#{scope}.last_access"] = Time.now
|
24
45
|
# end
|
25
46
|
#
|
47
|
+
# Warden::Manager.after_set_user :except => :fetch do |user,auth,opts|
|
48
|
+
# user.login_count += 1
|
49
|
+
# end
|
50
|
+
#
|
26
51
|
# :api: public
|
27
|
-
def after_set_user(&block)
|
52
|
+
def after_set_user(options={}, &block)
|
28
53
|
raise BlockNotGiven unless block_given?
|
29
|
-
|
54
|
+
|
55
|
+
if options.key?(:only)
|
56
|
+
options[:event] = options.delete(:only)
|
57
|
+
elsif options.key?(:except)
|
58
|
+
options[:event] = [:set_user, :authentication, :fetch] - Array(options.delete(:except))
|
59
|
+
end
|
60
|
+
|
61
|
+
_after_set_user << [block, options]
|
30
62
|
end
|
31
63
|
|
32
64
|
# Provides access to the array of after_set_user blocks to run
|
@@ -35,32 +67,22 @@ module Warden
|
|
35
67
|
@_after_set_user ||= []
|
36
68
|
end
|
37
69
|
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
# Parameters:
|
42
|
-
# <block> A block to contain logic for the callback
|
43
|
-
# Block Parameters: |user, auth, opts|
|
44
|
-
# user - The user object that is being set
|
45
|
-
# auth - The raw authentication proxy object.
|
46
|
-
# opts - any options passed into the authenticate call includeing :scope
|
47
|
-
#
|
48
|
-
# Example:
|
49
|
-
#
|
50
|
-
# Warden::Manager.after_authentication do |user, auth, opts|
|
51
|
-
# throw(:warden, opts) unless user.active?
|
52
|
-
# end
|
70
|
+
# after_authentication is just a wrapper to after_set_user, which is only invoked
|
71
|
+
# when the user is set through the authentication path. The options and yielded arguments
|
72
|
+
# are the same as in after_set_user.
|
53
73
|
#
|
54
74
|
# :api: public
|
55
|
-
def after_authentication(&block)
|
56
|
-
|
57
|
-
_after_authentication << block
|
75
|
+
def after_authentication(options={}, &block)
|
76
|
+
after_set_user(options.merge(:event => :authentication), &block)
|
58
77
|
end
|
59
78
|
|
60
|
-
#
|
61
|
-
#
|
62
|
-
|
63
|
-
|
79
|
+
# after_fetch is just a wrapper to after_set_user, which is only invoked
|
80
|
+
# when the user is fetched from sesion. The options and yielded arguments
|
81
|
+
# are the same as in after_set_user.
|
82
|
+
#
|
83
|
+
# :api: public
|
84
|
+
def after_fetch(options={}, &block)
|
85
|
+
after_set_user(options.merge(:event => :fetch), &block)
|
64
86
|
end
|
65
87
|
|
66
88
|
# A callback that runs just prior to the failur application being called.
|
@@ -69,8 +91,10 @@ module Warden
|
|
69
91
|
# If a Rails controller were used for the failure_app for example, you would need to set request[:params][:action] = :unauthenticated
|
70
92
|
#
|
71
93
|
# Parameters:
|
94
|
+
# <options> Some options which specify when the callback should be executed
|
95
|
+
# scope - Executes the callback only if it maches the scope(s) given
|
72
96
|
# <block> A block to contain logic for the callback
|
73
|
-
# Block Parameters: |
|
97
|
+
# Block Parameters: |env, opts|
|
74
98
|
# env - The rack env hash
|
75
99
|
# opts - any options passed into the authenticate call includeing :scope
|
76
100
|
#
|
@@ -82,8 +106,9 @@ module Warden
|
|
82
106
|
# end
|
83
107
|
#
|
84
108
|
# :api: public
|
85
|
-
def before_failure(&block)
|
86
|
-
|
109
|
+
def before_failure(options={}, &block)
|
110
|
+
raise BlockNotGiven unless block_given?
|
111
|
+
_before_failure << [block, options]
|
87
112
|
end
|
88
113
|
|
89
114
|
# Provides access to the callback array for before_failure
|
@@ -95,20 +120,23 @@ module Warden
|
|
95
120
|
# A callback that runs just prior to the logout of each scope.
|
96
121
|
#
|
97
122
|
# Parameters:
|
123
|
+
# <options> Some options which specify when the callback should be executed
|
124
|
+
# scope - Executes the callback only if it maches the scope(s) given
|
98
125
|
# <block> A block to contain logic for the callback
|
99
126
|
# Block Parameters: |user, auth, scope|
|
100
127
|
# user - The authenticated user for the current scope
|
101
128
|
# auth - The warden proxy object
|
102
|
-
#
|
129
|
+
# opts - any options passed into the authenticate call including :scope
|
103
130
|
#
|
104
131
|
# Example:
|
105
|
-
# Warden::Manager.before_logout do |user, auth,
|
132
|
+
# Warden::Manager.before_logout do |user, auth, opts|
|
106
133
|
# user.forget_me!
|
107
134
|
# end
|
108
135
|
#
|
109
136
|
# :api: public
|
110
|
-
def before_logout(&block)
|
111
|
-
|
137
|
+
def before_logout(options={}, &block)
|
138
|
+
raise BlockNotGiven unless block_given?
|
139
|
+
_before_logout << [block, options]
|
112
140
|
end
|
113
141
|
|
114
142
|
# Provides access to the callback array for before_logout
|
data/lib/warden/manager.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'warden/hooks'
|
3
|
+
require 'warden/config'
|
4
|
+
require 'warden/manager_deprecation'
|
3
5
|
|
4
6
|
module Warden
|
5
7
|
# The middleware for Rack Authentication
|
@@ -8,90 +10,26 @@ module Warden
|
|
8
10
|
# the rack environment hash
|
9
11
|
class Manager
|
10
12
|
extend Warden::Hooks
|
13
|
+
extend Warden::ManagerDeprecation
|
11
14
|
|
12
|
-
attr_accessor :config
|
15
|
+
attr_accessor :config
|
13
16
|
|
14
|
-
#
|
15
|
-
#
|
16
|
-
# The manager is yielded when initialized with a block. This is useful when declaring it in Rack::Builder
|
17
|
+
# Initialize the middleware. If a block is given, a Warden::Config is yielded so you can properly
|
18
|
+
# configure the Warden::Manager.
|
17
19
|
# :api: public
|
18
|
-
def initialize(app,
|
19
|
-
@app = app
|
20
|
-
@config
|
21
|
-
yield self if block_given?
|
22
|
-
|
23
|
-
# Should ensure there is a failure application defined.
|
24
|
-
@failure_app = config[:failure_app] if config[:failure_app]
|
25
|
-
|
26
|
-
# Set default configuration values.
|
27
|
-
@config[:default_strategies] ||= []
|
28
|
-
@config[:default_serializers] ||= [ :session ]
|
29
|
-
|
20
|
+
def initialize(app, options={})
|
21
|
+
@app, @config = app, Warden::Config.new(options)
|
22
|
+
yield @config if block_given?
|
30
23
|
self
|
31
24
|
end
|
32
|
-
|
33
|
-
# Get the default scope for Warden. By default this is :default
|
34
|
-
# @api public
|
35
|
-
def self.default_scope
|
36
|
-
@default_scope
|
37
|
-
end
|
38
|
-
|
39
|
-
# Set the default scope for Warden.
|
40
|
-
def self.default_scope=(scope)
|
41
|
-
@default_scope = scope
|
42
|
-
end
|
43
|
-
@default_scope = :default
|
44
|
-
|
45
|
-
# Do not raise an error if a missing strategy is given by default.
|
46
|
-
# :api: plugin
|
47
|
-
def silence_missing_strategies!
|
48
|
-
@config[:silence_missing_strategies] = true
|
49
|
-
end
|
50
|
-
|
51
|
-
# Do not raise an error if a missing serializer is given by default.
|
52
|
-
# :api: plugin
|
53
|
-
def silence_missing_serializers!
|
54
|
-
@config[:silence_missing_serializers] = true
|
55
|
-
end
|
56
|
-
|
57
|
-
# Set the default strategies to use.
|
58
|
-
# :api: public
|
59
|
-
def default_strategies(*strategies)
|
60
|
-
if strategies.empty?
|
61
|
-
@config[:default_strategies]
|
62
|
-
else
|
63
|
-
@config[:default_strategies] = strategies.flatten
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
# Set the default serializers to use. By default, only session is enabled.
|
68
|
-
# :api: public
|
69
|
-
def default_serializers(*serializers)
|
70
|
-
if serializers.empty?
|
71
|
-
@config[:default_serializers]
|
72
|
-
else
|
73
|
-
@config[:default_serializers] = serializers.flatten
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
# Quick accessor to strategies from manager
|
78
|
-
# :api: public
|
79
|
-
def serializers
|
80
|
-
Warden::Serializers
|
81
|
-
end
|
82
|
-
|
83
|
-
# Quick accessor to strategies from manager
|
84
|
-
# :api: public
|
85
|
-
def strategies
|
86
|
-
Warden::Strategies
|
87
|
-
end
|
88
25
|
|
26
|
+
# Invoke the application guarding for throw :warden.
|
27
|
+
# If this is downstream from another warden instance, don't do anything.
|
89
28
|
# :api: private
|
90
29
|
def call(env) # :nodoc:
|
91
|
-
# if this is downstream from another warden instance, don't do anything.
|
92
30
|
return @app.call(env) unless env['warden'].nil?
|
93
31
|
|
94
|
-
env['warden'] = Proxy.new(env,
|
32
|
+
env['warden'] = Proxy.new(env, self)
|
95
33
|
result = catch(:warden) do
|
96
34
|
@app.call(env)
|
97
35
|
end
|
@@ -110,58 +48,13 @@ module Warden
|
|
110
48
|
end
|
111
49
|
end
|
112
50
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
# Any object that can be serialized into the session in some way can be used as a "user" object
|
117
|
-
# Generally however complex object should not be stored in the session.
|
118
|
-
# If possible store only a "key" of the user object that will allow you to reconstitute it.
|
119
|
-
#
|
120
|
-
# Example:
|
121
|
-
# Warden::Manager.serialize_into_session{ |user| user.id }
|
122
|
-
#
|
123
|
-
# Deprecation:
|
124
|
-
# This method was deprecated in favor of serializer in Session. You can set it while setting the middleware:
|
125
|
-
#
|
126
|
-
# use Warden::Manager do |manager|
|
127
|
-
# manager.serializers.update(:session) do
|
128
|
-
# def serialize(user)
|
129
|
-
# user.id
|
130
|
-
# end
|
131
|
-
# end
|
132
|
-
# end
|
133
|
-
#
|
134
|
-
# :api: public
|
135
|
-
def serialize_into_session(&block)
|
136
|
-
warn "[DEPRECATION] serialize_into_session is deprecated. Please overwrite the serialize method in Warden::Serializers::Session."
|
137
|
-
Warden::Serializers::Session.send :define_method, :serialize, &block
|
138
|
-
end
|
139
|
-
|
140
|
-
# Reconstitues the user from the session.
|
141
|
-
# Use the results of user_session_key to reconstitue the user from the session on requests after the initial login
|
142
|
-
#
|
143
|
-
# Example:
|
144
|
-
# Warden::Manager.serialize_from_session{ |id| User.get(id) }
|
145
|
-
#
|
146
|
-
# Deprecation:
|
147
|
-
# This method was deprecated in favor of serializer in Session. You can set it while setting the middleware:
|
148
|
-
#
|
149
|
-
# use Warden::Manager do |manager|
|
150
|
-
# manager.serializers.update(:session) do
|
151
|
-
# def deserialize(id)
|
152
|
-
# User.get(id)
|
153
|
-
# end
|
154
|
-
# end
|
155
|
-
# end
|
156
|
-
#
|
157
|
-
# :api: public
|
158
|
-
def serialize_from_session(&block)
|
159
|
-
warn "[DEPRECATION] serialize_from_session is deprecated. Please overwrite the deserialize method in Warden::Serializers::Session."
|
160
|
-
Warden::Serializers::Session.send :define_method, :deserialize, &block
|
161
|
-
end
|
51
|
+
# :api: private
|
52
|
+
def _run_callbacks(*args) #:nodoc:
|
53
|
+
self.class._run_callbacks(*args)
|
162
54
|
end
|
163
55
|
|
164
|
-
|
56
|
+
private
|
57
|
+
|
165
58
|
# When a request is unauthentiated, here's where the processing occurs.
|
166
59
|
# It looks at the result of the proxy to see if it's been executed and what action to take.
|
167
60
|
# :api: private
|
@@ -184,14 +77,14 @@ module Warden
|
|
184
77
|
def call_failure_app(env, opts = {})
|
185
78
|
if env['warden'].custom_failure?
|
186
79
|
opts[:original_response]
|
187
|
-
|
80
|
+
elsif config.failure_app
|
188
81
|
env["PATH_INFO"] = "/#{opts[:action]}"
|
189
82
|
env["warden.options"] = opts
|
190
83
|
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
84
|
+
_run_callbacks(:before_failure, env, opts)
|
85
|
+
config.failure_app.call(env).to_a
|
86
|
+
else
|
87
|
+
raise "No Failure App provided"
|
195
88
|
end
|
196
89
|
end # call_failure_app
|
197
90
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Warden
|
2
|
+
module ManagerDeprecation
|
3
|
+
# Read the default scope from Warden
|
4
|
+
def default_scope
|
5
|
+
warn "[DEPRECATION] Warden::Manager.default_scope is deprecated. It's now accessible in the Warden::Manager instance."
|
6
|
+
end
|
7
|
+
|
8
|
+
# Set the default scope for Warden.
|
9
|
+
def default_scope=(scope)
|
10
|
+
warn "[DEPRECATION] Warden::Manager.default_scope= is deprecated. Please set it in the Warden::Manager instance."
|
11
|
+
end
|
12
|
+
|
13
|
+
# Prepares the user to serialize into the session.
|
14
|
+
# Any object that can be serialized into the session in some way can be used as a "user" object
|
15
|
+
# Generally however complex object should not be stored in the session.
|
16
|
+
# If possible store only a "key" of the user object that will allow you to reconstitute it.
|
17
|
+
#
|
18
|
+
# Example:
|
19
|
+
# Warden::Manager.serialize_into_session{ |user| user.id }
|
20
|
+
#
|
21
|
+
# Deprecation:
|
22
|
+
# This method was deprecated in favor of serializer in Session. You can set it while setting the middleware:
|
23
|
+
#
|
24
|
+
# use Warden::Manager do |manager|
|
25
|
+
# manager.serializers.update(:session) do
|
26
|
+
# def serialize(user)
|
27
|
+
# user.id
|
28
|
+
# end
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# :api: public
|
33
|
+
def serialize_into_session(&block)
|
34
|
+
warn "[DEPRECATION] serialize_into_session is deprecated. Please overwrite the serialize method in Warden::Serializers::Session."
|
35
|
+
Warden::Serializers::Session.send :define_method, :serialize, &block
|
36
|
+
end
|
37
|
+
|
38
|
+
# Reconstitues the user from the session.
|
39
|
+
# Use the results of user_session_key to reconstitue the user from the session on requests after the initial login
|
40
|
+
#
|
41
|
+
# Example:
|
42
|
+
# Warden::Manager.serialize_from_session{ |id| User.get(id) }
|
43
|
+
#
|
44
|
+
# Deprecation:
|
45
|
+
# This method was deprecated in favor of serializer in Session. You can set it while setting the middleware:
|
46
|
+
#
|
47
|
+
# use Warden::Manager do |manager|
|
48
|
+
# manager.serializers.update(:session) do
|
49
|
+
# def deserialize(id)
|
50
|
+
# User.get(id)
|
51
|
+
# end
|
52
|
+
# end
|
53
|
+
# end
|
54
|
+
#
|
55
|
+
# :api: public
|
56
|
+
def serialize_from_session(&block)
|
57
|
+
warn "[DEPRECATION] serialize_from_session is deprecated. Please overwrite the deserialize method in Warden::Serializers::Session."
|
58
|
+
Warden::Serializers::Session.send :define_method, :deserialize, &block
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
data/lib/warden/proxy.rb
CHANGED
@@ -7,13 +7,9 @@ module Warden
|
|
7
7
|
# :api: private
|
8
8
|
attr_accessor :winning_strategy
|
9
9
|
|
10
|
-
# An accessor to the rack env hash
|
10
|
+
# An accessor to the rack env hash, the proxy owner and its config
|
11
11
|
# :api: public
|
12
|
-
attr_reader :env
|
13
|
-
|
14
|
-
# A reader for the config of warden that created this proxy.
|
15
|
-
# :api: public
|
16
|
-
attr_reader :config
|
12
|
+
attr_reader :env, :manager, :config
|
17
13
|
|
18
14
|
extend ::Forwardable
|
19
15
|
include ::Warden::Mixins::Common
|
@@ -21,11 +17,9 @@ module Warden
|
|
21
17
|
# :api: private
|
22
18
|
def_delegators :winning_strategy, :headers, :_status, :custom_response
|
23
19
|
|
24
|
-
def initialize(env,
|
25
|
-
@env = env
|
26
|
-
@config = config
|
27
|
-
@strategies = @config.fetch(:default_strategies, [])
|
28
|
-
@users = {}
|
20
|
+
def initialize(env, manager) #:nodoc:
|
21
|
+
@env, @users = env, {}
|
22
|
+
@manager, @config = manager, manager.config
|
29
23
|
errors # setup the error object in the session
|
30
24
|
end
|
31
25
|
|
@@ -41,7 +35,7 @@ module Warden
|
|
41
35
|
# env['warden'].authenticated?(:admin)
|
42
36
|
#
|
43
37
|
# :api: public
|
44
|
-
def authenticated?(scope =
|
38
|
+
def authenticated?(scope = @config.default_scope)
|
45
39
|
result = !!user(scope)
|
46
40
|
yield if block_given? && result
|
47
41
|
result
|
@@ -49,7 +43,7 @@ module Warden
|
|
49
43
|
|
50
44
|
# Same API as authenticated, but returns false when authenticated.
|
51
45
|
# :api: public
|
52
|
-
def unauthenticated?(scope =
|
46
|
+
def unauthenticated?(scope = @config.default_scope)
|
53
47
|
result = !authenticated?(scope)
|
54
48
|
yield if block_given? && result
|
55
49
|
result
|
@@ -82,7 +76,7 @@ module Warden
|
|
82
76
|
# :api: public
|
83
77
|
def authenticate!(*args)
|
84
78
|
scope, opts = _perform_authentication(*args)
|
85
|
-
throw(:warden, opts
|
79
|
+
throw(:warden, opts) if !user(scope)
|
86
80
|
user(scope)
|
87
81
|
end
|
88
82
|
|
@@ -97,9 +91,9 @@ module Warden
|
|
97
91
|
# env['warden'].stored?(:default, :cookie) #=> false
|
98
92
|
#
|
99
93
|
# :api: public
|
100
|
-
def stored?(scope =
|
94
|
+
def stored?(scope = @config.default_scope, serializer = nil)
|
101
95
|
if serializer
|
102
|
-
|
96
|
+
_find_serializer(serializer).stored?(scope)
|
103
97
|
else
|
104
98
|
serializers.any? { |s| s.stored?(scope) }
|
105
99
|
end
|
@@ -113,12 +107,13 @@ module Warden
|
|
113
107
|
#
|
114
108
|
# :api: public
|
115
109
|
def set_user(user, opts = {})
|
116
|
-
|
110
|
+
return unless user
|
111
|
+
scope = (opts[:scope] ||= @config.default_scope)
|
117
112
|
_store_user(user, scope) unless opts[:store] == false
|
118
113
|
@users[scope] = user
|
119
114
|
|
120
|
-
|
121
|
-
|
115
|
+
opts[:event] ||= :set_user
|
116
|
+
manager._run_callbacks(:after_set_user, user, self, opts)
|
122
117
|
user
|
123
118
|
end
|
124
119
|
|
@@ -133,8 +128,8 @@ module Warden
|
|
133
128
|
# env['warden'].user(:admin)
|
134
129
|
#
|
135
130
|
# :api: public
|
136
|
-
def user(scope =
|
137
|
-
@users[scope] ||= set_user(_fetch_user(scope), :scope => scope)
|
131
|
+
def user(scope = @config.default_scope)
|
132
|
+
@users[scope] ||= set_user(_fetch_user(scope), :scope => scope, :event => :fetch)
|
138
133
|
end
|
139
134
|
|
140
135
|
# Provides a scoped session data for authenticated users.
|
@@ -148,7 +143,7 @@ module Warden
|
|
148
143
|
# env['warden'].session(:sudo)[:foo] = "bar"
|
149
144
|
#
|
150
145
|
# :api: public
|
151
|
-
def session(scope =
|
146
|
+
def session(scope = @config.default_scope)
|
152
147
|
raise NotAuthenticated, "#{scope.inspect} user is not logged in" unless authenticated?(scope)
|
153
148
|
raw_session["warden.user.#{scope}.session"] ||= {}
|
154
149
|
end
|
@@ -178,7 +173,7 @@ module Warden
|
|
178
173
|
|
179
174
|
scopes.each do |scope|
|
180
175
|
user = @users.delete(scope)
|
181
|
-
|
176
|
+
manager._run_callbacks(:before_logout, user, self, :scope => scope)
|
182
177
|
|
183
178
|
raw_session.delete("warden.user.#{scope}.session")
|
184
179
|
_delete_user(user, scope)
|
@@ -216,15 +211,13 @@ module Warden
|
|
216
211
|
# :api: private
|
217
212
|
def serializers # :nodoc:
|
218
213
|
@serializers ||= begin
|
219
|
-
array
|
220
|
-
|
221
|
-
|
222
|
-
raise "Invalid serializer #{s}" unless silence_missing_serializers?
|
214
|
+
@config.default_serializers.inject([]) do |array, s|
|
215
|
+
unless klass = Warden::Serializers[s]
|
216
|
+
raise "Invalid serializer #{s}" unless @config.silence_missing_serializers?
|
223
217
|
next
|
224
218
|
end
|
225
|
-
array <<
|
219
|
+
array << klass.new(@env)
|
226
220
|
end
|
227
|
-
array
|
228
221
|
end
|
229
222
|
end
|
230
223
|
|
@@ -233,34 +226,16 @@ module Warden
|
|
233
226
|
# :api: private
|
234
227
|
def _perform_authentication(*args)
|
235
228
|
scope = scope_from_args(args)
|
236
|
-
opts
|
237
|
-
|
238
|
-
# Look for an existing user in the session for this scope
|
239
|
-
# If there was no user in the session. See if we can get one from the request
|
240
|
-
return scope, opts if the_user = user(scope)
|
229
|
+
opts = opts_from_args(args)
|
241
230
|
|
242
|
-
|
243
|
-
|
231
|
+
# Look for an existing user in the session for this scope.
|
232
|
+
# If there was no user in the session. See if we can get one from the request
|
233
|
+
return scope, opts if user(scope)
|
244
234
|
|
245
|
-
|
246
|
-
unless Warden::Strategies[s]
|
247
|
-
raise "Invalid strategy #{s}" unless args.empty? && silence_missing_strategies?
|
248
|
-
next
|
249
|
-
end
|
250
|
-
|
251
|
-
strategy = Warden::Strategies[s].new(@env, scope)
|
252
|
-
self.winning_strategy = strategy
|
253
|
-
next unless strategy.valid?
|
254
|
-
|
255
|
-
strategy._run!
|
256
|
-
break if strategy.halted?
|
257
|
-
end
|
235
|
+
_run_strategies_for(scope, args)
|
258
236
|
|
259
237
|
if winning_strategy && winning_strategy.user
|
260
|
-
set_user(winning_strategy.user, opts)
|
261
|
-
|
262
|
-
# Run the after_authentication hooks
|
263
|
-
Warden::Manager._after_authentication.each{|hook| hook.call(winning_strategy.user, self, opts)}
|
238
|
+
set_user(winning_strategy.user, opts.merge!(:event => :authentication))
|
264
239
|
end
|
265
240
|
|
266
241
|
[scope, opts]
|
@@ -268,7 +243,7 @@ module Warden
|
|
268
243
|
|
269
244
|
# :api: private
|
270
245
|
def scope_from_args(args) # :nodoc:
|
271
|
-
Hash === args.last ? args.last.fetch(:scope,
|
246
|
+
Hash === args.last ? args.last.fetch(:scope, @config.default_scope) : @config.default_scope
|
272
247
|
end
|
273
248
|
|
274
249
|
# :api: private
|
@@ -277,25 +252,35 @@ module Warden
|
|
277
252
|
end
|
278
253
|
|
279
254
|
# :api: private
|
280
|
-
def
|
281
|
-
@config
|
282
|
-
|
255
|
+
def _run_strategies_for(scope, args) #:nodoc:
|
256
|
+
strategies = args.empty? ? @config.default_strategies : args
|
257
|
+
raise "No Strategies Found" if strategies.empty?
|
283
258
|
|
284
|
-
|
285
|
-
|
286
|
-
|
259
|
+
strategies.each do |s|
|
260
|
+
unless klass = Warden::Strategies[s]
|
261
|
+
raise "Invalid strategy #{s}" unless args.empty? && @config.silence_missing_strategies?
|
262
|
+
next
|
263
|
+
end
|
264
|
+
|
265
|
+
strategy = klass.new(@env, scope)
|
266
|
+
self.winning_strategy = strategy
|
267
|
+
next unless strategy.valid?
|
268
|
+
|
269
|
+
strategy._run!
|
270
|
+
break if strategy.halted?
|
271
|
+
end
|
287
272
|
end
|
288
273
|
|
289
274
|
# Does the work of storing the user in stores.
|
290
275
|
# :api: private
|
291
|
-
def _store_user(user, scope
|
276
|
+
def _store_user(user, scope) # :nodoc:
|
292
277
|
return unless user
|
293
278
|
serializers.each { |s| s.store(user, scope) }
|
294
279
|
end
|
295
280
|
|
296
281
|
# Does the work of fetching the user from the first store.
|
297
282
|
# :api: private
|
298
|
-
def _fetch_user(scope
|
283
|
+
def _fetch_user(scope) # :nodoc:
|
299
284
|
serializers.each do |s|
|
300
285
|
user = s.fetch(scope)
|
301
286
|
return user if user
|
@@ -305,12 +290,12 @@ module Warden
|
|
305
290
|
|
306
291
|
# Does the work of deleteing the user in all stores.
|
307
292
|
# :api: private
|
308
|
-
def _delete_user(user, scope
|
293
|
+
def _delete_user(user, scope) # :nodoc:
|
309
294
|
serializers.each { |s| s.delete(scope, user) }
|
310
295
|
end
|
311
296
|
|
312
297
|
# :api: private
|
313
|
-
def
|
298
|
+
def _find_serializer(name) # :nodoc:
|
314
299
|
serializers.find { |s| s.class == ::Warden::Serializers[name] }
|
315
300
|
end
|
316
301
|
end # Proxy
|
data/lib/warden/version.rb
CHANGED
@@ -12,16 +12,14 @@ module Warden::Spec
|
|
12
12
|
|
13
13
|
def setup_rack(app = nil, opts = {}, &block)
|
14
14
|
app ||= block if block_given?
|
15
|
+
|
16
|
+
opts[:failure_app] ||= failure_app
|
15
17
|
opts[:default_strategies] ||= [:password]
|
16
18
|
opts[:default_serializers] ||= [:session]
|
17
|
-
|
19
|
+
|
18
20
|
Rack::Builder.new do
|
19
21
|
use Warden::Spec::Helpers::Session
|
20
|
-
use Warden::Manager, opts
|
21
|
-
manager.failure_app = Warden::Spec::Helpers::FAILURE_APP
|
22
|
-
manager.default_strategies *opts[:default_strategies]
|
23
|
-
manager.default_serializers *opts[:default_serializers]
|
24
|
-
end
|
22
|
+
use Warden::Manager, opts
|
25
23
|
run app
|
26
24
|
end
|
27
25
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe Warden::Config do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@config = Warden::Config.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should behave like a hash" do
|
10
|
+
@config[:foo] = :bar
|
11
|
+
@config[:foo].should == :bar
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should provide hash accessors" do
|
15
|
+
@config.failure_app = :foo
|
16
|
+
@config[:failure_app].should == :foo
|
17
|
+
@config[:failure_app] = :bar
|
18
|
+
@config.failure_app.should == :bar
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should allow to read and set default strategies" do
|
22
|
+
@config.default_strategies :foo, :bar
|
23
|
+
@config.default_strategies.should == [:foo, :bar]
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should allow to read and set default serializers" do
|
27
|
+
@config.default_serializers :foo, :bar
|
28
|
+
@config.default_serializers.should == [:foo, :bar]
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should ship with default serializers and strategies" do
|
32
|
+
@config.default_strategies.should == []
|
33
|
+
@config.default_serializers.should == [:session]
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should allow to silence missing strategies" do
|
37
|
+
@config.silence_missing_strategies!
|
38
|
+
@config.silence_missing_strategies?.should be_true
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should allow to silence missing serializers" do
|
42
|
+
@config.silence_missing_serializers!
|
43
|
+
@config.silence_missing_serializers?.should be_true
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should set the default_scope" do
|
47
|
+
@config.default_scope.should == :default
|
48
|
+
@config.default_scope = :foo
|
49
|
+
@config.default_scope.should == :foo
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should merge given options on initialization" do
|
53
|
+
Warden::Config.new(:foo => :bar)[:foo].should == :bar
|
54
|
+
end
|
55
|
+
end
|
data/spec/warden/hooks_spec.rb
CHANGED
@@ -43,38 +43,82 @@ describe "standard authentication hooks" do
|
|
43
43
|
env['warden.spec.hook.foo'].should == "run foo"
|
44
44
|
env['warden.spec.hook.bar'].should == "run bar"
|
45
45
|
end
|
46
|
-
end
|
47
46
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
47
|
+
it "should not run the event specified with except" do
|
48
|
+
RAM.after_set_user(:except => :set_user){|u,a,o| fail}
|
49
|
+
app = lambda do |e|
|
50
|
+
e['warden'].set_user("foo")
|
51
|
+
valid_response
|
52
|
+
end
|
53
|
+
env = env_with_params
|
54
|
+
setup_rack(app).call(env)
|
52
55
|
end
|
53
56
|
|
54
|
-
|
55
|
-
RAM.
|
57
|
+
it "should only run the event specified with only" do
|
58
|
+
RAM.after_set_user(:only => :set_user){|u,a,o| fail}
|
59
|
+
app = lambda do |e|
|
60
|
+
e['warden'].authenticate(:pass)
|
61
|
+
valid_response
|
62
|
+
end
|
63
|
+
env = env_with_params
|
64
|
+
setup_rack(app).call(env)
|
56
65
|
end
|
57
66
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
67
|
+
context "after_authentication" do
|
68
|
+
it "should be a wrapper to after_set_user behavior" do
|
69
|
+
RAM.after_authentication{|u,a,o| a.env['warden.spec.hook.baz'] = "run baz"}
|
70
|
+
RAM.after_authentication{|u,a,o| a.env['warden.spec.hook.paz'] = "run paz"}
|
71
|
+
RAM.after_authentication{|u,a,o| o[:event].should == :authentication }
|
72
|
+
app = lambda{|e| e['warden'].authenticate(:pass); valid_response}
|
73
|
+
env = env_with_params
|
74
|
+
setup_rack(app).call(env)
|
75
|
+
env['warden.spec.hook.baz'].should == 'run baz'
|
76
|
+
env['warden.spec.hook.paz'].should == 'run paz'
|
77
|
+
end
|
62
78
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
79
|
+
it "should not be invoked on default after_set_user scenario" do
|
80
|
+
RAM.after_authentication{|u,a,o| fail}
|
81
|
+
app = lambda do |e|
|
82
|
+
e['warden'].set_user("foo")
|
83
|
+
valid_response
|
84
|
+
end
|
85
|
+
env = env_with_params
|
86
|
+
setup_rack(app).call(env)
|
87
|
+
end
|
67
88
|
end
|
68
89
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
90
|
+
context "after_fetch" do
|
91
|
+
it "should be a wrapper to after_set_user behavior" do
|
92
|
+
RAM.after_fetch{|u,a,o| a.env['warden.spec.hook.baz'] = "run baz"}
|
93
|
+
RAM.after_fetch{|u,a,o| a.env['warden.spec.hook.paz'] = "run paz"}
|
94
|
+
RAM.after_fetch{|u,a,o| o[:event].should == :fetch }
|
95
|
+
env = env_with_params
|
96
|
+
setup_rack(lambda { valid_response }).call(env)
|
97
|
+
env['rack.session']['warden.user.default.key'] = "Foo"
|
98
|
+
env['warden'].user.should == "Foo"
|
99
|
+
env['warden.spec.hook.baz'].should == 'run baz'
|
100
|
+
env['warden.spec.hook.paz'].should == 'run paz'
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should not be invoked on default after_set_user scenario" do
|
104
|
+
RAM.after_fetch{|u,a,o| fail}
|
105
|
+
app = lambda do |e|
|
106
|
+
e['warden'].set_user("foo")
|
107
|
+
valid_response
|
108
|
+
end
|
109
|
+
env = env_with_params
|
110
|
+
setup_rack(app).call(env)
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should not be invoked if fetched user is nil" do
|
114
|
+
RAM.after_fetch{|u,a,o| fail}
|
115
|
+
env = env_with_params
|
116
|
+
setup_rack(lambda { valid_response }).call(env)
|
117
|
+
env['rack.session']['warden.user.default.key'] = nil
|
118
|
+
env['warden'].user.should be_nil
|
119
|
+
end
|
77
120
|
end
|
121
|
+
|
78
122
|
end
|
79
123
|
|
80
124
|
describe "before_failure" do
|
@@ -125,14 +169,14 @@ describe "standard authentication hooks" do
|
|
125
169
|
end
|
126
170
|
|
127
171
|
it "should allow me to add multiple after_authetnication hooks" do
|
128
|
-
RAM.before_logout{|u,a,
|
129
|
-
RAM.before_logout{|u,a,
|
172
|
+
RAM.before_logout{|u,a,o| "bar"}
|
173
|
+
RAM.before_logout{|u,a,o| "baz"}
|
130
174
|
RAM._before_logout.should have(2).items
|
131
175
|
end
|
132
176
|
|
133
177
|
it "should run each before_logout hook before logout is run" do
|
134
|
-
RAM.before_logout{|u,a,
|
135
|
-
RAM.before_logout{|u,a,
|
178
|
+
RAM.before_logout{|u,a,o| a.env['warden.spec.hook.lorem'] = "run lorem"}
|
179
|
+
RAM.before_logout{|u,a,o| a.env['warden.spec.hook.ipsum'] = "run ipsum"}
|
136
180
|
app = lambda{|e| e['warden'].authenticate(:pass); valid_response}
|
137
181
|
env = env_with_params
|
138
182
|
setup_rack(app).call(env)
|
@@ -141,21 +185,27 @@ describe "standard authentication hooks" do
|
|
141
185
|
env['warden.spec.hook.ipsum'].should == 'run ipsum'
|
142
186
|
end
|
143
187
|
|
144
|
-
it "should run before_logout hook
|
145
|
-
RAM.before_logout{|u,a,
|
146
|
-
RAM.before_logout{|u,a,
|
188
|
+
it "should run before_logout hook for a socufued scope" do
|
189
|
+
RAM.before_logout(:scope => :scope1){|u,a,o| a.env["warden.spec.hook.a"] << :scope1 }
|
190
|
+
RAM.before_logout(:scope => [:scope2]){|u,a,o| a.env["warden.spec.hook.b"] << :scope2 }
|
191
|
+
|
147
192
|
app = lambda do |e|
|
148
193
|
e['warden'].authenticate(:pass, :scope => :scope1)
|
149
194
|
e['warden'].authenticate(:pass, :scope => :scope2)
|
150
195
|
valid_response
|
151
196
|
end
|
152
197
|
env = env_with_params
|
198
|
+
env["warden.spec.hook.a"] ||= []
|
199
|
+
env["warden.spec.hook.b"] ||= []
|
153
200
|
setup_rack(app).call(env)
|
201
|
+
|
154
202
|
env['warden'].logout(:scope1)
|
155
|
-
env['warden.spec.hook.
|
156
|
-
env['warden.spec.hook.
|
203
|
+
env['warden.spec.hook.a'].should == [:scope1]
|
204
|
+
env['warden.spec.hook.b'].should == []
|
205
|
+
|
157
206
|
env['warden'].logout(:scope2)
|
158
|
-
env['warden.spec.hook.
|
207
|
+
env['warden.spec.hook.a'].should == [:scope1]
|
208
|
+
env['warden.spec.hook.b'].should == [:scope2]
|
159
209
|
end
|
160
210
|
end
|
161
211
|
|
data/spec/warden/manager_spec.rb
CHANGED
@@ -209,25 +209,28 @@ describe Warden::Manager do
|
|
209
209
|
end # integrated strategies
|
210
210
|
|
211
211
|
it "should allow me to set a different default scope for warden" do
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
212
|
+
Rack::Builder.new do
|
213
|
+
use Warden::Manager, :default_scope => :default do |manager|
|
214
|
+
manager.default_scope.should == :default
|
215
|
+
manager.default_scope = :other
|
216
|
+
manager.default_scope.should == :other
|
217
|
+
end
|
218
|
+
end
|
216
219
|
end
|
217
220
|
|
218
221
|
it "should allow me to access serializers through manager" do
|
219
222
|
Rack::Builder.new do
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
223
|
+
use Warden::Manager do |manager|
|
224
|
+
manager.serializers.should == Warden::Serializers
|
225
|
+
end
|
226
|
+
end
|
224
227
|
end
|
225
228
|
|
226
229
|
it "should allow me to access serializers through manager" do
|
227
230
|
Rack::Builder.new do
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
231
|
+
use Warden::Manager do |manager|
|
232
|
+
manager.strategies.should == Warden::Strategies
|
233
|
+
end
|
234
|
+
end
|
232
235
|
end
|
233
236
|
end
|
data/spec/warden/proxy_spec.rb
CHANGED
@@ -98,7 +98,7 @@ describe Warden::Proxy do
|
|
98
98
|
valid_response
|
99
99
|
end
|
100
100
|
lambda {
|
101
|
-
setup_rack(app, :silence_missing_strategies => true, :default_strategies => :unknown).call(env)
|
101
|
+
setup_rack(app, :silence_missing_strategies => true, :default_strategies => [:unknown]).call(env)
|
102
102
|
}.should_not raise_error
|
103
103
|
end
|
104
104
|
|
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 = "0.8.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-01-
|
12
|
+
s.date = %q{2010-01-07}
|
13
13
|
s.email = %q{has.sox@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"LICENSE",
|
@@ -23,10 +23,12 @@ Gem::Specification.new do |s|
|
|
23
23
|
"Rakefile",
|
24
24
|
"TODO.textile",
|
25
25
|
"lib/warden.rb",
|
26
|
+
"lib/warden/config.rb",
|
26
27
|
"lib/warden/declarable.rb",
|
27
28
|
"lib/warden/errors.rb",
|
28
29
|
"lib/warden/hooks.rb",
|
29
30
|
"lib/warden/manager.rb",
|
31
|
+
"lib/warden/manager_deprecation.rb",
|
30
32
|
"lib/warden/mixins/common.rb",
|
31
33
|
"lib/warden/proxy.rb",
|
32
34
|
"lib/warden/serializers.rb",
|
@@ -42,10 +44,10 @@ Gem::Specification.new do |s|
|
|
42
44
|
"spec/helpers/strategies/failz.rb",
|
43
45
|
"spec/helpers/strategies/invalid.rb",
|
44
46
|
"spec/helpers/strategies/pass.rb",
|
45
|
-
"spec/helpers/strategies/pass_without_user.rb",
|
46
47
|
"spec/helpers/strategies/password.rb",
|
47
48
|
"spec/spec_helper.rb",
|
48
49
|
"spec/warden/authenticated_data_store_spec.rb",
|
50
|
+
"spec/warden/config_spec.rb",
|
49
51
|
"spec/warden/errors_spec.rb",
|
50
52
|
"spec/warden/hooks_spec.rb",
|
51
53
|
"spec/warden/manager_spec.rb",
|
@@ -69,10 +71,10 @@ Gem::Specification.new do |s|
|
|
69
71
|
"spec/helpers/strategies/failz.rb",
|
70
72
|
"spec/helpers/strategies/invalid.rb",
|
71
73
|
"spec/helpers/strategies/pass.rb",
|
72
|
-
"spec/helpers/strategies/pass_without_user.rb",
|
73
74
|
"spec/helpers/strategies/password.rb",
|
74
75
|
"spec/spec_helper.rb",
|
75
76
|
"spec/warden/authenticated_data_store_spec.rb",
|
77
|
+
"spec/warden/config_spec.rb",
|
76
78
|
"spec/warden/errors_spec.rb",
|
77
79
|
"spec/warden/hooks_spec.rb",
|
78
80
|
"spec/warden/manager_spec.rb",
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: warden
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Neighman
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-07 00:00:00 +11:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -39,10 +39,12 @@ files:
|
|
39
39
|
- Rakefile
|
40
40
|
- TODO.textile
|
41
41
|
- lib/warden.rb
|
42
|
+
- lib/warden/config.rb
|
42
43
|
- lib/warden/declarable.rb
|
43
44
|
- lib/warden/errors.rb
|
44
45
|
- lib/warden/hooks.rb
|
45
46
|
- lib/warden/manager.rb
|
47
|
+
- lib/warden/manager_deprecation.rb
|
46
48
|
- lib/warden/mixins/common.rb
|
47
49
|
- lib/warden/proxy.rb
|
48
50
|
- lib/warden/serializers.rb
|
@@ -58,10 +60,10 @@ files:
|
|
58
60
|
- spec/helpers/strategies/failz.rb
|
59
61
|
- spec/helpers/strategies/invalid.rb
|
60
62
|
- spec/helpers/strategies/pass.rb
|
61
|
-
- spec/helpers/strategies/pass_without_user.rb
|
62
63
|
- spec/helpers/strategies/password.rb
|
63
64
|
- spec/spec_helper.rb
|
64
65
|
- spec/warden/authenticated_data_store_spec.rb
|
66
|
+
- spec/warden/config_spec.rb
|
65
67
|
- spec/warden/errors_spec.rb
|
66
68
|
- spec/warden/hooks_spec.rb
|
67
69
|
- spec/warden/manager_spec.rb
|
@@ -106,10 +108,10 @@ test_files:
|
|
106
108
|
- spec/helpers/strategies/failz.rb
|
107
109
|
- spec/helpers/strategies/invalid.rb
|
108
110
|
- spec/helpers/strategies/pass.rb
|
109
|
-
- spec/helpers/strategies/pass_without_user.rb
|
110
111
|
- spec/helpers/strategies/password.rb
|
111
112
|
- spec/spec_helper.rb
|
112
113
|
- spec/warden/authenticated_data_store_spec.rb
|
114
|
+
- spec/warden/config_spec.rb
|
113
115
|
- spec/warden/errors_spec.rb
|
114
116
|
- spec/warden/hooks_spec.rb
|
115
117
|
- spec/warden/manager_spec.rb
|