warden 0.4.0 → 0.5.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 +15 -0
 - data/VERSION +1 -1
 - data/lib/warden/authentication/hooks.rb +36 -38
 - data/lib/warden/proxy.rb +15 -1
 - data/spec/spec_helper.rb +6 -3
 - data/spec/warden/hooks_spec.rb +74 -20
 - data/spec/warden/manager_spec.rb +26 -22
 - data/spec/warden/proxy_spec.rb +153 -3
 - data/warden.gemspec +3 -2
 - metadata +3 -2
 
    
        data/History.rdoc
    ADDED
    
    | 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            === Version 0.4.0 / 2009-10-12
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            * enhancements
         
     | 
| 
      
 4 
     | 
    
         
            +
              * add Content-Type header to redirects (staugaard)
         
     | 
| 
      
 5 
     | 
    
         
            +
              * Make scope available to strategies (josevalim)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            * bug fixes
         
     | 
| 
      
 8 
     | 
    
         
            +
              * Do not consume opts twice, otherwise just the first will parse the scope. (josevalim)
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            === Version 0.3.2 / 2009-09-15
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            * enhancements
         
     | 
| 
      
 13 
     | 
    
         
            +
              * add a hook for plugins to specify how they can clear the whole section
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            0. 
     | 
| 
      
 1 
     | 
    
         
            +
            0.5.0
         
     | 
| 
         @@ -1,19 +1,19 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # encoding: utf-8
         
     | 
| 
       2 
2 
     | 
    
         
             
            module Warden
         
     | 
| 
       3 
3 
     | 
    
         
             
              class Manager
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       5 
5 
     | 
    
         
             
                class << self
         
     | 
| 
       6 
6 
     | 
    
         
             
                  # A callback hook set to run every time after a user is set.
         
     | 
| 
       7 
7 
     | 
    
         
             
                  # This will happen the first time the user is either authenticated, accessed or manually set
         
     | 
| 
       8 
8 
     | 
    
         
             
                  # during a request.  You can supply as many hooks as you like, and they will be run in order of decleration
         
     | 
| 
       9 
     | 
    
         
            -
                  # 
     | 
| 
       10 
     | 
    
         
            -
                  # Parameters: 
     | 
| 
      
 9 
     | 
    
         
            +
                  #
         
     | 
| 
      
 10 
     | 
    
         
            +
                  # Parameters:
         
     | 
| 
       11 
11 
     | 
    
         
             
                  # <block> A block where you can set arbitrary logic to run every time a user is set
         
     | 
| 
       12 
12 
     | 
    
         
             
                  #   Block Parameters: |user, auth, opts|
         
     | 
| 
       13 
13 
     | 
    
         
             
                  #     user - The user object that is being set
         
     | 
| 
       14 
     | 
    
         
            -
                  #     auth - The raw authentication proxy object. 
     | 
| 
      
 14 
     | 
    
         
            +
                  #     auth - The raw authentication proxy object.
         
     | 
| 
       15 
15 
     | 
    
         
             
                  #     opts - any options passed into the set_user call includeing :scope
         
     | 
| 
       16 
     | 
    
         
            -
                  # 
     | 
| 
      
 16 
     | 
    
         
            +
                  #
         
     | 
| 
       17 
17 
     | 
    
         
             
                  # Example:
         
     | 
| 
       18 
18 
     | 
    
         
             
                  #   Warden::Manager.after_set_user do |user,auth,opts|
         
     | 
| 
       19 
19 
     | 
    
         
             
                  #     scope = opts[:scope]
         
     | 
| 
         @@ -29,23 +29,23 @@ module Warden 
     | 
|
| 
       29 
29 
     | 
    
         
             
                    raise BlockNotGiven unless block_given?
         
     | 
| 
       30 
30 
     | 
    
         
             
                    _after_set_user << block
         
     | 
| 
       31 
31 
     | 
    
         
             
                  end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
       33 
33 
     | 
    
         
             
                  # Provides access to the array of after_set_user blocks to run
         
     | 
| 
       34 
34 
     | 
    
         
             
                  # :api: private
         
     | 
| 
       35 
35 
     | 
    
         
             
                  def _after_set_user # :nodoc:
         
     | 
| 
       36 
36 
     | 
    
         
             
                    @_after_set_user ||= []
         
     | 
| 
       37 
37 
     | 
    
         
             
                  end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                  # A callback hook set to run after the first authentiation of a session. 
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  # A callback hook set to run after the first authentiation of a session.
         
     | 
| 
       40 
40 
     | 
    
         
             
                  # This will only happenwhen the session is first authenticated
         
     | 
| 
       41 
     | 
    
         
            -
                  # 
     | 
| 
      
 41 
     | 
    
         
            +
                  #
         
     | 
| 
       42 
42 
     | 
    
         
             
                  # Parameters:
         
     | 
| 
       43 
43 
     | 
    
         
             
                  # <block> A block to contain logic for the callback
         
     | 
| 
       44 
44 
     | 
    
         
             
                  #   Block Parameters: |user, auth, opts|
         
     | 
| 
       45 
45 
     | 
    
         
             
                  #     user - The user object that is being set
         
     | 
| 
       46 
     | 
    
         
            -
                  #     auth - The raw authentication proxy object. 
     | 
| 
      
 46 
     | 
    
         
            +
                  #     auth - The raw authentication proxy object.
         
     | 
| 
       47 
47 
     | 
    
         
             
                  #     opts - any options passed into the authenticate call includeing :scope
         
     | 
| 
       48 
     | 
    
         
            -
                  # 
     | 
| 
      
 48 
     | 
    
         
            +
                  #
         
     | 
| 
       49 
49 
     | 
    
         
             
                  # Example:
         
     | 
| 
       50 
50 
     | 
    
         
             
                  #
         
     | 
| 
       51 
51 
     | 
    
         
             
                  #   Warden::Manager.after_authentication do |user, auth, opts|
         
     | 
| 
         @@ -57,18 +57,18 @@ module Warden 
     | 
|
| 
       57 
57 
     | 
    
         
             
                    raise BlockNotGiven unless block_given?
         
     | 
| 
       58 
58 
     | 
    
         
             
                    _after_authentication << block
         
     | 
| 
       59 
59 
     | 
    
         
             
                  end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
       61 
61 
     | 
    
         
             
                  # Provides access to the array of after_authentication blocks
         
     | 
| 
       62 
62 
     | 
    
         
             
                  # :api: private
         
     | 
| 
       63 
63 
     | 
    
         
             
                  def _after_authentication
         
     | 
| 
       64 
64 
     | 
    
         
             
                    @_after_authentication ||= []
         
     | 
| 
       65 
65 
     | 
    
         
             
                  end
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
                  # A callback that runs just prior to the failur application being called. 
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                  # A callback that runs just prior to the failur application being called.
         
     | 
| 
       68 
68 
     | 
    
         
             
                  # This callback occurs after PATH_INFO has been modified for the failure (default /unauthenticated)
         
     | 
| 
       69 
69 
     | 
    
         
             
                  # In this callback you can mutate the environment as required by the failure application
         
     | 
| 
       70 
70 
     | 
    
         
             
                  # If a Rails controller were used for the failure_app for example, you would need to set request[:params][:action] = :unauthenticated
         
     | 
| 
       71 
     | 
    
         
            -
                  # 
     | 
| 
      
 71 
     | 
    
         
            +
                  #
         
     | 
| 
       72 
72 
     | 
    
         
             
                  # Parameters:
         
     | 
| 
       73 
73 
     | 
    
         
             
                  # <block> A block to contain logic for the callback
         
     | 
| 
       74 
74 
     | 
    
         
             
                  #   Block Parameters: |user, auth, opts|
         
     | 
