warden 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.textile CHANGED
@@ -1,2 +1,9 @@
1
- Please see the "Warden Wiki":http://wiki.github.com/hassox/warden for overview documentation.
1
+ Please see the "Warden Wiki":http://wiki.github.com/hassox/warden for overview documentation.
2
+
3
+ h2. Contributors
4
+
5
+ I'm going to try and keep a list of all the contributors to this project. If I've missed your name please just let me know and I'll update it.
6
+
7
+ * Daniel Neighman (hassox)
8
+ * Mick Staugaard (staugaard)
2
9
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.4.0
@@ -14,14 +14,14 @@ module Warden
14
14
 
15
15
  # Accessor for the rack env
16
16
  # :api: public
17
- attr_reader :env
17
+ attr_reader :env, :scope
18
18
  include ::Warden::Mixins::Common
19
19
 
20
20
  # :api: private
21
- def initialize(env, config = {}) # :nodoc:
22
- @config = config
21
+ def initialize(env, scope=nil, config={}) # :nodoc:
22
+ @scope, @config = scope, config
23
23
  @env, @_status, @headers = env, nil, {}
24
- @halted = false
24
+ @halted = false
25
25
  end
26
26
 
27
27
  # The method that is called from above. This method calls the underlying authetniate! method
@@ -104,7 +104,8 @@ module Warden
104
104
  @_status = opts[:permanent] ? 301 : 302
105
105
  headers["Location"] = url
106
106
  headers["Location"] << "?" << Rack::Utils.build_query(params) unless params.empty?
107
-
107
+ headers["Content-Type"] = opts[:content_type] || 'text/plain'
108
+
108
109
  @message = opts[:message].nil? ? "You are being redirected to #{headers["Location"]}" : opts[:message]
109
110
 
110
111
  @result = :redirect
data/lib/warden/proxy.rb CHANGED
@@ -52,8 +52,7 @@ module Warden
52
52
  # env['auth'].authenticate(:password, :basic, :scope => :sudo)
53
53
  # :api: public
54
54
  def authenticate(*args)
55
- scope = scope_from_args(args)
56
- _perform_authentication(*args)
55
+ scope, opts = _perform_authentication(*args)
57
56
  user(scope)
58
57
  end
59
58
 
@@ -65,9 +64,7 @@ module Warden
65
64
  #
66
65
  # :api: public
67
66
  def authenticate!(*args)
68
- opts = opts_from_args(args)
69
- scope = scope_from_args(args)
70
- _perform_authentication(*args)
67
+ scope, opts = _perform_authentication(*args)
71
68
  throw(:warden, opts.merge(:action => :unauthenticated)) if !user(scope)
72
69
  user(scope)
73
70
  end
@@ -181,22 +178,20 @@ module Warden
181
178
  opts = opts_from_args(args)
182
179
 
183
180
  # Look for an existing user in the session for this scope
184
- if the_user = user(scope)
185
- return the_user
186
- end
181
+ return scope, opts if the_user = user(scope)
187
182
 
188
183
  # If there was no user in the session. See if we can get one from the request
189
184
  strategies = args.empty? ? @strategies : args
190
185
  raise "No Strategies Found" if strategies.empty? || !(strategies - Warden::Strategies._strategies.keys).empty?
186
+
191
187
  strategies.each do |s|
192
- strategy = Warden::Strategies[s].new(@env, @conf)
188
+ strategy = Warden::Strategies[s].new(@env, scope, @conf)
193
189
  self.winning_strategy = strategy
194
190
  next unless strategy.valid?
195
191
  strategy._run!
196
192
  break if strategy.halted?
197
193
  end
198
194
 
199
-
200
195
  if winning_strategy && winning_strategy.user
201
196
  set_user(winning_strategy.user, opts)
202
197
 
@@ -204,7 +199,7 @@ module Warden
204
199
  Warden::Manager._after_authentication.each{|hook| hook.call(winning_strategy.user, self, opts)}
205
200
  end
206
201
 
207
- winning_strategy
202
+ [scope, opts]
208
203
  end
209
204
 
210
205
  # :api: private
@@ -110,6 +110,30 @@ describe Warden::Manager do
110
110
  result = @app.call(env_with_params)
111
111
  result[0].should == 301
112
112
  end
113
+
114
+ it "should redirect with a content type" do
115
+ RAS.add(:foobar) do
116
+ def authenticate!
117
+ redirect!("/foo/bar", {:foo => "bar"}, :content_type => "text/xml")
118
+ end
119
+ end
120
+ result = @app.call(env_with_params)
121
+ result[0].should == 302
122
+ result[1]["Location"].should == "/foo/bar?foo=bar"
123
+ result[1]["Content-Type"].should == "text/xml"
124
+ end
125
+
126
+ it "should redirect with a default content type" do
127
+ RAS.add(:foobar) do
128
+ def authenticate!
129
+ redirect!("/foo/bar", {:foo => "bar"})
130
+ end
131
+ end
132
+ result = @app.call(env_with_params)
133
+ result[0].should == 302
134
+ result[1]["Location"].should == "/foo/bar?foo=bar"
135
+ result[1]["Content-Type"].should == "text/plain"
136
+ end
113
137
  end
114
138
 
115
139
  describe "failing" do
@@ -90,6 +90,17 @@ describe Warden::Proxy do
90
90
  setup_rack(app).call(env)
91
91
  end
92
92
 
93
+ it "should properly sent the scope to the strategy" do
94
+ env = env_with_params("/")
95
+ app = lambda do |env|
96
+ env['warden'].authenticate!(:pass, :scope => :failz)
97
+ env['warden'].should_not be_authenticated
98
+ env['warden.spec.strategies'].should == [:pass]
99
+ valid_response
100
+ end
101
+ setup_rack(app).call(env)
102
+ end
103
+
93
104
  it "should try multiple authentication strategies" do
94
105
  env = env_with_params("/")
95
106
  app = lambda do |env|
@@ -2,6 +2,6 @@ Warden::Strategies.add(:pass) do
2
2
  def authenticate!
3
3
  request.env['warden.spec.strategies'] ||= []
4
4
  request.env['warden.spec.strategies'] << :pass
5
- success!("Valid User")
5
+ success!("Valid User") unless scope == :failz
6
6
  end
7
7
  end
@@ -44,6 +44,15 @@ describe Warden::Strategies::Base do
44
44
  strategy.user.should == "foo"
45
45
  end
46
46
 
47
+ it "should set the scope" do
48
+ RAS.add(:foobar) do
49
+ def authenticate!
50
+ self.scope.should == :user
51
+ end
52
+ end
53
+ strategy = RAS[:foobar].new(env_with_params, :user)
54
+ end
55
+
47
56
  it "should allow you to set a message" do
48
57
  RAS.add(:foobar) do
49
58
  def authenticate!
@@ -256,4 +265,4 @@ describe Warden::Strategies::Base do
256
265
  end
257
266
  end
258
267
 
259
- end
268
+ end
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.3.2"
8
+ s.version = "0.4.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{2009-09-05}
12
+ s.date = %q{2009-10-12}
13
13
  s.email = %q{has.sox@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE",
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.3.2
4
+ version: 0.4.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: 2009-09-05 00:00:00 +10:00
12
+ date: 2009-10-12 00:00:00 +11:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency