warden 0.9.7 → 0.10.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 +6 -0
- data/Rakefile +1 -1
- data/lib/warden/config.rb +28 -5
- data/lib/warden/manager.rb +23 -22
- data/lib/warden/proxy.rb +26 -7
- data/lib/warden/proxy_deprecation.rb +11 -0
- data/lib/warden/strategies/base.rb +0 -1
- data/lib/warden/version.rb +1 -1
- data/spec/warden/config_spec.rb +7 -0
- data/spec/warden/manager_spec.rb +0 -11
- data/spec/warden/proxy_spec.rb +80 -2
- data/spec/warden/strategies/base_spec.rb +2 -2
- data/warden.gemspec +3 -2
- metadata +5 -4
data/History.rdoc
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== Version 0.10.0 / 2010-03-22
|
2
|
+
* Allow default strategies to be set on the proxy
|
3
|
+
* Provide each scope with it's own default strategies
|
4
|
+
* Provide each scope with default set_user opts
|
5
|
+
* depricate the Proxy#default_strategies= method
|
6
|
+
|
1
7
|
== Version 0.9.5 / 2010-02-28
|
2
8
|
|
3
9
|
* Add Warden.test_mode!
|
data/Rakefile
CHANGED
data/lib/warden/config.rb
CHANGED
@@ -36,8 +36,9 @@ module Warden
|
|
36
36
|
|
37
37
|
def initialize(other={})
|
38
38
|
merge!(other)
|
39
|
-
self[:default_scope]
|
40
|
-
self[:
|
39
|
+
self[:default_scope] ||= :default
|
40
|
+
self[:default_scope_options] ||= {}
|
41
|
+
self[:default_strategies] ||= {}
|
41
42
|
end
|
42
43
|
|
43
44
|
# Do not raise an error if a missing strategy is given by default.
|
@@ -53,13 +54,35 @@ module Warden
|
|
53
54
|
# Set the default strategies to use.
|
54
55
|
# :api: public
|
55
56
|
def default_strategies(*strategies)
|
57
|
+
opts = Hash === strategies.last ? strategies.pop : {}
|
58
|
+
scope = opts[:scope] || default_scope
|
56
59
|
if strategies.empty?
|
57
|
-
self[:default_strategies]
|
60
|
+
self[:default_strategies][scope]
|
58
61
|
else
|
59
|
-
self[:default_strategies] = strategies.flatten
|
62
|
+
self[:default_strategies][scope] = strategies.flatten
|
60
63
|
end
|
61
64
|
end
|
62
65
|
|
66
|
+
# Set the default options that are passed to set_user. This is configured
|
67
|
+
# during the setup phase and is used throughout.
|
68
|
+
def default_scope_options(scope = default_scope, opts = nil)
|
69
|
+
if opts.nil?
|
70
|
+
# We're reading the default options for this scope
|
71
|
+
self[:default_scope_options][scope] ||= {}
|
72
|
+
else
|
73
|
+
# We're setting the default options forthe scope
|
74
|
+
self[:default_scope_options][scope] = opts
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# A short hand way to set up a particular scope
|
79
|
+
def scope_defaults(scope, opts = {})
|
80
|
+
strategies = opts.delete(:strategies) || []
|
81
|
+
default_strategies(strategies, :scope => scope)
|
82
|
+
default_scope_options(scope, opts)
|
83
|
+
true
|
84
|
+
end
|
85
|
+
|
63
86
|
# Quick accessor to strategies from manager
|
64
87
|
# :api: public
|
65
88
|
def strategies
|
@@ -78,4 +101,4 @@ module Warden
|
|
78
101
|
Warden::Manager.serialize_from_session(*args, &block)
|
79
102
|
end
|
80
103
|
end
|
81
|
-
end
|
104
|
+
end
|
data/lib/warden/manager.rb
CHANGED
@@ -18,7 +18,10 @@ module Warden
|
|
18
18
|
# configure the Warden::Manager.
|
19
19
|
# :api: public
|
20
20
|
def initialize(app, options={})
|
21
|
+
default_strategies = options.delete(:default_strategies)
|
22
|
+
|
21
23
|
@app, @config = app, Warden::Config.new(options)
|
24
|
+
@config.default_strategies *default_strategies if default_strategies
|
22
25
|
yield @config if block_given?
|
23
26
|
self
|
24
27
|
end
|
@@ -37,13 +40,14 @@ module Warden
|
|
37
40
|
result ||= {}
|
38
41
|
case result
|
39
42
|
when Array
|
40
|
-
if result.first == 401
|
41
|
-
process_unauthenticated(env)
|
43
|
+
if result.first == 401
|
44
|
+
process_unauthenticated({:original_response => result, :action => :unauthenticated}, env)
|
42
45
|
else
|
43
46
|
result
|
44
47
|
end
|
45
48
|
when Hash
|
46
|
-
|
49
|
+
result[:action] ||= :unauthenticated
|
50
|
+
process_unauthenticated(result, env)
|
47
51
|
end
|
48
52
|
end
|
49
53
|
|
@@ -83,33 +87,30 @@ module Warden
|
|
83
87
|
# When a request is unauthentiated, here's where the processing occurs.
|
84
88
|
# It looks at the result of the proxy to see if it's been executed and what action to take.
|
85
89
|
# :api: private
|
86
|
-
def process_unauthenticated(
|
87
|
-
|
88
|
-
|
89
|
-
proxy = env['warden']
|
90
|
-
result = options[:result] || proxy.result
|
90
|
+
def process_unauthenticated(result, env)
|
91
|
+
action = result[:result] || env['warden'].result
|
91
92
|
|
92
|
-
case
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
call_failure_app(env, options)
|
93
|
+
case action
|
94
|
+
when :redirect
|
95
|
+
[env['warden'].status, env['warden'].headers, [env['warden'].message || "You are being redirected to #{env['warden'].headers['Location']}"]]
|
96
|
+
when :custom
|
97
|
+
env['warden'].custom_response
|
98
|
+
else
|
99
|
+
call_failure_app(env, result)
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
103
|
# Calls the failure app.
|
104
104
|
# The before_failure hooks are run on each failure
|
105
105
|
# :api: private
|
106
|
-
def call_failure_app(env,
|
107
|
-
if
|
108
|
-
|
109
|
-
|
110
|
-
env["
|
106
|
+
def call_failure_app(env, opts = {})
|
107
|
+
if env['warden'].custom_failure?
|
108
|
+
opts[:original_response]
|
109
|
+
elsif config.failure_app
|
110
|
+
env["PATH_INFO"] = "/#{opts[:action]}"
|
111
|
+
env["warden.options"] = opts
|
111
112
|
|
112
|
-
_run_callbacks(:before_failure, env,
|
113
|
+
_run_callbacks(:before_failure, env, opts)
|
113
114
|
config.failure_app.call(env).to_a
|
114
115
|
else
|
115
116
|
raise "No Failure App provided"
|
data/lib/warden/proxy.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
require 'warden/proxy_deprecation'
|
3
|
+
|
2
4
|
module Warden
|
3
5
|
class UserNotSet < RuntimeError; end
|
4
6
|
|
5
7
|
class Proxy
|
8
|
+
include ProxyDeprecation
|
6
9
|
# An accessor to the winning strategy
|
7
10
|
# :api: private
|
8
11
|
attr_accessor :winning_strategy
|
@@ -66,14 +69,23 @@ module Warden
|
|
66
69
|
# By changing this value, you can change the default strategies for a downstream branch of you rack graph.
|
67
70
|
#
|
68
71
|
# @api public
|
69
|
-
def default_strategies
|
70
|
-
|
72
|
+
def default_strategies(*strategies)
|
73
|
+
scope, opts = _retrieve_scope_and_opts(strategies)
|
74
|
+
if strategies.empty?
|
75
|
+
_default_strategies[scope] ||= begin
|
76
|
+
(
|
77
|
+
@config.default_strategies(:scope => scope) ||
|
78
|
+
@config.default_strategies(:scope => @config.default_scope)
|
79
|
+
).dup
|
80
|
+
end
|
81
|
+
else
|
82
|
+
_default_strategies[scope] = strategies.flatten
|
83
|
+
end
|
84
|
+
_default_strategies[scope]
|
71
85
|
end
|
72
86
|
|
73
|
-
|
74
|
-
|
75
|
-
def default_strategies=(*strategies)
|
76
|
-
@default_strategies = strategies.flatten
|
87
|
+
def _default_strategies
|
88
|
+
@default_strategies ||= {}
|
77
89
|
end
|
78
90
|
|
79
91
|
# Run the authentiation strategies for the given strategies.
|
@@ -154,6 +166,12 @@ module Warden
|
|
154
166
|
return unless user
|
155
167
|
scope = (opts[:scope] ||= @config.default_scope)
|
156
168
|
|
169
|
+
# Get the default options from the master configuration for the given scope
|
170
|
+
opts = opts.dup
|
171
|
+
if @config.default_scope_options(scope)
|
172
|
+
opts = @config.default_scope_options(scope).merge(opts)
|
173
|
+
end
|
174
|
+
|
157
175
|
@users[scope] = user
|
158
176
|
session_serializer.store(user, scope) unless opts[:store] == false
|
159
177
|
|
@@ -281,7 +299,8 @@ module Warden
|
|
281
299
|
# Run the strategies for a given scope
|
282
300
|
def _run_strategies_for(scope, args) #:nodoc:
|
283
301
|
self.winning_strategy = nil
|
284
|
-
strategies = args.empty? ? default_strategies : args
|
302
|
+
strategies = args.empty? ? default_strategies(:scope => scope) : args
|
303
|
+
puts strategies.inspect
|
285
304
|
|
286
305
|
strategies.each do |name|
|
287
306
|
strategy = _fetch_strategy(name, scope)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Warden
|
3
|
+
# Sets up a place for deprecation of methods from the main proxy
|
4
|
+
module ProxyDeprecation
|
5
|
+
def default_strategies=(*strategies)
|
6
|
+
warn "[DEPRECATION] warden.default_strateiges= is deprecated. Instead use warden.set_default_strategies(*strategies) with an optional :scope => :scope)"
|
7
|
+
strategies.push(:scope => @config.default_scope)
|
8
|
+
set_default_strategies(*strategies)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/lib/warden/version.rb
CHANGED
data/spec/warden/config_spec.rb
CHANGED
@@ -38,4 +38,11 @@ describe Warden::Config do
|
|
38
38
|
it "should merge given options on initialization" do
|
39
39
|
Warden::Config.new(:foo => :bar)[:foo].should == :bar
|
40
40
|
end
|
41
|
+
|
42
|
+
it "should setup defaults with the scope_defaults method" do
|
43
|
+
c = Warden::Config.new
|
44
|
+
c.scope_defaults :foo, :strategies => [:foo, :bar], :store => false
|
45
|
+
c.default_strategies(:scope => :foo).should == [:foo, :bar]
|
46
|
+
c.default_scope_options(:foo).should == {:store => false}
|
47
|
+
end
|
41
48
|
end
|
data/spec/warden/manager_spec.rb
CHANGED
@@ -69,17 +69,6 @@ describe Warden::Manager do
|
|
69
69
|
result.first.should == 401
|
70
70
|
result.last.should == ["You Fail!"]
|
71
71
|
end
|
72
|
-
|
73
|
-
it "should set the attempted url in warden.options hash" do
|
74
|
-
env = env_with_params("/access/path", {})
|
75
|
-
app = lambda do |env|
|
76
|
-
env['warden'].authenticate(:pass)
|
77
|
-
throw(:warden)
|
78
|
-
end
|
79
|
-
result = setup_rack(app, :failure_app => @fail_app).call(env)
|
80
|
-
result.first.should == 401
|
81
|
-
env["warden.options"][:attempted_path].should == "/access/path"
|
82
|
-
end
|
83
72
|
end # failure
|
84
73
|
|
85
74
|
end
|
data/spec/warden/proxy_spec.rb
CHANGED
@@ -672,8 +672,8 @@ describe "dynamic default_strategies" do
|
|
672
672
|
end
|
673
673
|
|
674
674
|
before(:each) do
|
675
|
-
$captures = []
|
676
675
|
@app = lambda{|e| e['warden'].authenticate! }
|
676
|
+
$captures = []
|
677
677
|
end
|
678
678
|
|
679
679
|
def wrap_app(app, &blk)
|
@@ -688,7 +688,7 @@ describe "dynamic default_strategies" do
|
|
688
688
|
app = wrap_app(@app) do |e|
|
689
689
|
e['warden'].default_strategies.should == [:password]
|
690
690
|
e['warden'].config.default_strategies.should == [:password]
|
691
|
-
e['warden'].default_strategies
|
691
|
+
e['warden'].default_strategies :one
|
692
692
|
e['warden'].authenticate!
|
693
693
|
Rack::Response.new("OK").finish
|
694
694
|
end
|
@@ -708,6 +708,45 @@ describe "dynamic default_strategies" do
|
|
708
708
|
|
709
709
|
$captures.should == [:one]
|
710
710
|
end
|
711
|
+
|
712
|
+
it "should allow me to set the default strategies on a per scope basis" do
|
713
|
+
app = wrap_app(@app) do |e|
|
714
|
+
w = e['warden']
|
715
|
+
w.default_strategies(:two, :one, :scope => :foo)
|
716
|
+
w.default_strategies(:two, :scope => :default)
|
717
|
+
w.default_strategies(:scope => :foo).should == [:two, :one]
|
718
|
+
w.authenticate(:scope => :foo)
|
719
|
+
$captures.should == [:two, :one]
|
720
|
+
$captures.clear
|
721
|
+
w.authenticate
|
722
|
+
$captures.should == [:two]
|
723
|
+
end
|
724
|
+
setup_rack(app).call(env_with_params)
|
725
|
+
$captures.should == [:two]
|
726
|
+
end
|
727
|
+
|
728
|
+
it "should allow me to setup default strategies for each scope on the manager" do
|
729
|
+
builder = Rack::Builder.new do
|
730
|
+
use Warden::Spec::Helpers::Session
|
731
|
+
use Warden::Manager do |config|
|
732
|
+
config.default_strategies :one
|
733
|
+
config.default_strategies :two, :one, :scope => :foo
|
734
|
+
config.failure_app = Warden::Spec::Helpers::FAILURE_APP
|
735
|
+
end
|
736
|
+
run(lambda do |e|
|
737
|
+
w = e['warden']
|
738
|
+
w.authenticate
|
739
|
+
$captures.should == [:one]
|
740
|
+
$captures.clear
|
741
|
+
w.authenticate(:scope => :foo)
|
742
|
+
$captures.should == [:two, :one]
|
743
|
+
$captures << :complete
|
744
|
+
end)
|
745
|
+
end
|
746
|
+
builder.to_app.call(env_with_params)
|
747
|
+
$captures.should include(:complete)
|
748
|
+
end
|
749
|
+
|
711
750
|
it "should not change the master configurations strategies when I change them" do
|
712
751
|
app = wrap_app(@app) do |e|
|
713
752
|
e['warden'].default_strategies << :one
|
@@ -720,4 +759,43 @@ describe "dynamic default_strategies" do
|
|
720
759
|
|
721
760
|
$captures.should == [:one]
|
722
761
|
end
|
762
|
+
|
763
|
+
describe "default scope options" do
|
764
|
+
it "should allow me to set store, false on a given scope" do
|
765
|
+
$captures = []
|
766
|
+
builder = Rack::Builder.new do
|
767
|
+
use Warden::Manager do |config|
|
768
|
+
config.default_strategies :one
|
769
|
+
config.default_strategies :two, :one, :scope => :foo
|
770
|
+
config.default_strategies :two, :one, :scope => :bar
|
771
|
+
|
772
|
+
config.default_scope_options :bar, :store => false
|
773
|
+
config.default_scope_options :baz, :store => false
|
774
|
+
config.failure_app = Warden::Spec::Helpers::FAILURE_APP
|
775
|
+
end
|
776
|
+
run(lambda do |e|
|
777
|
+
w = e['warden']
|
778
|
+
w.authenticate
|
779
|
+
w.authenticate(:scope => :foo)
|
780
|
+
w.authenticate(:one, :scope => :bar)
|
781
|
+
w.authenticate(:one, :scope => :baz, :store => true)
|
782
|
+
w.user.should == "User"
|
783
|
+
w.user(:foo).should == "User"
|
784
|
+
w.user(:bar).should == "User"
|
785
|
+
w.user(:baz).should == "User"
|
786
|
+
$captures << :complete
|
787
|
+
Rack::Response.new("OK").finish
|
788
|
+
end)
|
789
|
+
end
|
790
|
+
env = env_with_params
|
791
|
+
session = env["rack.session"] = {}
|
792
|
+
builder.to_app.call(env)
|
793
|
+
$captures.should include(:complete)
|
794
|
+
session['warden.user.default.key'].should == "User"
|
795
|
+
session['warden.user.foo.key'].should == "User"
|
796
|
+
session.key?('warden.user.bar.key').should be_false
|
797
|
+
session['warden.user.bar.key'].should be_nil
|
798
|
+
session['warden.user.baz.key'].should == "User"
|
799
|
+
end
|
800
|
+
end
|
723
801
|
end
|
@@ -203,9 +203,9 @@ describe Warden::Strategies::Base do
|
|
203
203
|
@str.user.should be_nil
|
204
204
|
end
|
205
205
|
|
206
|
-
it "should halt the strategies when failing" do
|
206
|
+
it "should not halt the strategies when failing" do
|
207
207
|
@str._run!
|
208
|
-
@str.
|
208
|
+
@str.should_not be_halted
|
209
209
|
end
|
210
210
|
|
211
211
|
it "should allow you to set a message when failing" do
|
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.10.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-03-
|
12
|
+
s.date = %q{2010-03-22}
|
13
13
|
s.email = %q{has.sox@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"LICENSE",
|
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
|
|
30
30
|
"lib/warden/manager_deprecation.rb",
|
31
31
|
"lib/warden/mixins/common.rb",
|
32
32
|
"lib/warden/proxy.rb",
|
33
|
+
"lib/warden/proxy_deprecation.rb",
|
33
34
|
"lib/warden/session_serializer.rb",
|
34
35
|
"lib/warden/strategies.rb",
|
35
36
|
"lib/warden/strategies/base.rb",
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 10
|
8
|
+
- 0
|
9
|
+
version: 0.10.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Daniel Neighman
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-22 00:00:00 +11:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- lib/warden/manager_deprecation.rb
|
70
70
|
- lib/warden/mixins/common.rb
|
71
71
|
- lib/warden/proxy.rb
|
72
|
+
- lib/warden/proxy_deprecation.rb
|
72
73
|
- lib/warden/session_serializer.rb
|
73
74
|
- lib/warden/strategies.rb
|
74
75
|
- lib/warden/strategies/base.rb
|