| 
         @@ -81,46 +81,44 @@ module Warden 
     | 
|
| 
       81 
81 
     | 
    
         
             
                  #     params[:action] = :unauthenticated
         
     | 
| 
       82 
82 
     | 
    
         
             
                  #     params[:warden_failure] = opts
         
     | 
| 
       83 
83 
     | 
    
         
             
                  #   end
         
     | 
| 
       84 
     | 
    
         
            -
                  # 
     | 
| 
      
 84 
     | 
    
         
            +
                  #
         
     | 
| 
       85 
85 
     | 
    
         
             
                  # :api: public
         
     | 
| 
       86 
86 
     | 
    
         
             
                  def before_failure(&block)
         
     | 
| 
       87 
87 
     | 
    
         
             
                    _before_failure << block
         
     | 
| 
       88 
88 
     | 
    
         
             
                  end
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
       90 
90 
     | 
    
         
             
                  # Provides access to the callback array for before_failure
         
     | 
| 
       91 
91 
     | 
    
         
             
                  # :api: private
         
     | 
| 
       92 
92 
     | 
    
         
             
                  def _before_failure
         
     | 
| 
       93 
93 
     | 
    
         
             
                    @_before_failure ||= []
         
     | 
| 
       94 
94 
     | 
    
         
             
                  end
         
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
     | 
    
         
            -
                  # A callback that runs just  
     | 
| 
       97 
     | 
    
         
            -
                  # 
     | 
| 
       98 
     | 
    
         
            -
                  # Return whatever you want to be returned for the actual rack response array
         
     | 
| 
       99 
     | 
    
         
            -
                  # 
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                  # A callback that runs just prior to the logout of each scope.
         
     | 
| 
      
 97 
     | 
    
         
            +
                  #
         
     | 
| 
       100 
98 
     | 
    
         
             
                  # Parameters:
         
     | 
| 
       101 
99 
     | 
    
         
             
                  # <block> A block to contain logic for the callback
         
     | 
| 
       102 
     | 
    
         
            -
                  #   Block Parameters: |user, auth,  
     | 
| 
       103 
     | 
    
         
            -
                  #      
     | 
| 
       104 
     | 
    
         
            -
                  #      
     | 
| 
      
 100 
     | 
    
         
            +
                  #   Block Parameters: |user, auth, scope|
         
     | 
| 
      
 101 
     | 
    
         
            +
                  #     user - The authenticated user for the current scope
         
     | 
| 
      
 102 
     | 
    
         
            +
                  #     auth - The warden proxy object
         
     | 
| 
      
 103 
     | 
    
         
            +
                  #     scope - current logout scope
         
     | 
| 
       105 
104 
     | 
    
         
             
                  #
         
     | 
| 
       106 
105 
     | 
    
         
             
                  # Example:
         
     | 
| 
       107 
     | 
    
         
            -
                  #    
     | 
| 
       108 
     | 
    
         
            -
                  # 
     | 
| 
       109 
     | 
    
         
            -
                  #    result.to_a
         
     | 
| 
      
 106 
     | 
    
         
            +
                  #   Warden::Manager.before_logout do |user, auth, scope|
         
     | 
| 
      
 107 
     | 
    
         
            +
                  #     user.forget_me!
         
     | 
| 
       110 
108 
     | 
    
         
             
                  #   end
         
     | 
| 
       111 
     | 
    
         
            -
                  # 
     | 
| 
      
 109 
     | 
    
         
            +
                  #
         
     | 
| 
       112 
110 
     | 
    
         
             
                  # :api: public
         
     | 
| 
       113 
     | 
    
         
            -
                  def  
     | 
| 
       114 
     | 
    
         
            -
                     
     | 
| 
      
 111 
     | 
    
         
            +
                  def before_logout(&block)
         
     | 
| 
      
 112 
     | 
    
         
            +
                    _before_logout << block
         
     | 
| 
       115 
113 
     | 
    
         
             
                  end
         
     | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
       117 
     | 
    
         
            -
                  # Provides access to the callback array for  
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                  # Provides access to the callback array for before_logout
         
     | 
| 
       118 
116 
     | 
    
         
             
                  # :api: private
         
     | 
| 
       119 
     | 
    
         
            -
                  def  
     | 
| 
       120 
     | 
    
         
            -
                    @ 
     | 
| 
      
 117 
     | 
    
         
            +
                  def _before_logout
         
     | 
| 
      
 118 
     | 
    
         
            +
                    @_before_logout ||= []
         
     | 
| 
       121 
119 
     | 
    
         
             
                  end
         
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
       123 
121 
     | 
    
         
             
                end
         
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
       125 
123 
     | 
    
         
             
              end # Manager
         
     | 
| 
       126 
     | 
    
         
            -
            end # Warden
         
     | 
| 
      
 124 
     | 
    
         
            +
            end # Warden
         
     | 
    
        data/lib/warden/proxy.rb
    CHANGED
    
    | 
         @@ -36,9 +36,17 @@ module Warden 
     | 
|
| 
       36 
36 
     | 
    
         
             
                #   env['warden'].authenticated?(:admin)
         
     | 
| 
       37 
37 
     | 
    
         
             
                # :api: public
         
     | 
| 
       38 
38 
     | 
    
         
             
                def authenticated?(scope = :default)
         
     | 
| 
       39 
     | 
    
         
            -
                  !raw_session["warden.user.#{scope}.key"].nil?
         
     | 
| 
      
 39 
     | 
    
         
            +
                  result = !raw_session["warden.user.#{scope}.key"].nil?
         
     | 
| 
      
 40 
     | 
    
         
            +
                  yield if block_given? && result
         
     | 
| 
      
 41 
     | 
    
         
            +
                  result
         
     | 
| 
       40 
42 
     | 
    
         
             
                end # authenticated?
         
     | 
| 
       41 
43 
     | 
    
         | 
| 
      
 44 
     | 
    
         
            +
                def unauthenticated?(scope = :default)
         
     | 
| 
      
 45 
     | 
    
         
            +
                  result = !authenticated?(scope)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  yield if block_given? && result
         
     | 
| 
      
 47 
     | 
    
         
            +
                  result
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
       42 
50 
     | 
    
         
             
                # Run the authentiation strategies for the given strategies.
         
     | 
| 
       43 
51 
     | 
    
         
             
                # If there is already a user logged in for a given scope, the strategies are not run
         
     | 
| 
       44 
52 
     | 
    
         
             
                # This does not halt the flow of control and is a passive attempt to authenticate only
         
     | 
| 
         @@ -134,6 +142,12 @@ module Warden 
     | 
|
| 
       134 
142 
     | 
    
         
             
                #
         
     | 
| 
       135 
143 
     | 
    
         
             
                # :api: public
         
     | 
| 
       136 
144 
     | 
    
         
             
                def logout(*scopes)
         
     | 
| 
      
 145 
     | 
    
         
            +
                  # Run before_logout hooks for each scoped user
         
     | 
| 
      
 146 
     | 
    
         
            +
                  @users.each do |scope, user|
         
     | 
| 
      
 147 
     | 
    
         
            +
                    next unless scopes.empty? || scopes.include?(scope)
         
     | 
| 
      
 148 
     | 
    
         
            +
                    Warden::Manager._before_logout.each { |hook| hook.call(user, self, scope) }
         
     | 
| 
      
 149 
     | 
    
         
            +
                  end
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
       137 
151 
     | 
    
         
             
                  if scopes.empty?
         
     | 
| 
       138 
152 
     | 
    
         
             
                    reset_session!
         
     | 
| 
       139 
153 
     | 
    
         
             
                    @users.clear
         
     | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | 
         @@ -4,13 +4,16 @@ require 'rack' 
     | 
