warden 0.2.3 → 0.3.1
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/README.textile +2 -1
 - data/VERSION +1 -1
 - data/lib/warden/manager.rb +10 -6
 - data/lib/warden/proxy.rb +20 -1
 - data/spec/helpers/request_helper.rb +1 -1
 - data/spec/warden/manager_spec.rb +24 -2
 - data/spec/warden/proxy_spec.rb +25 -1
 - data/spec/warden/strategies/failz.rb +1 -1
 - data/warden.gemspec +3 -3
 - metadata +3 -3
 
    
        data/README.textile
    CHANGED
    
    | 
         @@ -1 +1,2 @@ 
     | 
|
| 
       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 
     | 
    
         
            +
             
     | 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            0. 
     | 
| 
      
 1 
     | 
    
         
            +
            0.3.1
         
     | 
    
        data/lib/warden/manager.rb
    CHANGED
    
    | 
         @@ -47,7 +47,7 @@ module Warden 
     | 
|
| 
       47 
47 
     | 
    
         
             
                    if result.first != 401
         
     | 
| 
       48 
48 
     | 
    
         
             
                      return result
         
     | 
| 
       49 
49 
     | 
    
         
             
                    else
         
     | 
| 
       50 
     | 
    
         
            -
                      call_failure_app(env)
         
     | 
| 
      
 50 
     | 
    
         
            +
                      call_failure_app(env, :original_response => result)
         
     | 
| 
       51 
51 
     | 
    
         
             
                    end
         
     | 
| 
       52 
52 
     | 
    
         
             
                  when Hash
         
     | 
| 
       53 
53 
     | 
    
         
             
                    if (result[:action] ||= :unauthenticated) == :unauthenticated
         
     | 
| 
         @@ -122,13 +122,17 @@ module Warden 
     | 
|
| 
       122 
122 
     | 
    
         
             
                # The before_failure hooks are run on each failure
         
     | 
| 
       123 
123 
     | 
    
         
             
                # :api: private
         
     | 
| 
       124 
124 
     | 
    
         
             
                def call_failure_app(env, opts = {})
         
     | 
