warden 0.9.7 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|