|
| 
       4 
4 
     | 
    
         
             
            $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
         
     | 
| 
       5 
5 
     | 
    
         
             
            require 'warden'
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            Dir[File.join(File.dirname(__FILE__), "warden", "strategies", "**/*.rb")].each do |f|
         
     | 
| 
       8 
     | 
    
         
            -
              require f
         
     | 
| 
       9 
     | 
    
         
            -
            end
         
     | 
| 
       10 
7 
     | 
    
         
             
            Dir[File.join(File.dirname(__FILE__), "helpers", "**/*.rb")].each do |f|
         
     | 
| 
       11 
8 
     | 
    
         
             
              require f
         
     | 
| 
       12 
9 
     | 
    
         
             
            end
         
     | 
| 
       13 
10 
     | 
    
         | 
| 
       14 
11 
     | 
    
         
             
            Spec::Runner.configure do |config|
         
     | 
| 
       15 
12 
     | 
    
         
             
              config.include(Warden::Spec::Helpers)
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def load_strategies
         
     | 
| 
      
 15 
     | 
    
         
            +
                Dir[File.join(File.dirname(__FILE__), "warden", "strategies", "**/*.rb")].each do |f|
         
     | 
| 
      
 16 
     | 
    
         
            +
                  load f
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
       16 
19 
     | 
    
         
             
            end
         
     | 
    
        data/spec/warden/hooks_spec.rb
    CHANGED
    
    | 
         @@ -1,30 +1,34 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require File.dirname(__FILE__) + '/../spec_helper'
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            describe "standard authentication hooks" do
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              before(:all) do
         
     | 
| 
      
 6 
     | 
    
         
            +
                load_strategies
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       5 
9 
     | 
    
         
             
              describe "after_set_user" do
         
     | 
| 
       6 
10 
     | 
    
         
             
                before(:each) do
         
     | 
| 
       7 
11 
     | 
    
         
             
                  RAM = Warden::Manager unless defined?(RAM)
         
     | 
| 
       8 
12 
     | 
    
         
             
                  RAM._after_set_user.clear
         
     | 
| 
       9 
13 
     | 
    
         
             
                end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
       11 
15 
     | 
    
         
             
                after(:each) do
         
     | 
| 
       12 
16 
     | 
    
         
             
                  RAM._after_set_user.clear
         
     | 
| 
       13 
17 
     | 
    
         
             
                end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       15 
19 
     | 
    
         
             
                it "should allow me to add an after_set_user hook" do
         
     | 
| 
       16 
20 
     | 
    
         
             
                  RAM.after_set_user do |user, auth, opts|
         
     | 
| 
       17 
21 
     | 
    
         
             
                    "boo"
         
     | 
| 
       18 
22 
     | 
    
         
             
                  end
         
     | 
| 
       19 
23 
     | 
    
         
             
                  RAM._after_set_user.should have(1).item
         
     | 
| 
       20 
24 
     | 
    
         
             
                end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
       22 
26 
     | 
    
         
             
                it "should allow me to add multiple after_set_user hooks" do
         
     | 
| 
       23 
27 
     | 
    
         
             
                  RAM.after_set_user{|user, auth, opts| "foo"}
         
     | 
| 
       24 
28 
     | 
    
         
             
                  RAM.after_set_user{|u,a| "bar"}
         
     | 
| 
       25 
29 
     | 
    
         
             
                  RAM._after_set_user.should have(2).items
         
     | 
| 
       26 
30 
     | 
    
         
             
                end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       28 
32 
     | 
    
         
             
                it "should run each after_set_user hook after the user is set" do
         
     | 
| 
       29 
33 
     | 
    
         
             
                  RAM.after_set_user{|u,a,o| a.env['warden.spec.hook.foo'] = "run foo"}
         
     | 
| 
       30 
34 
     | 
    
         
             
                  RAM.after_set_user{|u,a,o| a.env['warden.spec.hook.bar'] = "run bar"}
         
     | 
| 
         @@ -35,28 +39,28 @@ describe "standard authentication hooks" do 
     | 
|
| 
       35 
39 
     | 
    
         
             
                  env['warden.spec.hook.bar'].should == "run bar"
         
     | 
| 
       36 
40 
     | 
    
         
             
                end
         
     | 
| 
       37 
41 
     | 
    
         
             
              end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
              describe " 
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              describe "after_authentication" do
         
     | 
| 
       40 
44 
     | 
    
         
             
                before(:each) do
         
     | 
| 
       41 
45 
     | 
    
         
             
                  RAM = Warden::Manager unless defined?(RAM)
         
     | 
| 
       42 
46 
     | 
    
         
             
                  RAM._after_authentication.clear
         
     | 
| 
       43 
47 
     | 
    
         
             
                end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
       45 
49 
     | 
    
         
             
                after(:each) do
         
     | 
| 
       46 
50 
     | 
    
         
             
                  RAM._after_authentication.clear
         
     | 
| 
       47 
51 
     | 
    
         
             
                end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                it "should allow me to add an  
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                it "should allow me to add an after_authentication hook" do
         
     | 
| 
       50 
54 
     | 
    
         
             
                  RAM.after_authentication{|user, auth, opts| "foo"}
         
     | 
| 
       51 
55 
     | 
    
         
             
                  RAM._after_authentication.should have(1).item
         
     | 
| 
       52 
56 
     | 
    
         
             
                end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                it "should allow me to add multiple  
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                it "should allow me to add multiple after_authentication hooks" do
         
     | 
| 
       55 
59 
     | 
    
         
             
                  RAM.after_authentication{|u,a,o| "bar"}
         
     | 
| 
       56 
60 
     | 
    
         
             
                  RAM.after_authentication{|u,a,o| "baz"}
         
     | 
| 
       57 
61 
     | 
    
         
             
                  RAM._after_authentication.should have(2).items
         
     | 
| 
       58 
62 
     | 
    
         
             
                end
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
       60 
64 
     | 
    
         
             
                it "should run each after_authentication hook after authentication is run" do
         
     | 
| 
       61 
65 
     | 
    
         
             
                  RAM.after_authentication{|u,a,o| a.env['warden.spec.hook.baz'] = "run baz"}
         
     | 
| 
       62 
66 
     | 
    
         
             
                  RAM.after_authentication{|u,a,o| a.env['warden.spec.hook.paz'] = "run paz"}
         
     | 
| 
         @@ -67,28 +71,28 @@ describe "standard authentication hooks" do 
     | 
|
| 
       67 
71 
     | 
    
         
             
                  env['warden.spec.hook.paz'].should == 'run paz'
         
     | 
| 
       68 
72 
     | 
    
         
             
                end
         
     | 
| 
       69 
73 
     | 
    
         
             
              end
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
       71 
75 
     | 
    
         
             
              describe "before_failure" do
         
     | 
| 
       72 
76 
     | 
    
         
             
                before(:each) do
         
     | 
| 
       73 
77 
     | 
    
         
             
                  RAM = Warden::Manager unless defined?(RAM)
         
     | 
| 
       74 
78 
     | 
    
         
             
                  RAM._before_failure.clear
         
     | 
| 
       75 
79 
     | 
    
         
             
                end
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
       77 
81 
     | 
    
         
             
                after(:each) do
         
     | 
| 
       78 
82 
     | 
    
         
             
                  RAM._before_failure.clear
         
     | 
| 
       79 
83 
     | 
    
         
             
                end
         
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
       81 
85 
     | 
    
         
             
                it "should allow me to add a before_failure hook" do
         
     | 
| 
       82 
86 
     | 
    
         
             
                  RAM.before_failure{|env, opts| "foo"}
         
     | 
| 
       83 
87 
     | 
    
         
             
                  RAM._before_failure.should have(1).item
         
     | 