| 
       125 
     | 
    
         
            -
                  env[ 
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
      
 125 
     | 
    
         
            +
                  if env['warden'].custom_failure?
         
     | 
| 
      
 126 
     | 
    
         
            +
                    opts[:original_response]
         
     | 
| 
      
 127 
     | 
    
         
            +
                  else
         
     | 
| 
      
 128 
     | 
    
         
            +
                    env["PATH_INFO"] = "/#{opts[:action]}"
         
     | 
| 
      
 129 
     | 
    
         
            +
                    env["warden.options"] = opts
         
     | 
| 
       127 
130 
     | 
    
         | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
      
 131 
     | 
    
         
            +
                    # Call the before failure callbacks
         
     | 
| 
      
 132 
     | 
    
         
            +
                    Warden::Manager._before_failure.each{|hook| hook.call(env,opts)}
         
     | 
| 
       130 
133 
     | 
    
         | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
      
 134 
     | 
    
         
            +
                    @failure_app.call(env).to_a
         
     | 
| 
      
 135 
     | 
    
         
            +
                  end
         
     | 
| 
       132 
136 
     | 
    
         
             
                end # call_failure_app
         
     | 
| 
       133 
137 
     | 
    
         
             
              end
         
     | 
| 
       134 
138 
     | 
    
         
             
            end # Warden
         
     | 
    
        data/lib/warden/proxy.rb
    CHANGED
    
    | 
         @@ -14,7 +14,7 @@ module Warden 
     | 
|
| 
       14 
14 
     | 
    
         
             
                alias_method :_session, :session
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                # :api: private
         
     | 
| 
       17 
     | 
    
         
            -
                def_delegators :winning_strategy, :headers, : 
     | 
| 
      
 17 
     | 
    
         
            +
                def_delegators :winning_strategy, :headers, :_status, :custom_response
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                def initialize(env, config = {}) # :nodoc:
         
     | 
| 
       20 
20 
     | 
    
         
             
                  @env = env
         
     | 
| 
         @@ -155,6 +155,25 @@ module Warden 
     | 
|
| 
       155 
155 
     | 
    
         
             
                   winning_strategy.nil? ? nil : winning_strategy.result
         
     | 
| 
       156 
156 
     | 
    
         
             
                end
         
     | 
| 
       157 
157 
     | 
    
         | 
| 
      
 158 
     | 
    
         
            +
                # Proxy through to the authentication strategy to find out the message that was generated.
         
     | 
| 
      
 159 
     | 
    
         
            +
                # :api: public
         
     | 
| 
      
 160 
     | 
    
         
            +
                def message
         
     | 
| 
      
 161 
     | 
    
         
            +
                  winning_strategy.nil? ? "" : winning_strategy.message
         
     | 
| 
      
 162 
     | 
    
         
            +
                end
         
     | 
| 
      
 163 
     | 
    
         
            +
                
         
     | 
| 
      
 164 
     | 
    
         
            +
                # Provides a way to return a 401 without warden defering to the failure app
         
     | 
| 
      
 165 
     | 
    
         
            +
                # The result is a direct passthrough of your own response
         
     | 
| 
      
 166 
     | 
    
         
            +
                # :api: public
         
     | 
| 
      
 167 
     | 
    
         
            +
                def custom_failure!
         
     | 
| 
      
 168 
     | 
    
         
            +
                  @custom_failure = true
         
     | 
| 
      
 169 
     | 
    
         
            +
                end
         
     | 
| 
      
 170 
     | 
    
         
            +
                
         
     | 
| 
      
 171 
     | 
    
         
            +
                # Check to see if the custom failur flag has been set
         
     | 
| 
      
 172 
     | 
    
         
            +
                # :api: public
         
     | 
| 
      
 173 
     | 
    
         
            +
                def custom_failure?
         
     | 
| 
      
 174 
     | 
    
         
            +
                  !!@custom_failure
         
     | 
| 
      
 175 
     | 
    
         
            +
                end
         
     | 
| 
      
 176 
     | 
    
         
            +
                
         
     | 
| 
       158 
177 
     | 
    
         
             
                private 
         
     | 
| 
       159 
178 
     | 
    
         
             
                # :api: private
         
     | 
| 
       160 
179 
     | 
    
         
             
                def _perform_authentication(*args)
         
     | 
| 
         @@ -13,7 +13,7 @@ module Warden::Spec 
     | 
|
| 
       13 
13 
     | 
    
         
             
                def setup_rack(app = nil, opts = {}, &block)
         
     | 
| 
       14 
14 
     | 
    
         
             
                  app ||= block if block_given?
         
     | 
| 
       15 
15 
     | 
    
         
             
                  # opts[:default_strategies] ||= [:password]
         
     | 
| 
       16 
     | 
    
         
            -
                   
     | 
| 
      
 16 
     | 
    
         
            +
                  opts[:failure_app] ||= Warden::Spec::Helpers::FAILURE_APP
         
     | 
| 
       17 
17 
     | 
    
         
             
                  Rack::Builder.new do 
         
     | 
| 
       18 
18 
     | 
    
         
             
                    use Warden::Spec::Helpers::Session
         
     | 
| 
       19 
19 
     | 
    
         
             
                    use Warden::Manager, opts do |manager|
         
     | 
    
        data/spec/warden/manager_spec.rb
    CHANGED
    
    | 
         @@ -23,7 +23,7 @@ describe Warden::Manager do 
     | 
|
| 
       23 
23 
     | 
    
         
             
                    if e['warden'].authenticated? 
         
     | 
| 
       24 
24 
     | 
    
         
             
                      [200,{'Content-Type' => 'text/plain'},"OK"]
         
     | 
| 
       25 
25 
     | 
    
         
             
                    else
         
     | 
| 
       26 
     | 
    
         
            -
                      [401,{'Content-Type' => 'text/plain'}," 
     | 
| 
      
 26 
     | 
    
         
            +
                      [401,{'Content-Type' => 'text/plain'},"Fail From The App"]
         
     | 
| 
       27 
27 
     | 
    
         
             
                    end
         
     | 
| 
       28 
28 
     | 
    
         
             
                  end
         
     | 
| 
       29 
29 
     | 
    
         
             
                  @env = Rack::MockRequest.
         
     | 
| 
         @@ -125,6 +125,27 @@ describe Warden::Manager do 
     | 
|
| 
       125 
125 
     | 
    
         
             
                    result[2].should == ["You Fail!"]
         
     | 
| 
       126 
126 
     | 
    
         
             
                    env['PATH_INFO'].should == "/unauthenticated"
         
     | 
| 
       127 
127 
     | 
    
         
             
                  end
         
     | 
| 
      
 128 
     | 
    
         
            +
                  
         
     | 
| 
      
 129 
     | 
    
         
            +
                  it "should allow you to customize the response" do
         
     | 
| 
      
 130 
     | 
    
         
            +
                    app = lambda do |e|
         
     | 
| 
      
 131 
     | 
    
         
            +
                      e['warden'].custom_failure!
         
     | 
| 
      
 132 
     | 
    
         
            +
                      [401,{'Content-Type' => 'text/plain'},["Fail From The App"]]
         
     | 
| 
      
 133 
     | 
    
         
            +
                    end
         
     | 
| 
      
 134 
     | 
    
         
            +
                    env = env_with_params
         
     | 
| 
      
 135 
     | 
    
         
            +
                    result = setup_rack(app).call(env)
         
     | 
| 
      
 136 
     | 
    
         
            +
                    result[0].should == 401
         
     | 
| 
      
 137 
     | 
    
         
            +
                    result[2].should == ["Fail From The App"]
         
     | 
| 
      
 138 
     | 
    
         
            +
                  end
         
     | 
| 
      
 139 
     | 
    
         
            +
                  
         
     | 
| 
      
 140 
     | 
    
         
            +
                  it "should render the failure application for a 401 if no custom_failure flag is set" do
         
     | 
| 
      
 141 
     | 
    
         
            +
                    app = lambda do |e|
         
     | 
| 
      
 142 
     | 
    
         
            +
                      [401,{'Content-Type' => 'text/plain'},["Fail From The App"]]
         
     | 
| 
      
 143 
     | 
    
         
            +
                    end
         
     | 
| 
      
 144 
     | 
    
         
            +
                    result = setup_rack(app).call(env_with_params)
         
     | 
| 
      
 145 
     | 
    
         
            +
                    result[0].should == 401
         
     | 
| 
      
 146 
     | 
    
         
            +
                    result[2].should == ["You Fail!"]
         
     | 
| 
      
 147 
     | 
    
         
            +
                  end
         
     | 
| 
      
 148 
     | 
    
         
            +
                  
         
     | 
| 
       128 
149 
     | 
    
         
             
                end # failing
         
     | 
| 
       129 
150 
     | 
    
         | 
| 
       130 
151 
     | 
    
         
             
                describe "custom rack response" do
         
     | 
| 
         @@ -153,6 +174,7 @@ describe Warden::Manager do 
     | 
|
| 
       153 
174 
     | 
    
         
             
                    result[0].should == 200
         
     | 
| 
       154 
175 
     | 
    
         
             
                    result[2].should == ["Foo Is A Winna"]
         
     | 
| 
       155 
176 
     | 
    
         
             
                  end
         
     | 
| 
       156 
     | 
    
         
            -
                end
         
     | 
| 
      
 177 
     | 
    
         
            +
                end    
         
     | 
| 
       157 
178 
     | 
    
         
             
              end # integrated strategies
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
       158 
180 
     | 
    
         
             
            end
         
     | 
    
        data/spec/warden/proxy_spec.rb
    CHANGED
    
    | 
         @@ -251,7 +251,7 @@ describe Warden::Proxy do 
     | 
|
| 
       251 
251 
     | 
    
         
             
                  @env['warden'].user.should be_nil
         
     | 
| 
       252 
252 
     | 
    
         | 
| 
       253 
253 
     | 
    
         
             
                end
         
     | 
| 
       254 
     | 
    
         
            -
             
     | 
| 
      
 254 
     | 
    
         
            +
             
     | 
| 
       255 
255 
     | 
    
         
             
                it "should clear the session data when logging out" do
         
     | 
| 
       256 
256 
     | 
    
         
             
                  @env['rack.session'].should_not be_nil
         
     | 
| 
       257 
257 
     | 
    
         
             
                  app = lambda do |e|
         
     | 
| 
         @@ -265,6 +265,28 @@ describe Warden::Proxy do 
     | 
|
| 
       265 
265 
     | 
    
         
             
                end
         
     | 
| 
       266 
266 
     | 
    
         
             
              end
         
     | 
| 
       267 
267 
     | 
    
         | 
| 
      
 268 
     | 
    
         
            +
              describe "messages" do
         
     | 
| 
      
 269 
     | 
    
         
            +
                
         
     | 
| 
      
 270 
     | 
    
         
            +
                it "should allow access to the failure message" do
         
     | 
| 
      
 271 
     | 
    
         
            +
                  failure = lambda do |e|
         
     | 
| 
      
 272 
     | 
    
         
            +
                    [401, {"Content-Type" => "text/plain"}, [e['warden'].message]]
         
     | 
| 
      
 273 
     | 
    
         
            +
                  end
         
     | 
| 
      
 274 
     | 
    
         
            +
                  app = lambda do |e|
         
     | 
| 
      
 275 
     | 
    
         
            +
                    e['warden'].authenticate! :failz
         
     | 
| 
      
 276 
     | 
    
         
            +
                  end
         
     | 
| 
      
 277 
     | 
    
         
            +
                  result = setup_rack(app, :failure_app => failure).call(env_with_params)
         
     | 
| 
      
 278 
     | 
    
         
            +
                  result.last.should == ["The Fails Strategy Has Failed You"]
         
     | 
| 
      
 279 
     | 
    
         
            +
                end
         
     | 
| 
      
 280 
     | 
    
         
            +
                
         
     | 
| 
      
 281 
     | 
    
         
            +
                it "should not die when accessing a message from a source where no authentication has occured" do
         
     | 
| 
      
 282 
     | 
    
         
            +
                  app = lambda do |e|
         
     | 
| 
      
 283 
     | 
    
         
            +
                    [200, {"Content-Type" => "text/plain"}, [e['warden'].message]]
         
     | 
| 
      
 284 
     | 
    
         
            +
                  end
         
     | 
| 
      
 285 
     | 
    
         
            +
                  result = setup_rack(app).call(env_with_params)
         
     | 
| 
      
 286 
     | 
    
         
            +
                  result[2].should == [""]
         
     | 
| 
      
 287 
     | 
    
         
            +
                end
         
     | 
| 
      
 288 
     | 
    
         
            +
              end
         
     | 
| 
      
 289 
     | 
    
         
            +
              
         
     | 
| 
       268 
290 
     | 
    
         
             
              describe "when all strategies are not valid?" do
         
     | 
| 
       269 
291 
     | 
    
         
             
                it "should return false for authenticated when there are no valid? strategies" do
         
     | 
| 
       270 
292 
     | 
    
         
             
                 @env['rack.session'] = {}
         
     | 
| 
         @@ -293,4 +315,6 @@ describe Warden::Proxy do 
     | 
|
| 
       293 
315 
     | 
    
         | 
| 
       294 
316 
     | 
    
         
             
              end
         
     | 
| 
       295 
317 
     | 
    
         | 
| 
      
 318 
     | 
    
         
            +
             
     | 
| 
      
 319 
     | 
    
         
            +
              
         
     | 
| 
       296 
320 
     | 
    
         
             
            end
         
     | 
    
        data/warden.gemspec
    CHANGED
    
    | 
         @@ -2,11 +2,11 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       4 
4 
     | 
    
         
             
              s.name = %q{warden}
         
     | 
| 
       5 
     | 
    
         
            -
              s.version = "0. 
     | 
| 
      
 5 
     | 
    
         
            +
              s.version = "0.3.1"
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       8 
8 
     | 
    
         
             
              s.authors = ["Daniel Neighman"]
         
     | 
| 
       9 
     | 
    
         
            -
              s.date = %q{2009- 
     | 
| 
      
 9 
     | 
    
         
            +
              s.date = %q{2009-08-10}
         
     | 
| 
       10 
10 
     | 
    
         
             
              s.email = %q{has.sox@gmail.com}
         
     | 
| 
       11 
11 
     | 
    
         
             
              s.extra_rdoc_files = [
         
     | 
| 
       12 
12 
     | 
    
         
             
                "LICENSE",
         
     | 
| 
         @@ -50,7 +50,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       50 
50 
     | 
    
         
             
              s.rdoc_options = ["--charset=UTF-8"]
         
     | 
| 
       51 
51 
     | 
    
         
             
              s.require_paths = ["lib"]
         
     | 
| 
       52 
52 
     | 
    
         
             
              s.rubyforge_project = %q{warden}
         
     | 
| 
       53 
     | 
    
         
            -
              s.rubygems_version = %q{1.3. 
     | 
| 
      
 53 
     | 
    
         
            +
              s.rubygems_version = %q{1.3.4}
         
     | 
| 
       54 
54 
     | 
    
         
             
              s.summary = %q{Rack middleware that provides authentication for rack applications}
         
     | 
| 
       55 
55 
     | 
    
         
             
              s.test_files = [
         
     | 
| 
       56 
56 
     | 
    
         
             
                "spec/helpers/request_helper.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.3.1
         
     | 
| 
       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- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2009-08-10 00:00:00 +10:00
         
     | 
| 
       13 
13 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -88,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       88 
88 
     | 
    
         
             
            requirements: []
         
     | 
| 
       89 
89 
     | 
    
         | 
| 
       90 
90 
     | 
    
         
             
            rubyforge_project: warden
         
     | 
| 
       91 
     | 
    
         
            -
            rubygems_version: 1.3. 
     | 
| 
      
 91 
     | 
    
         
            +
            rubygems_version: 1.3.4
         
     | 
| 
       92 
92 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       93 
93 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       94 
94 
     | 
    
         
             
            summary: Rack middleware that provides authentication for rack applications
         
     |