| 
       84 
88 
     | 
    
         
             
                end
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
       86 
90 
     | 
    
         
             
                it "should allow me to add multiple before_failure hooks" do
         
     | 
| 
       87 
91 
     | 
    
         
             
                  RAM.before_failure{|env, opts| "foo"}
         
     | 
| 
       88 
92 
     | 
    
         
             
                  RAM.before_failure{|env, opts| "bar"}
         
     | 
| 
       89 
93 
     | 
    
         
             
                  RAM._before_failure.should have(2).items
         
     | 
| 
       90 
94 
     | 
    
         
             
                end
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
       92 
96 
     | 
    
         
             
                it "should run each before_failure hooks before failing" do
         
     | 
| 
       93 
97 
     | 
    
         
             
                  RAM.before_failure{|e,o| e['warden.spec.before_failure.foo'] = "foo"}
         
     | 
| 
       94 
98 
     | 
    
         
             
                  RAM.before_failure{|e,o| e['warden.spec.before_failure.bar'] = "bar"}
         
     | 
| 
         @@ -99,5 +103,55 @@ describe "standard authentication hooks" do 
     | 
|
| 
       99 
103 
     | 
    
         
             
                  env['warden.spec.before_failure.bar'].should  == "bar"
         
     | 
| 
       100 
104 
     | 
    
         
             
                end
         
     | 
| 
       101 
105 
     | 
    
         
             
              end
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
              describe "before_logout" do
         
     | 
| 
      
 108 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 109 
     | 
    
         
            +
                  RAM = Warden::Manager unless defined?(RAM)
         
     | 
| 
      
 110 
     | 
    
         
            +
                  RAM._before_logout.clear
         
     | 
| 
      
 111 
     | 
    
         
            +
                end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                after(:each) do
         
     | 
| 
      
 114 
     | 
    
         
            +
                  RAM._before_logout.clear
         
     | 
| 
      
 115 
     | 
    
         
            +
                end
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
                it "should allow me to add an before_logout hook" do
         
     | 
| 
      
 118 
     | 
    
         
            +
                  RAM.before_logout{|user, auth, scopes| "foo"}
         
     | 
| 
      
 119 
     | 
    
         
            +
                  RAM._before_logout.should have(1).item
         
     | 
| 
      
 120 
     | 
    
         
            +
                end
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                it "should allow me to add multiple after_authetnication hooks" do
         
     | 
| 
      
 123 
     | 
    
         
            +
                  RAM.before_logout{|u,a,s| "bar"}
         
     | 
| 
      
 124 
     | 
    
         
            +
                  RAM.before_logout{|u,a,s| "baz"}
         
     | 
| 
      
 125 
     | 
    
         
            +
                  RAM._before_logout.should have(2).items
         
     | 
| 
      
 126 
     | 
    
         
            +
                end
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
                it "should run each before_logout hook before logout is run" do
         
     | 
| 
      
 129 
     | 
    
         
            +
                  RAM.before_logout{|u,a,s| a.env['warden.spec.hook.lorem'] = "run lorem"}
         
     | 
| 
      
 130 
     | 
    
         
            +
                  RAM.before_logout{|u,a,s| a.env['warden.spec.hook.ipsum'] = "run ipsum"}
         
     | 
| 
      
 131 
     | 
    
         
            +
                  app = lambda{|e| e['warden'].authenticate(:pass); valid_response}
         
     | 
| 
      
 132 
     | 
    
         
            +
                  env = env_with_params
         
     | 
| 
      
 133 
     | 
    
         
            +
                  setup_rack(app).call(env)
         
     | 
| 
      
 134 
     | 
    
         
            +
                  env['warden'].logout
         
     | 
| 
      
 135 
     | 
    
         
            +
                  env['warden.spec.hook.lorem'].should == 'run lorem'
         
     | 
| 
      
 136 
     | 
    
         
            +
                  env['warden.spec.hook.ipsum'].should == 'run ipsum'
         
     | 
| 
      
 137 
     | 
    
         
            +
                end
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                it "should run before_logout hook on different scopes" do
         
     | 
| 
      
 140 
     | 
    
         
            +
                  RAM.before_logout{|u,a,s| a.env["warden.spec.hook.scope1"] = "run scope1" if s == :scope1}
         
     | 
| 
      
 141 
     | 
    
         
            +
                  RAM.before_logout{|u,a,s| a.env["warden.spec.hook.scope2"] = "run scope2" if s == :scope2}
         
     | 
| 
      
 142 
     | 
    
         
            +
                  app = lambda do |e|
         
     | 
| 
      
 143 
     | 
    
         
            +
                    e['warden'].authenticate(:pass, :scope => :scope1)
         
     | 
| 
      
 144 
     | 
    
         
            +
                    e['warden'].authenticate(:pass, :scope => :scope2)
         
     | 
| 
      
 145 
     | 
    
         
            +
                    valid_response
         
     | 
| 
      
 146 
     | 
    
         
            +
                  end
         
     | 
| 
      
 147 
     | 
    
         
            +
                  env = env_with_params
         
     | 
| 
      
 148 
     | 
    
         
            +
                  setup_rack(app).call(env)
         
     | 
| 
      
 149 
     | 
    
         
            +
                  env['warden'].logout(:scope1)
         
     | 
| 
      
 150 
     | 
    
         
            +
                  env['warden.spec.hook.scope1'].should == 'run scope1'
         
     | 
| 
      
 151 
     | 
    
         
            +
                  env['warden.spec.hook.scope2'].should == nil
         
     | 
| 
      
 152 
     | 
    
         
            +
                  env['warden'].logout(:scope2)
         
     | 
| 
      
 153 
     | 
    
         
            +
                  env['warden.spec.hook.scope2'].should == 'run scope2'
         
     | 
| 
      
 154 
     | 
    
         
            +
                end
         
     | 
| 
      
 155 
     | 
    
         
            +
              end
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/warden/manager_spec.rb
    CHANGED
    
    | 
         @@ -2,12 +2,16 @@ require File.dirname(__FILE__) + '/../spec_helper' 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            describe Warden::Manager do
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
      
 5 
     | 
    
         
            +
              before(:all) do
         
     | 
| 
      
 6 
     | 
    
         
            +
                load_strategies
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       5 
9 
     | 
    
         
             
              it "should insert a Base object into the rack env" do
         
     | 
| 
       6 
10 
     | 
    
         
             
                env = env_with_params
         
     | 
| 
       7 
11 
     | 
    
         
             
                setup_rack(success_app).call(env)
         
     | 
| 
       8 
12 
     | 
    
         
             
                env["warden"].should be_an_instance_of(Warden::Proxy)
         
     | 
| 
       9 
13 
     | 
    
         
             
              end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
       11 
15 
     | 
    
         
             
              describe "user storage" do
         
     | 
| 
       12 
16 
     | 
    
         
             
                it "should take a user and store it in the provided session" do
         
     | 
| 
       13 
17 
     | 
    
         
             
                  session = {}
         
     | 
| 
         @@ -19,8 +23,8 @@ describe Warden::Manager do 
     | 
|
| 
       19 
23 
     | 
    
         
             
              describe "thrown auth" do
         
     | 
| 
       20 
24 
     | 
    
         
             
                before(:each) do
         
     | 
| 
       21 
25 
     | 
    
         
             
                  @basic_app = lambda{|env| [200,{'Content-Type' => 'text/plain'},'OK']}
         
     | 
| 
       22 
     | 
    
         
            -
                  @authd_app = lambda do |e| 
     | 
| 
       23 
     | 
    
         
            -
                    if e['warden'].authenticated? 
     | 
| 
      
 26 
     | 
    
         
            +
                  @authd_app = lambda do |e|
         
     | 
| 
      
 27 
     | 
    
         
            +
                    if e['warden'].authenticated?
         
     | 
| 
       24 
28 
     | 
    
         
             
                      [200,{'Content-Type' => 'text/plain'},"OK"]
         
     | 
| 
       25 
29 
     | 
    
         
             
                    else
         
     | 
| 
       26 
30 
     | 
    
         
             
                      [401,{'Content-Type' => 'text/plain'},"Fail From The App"]
         
     | 
| 
         @@ -29,7 +33,7 @@ describe Warden::Manager do 
     | 
|
| 
       29 
33 
     | 
    
         
             
                  @env = Rack::MockRequest.
         
     | 
| 
       30 
34 
     | 
    
         
             
                    env_for('/', 'HTTP_VERSION' => '1.1', 'REQUEST_METHOD' => 'GET')
         
     | 
| 
       31 
35 
     | 
    
         
             
                end # before(:each)
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
       33 
37 
     | 
    
         
             
                describe "Failure" do
         
     | 
| 
       34 
38 
     | 
    
         
             
                  it "should respond with a 401 response if the strategy fails authentication" do
         
     | 
| 
       35 
39 
     | 
    
         
             
                     env = env_with_params("/", :foo => "bar")
         
     | 
| 
         @@ -40,7 +44,7 @@ describe Warden::Manager do 
     | 
|
| 
       40 
44 
     | 
    
         
             
                     result = setup_rack(app, :failure_app => @fail_app).call(env)
         
     | 
| 
       41 
45 
     | 
    
         
             
                     result.first.should == 401
         
     | 
| 
       42 
46 
     | 
    
         
             
                  end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
       44 
48 
     | 
    
         
             
                  it "should use the failure message given to the failure method" do
         
     | 
| 
       45 
49 
     | 
    
         
             
                    env = env_with_params("/", {})
         
     | 
| 
       46 
50 
     | 
    
         
             
                    app = lambda do |env|
         
     | 
| 
         @@ -50,9 +54,9 @@ describe Warden::Manager do 
     | 
|
| 
       50 
54 
     | 
    
         
             
                    result = setup_rack(app, :failure_app => @fail_app).call(env)
         
     | 
| 
       51 
55 
     | 
    
         
             
                    result.last.should == ["You Fail!"]
         
     | 
| 
       52 
56 
     | 
    
         
             
                  end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
       54 
58 
     | 
    
         
             
                  it "should render the failure app when there's a failure" do
         
     | 
| 
       55 
     | 
    
         
            -
                    app = lambda do |e| 
     | 
| 
      
 59 
     | 
    
         
            +
                    app = lambda do |e|
         
     | 
| 
       56 
60 
     | 
    
         
             
                      throw(:warden, :action => :unauthenticated) unless e['warden'].authenticated?(:failz)
         
     | 
| 
       57 
61 
     | 
    
         
             
                    end
         
     | 
| 
       58 
62 
     | 
    
         
             
                    fail_app = lambda do |e|
         
     | 
| 
         @@ -62,21 +66,21 @@ describe Warden::Manager do 
     | 
|
| 
       62 
66 
     | 
    
         
             
                    result.last.should == ["Failure App"]
         
     | 
| 
       63 
67 
     | 
    
         
             
                  end
         
     | 
| 
       64 
68 
     | 
    
         
             
                end # failure
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
       66 
70 
     | 
    
         
             
              end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
       68 
72 
     | 
    
         
             
              describe "integrated strategies" do
         
     | 
| 
       69 
73 
     | 
    
         
             
                before(:each) do
         
     | 
| 
       70 
74 
     | 
    
         
             
                  RAS = Warden::Strategies unless defined?(RAS)
         
     | 
| 
       71 
75 
     | 
    
         
             
                  Warden::Strategies.clear!
         
     | 
| 
       72 
76 
     | 
    
         
             
                  @app = setup_rack do |env|
         
     | 
| 
       73 
77 
     | 
    
         
             
                    env['warden'].authenticate!(:foobar)
         
     | 
| 
       74 
     | 
    
         
            -
                    [200, {"Content-Type" => "text/plain"}, ["Foo Is A Winna"]] 
     | 
| 
      
 78 
     | 
    
         
            +
                    [200, {"Content-Type" => "text/plain"}, ["Foo Is A Winna"]]
         
     | 
| 
       75 
79 
     | 
    
         
             
                  end
         
     | 
| 
       76 
80 
     | 
    
         
             
                end
         
     | 
| 
       77 
81 
     | 
    
         | 
| 
       78 
82 
     | 
    
         
             
                describe "redirecting" do
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
       80 
84 
     | 
    
         
             
                  it "should redirect with a message" do
         
     | 
| 
       81 
85 
     | 
    
         
             
                    RAS.add(:foobar) do
         
     | 
| 
       82 
86 
     | 
    
         
             
                      def authenticate!
         
     | 
| 
         @@ -88,7 +92,7 @@ describe Warden::Manager do 
     | 
|
| 
       88 
92 
     | 
    
         
             
                    result[1]["Location"].should == "/foo/bar?foo=bar"
         
     | 
| 
       89 
93 
     | 
    
         
             
                    result[2].should == ["custom redirection message"]
         
     | 
| 
       90 
94 
     | 
    
         
             
                  end
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
       92 
96 
     | 
    
         
             
                  it "should redirect with a default message" do
         
     | 
| 
       93 
97 
     | 
    
         
             
                    RAS.add(:foobar) do
         
     | 
| 
       94 
98 
     | 
    
         
             
                      def authenticate!
         
     | 
| 
         @@ -100,7 +104,7 @@ describe Warden::Manager do 
     | 
|
| 
       100 
104 
     | 
    
         
             
                    result[1]['Location'].should == "/foo/bar?foo=bar"
         
     | 
| 
       101 
105 
     | 
    
         
             
                    result[2].should == ["You are being redirected to /foo/bar?foo=bar"]
         
     | 
| 
       102 
106 
     | 
    
         
             
                  end
         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
       104 
108 
     | 
    
         
             
                  it "should redirect with a permanent redirect" do
         
     | 
| 
       105 
109 
     | 
    
         
             
                    RAS.add(:foobar) do
         
     | 
| 
       106 
110 
     | 
    
         
             
                      def authenticate!
         
     | 
| 
         @@ -110,7 +114,7 @@ describe Warden::Manager do 
     | 
|
| 
       110 
114 
     | 
    
         
             
                    result = @app.call(env_with_params)
         
     | 
| 
       111 
115 
     | 
    
         
             
                    result[0].should == 301
         
     | 
| 
       112 
116 
     | 
    
         
             
                  end
         
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
       114 
118 
     | 
    
         
             
                  it "should redirect with a content type" do
         
     | 
| 
       115 
119 
     | 
    
         
             
                    RAS.add(:foobar) do
         
     | 
| 
       116 
120 
     | 
    
         
             
                      def authenticate!
         
     | 
| 
         @@ -122,7 +126,7 @@ describe Warden::Manager do 
     | 
|
| 
       122 
126 
     | 
    
         
             
                    result[1]["Location"].should == "/foo/bar?foo=bar"
         
     | 
| 
       123 
127 
     | 
    
         
             
                    result[1]["Content-Type"].should == "text/xml"
         
     | 
| 
       124 
128 
     | 
    
         
             
                  end
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
       126 
130 
     | 
    
         
             
                  it "should redirect with a default content type" do
         
     | 
| 
       127 
131 
     | 
    
         
             
                    RAS.add(:foobar) do
         
     | 
| 
       128 
132 
     | 
    
         
             
                      def authenticate!
         
     | 
| 
         @@ -135,7 +139,7 @@ describe Warden::Manager do 
     | 
|
| 
       135 
139 
     | 
    
         
             
                    result[1]["Content-Type"].should == "text/plain"
         
     | 
| 
       136 
140 
     | 
    
         
             
                  end
         
     | 
| 
       137 
141 
     | 
    
         
             
                end
         
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
       139 
143 
     | 
    
         
             
                describe "failing" do
         
     | 
| 
       140 
144 
     | 
    
         
             
                  it "should fail according to the failure app" do
         
     | 
| 
       141 
145 
     | 
    
         
             
                    RAS.add(:foobar) do
         
     | 
| 
         @@ -149,7 +153,7 @@ describe Warden::Manager do 
     | 
|
| 
       149 
153 
     | 
    
         
             
                    result[2].should == ["You Fail!"]
         
     | 
| 
       150 
154 
     | 
    
         
             
                    env['PATH_INFO'].should == "/unauthenticated"
         
     | 
| 
       151 
155 
     | 
    
         
             
                  end
         
     | 
| 
       152 
     | 
    
         
            -
             
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
       153 
157 
     | 
    
         
             
                  it "should allow you to customize the response" do
         
     | 
| 
       154 
158 
     | 
    
         
             
                    app = lambda do |e|
         
     | 
| 
       155 
159 
     | 
    
         
             
                      e['warden'].custom_failure!
         
     | 
| 
         @@ -160,7 +164,7 @@ describe Warden::Manager do 
     | 
|
| 
       160 
164 
     | 
    
         
             
                    result[0].should == 401
         
     | 
| 
       161 
165 
     | 
    
         
             
                    result[2].should == ["Fail From The App"]
         
     | 
| 
       162 
166 
     | 
    
         
             
                  end
         
     | 
| 
       163 
     | 
    
         
            -
             
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
       164 
168 
     | 
    
         
             
                  it "should render the failure application for a 401 if no custom_failure flag is set" do
         
     | 
| 
       165 
169 
     | 
    
         
             
                    app = lambda do |e|
         
     | 
| 
       166 
170 
     | 
    
         
             
                      [401,{'Content-Type' => 'text/plain'},["Fail From The App"]]
         
     | 
| 
         @@ -169,9 +173,9 @@ describe Warden::Manager do 
     | 
|
| 
       169 
173 
     | 
    
         
             
                    result[0].should == 401
         
     | 
| 
       170 
174 
     | 
    
         
             
                    result[2].should == ["You Fail!"]
         
     | 
| 
       171 
175 
     | 
    
         
             
                  end
         
     | 
| 
       172 
     | 
    
         
            -
             
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
       173 
177 
     | 
    
         
             
                end # failing
         
     | 
| 
       174 
     | 
    
         
            -
             
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
       175 
179 
     | 
    
         
             
                describe "custom rack response" do
         
     | 
| 
       176 
180 
     | 
    
         
             
                  it "should return a custom rack response" do
         
     | 
| 
       177 
181 
     | 
    
         
             
                    RAS.add(:foobar) do
         
     | 
| 
         @@ -185,7 +189,7 @@ describe Warden::Manager do 
     | 
|
| 
       185 
189 
     | 
    
         
             
                    result[2].should == ["Custom Stuff"]
         
     | 
| 
       186 
190 
     | 
    
         
             
                  end
         
     | 
| 
       187 
191 
     | 
    
         
             
                end
         
     | 
| 
       188 
     | 
    
         
            -
             
     | 
| 
      
 192 
     | 
    
         
            +
             
     | 
| 
       189 
193 
     | 
    
         
             
                describe "success" do
         
     | 
| 
       190 
194 
     | 
    
         
             
                  it "should pass through to the application when there is success" do
         
     | 
| 
       191 
195 
     | 
    
         
             
                    RAS.add(:foobar) do
         
     | 
| 
         @@ -198,7 +202,7 @@ describe Warden::Manager do 
     | 
|
| 
       198 
202 
     | 
    
         
             
                    result[0].should == 200
         
     | 
| 
       199 
203 
     | 
    
         
             
                    result[2].should == ["Foo Is A Winna"]
         
     | 
| 
       200 
204 
     | 
    
         
             
                  end
         
     | 
| 
       201 
     | 
    
         
            -
                end 
     | 
| 
      
 205 
     | 
    
         
            +
                end
         
     | 
| 
       202 
206 
     | 
    
         
             
              end # integrated strategies
         
     | 
| 
       203 
207 
     | 
    
         | 
| 
       204 
208 
     | 
    
         
             
            end
         
     | 
    
        data/spec/warden/proxy_spec.rb
    CHANGED
    
    | 
         @@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '/../spec_helper' 
     | 
|
| 
       3 
3 
     | 
    
         
             
            describe Warden::Proxy do
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
              before(:all) do
         
     | 
| 
       6 
     | 
    
         
            -
                 
     | 
| 
      
 6 
     | 
    
         
            +
                load_strategies
         
     | 
| 
       7 
7 
     | 
    
         
             
              end
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
              before(:each) do
         
     | 
| 
         @@ -54,7 +54,9 @@ describe Warden::Proxy do 
     | 
|
| 
       54 
54 
     | 
    
         
             
                      env['warden'].authenticate
         
     | 
| 
       55 
55 
     | 
    
         
             
                      env['warden'].should be_authenticated
         
     | 
| 
       56 
56 
     | 
    
         
             
                      env['warden.spec.strategies'].should == [:password]
         
     | 
| 
      
 57 
     | 
    
         
            +
                      valid_response
         
     | 
| 
       57 
58 
     | 
    
         
             
                    end
         
     | 
| 
      
 59 
     | 
    
         
            +
                    setup_rack(app).call(env)
         
     | 
| 
       58 
60 
     | 
    
         
             
                  end
         
     | 
| 
       59 
61 
     | 
    
         | 
| 
       60 
62 
     | 
    
         
             
                  it "should be false in my application" do
         
     | 
| 
         @@ -197,6 +199,7 @@ describe Warden::Proxy do 
     | 
|
| 
       197 
199 
     | 
    
         | 
| 
       198 
200 
     | 
    
         
             
                  before(:each) do
         
     | 
| 
       199 
201 
     | 
    
         
             
                    @env['rack.session']['warden.user.default.key'] = "A Previous User"
         
     | 
| 
      
 202 
     | 
    
         
            +
                    @env['warden.spec.strategies'] = []
         
     | 
| 
       200 
203 
     | 
    
         
             
                  end
         
     | 
| 
       201 
204 
     | 
    
         | 
| 
       202 
205 
     | 
    
         
             
                  it "should take the user from the session when logged in" do
         
     | 
| 
         @@ -207,7 +210,14 @@ describe Warden::Proxy do 
     | 
|
| 
       207 
210 
     | 
    
         
             
                    setup_rack(app).call(@env)
         
     | 
| 
       208 
211 
     | 
    
         
             
                  end
         
     | 
| 
       209 
212 
     | 
    
         | 
| 
       210 
     | 
    
         
            -
                  it "should not run strategies when the user exists in the session"
         
     | 
| 
      
 213 
     | 
    
         
            +
                  it "should not run strategies when the user exists in the session" do
         
     | 
| 
      
 214 
     | 
    
         
            +
                    app = lambda do |env|
         
     | 
| 
      
 215 
     | 
    
         
            +
                      env['warden'].authenticate!(:pass)
         
     | 
| 
      
 216 
     | 
    
         
            +
                      valid_response
         
     | 
| 
      
 217 
     | 
    
         
            +
                    end
         
     | 
| 
      
 218 
     | 
    
         
            +
                    setup_rack(app).call(@env)
         
     | 
| 
      
 219 
     | 
    
         
            +
                    @env['warden.spec.strategies'].should_not include(:pass)
         
     | 
| 
      
 220 
     | 
    
         
            +
                  end
         
     | 
| 
       211 
221 
     | 
    
         
             
                end
         
     | 
| 
       212 
222 
     | 
    
         
             
              end
         
     | 
| 
       213 
223 
     | 
    
         | 
| 
         @@ -335,8 +345,148 @@ describe Warden::Proxy do 
     | 
|
| 
       335 
345 
     | 
    
         
             
                  result.first.should == 401
         
     | 
| 
       336 
346 
     | 
    
         
             
                end
         
     | 
| 
       337 
347 
     | 
    
         | 
| 
       338 
     | 
    
         
            -
             
     | 
| 
      
 348 
     | 
    
         
            +
                describe "authenticated?" do
         
     | 
| 
      
 349 
     | 
    
         
            +
                  describe "positive authentication" do
         
     | 
| 
      
 350 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 351 
     | 
    
         
            +
                      @env['rack.session'] = {'warden.user.default.key' => 'defult_key'}
         
     | 
| 
      
 352 
     | 
    
         
            +
                      $captures = []
         
     | 
| 
      
 353 
     | 
    
         
            +
                    end
         
     | 
| 
      
 354 
     | 
    
         
            +
             
     | 
| 
      
 355 
     | 
    
         
            +
                    it "should return true when authenticated in the session" do
         
     | 
| 
      
 356 
     | 
    
         
            +
                      app = lambda do |e|
         
     | 
| 
      
 357 
     | 
    
         
            +
                        e['warden'].should be_authenticated
         
     | 
| 
      
 358 
     | 
    
         
            +
                      end
         
     | 
| 
      
 359 
     | 
    
         
            +
                      result = setup_rack(app).call(@env)
         
     | 
| 
      
 360 
     | 
    
         
            +
                    end
         
     | 
| 
      
 361 
     | 
    
         
            +
             
     | 
| 
      
 362 
     | 
    
         
            +
                    it "should yield to a block when the block is passed and authenticated" do
         
     | 
| 
      
 363 
     | 
    
         
            +
                      app = lambda do |e|
         
     | 
| 
      
 364 
     | 
    
         
            +
                        e['warden'].authenticated? do
         
     | 
| 
      
 365 
     | 
    
         
            +
                          $captures << :in_the_block
         
     | 
| 
      
 366 
     | 
    
         
            +
                        end
         
     | 
| 
      
 367 
     | 
    
         
            +
                      end
         
     | 
| 
      
 368 
     | 
    
         
            +
                      setup_rack(app).call(@env)
         
     | 
| 
      
 369 
     | 
    
         
            +
                      $captures.should == [:in_the_block]
         
     | 
| 
      
 370 
     | 
    
         
            +
                    end
         
     | 
| 
      
 371 
     | 
    
         
            +
             
     | 
| 
      
 372 
     | 
    
         
            +
                    it "should authenticate for a user in a different scope" do
         
     | 
| 
      
 373 
     | 
    
         
            +
                      @env['rack.session'] = {'warden.user.foo.key' => 'foo_key'}
         
     | 
| 
      
 374 
     | 
    
         
            +
                      app = lambda do |e|
         
     | 
| 
      
 375 
     | 
    
         
            +
                        e['warden'].authenticated?(:foo) do
         
     | 
| 
      
 376 
     | 
    
         
            +
                          $captures << :in_the_foo_block
         
     | 
| 
      
 377 
     | 
    
         
            +
                        end
         
     | 
| 
      
 378 
     | 
    
         
            +
                      end
         
     | 
| 
      
 379 
     | 
    
         
            +
                      setup_rack(app).call(@env)
         
     | 
| 
      
 380 
     | 
    
         
            +
                      $captures.should == [:in_the_foo_block]
         
     | 
| 
      
 381 
     | 
    
         
            +
                    end
         
     | 
| 
      
 382 
     | 
    
         
            +
                  end
         
     | 
| 
      
 383 
     | 
    
         
            +
             
     | 
| 
      
 384 
     | 
    
         
            +
                  describe "negative authentication" do
         
     | 
| 
      
 385 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 386 
     | 
    
         
            +
                      @env['rack.session'] = {'warden.foo.default.key' => 'foo_key'}
         
     | 
| 
      
 387 
     | 
    
         
            +
                      $captures = []
         
     | 
| 
      
 388 
     | 
    
         
            +
                    end
         
     | 
| 
      
 389 
     | 
    
         
            +
             
     | 
| 
      
 390 
     | 
    
         
            +
                    it "should return false when authenticated in the session" do
         
     | 
| 
      
 391 
     | 
    
         
            +
                      app = lambda do |e|
         
     | 
| 
      
 392 
     | 
    
         
            +
                        e['warden'].should_not be_authenticated
         
     | 
| 
      
 393 
     | 
    
         
            +
                      end
         
     | 
| 
      
 394 
     | 
    
         
            +
                      result = setup_rack(app).call(@env)
         
     | 
| 
      
 395 
     | 
    
         
            +
                    end
         
     | 
| 
      
 396 
     | 
    
         
            +
             
     | 
| 
      
 397 
     | 
    
         
            +
                    it "should not yield to a block when the block is passed and authenticated" do
         
     | 
| 
      
 398 
     | 
    
         
            +
                      app = lambda do |e|
         
     | 
| 
      
 399 
     | 
    
         
            +
                        e['warden'].authenticated? do
         
     | 
| 
      
 400 
     | 
    
         
            +
                          $captures << :in_the_block
         
     | 
| 
      
 401 
     | 
    
         
            +
                        end
         
     | 
| 
      
 402 
     | 
    
         
            +
                      end
         
     | 
| 
      
 403 
     | 
    
         
            +
                      setup_rack(app).call(@env)
         
     | 
| 
      
 404 
     | 
    
         
            +
                      $captures.should == []
         
     | 
| 
      
 405 
     | 
    
         
            +
                    end
         
     | 
| 
       339 
406 
     | 
    
         | 
| 
      
 407 
     | 
    
         
            +
                    it "should not yield for a user in a different scope" do
         
     | 
| 
      
 408 
     | 
    
         
            +
                      app = lambda do |e|
         
     | 
| 
      
 409 
     | 
    
         
            +
                        e['warden'].authenticated?(:bar) do
         
     | 
| 
      
 410 
     | 
    
         
            +
                          $captures << :in_the_bar_block
         
     | 
| 
      
 411 
     | 
    
         
            +
                        end
         
     | 
| 
      
 412 
     | 
    
         
            +
                      end
         
     | 
| 
      
 413 
     | 
    
         
            +
                      setup_rack(app).call(@env)
         
     | 
| 
      
 414 
     | 
    
         
            +
                      $captures.should == []
         
     | 
| 
      
 415 
     | 
    
         
            +
                    end
         
     | 
| 
      
 416 
     | 
    
         
            +
                  end
         
     | 
| 
      
 417 
     | 
    
         
            +
                end
         
     | 
| 
      
 418 
     | 
    
         
            +
             
     | 
| 
      
 419 
     | 
    
         
            +
             
     | 
| 
      
 420 
     | 
    
         
            +
                describe "unauthenticated?" do
         
     | 
| 
      
 421 
     | 
    
         
            +
                  describe "negative unauthentication" do
         
     | 
| 
      
 422 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 423 
     | 
    
         
            +
                      @env['rack.session'] = {'warden.user.default.key' => 'defult_key'}
         
     | 
| 
      
 424 
     | 
    
         
            +
                      $captures = []
         
     | 
| 
      
 425 
     | 
    
         
            +
                    end
         
     | 
| 
       340 
426 
     | 
    
         | 
| 
      
 427 
     | 
    
         
            +
                    it "should return false when authenticated in the session" do
         
     | 
| 
      
 428 
     | 
    
         
            +
                      app = lambda do |e|
         
     | 
| 
      
 429 
     | 
    
         
            +
                        e['warden'].should_not be_unauthenticated
         
     | 
| 
      
 430 
     | 
    
         
            +
                      end
         
     | 
| 
      
 431 
     | 
    
         
            +
                      result = setup_rack(app).call(@env)
         
     | 
| 
      
 432 
     | 
    
         
            +
                    end
         
     | 
| 
      
 433 
     | 
    
         
            +
             
     | 
| 
      
 434 
     | 
    
         
            +
                    it "should not yield to a block when the block is passed and authenticated" do
         
     | 
| 
      
 435 
     | 
    
         
            +
                      app = lambda do |e|
         
     | 
| 
      
 436 
     | 
    
         
            +
                        e['warden'].unauthenticated? do
         
     | 
| 
      
 437 
     | 
    
         
            +
                          $captures << :in_the_block
         
     | 
| 
      
 438 
     | 
    
         
            +
                        end
         
     | 
| 
      
 439 
     | 
    
         
            +
                      end
         
     | 
| 
      
 440 
     | 
    
         
            +
                      setup_rack(app).call(@env)
         
     | 
| 
      
 441 
     | 
    
         
            +
                      $captures.should == []
         
     | 
| 
      
 442 
     | 
    
         
            +
                    end
         
     | 
| 
      
 443 
     | 
    
         
            +
             
     | 
| 
      
 444 
     | 
    
         
            +
                    it "should not yield to the block for a user in a different scope" do
         
     | 
| 
      
 445 
     | 
    
         
            +
                      @env['rack.session'] = {'warden.user.foo.key' => 'foo_key'}
         
     | 
| 
      
 446 
     | 
    
         
            +
                      app = lambda do |e|
         
     | 
| 
      
 447 
     | 
    
         
            +
                        e['warden'].unauthenticated?(:foo) do
         
     | 
| 
      
 448 
     | 
    
         
            +
                          $captures << :in_the_foo_block
         
     | 
| 
      
 449 
     | 
    
         
            +
                        end
         
     | 
| 
      
 450 
     | 
    
         
            +
                      end
         
     | 
| 
      
 451 
     | 
    
         
            +
                      setup_rack(app).call(@env)
         
     | 
| 
      
 452 
     | 
    
         
            +
                      $captures.should == []
         
     | 
| 
      
 453 
     | 
    
         
            +
                    end
         
     | 
| 
      
 454 
     | 
    
         
            +
                  end
         
     | 
| 
      
 455 
     | 
    
         
            +
             
     | 
| 
      
 456 
     | 
    
         
            +
                  describe "positive unauthentication" do
         
     | 
| 
      
 457 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 458 
     | 
    
         
            +
                      @env['rack.session'] = {'warden.foo.default.key' => 'foo_key'}
         
     | 
| 
      
 459 
     | 
    
         
            +
                      $captures = []
         
     | 
| 
      
 460 
     | 
    
         
            +
                    end
         
     | 
| 
      
 461 
     | 
    
         
            +
             
     | 
| 
      
 462 
     | 
    
         
            +
                    it "should return false when unauthenticated in the session" do
         
     | 
| 
      
 463 
     | 
    
         
            +
                      app = lambda do |e|
         
     | 
| 
      
 464 
     | 
    
         
            +
                        e['warden'].should be_unauthenticated
         
     | 
| 
      
 465 
     | 
    
         
            +
                      end
         
     | 
| 
      
 466 
     | 
    
         
            +
                      result = setup_rack(app).call(@env)
         
     | 
| 
      
 467 
     | 
    
         
            +
                    end
         
     | 
| 
      
 468 
     | 
    
         
            +
             
     | 
| 
      
 469 
     | 
    
         
            +
                    it "should yield to a block when the block is passed and authenticated" do
         
     | 
| 
      
 470 
     | 
    
         
            +
                      app = lambda do |e|
         
     | 
| 
      
 471 
     | 
    
         
            +
                        e['warden'].unauthenticated? do
         
     | 
| 
      
 472 
     | 
    
         
            +
                          $captures << :in_the_block
         
     | 
| 
      
 473 
     | 
    
         
            +
                        end
         
     | 
| 
      
 474 
     | 
    
         
            +
                      end
         
     | 
| 
      
 475 
     | 
    
         
            +
                      setup_rack(app).call(@env)
         
     | 
| 
      
 476 
     | 
    
         
            +
                      $captures.should == [:in_the_block]
         
     | 
| 
      
 477 
     | 
    
         
            +
                    end
         
     | 
| 
      
 478 
     | 
    
         
            +
             
     | 
| 
      
 479 
     | 
    
         
            +
                    it "should yield for a user in a different scope" do
         
     | 
| 
      
 480 
     | 
    
         
            +
                      app = lambda do |e|
         
     | 
| 
      
 481 
     | 
    
         
            +
                        e['warden'].unauthenticated?(:bar) do
         
     | 
| 
      
 482 
     | 
    
         
            +
                          $captures << :in_the_bar_block
         
     | 
| 
      
 483 
     | 
    
         
            +
                        end
         
     | 
| 
      
 484 
     | 
    
         
            +
                      end
         
     | 
| 
      
 485 
     | 
    
         
            +
                      setup_rack(app).call(@env)
         
     | 
| 
      
 486 
     | 
    
         
            +
                      $captures.should == [:in_the_bar_block]
         
     | 
| 
      
 487 
     | 
    
         
            +
                    end
         
     | 
| 
      
 488 
     | 
    
         
            +
                  end
         
     | 
| 
      
 489 
     | 
    
         
            +
                end
         
     | 
| 
      
 490 
     | 
    
         
            +
              end
         
     | 
| 
       341 
491 
     | 
    
         | 
| 
       342 
492 
     | 
    
         
             
            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. 
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "0.5.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-10- 
     | 
| 
      
 12 
     | 
    
         
            +
              s.date = %q{2009-10-21}
         
     | 
| 
       13 
13 
     | 
    
         
             
              s.email = %q{has.sox@gmail.com}
         
     | 
| 
       14 
14 
     | 
    
         
             
              s.extra_rdoc_files = [
         
     | 
| 
       15 
15 
     | 
    
         
             
                "LICENSE",
         
     | 
| 
         @@ -17,6 +17,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       17 
17 
     | 
    
         
             
              ]
         
     | 
| 
       18 
18 
     | 
    
         
             
              s.files = [
         
     | 
| 
       19 
19 
     | 
    
         
             
                ".gitignore",
         
     | 
| 
      
 20 
     | 
    
         
            +
                 "History.rdoc",
         
     | 
| 
       20 
21 
     | 
    
         
             
                 "LICENSE",
         
     | 
| 
       21 
22 
     | 
    
         
             
                 "README.textile",
         
     | 
| 
       22 
23 
     | 
    
         
             
                 "Rakefile",
         
     | 
    
        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.5.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-10- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2009-10-21 00:00:00 +11:00
         
     | 
| 
       13 
13 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -33,6 +33,7 @@ extra_rdoc_files: 
     | 
|
| 
       33 
33 
     | 
    
         
             
            - README.textile
         
     | 
| 
       34 
34 
     | 
    
         
             
            files: 
         
     | 
| 
       35 
35 
     | 
    
         
             
            - .gitignore
         
     | 
| 
      
 36 
     | 
    
         
            +
            - History.rdoc
         
     | 
| 
       36 
37 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       37 
38 
     | 
    
         
             
            - README.textile
         
     | 
| 
       38 
39 
     | 
    
         
             
            - Rakefile
         
     |