warden 0.10.7 → 1.0.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 +23 -0
- data/Rakefile +1 -1
- data/TODO.textile +1 -3
- data/lib/warden/config.rb +1 -1
- data/lib/warden/errors.rb +0 -5
- data/lib/warden/hooks.rb +0 -1
- data/lib/warden/proxy.rb +28 -13
- data/lib/warden/strategies/base.rb +6 -0
- data/lib/warden/version.rb +1 -1
- data/spec/helpers/request_helper.rb +5 -7
- data/spec/helpers/strategies/single.rb +12 -0
- data/spec/warden/proxy_spec.rb +107 -63
- data/warden.gemspec +7 -5
- metadata +10 -10
    
        data/History.rdoc
    CHANGED
    
    | @@ -1,3 +1,26 @@ | |
| 1 | 
            +
            == Version 1.0.0
         | 
| 2 | 
            +
            * Bump!
         | 
| 3 | 
            +
            * Allow strategies to configure if user should be stored or not
         | 
| 4 | 
            +
            * Force session id renewal when user is set
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            == Version 0.10.7
         | 
| 7 | 
            +
            * Performance boost. config object to use raw accessors
         | 
| 8 | 
            +
            * Add per strategy storage option
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            == Version 0.10.6 / 0.10.7 / 2010-05-22
         | 
| 11 | 
            +
            * Bugfix set_user was not respecting logouts in hooks
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            == Version 0.10.4 / 0.10.5 / 2010-05-20
         | 
| 14 | 
            +
            * Add action specifying in scope_defaults
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            == Version 0.10.3 / 2010-03-01
         | 
| 17 | 
            +
            * Bugfix prevent halted winning strategy from being skipped in subsequent runs
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            == Version 0.10.2 / 2010-03-26
         | 
| 20 | 
            +
            * Halt on fail!.  Add fail to allow cascading
         | 
| 21 | 
            +
            * cache the winning strategy
         | 
| 22 | 
            +
            * Make the config object Dupable
         | 
| 23 | 
            +
             | 
| 1 24 | 
             
            == Version 0.10.1 / 2010-03-23
         | 
| 2 25 | 
             
            * Merge previous from master
         | 
| 3 26 | 
             
            * tag
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -15,7 +15,7 @@ begin | |
| 15 15 | 
             
                gem.authors = ["Daniel Neighman"]
         | 
| 16 16 | 
             
                gem.rubyforge_project = "warden"
         | 
| 17 17 | 
             
                gem.add_dependency "rack", ">= 1.0.0"
         | 
| 18 | 
            -
                gem.add_development_dependency "rspec", " | 
| 18 | 
            +
                gem.add_development_dependency "rspec", "~>1"
         | 
| 19 19 | 
             
              end
         | 
| 20 20 |  | 
| 21 21 | 
             
              Jeweler::GemcutterTasks.new
         | 
    
        data/TODO.textile
    CHANGED
    
    
    
        data/lib/warden/config.rb
    CHANGED
    
    | @@ -47,7 +47,7 @@ module Warden | |
| 47 47 | 
             
                  deep_dup(:default_strategies, other)
         | 
| 48 48 | 
             
                end
         | 
| 49 49 |  | 
| 50 | 
            -
                # Do not raise an error if a missing strategy is given | 
| 50 | 
            +
                # Do not raise an error if a missing strategy is given.
         | 
| 51 51 | 
             
                # :api: plugin
         | 
| 52 52 | 
             
                def silence_missing_strategies!
         | 
| 53 53 | 
             
                  self[:silence_missing_strategies] = true
         | 
    
        data/lib/warden/errors.rb
    CHANGED
    
    
    
        data/lib/warden/hooks.rb
    CHANGED
    
    
    
        data/lib/warden/proxy.rb
    CHANGED
    
    | @@ -15,6 +15,9 @@ module Warden | |
| 15 15 | 
             
                extend ::Forwardable
         | 
| 16 16 | 
             
                include ::Warden::Mixins::Common
         | 
| 17 17 |  | 
| 18 | 
            +
                ENV_WARDEN_ERRORS = 'warden.errors'.freeze
         | 
| 19 | 
            +
                ENV_SESSION_OPTIONS = 'rack.session.options'.freeze
         | 
| 20 | 
            +
             | 
| 18 21 | 
             
                # :api: private
         | 
| 19 22 | 
             
                def_delegators :winning_strategy, :headers, :status, :custom_response
         | 
| 20 23 |  | 
| @@ -25,10 +28,15 @@ module Warden | |
| 25 28 | 
             
                  @env, @users, @winning_strategies = env, {}, {}
         | 
| 26 29 | 
             
                  @manager, @config = manager, manager.config.dup
         | 
| 27 30 | 
             
                  @strategies = Hash.new { |h,k| h[k] = {} }
         | 
| 28 | 
            -
                  errors # setup the error object in the session
         | 
| 29 31 | 
             
                  manager._run_callbacks(:on_request, self)
         | 
| 30 32 | 
             
                end
         | 
| 31 33 |  | 
| 34 | 
            +
                # Lazily initiate errors object in session.
         | 
| 35 | 
            +
                # :api: public
         | 
| 36 | 
            +
                def errors
         | 
| 37 | 
            +
                  @env[ENV_WARDEN_ERRORS] ||= Errors.new
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 32 40 | 
             
                # Points to a SessionSerializer instance responsible for handling
         | 
| 33 41 | 
             
                # everything related with storing, fetching and removing the user
         | 
| 34 42 | 
             
                # session.
         | 
| @@ -140,14 +148,17 @@ module Warden | |
| 140 148 | 
             
                #
         | 
| 141 149 | 
             
                # :api: public
         | 
| 142 150 | 
             
                def set_user(user, opts = {})
         | 
| 143 | 
            -
                  return unless user
         | 
| 144 151 | 
             
                  scope = (opts[:scope] ||= @config.default_scope)
         | 
| 145 152 |  | 
| 146 153 | 
             
                  # Get the default options from the master configuration for the given scope
         | 
| 147 | 
            -
                  opts = @config | 
| 148 | 
            -
             | 
| 154 | 
            +
                  opts = (@config[:scope_defaults][scope] || {}).merge(opts)
         | 
| 149 155 | 
             
                  @users[scope] = user
         | 
| 150 | 
            -
             | 
| 156 | 
            +
             | 
| 157 | 
            +
                  unless opts[:store] == false
         | 
| 158 | 
            +
                    options = env[ENV_SESSION_OPTIONS]
         | 
| 159 | 
            +
                    options[:renew] = true if options
         | 
| 160 | 
            +
                    session_serializer.store(user, scope)
         | 
| 161 | 
            +
                  end
         | 
| 151 162 |  | 
| 152 163 | 
             
                  opts[:event] ||= :set_user
         | 
| 153 164 | 
             
                  manager._run_callbacks(:after_set_user, user, self, opts)
         | 
| @@ -167,8 +178,10 @@ module Warden | |
| 167 178 | 
             
                #
         | 
| 168 179 | 
             
                # :api: public
         | 
| 169 180 | 
             
                def user(scope = @config.default_scope)
         | 
| 170 | 
            -
                  @users[scope] ||=  | 
| 171 | 
            -
             | 
| 181 | 
            +
                  @users[scope] ||= begin
         | 
| 182 | 
            +
                    user = session_serializer.fetch(scope)
         | 
| 183 | 
            +
                    set_user(user, :scope => scope, :event => :fetch) if user
         | 
| 184 | 
            +
                  end
         | 
| 172 185 | 
             
                end
         | 
| 173 186 |  | 
| 174 187 | 
             
                # Provides a scoped session data for authenticated users.
         | 
| @@ -258,6 +271,7 @@ module Warden | |
| 258 271 | 
             
                  _run_strategies_for(scope, args)
         | 
| 259 272 |  | 
| 260 273 | 
             
                  if winning_strategy && winning_strategy.user
         | 
| 274 | 
            +
                    opts[:store] = opts.fetch(:store, winning_strategy.store?)
         | 
| 261 275 | 
             
                    set_user(winning_strategy.user, opts.merge!(:event => :authentication))
         | 
| 262 276 | 
             
                  end
         | 
| 263 277 |  | 
| @@ -267,7 +281,7 @@ module Warden | |
| 267 281 | 
             
                def _retrieve_scope_and_opts(args) #:nodoc:
         | 
| 268 282 | 
             
                  opts  = args.last.is_a?(Hash) ? args.pop : {}
         | 
| 269 283 | 
             
                  scope = opts[:scope] || @config.default_scope
         | 
| 270 | 
            -
                  opts  = (config[:scope_defaults][scope] || {}).merge(opts)
         | 
| 284 | 
            +
                  opts  = (@config[:scope_defaults][scope] || {}).merge(opts)
         | 
| 271 285 | 
             
                  [scope, opts]
         | 
| 272 286 | 
             
                end
         | 
| 273 287 |  | 
| @@ -276,9 +290,12 @@ module Warden | |
| 276 290 | 
             
                  self.winning_strategy = @winning_strategies[scope]
         | 
| 277 291 | 
             
                  return if winning_strategy && winning_strategy.halted?
         | 
| 278 292 |  | 
| 279 | 
            -
                   | 
| 293 | 
            +
                  if args.empty?
         | 
| 294 | 
            +
                    defaults   = @config[:default_strategies]
         | 
| 295 | 
            +
                    strategies = defaults[scope] || defaults[:_all]
         | 
| 296 | 
            +
                  end
         | 
| 280 297 |  | 
| 281 | 
            -
                  strategies.each do |name|
         | 
| 298 | 
            +
                  (strategies || args).each do |name|
         | 
| 282 299 | 
             
                    strategy = _fetch_strategy(name, scope)
         | 
| 283 300 | 
             
                    next unless strategy && !strategy.performed? && strategy.valid?
         | 
| 284 301 |  | 
| @@ -290,9 +307,7 @@ module Warden | |
| 290 307 |  | 
| 291 308 | 
             
                # Fetchs strategies and keep them in a hash cache.
         | 
| 292 309 | 
             
                def _fetch_strategy(name, scope)
         | 
| 293 | 
            -
                   | 
| 294 | 
            -
             | 
| 295 | 
            -
                  @strategies[scope][name] = if klass = Warden::Strategies[name]
         | 
| 310 | 
            +
                  @strategies[scope][name] ||= if klass = Warden::Strategies[name]
         | 
| 296 311 | 
             
                    klass.new(@env, scope)
         | 
| 297 312 | 
             
                  elsif @config.silence_missing_strategies?
         | 
| 298 313 | 
             
                    nil
         | 
| @@ -98,6 +98,12 @@ module Warden | |
| 98 98 | 
             
                    !!@halted
         | 
| 99 99 | 
             
                  end
         | 
| 100 100 |  | 
| 101 | 
            +
                  # Checks to see if a strategy should result in a permanent login
         | 
| 102 | 
            +
                  # :api: public
         | 
| 103 | 
            +
                  def store?
         | 
| 104 | 
            +
                    true
         | 
| 105 | 
            +
                  end
         | 
| 106 | 
            +
             | 
| 101 107 | 
             
                  # A simple method to return from authenticate! if you want to ignore this strategy
         | 
| 102 108 | 
             
                  # :api: public
         | 
| 103 109 | 
             
                  def pass; end
         | 
    
        data/lib/warden/version.rb
    CHANGED
    
    
| @@ -1,14 +1,12 @@ | |
| 1 1 | 
             
            # encoding: utf-8
         | 
| 2 2 | 
             
            module Warden::Spec
         | 
| 3 3 | 
             
              module Helpers
         | 
| 4 | 
            -
             | 
| 5 4 | 
             
                FAILURE_APP = lambda{|e|[401, {"Content-Type" => "text/plain"}, ["You Fail!"]] }
         | 
| 6 5 |  | 
| 7 | 
            -
                def env_with_params(path = "/", params = {})
         | 
| 8 | 
            -
                  method = params. | 
| 9 | 
            -
                   | 
| 10 | 
            -
             | 
| 11 | 
            -
                                                 'REQUEST_METHOD' => "#{method}")
         | 
| 6 | 
            +
                def env_with_params(path = "/", params = {}, env = {})
         | 
| 7 | 
            +
                  method = params.delete(:method) || "GET"
         | 
| 8 | 
            +
                  env = { 'HTTP_VERSION' => '1.1', 'REQUEST_METHOD' => "#{method}" }.merge(env)
         | 
| 9 | 
            +
                  Rack::MockRequest.env_for("#{path}?#{Rack::Utils.build_query(params)}", env)
         | 
| 12 10 | 
             
                end
         | 
| 13 11 |  | 
| 14 12 | 
             
                def setup_rack(app = nil, opts = {}, &block)
         | 
| @@ -19,7 +17,7 @@ module Warden::Spec | |
| 19 17 | 
             
                  opts[:default_serializers] ||= [:session]
         | 
| 20 18 |  | 
| 21 19 | 
             
                  Rack::Builder.new do
         | 
| 22 | 
            -
                    use Warden::Spec::Helpers::Session
         | 
| 20 | 
            +
                    use opts[:session] || Warden::Spec::Helpers::Session
         | 
| 23 21 | 
             
                    use Warden::Manager, opts
         | 
| 24 22 | 
             
                    run app
         | 
| 25 23 | 
             
                  end
         | 
    
        data/spec/warden/proxy_spec.rb
    CHANGED
    
    | @@ -17,8 +17,7 @@ describe Warden::Proxy do | |
| 17 17 | 
             
                    [401,{'Content-Type' => 'text/plain'},"You Fail"]
         | 
| 18 18 | 
             
                  end
         | 
| 19 19 | 
             
                end
         | 
| 20 | 
            -
                @env =  | 
| 21 | 
            -
                  env_for('/', 'HTTP_VERSION' => '1.1', 'REQUEST_METHOD' => 'GET')
         | 
| 20 | 
            +
                @env = env_with_params("/")
         | 
| 22 21 | 
             
              end # before(:each)
         | 
| 23 22 |  | 
| 24 23 | 
             
              describe "authentication" do
         | 
| @@ -70,39 +69,35 @@ describe Warden::Proxy do | |
| 70 69 | 
             
                end
         | 
| 71 70 |  | 
| 72 71 | 
             
                it "should raise error on missing strategies" do
         | 
| 73 | 
            -
                  env = env_with_params('/')
         | 
| 74 72 | 
             
                  app = lambda do |env|
         | 
| 75 73 | 
             
                    env['warden'].authenticate(:unknown)
         | 
| 76 74 | 
             
                  end
         | 
| 77 75 | 
             
                  lambda {
         | 
| 78 | 
            -
                    setup_rack(app).call(env)
         | 
| 76 | 
            +
                    setup_rack(app).call(@env)
         | 
| 79 77 | 
             
                  }.should raise_error(RuntimeError, "Invalid strategy unknown")
         | 
| 80 78 | 
             
                end
         | 
| 81 79 |  | 
| 82 80 | 
             
                it "should not raise error on missing strategies if silencing" do
         | 
| 83 | 
            -
                  env = env_with_params('/')
         | 
| 84 81 | 
             
                  app = lambda do |env|
         | 
| 85 82 | 
             
                    env['warden'].authenticate
         | 
| 86 83 | 
             
                    valid_response
         | 
| 87 84 | 
             
                  end
         | 
| 88 85 | 
             
                  lambda {
         | 
| 89 | 
            -
                    setup_rack(app, :silence_missing_strategies => true, :default_strategies => [:unknown]).call(env)
         | 
| 86 | 
            +
                    setup_rack(app, :silence_missing_strategies => true, :default_strategies => [:unknown]).call(@env)
         | 
| 90 87 | 
             
                  }.should_not raise_error
         | 
| 91 88 | 
             
                end
         | 
| 92 89 |  | 
| 93 90 | 
             
                it "should allow me to get access to the user at warden.user." do
         | 
| 94 | 
            -
                  env = env_with_params("/")
         | 
| 95 91 | 
             
                  app = lambda do |env|
         | 
| 96 92 | 
             
                    env['warden'].authenticate(:pass)
         | 
| 97 93 | 
             
                    env['warden'].should be_authenticated
         | 
| 98 94 | 
             
                    env['warden.spec.strategies'].should == [:pass]
         | 
| 99 95 | 
             
                    valid_response
         | 
| 100 96 | 
             
                  end
         | 
| 101 | 
            -
                  setup_rack(app).call(env)
         | 
| 97 | 
            +
                  setup_rack(app).call(@env)
         | 
| 102 98 | 
             
                end
         | 
| 103 99 |  | 
| 104 100 | 
             
                it "should run strategies when authenticate? is asked" do
         | 
| 105 | 
            -
                  env = env_with_params("/")
         | 
| 106 101 | 
             
                  app = lambda do |env|
         | 
| 107 102 | 
             
                    env['warden'].should_not be_authenticated
         | 
| 108 103 | 
             
                    env['warden'].authenticate?(:pass)
         | 
| @@ -110,29 +105,27 @@ describe Warden::Proxy do | |
| 110 105 | 
             
                    env['warden.spec.strategies'].should == [:pass]
         | 
| 111 106 | 
             
                    valid_response
         | 
| 112 107 | 
             
                  end
         | 
| 113 | 
            -
                  setup_rack(app).call(env)
         | 
| 108 | 
            +
                  setup_rack(app).call(@env)
         | 
| 114 109 | 
             
                end
         | 
| 115 110 |  | 
| 116 111 | 
             
                it "should properly send the scope to the strategy" do
         | 
| 117 | 
            -
                  env = env_with_params("/")
         | 
| 118 112 | 
             
                  app = lambda do |env|
         | 
| 119 113 | 
             
                    env['warden'].authenticate(:pass, :scope => :failz)
         | 
| 120 114 | 
             
                    env['warden'].should_not be_authenticated
         | 
| 121 115 | 
             
                    env['warden.spec.strategies'].should == [:pass]
         | 
| 122 116 | 
             
                    valid_response
         | 
| 123 117 | 
             
                  end
         | 
| 124 | 
            -
                  setup_rack(app).call(env)
         | 
| 118 | 
            +
                  setup_rack(app).call(@env)
         | 
| 125 119 | 
             
                end
         | 
| 126 120 |  | 
| 127 121 | 
             
                it "should try multiple authentication strategies" do
         | 
| 128 | 
            -
                  env = env_with_params("/")
         | 
| 129 122 | 
             
                  app = lambda do |env|
         | 
| 130 123 | 
             
                    env['warden'].authenticate(:password,:pass)
         | 
| 131 124 | 
             
                    env['warden'].should be_authenticated
         | 
| 132 125 | 
             
                    env['warden.spec.strategies'].should == [:password, :pass]
         | 
| 133 126 | 
             
                    valid_response
         | 
| 134 127 | 
             
                  end
         | 
| 135 | 
            -
                  setup_rack(app).call(env)
         | 
| 128 | 
            +
                  setup_rack(app).call(@env)
         | 
| 136 129 | 
             
                end
         | 
| 137 130 |  | 
| 138 131 | 
             
                it "should look for an active user in the session with authenticate" do
         | 
| @@ -141,9 +134,8 @@ describe Warden::Proxy do | |
| 141 134 | 
             
                    env['warden'].authenticate(:pass)
         | 
| 142 135 | 
             
                    valid_response
         | 
| 143 136 | 
             
                  end
         | 
| 144 | 
            -
                  env | 
| 145 | 
            -
                   | 
| 146 | 
            -
                  env['warden'].user.should == "foo as a user"
         | 
| 137 | 
            +
                  setup_rack(app).call(@env)
         | 
| 138 | 
            +
                  @env['warden'].user.should == "foo as a user"
         | 
| 147 139 | 
             
                end
         | 
| 148 140 |  | 
| 149 141 | 
             
                it "should look for an active user in the session with authenticate?" do
         | 
| @@ -152,9 +144,8 @@ describe Warden::Proxy do | |
| 152 144 | 
             
                    env['warden'].authenticate?(:pass, :scope => :foo_scope)
         | 
| 153 145 | 
             
                    valid_response
         | 
| 154 146 | 
             
                  end
         | 
| 155 | 
            -
                  env | 
| 156 | 
            -
                   | 
| 157 | 
            -
                  env['warden'].user(:foo_scope).should == "a foo user"
         | 
| 147 | 
            +
                  setup_rack(app).call(@env)
         | 
| 148 | 
            +
                  @env['warden'].user(:foo_scope).should == "a foo user"
         | 
| 158 149 | 
             
                end
         | 
| 159 150 |  | 
| 160 151 | 
             
                it "should look for an active user in the session with authenticate!" do
         | 
| @@ -163,9 +154,8 @@ describe Warden::Proxy do | |
| 163 154 | 
             
                    env['warden'].authenticate!(:pass, :scope => :foo_scope)
         | 
| 164 155 | 
             
                    valid_response
         | 
| 165 156 | 
             
                  end
         | 
| 166 | 
            -
                  env | 
| 167 | 
            -
                   | 
| 168 | 
            -
                  env['warden'].user(:foo_scope).should == "a foo user"
         | 
| 157 | 
            +
                  setup_rack(app).call(@env)
         | 
| 158 | 
            +
                  @env['warden'].user(:foo_scope).should == "a foo user"
         | 
| 169 159 | 
             
                end
         | 
| 170 160 |  | 
| 171 161 | 
             
                it "should throw an error when authenticate!" do
         | 
| @@ -173,8 +163,7 @@ describe Warden::Proxy do | |
| 173 163 | 
             
                    env['warden'].authenticate!(:pass, :scope => :failz)
         | 
| 174 164 | 
             
                    raise "OMG"
         | 
| 175 165 | 
             
                  end
         | 
| 176 | 
            -
                  env | 
| 177 | 
            -
                  setup_rack(app).call(env)
         | 
| 166 | 
            +
                  setup_rack(app).call(@env)
         | 
| 178 167 | 
             
                end
         | 
| 179 168 |  | 
| 180 169 | 
             
                it "should login 2 different users from the session" do
         | 
| @@ -186,11 +175,10 @@ describe Warden::Proxy do | |
| 186 175 | 
             
                    env['warden'].should_not be_authenticated # default scope
         | 
| 187 176 | 
             
                    valid_response
         | 
| 188 177 | 
             
                  end
         | 
| 189 | 
            -
                  env | 
| 190 | 
            -
                   | 
| 191 | 
            -
                  env['warden'].user(: | 
| 192 | 
            -
                  env['warden'].user | 
| 193 | 
            -
                  env['warden'].user.should be_nil
         | 
| 178 | 
            +
                  setup_rack(app).call(@env)
         | 
| 179 | 
            +
                  @env['warden'].user(:foo).should == 'foo user'
         | 
| 180 | 
            +
                  @env['warden'].user(:bar).should == 'bar user'
         | 
| 181 | 
            +
                  @env['warden'].user.should be_nil
         | 
| 194 182 | 
             
                end
         | 
| 195 183 |  | 
| 196 184 | 
             
                it "should not authenticate other scopes just because the first is authenticated" do
         | 
| @@ -201,14 +189,66 @@ describe Warden::Proxy do | |
| 201 189 | 
             
                    env['warden'].should_not be_authenticated(:bar)
         | 
| 202 190 | 
             
                    valid_response
         | 
| 203 191 | 
             
                  end
         | 
| 204 | 
            -
                  env | 
| 205 | 
            -
             | 
| 192 | 
            +
                  setup_rack(app).call(@env)
         | 
| 193 | 
            +
                end
         | 
| 194 | 
            +
             | 
| 195 | 
            +
                SID_REGEXP = /rack\.session=([^;]*);/
         | 
| 196 | 
            +
             | 
| 197 | 
            +
                it "should renew session" do
         | 
| 198 | 
            +
                  app = lambda do |env|
         | 
| 199 | 
            +
                    env["rack.session"]["counter"] ||= 0
         | 
| 200 | 
            +
                    env["rack.session"]["counter"] += 1
         | 
| 201 | 
            +
                    if env["warden.on"]
         | 
| 202 | 
            +
                      env["warden"].authenticate!(:pass) 
         | 
| 203 | 
            +
                      env['warden'].should be_authenticated
         | 
| 204 | 
            +
                    end
         | 
| 205 | 
            +
                    valid_response
         | 
| 206 | 
            +
                  end
         | 
| 207 | 
            +
             | 
| 208 | 
            +
                  # Setup a rack app with Pool session.
         | 
| 209 | 
            +
                  app = setup_rack(app, :session => Rack::Session::Pool).to_app
         | 
| 210 | 
            +
                  response = app.call(@env)
         | 
| 211 | 
            +
                  @env["rack.session"]["counter"].should == 1
         | 
| 212 | 
            +
             | 
| 213 | 
            +
                  # Ensure a cookie was given back
         | 
| 214 | 
            +
                  cookie = response[1]["Set-Cookie"]
         | 
| 215 | 
            +
                  cookie.should_not be_nil
         | 
| 216 | 
            +
             | 
| 217 | 
            +
                  # Ensure a session id was given
         | 
| 218 | 
            +
                  sid = cookie.match(SID_REGEXP)[1]
         | 
| 219 | 
            +
                  sid.should_not be_nil
         | 
| 220 | 
            +
             | 
| 221 | 
            +
                  # Do another request, but now passing the session id cookie
         | 
| 222 | 
            +
                  env = env_with_params("/", {}, "HTTP_COOKIE" => cookie)
         | 
| 223 | 
            +
                  response = app.call(env)
         | 
| 224 | 
            +
                  env["rack.session"]["counter"].should == 2
         | 
| 225 | 
            +
             | 
| 226 | 
            +
                  # Depending on rack version, a cookie will be returned with the
         | 
| 227 | 
            +
                  # same session id or no cookie is given back (becase it did not change).
         | 
| 228 | 
            +
                  # If we don't get any of these two behaviors, raise an error.
         | 
| 229 | 
            +
                  new_cookie = response[1]["Set-Cookie"]
         | 
| 230 | 
            +
                  if new_cookie && new_cookie.match(SID_REGEXP)[1] != sid
         | 
| 231 | 
            +
                    raise "Expected a cookie to not be sent or session id to match"
         | 
| 232 | 
            +
                  end
         | 
| 233 | 
            +
             | 
| 234 | 
            +
                  # Do another request, giving a cookie but turning on warden authentication
         | 
| 235 | 
            +
                  env = env_with_params("/", {}, "HTTP_COOKIE" => cookie, "warden.on" => true)
         | 
| 236 | 
            +
                  response = app.call(env)
         | 
| 237 | 
            +
                  @env["rack.session"]["counter"].should == 3
         | 
| 238 | 
            +
             | 
| 239 | 
            +
                  # Regardless of rack version, a cookie should be sent back
         | 
| 240 | 
            +
                  new_cookie = response[1]["Set-Cookie"]
         | 
| 241 | 
            +
                  new_cookie.should_not be_nil
         | 
| 242 | 
            +
             | 
| 243 | 
            +
                  # And the session id in this cookie should not be the same as the previous one
         | 
| 244 | 
            +
                  new_sid = new_cookie.match(SID_REGEXP)[1]
         | 
| 245 | 
            +
                  new_sid.should_not be_nil
         | 
| 246 | 
            +
                  new_sid.should_not == sid
         | 
| 206 247 | 
             
                end
         | 
| 207 248 | 
             
              end
         | 
| 208 249 |  | 
| 209 250 | 
             
              describe "authentication cache" do
         | 
| 210 251 | 
             
                it "should run strategies just once for a given scope" do
         | 
| 211 | 
            -
                  env = env_with_params("/")
         | 
| 212 252 | 
             
                  app = lambda do |env|
         | 
| 213 253 | 
             
                    env['warden'].authenticate(:password, :pass, :scope => :failz)
         | 
| 214 254 | 
             
                    env['warden'].should_not be_authenticated(:failz)
         | 
| @@ -217,11 +257,10 @@ describe Warden::Proxy do | |
| 217 257 | 
             
                    env['warden.spec.strategies'].should == [:password, :pass]
         | 
| 218 258 | 
             
                    valid_response
         | 
| 219 259 | 
             
                  end
         | 
| 220 | 
            -
                  setup_rack(app).call(env)
         | 
| 260 | 
            +
                  setup_rack(app).call(@env)
         | 
| 221 261 | 
             
                end
         | 
| 222 262 |  | 
| 223 263 | 
             
                it "should run strategies for a given scope several times if cache is cleaned" do
         | 
| 224 | 
            -
                  env = env_with_params("/")
         | 
| 225 264 | 
             
                  app = lambda do |env|
         | 
| 226 265 | 
             
                    env['warden'].authenticate(:password, :pass, :scope => :failz)
         | 
| 227 266 | 
             
                    env['warden'].clear_strategies_cache!(:scope => :failz)
         | 
| @@ -229,11 +268,10 @@ describe Warden::Proxy do | |
| 229 268 | 
             
                    env['warden.spec.strategies'].should == [:password, :pass, :password, :pass]
         | 
| 230 269 | 
             
                    valid_response
         | 
| 231 270 | 
             
                  end
         | 
| 232 | 
            -
                  setup_rack(app).call(env)
         | 
| 271 | 
            +
                  setup_rack(app).call(@env)
         | 
| 233 272 | 
             
                end
         | 
| 234 273 |  | 
| 235 274 | 
             
                it "should clear the cache for a specified strategy" do
         | 
| 236 | 
            -
                  env = env_with_params("/")
         | 
| 237 275 | 
             
                  app = lambda do |env|
         | 
| 238 276 | 
             
                    env['warden'].authenticate(:password, :pass, :scope => :failz)
         | 
| 239 277 | 
             
                    env['warden'].clear_strategies_cache!(:password, :scope => :failz)
         | 
| @@ -241,11 +279,10 @@ describe Warden::Proxy do | |
| 241 279 | 
             
                    env['warden.spec.strategies'].should == [:password, :pass, :password]
         | 
| 242 280 | 
             
                    valid_response
         | 
| 243 281 | 
             
                  end
         | 
| 244 | 
            -
                  setup_rack(app).call(env)
         | 
| 282 | 
            +
                  setup_rack(app).call(@env)
         | 
| 245 283 | 
             
                end
         | 
| 246 284 |  | 
| 247 285 | 
             
                it "should run the strategies several times for different scopes" do
         | 
| 248 | 
            -
                  env = env_with_params("/")
         | 
| 249 286 | 
             
                  app = lambda do |env|
         | 
| 250 287 | 
             
                    env['warden'].authenticate(:password, :pass, :scope => :failz)
         | 
| 251 288 | 
             
                    env['warden'].should_not be_authenticated(:failz)
         | 
| @@ -254,11 +291,10 @@ describe Warden::Proxy do | |
| 254 291 | 
             
                    env['warden.spec.strategies'].should == [:password, :pass, :password, :pass]
         | 
| 255 292 | 
             
                    valid_response
         | 
| 256 293 | 
             
                  end
         | 
| 257 | 
            -
                  setup_rack(app).call(env)
         | 
| 294 | 
            +
                  setup_rack(app).call(@env)
         | 
| 258 295 | 
             
                end
         | 
| 259 296 |  | 
| 260 297 | 
             
                it "should not run strategies until cache is cleaned if latest winning strategy halted" do
         | 
| 261 | 
            -
                  env = env_with_params("/")
         | 
| 262 298 | 
             
                  app = lambda do |env|
         | 
| 263 299 | 
             
                    env['warden'].authenticate(:failz)
         | 
| 264 300 | 
             
                    env['warden'].should_not be_authenticated
         | 
| @@ -266,14 +302,25 @@ describe Warden::Proxy do | |
| 266 302 | 
             
                    env['warden'].winning_strategy.message.should == "The Fails Strategy Has Failed You"
         | 
| 267 303 | 
             
                    valid_response
         | 
| 268 304 | 
             
                  end
         | 
| 269 | 
            -
                  setup_rack(app).call(env)
         | 
| 305 | 
            +
                  setup_rack(app).call(@env)
         | 
| 306 | 
            +
                end
         | 
| 307 | 
            +
             | 
| 308 | 
            +
                it "should not store user if strategy isn't meant for permanent login" do
         | 
| 309 | 
            +
                  session = Warden::SessionSerializer.new(@env)
         | 
| 310 | 
            +
                  app = lambda do |env|
         | 
| 311 | 
            +
                    env['warden'].authenticate(:single)
         | 
| 312 | 
            +
                    env['warden'].should be_authenticated
         | 
| 313 | 
            +
                    env['warden'].user.should == "Valid User"
         | 
| 314 | 
            +
                    session.should_not be_stored(:default)
         | 
| 315 | 
            +
                    valid_response
         | 
| 316 | 
            +
                  end
         | 
| 317 | 
            +
                  setup_rack(app).call(@env)
         | 
| 270 318 | 
             
                end
         | 
| 271 319 |  | 
| 272 320 | 
             
              end
         | 
| 273 321 |  | 
| 274 322 | 
             
              describe "set user" do
         | 
| 275 323 | 
             
                it "should store the user into the session" do
         | 
| 276 | 
            -
                  env = env_with_params("/")
         | 
| 277 324 | 
             
                  app = lambda do |env|
         | 
| 278 325 | 
             
                    env['warden'].authenticate(:pass)
         | 
| 279 326 | 
             
                    env['warden'].should be_authenticated
         | 
| @@ -281,19 +328,18 @@ describe Warden::Proxy do | |
| 281 328 | 
             
                    env['rack.session']["warden.user.default.key"].should == "Valid User"
         | 
| 282 329 | 
             
                    valid_response
         | 
| 283 330 | 
             
                  end
         | 
| 284 | 
            -
                  setup_rack(app).call(env)
         | 
| 331 | 
            +
                  setup_rack(app).call(@env)
         | 
| 285 332 | 
             
                end
         | 
| 286 333 |  | 
| 287 334 | 
             
                it "should not store the user if the :store option is set to false" do
         | 
| 288 | 
            -
                   | 
| 289 | 
            -
                  app = lambda do |e|
         | 
| 335 | 
            +
                  app = lambda do |env|
         | 
| 290 336 | 
             
                    env['warden'].authenticate(:pass, :store => false)
         | 
| 291 337 | 
             
                    env['warden'].should be_authenticated
         | 
| 292 338 | 
             
                    env['warden'].user.should == "Valid User"
         | 
| 293 339 | 
             
                    env['rack.session']['warden.user.default.key'].should be_nil
         | 
| 294 340 | 
             
                    valid_response
         | 
| 295 341 | 
             
                  end
         | 
| 296 | 
            -
                  setup_rack(app).call(env)
         | 
| 342 | 
            +
                  setup_rack(app).call(@env)
         | 
| 297 343 | 
             
                end
         | 
| 298 344 | 
             
              end
         | 
| 299 345 |  | 
| @@ -348,10 +394,9 @@ describe Warden::Proxy do | |
| 348 394 | 
             
              describe "logout" do
         | 
| 349 395 |  | 
| 350 396 | 
             
                before(:each) do
         | 
| 351 | 
            -
                  @env = env = env_with_params
         | 
| 352 397 | 
             
                  @env['rack.session'] = {"warden.user.default.key" => "default key", "warden.user.foo.key" => "foo key", :foo => "bar"}
         | 
| 353 398 | 
             
                  @app = lambda do |e|
         | 
| 354 | 
            -
                    e['warden'].logout( | 
| 399 | 
            +
                    e['warden'].logout(e['warden.spec.which_logout'])
         | 
| 355 400 | 
             
                    valid_response
         | 
| 356 401 | 
             
                  end
         | 
| 357 402 | 
             
                end
         | 
| @@ -428,7 +473,7 @@ describe Warden::Proxy do | |
| 428 473 | 
             
                  app = lambda do |e|
         | 
| 429 474 | 
             
                    e['warden'].authenticate! :failz
         | 
| 430 475 | 
             
                  end
         | 
| 431 | 
            -
                  result = setup_rack(app, :failure_app => failure).call( | 
| 476 | 
            +
                  result = setup_rack(app, :failure_app => failure).call(@env)
         | 
| 432 477 | 
             
                  result.last.should == ["The Fails Strategy Has Failed You"]
         | 
| 433 478 | 
             
                end
         | 
| 434 479 |  | 
| @@ -440,7 +485,7 @@ describe Warden::Proxy do | |
| 440 485 | 
             
                    e['warden'].authenticate! :pass_with_message
         | 
| 441 486 | 
             
                    success.call(e)
         | 
| 442 487 | 
             
                  end
         | 
| 443 | 
            -
                  result = setup_rack(app).call( | 
| 488 | 
            +
                  result = setup_rack(app).call(@env)
         | 
| 444 489 | 
             
                  result.last.should == ["The Success Strategy Has Accepted You"]
         | 
| 445 490 | 
             
                end
         | 
| 446 491 |  | 
| @@ -448,7 +493,7 @@ describe Warden::Proxy do | |
| 448 493 | 
             
                  app = lambda do |e|
         | 
| 449 494 | 
             
                    [200, {"Content-Type" => "text/plain"}, [e['warden'].message]]
         | 
| 450 495 | 
             
                  end
         | 
| 451 | 
            -
                  result = setup_rack(app).call( | 
| 496 | 
            +
                  result = setup_rack(app).call(@env)
         | 
| 452 497 | 
             
                  result[2].should == [nil]
         | 
| 453 498 | 
             
                end
         | 
| 454 499 | 
             
              end
         | 
| @@ -546,9 +591,8 @@ describe Warden::Proxy do | |
| 546 591 | 
             
                        env['warden'].authenticated?(:foo_scope)
         | 
| 547 592 | 
             
                        valid_response
         | 
| 548 593 | 
             
                      end
         | 
| 549 | 
            -
                      env | 
| 550 | 
            -
                       | 
| 551 | 
            -
                      env['warden'].user(:foo_scope).should be_nil
         | 
| 594 | 
            +
                      setup_rack(app).call(@env)
         | 
| 595 | 
            +
                      @env['warden'].user(:foo_scope).should be_nil
         | 
| 552 596 | 
             
                    ensure
         | 
| 553 597 | 
             
                      Warden::Manager.serialize_from_session { |k| k }
         | 
| 554 598 | 
             
                    end
         | 
| @@ -686,6 +730,7 @@ describe "dynamic default_strategies" do | |
| 686 730 |  | 
| 687 731 | 
             
              before(:each) do
         | 
| 688 732 | 
             
                @app = lambda{|e| e['warden'].authenticate! }
         | 
| 733 | 
            +
                @env = env_with_params("/")
         | 
| 689 734 | 
             
                $captures = []
         | 
| 690 735 | 
             
              end
         | 
| 691 736 |  | 
| @@ -705,7 +750,7 @@ describe "dynamic default_strategies" do | |
| 705 750 | 
             
                  e['warden'].authenticate!
         | 
| 706 751 | 
             
                  Rack::Response.new("OK").finish
         | 
| 707 752 | 
             
                end
         | 
| 708 | 
            -
                setup_rack(app).call( | 
| 753 | 
            +
                setup_rack(app).call(@env)
         | 
| 709 754 |  | 
| 710 755 | 
             
                $captures.should == [:one]
         | 
| 711 756 | 
             
              end
         | 
| @@ -717,7 +762,7 @@ describe "dynamic default_strategies" do | |
| 717 762 | 
             
                  e['warden'].authenticate!
         | 
| 718 763 | 
             
                  Rack::Response.new("OK").finish
         | 
| 719 764 | 
             
                end
         | 
| 720 | 
            -
                setup_rack(app).call( | 
| 765 | 
            +
                setup_rack(app).call(@env)
         | 
| 721 766 |  | 
| 722 767 | 
             
                $captures.should == [:one]
         | 
| 723 768 | 
             
              end
         | 
| @@ -734,7 +779,7 @@ describe "dynamic default_strategies" do | |
| 734 779 | 
             
                  w.authenticate
         | 
| 735 780 | 
             
                  $captures.should == [:two]
         | 
| 736 781 | 
             
                end
         | 
| 737 | 
            -
                setup_rack(app).call( | 
| 782 | 
            +
                setup_rack(app).call(@env)
         | 
| 738 783 | 
             
                $captures.should == [:two]
         | 
| 739 784 | 
             
              end
         | 
| 740 785 |  | 
| @@ -756,7 +801,7 @@ describe "dynamic default_strategies" do | |
| 756 801 | 
             
                    $captures << :complete
         | 
| 757 802 | 
             
                  end)
         | 
| 758 803 | 
             
                end
         | 
| 759 | 
            -
                builder.to_app.call( | 
| 804 | 
            +
                builder.to_app.call(@env)
         | 
| 760 805 | 
             
                $captures.should include(:complete)
         | 
| 761 806 | 
             
              end
         | 
| 762 807 |  | 
| @@ -768,7 +813,7 @@ describe "dynamic default_strategies" do | |
| 768 813 | 
             
                  e['warden'].authenticate!
         | 
| 769 814 | 
             
                  Rack::Response.new("OK").finish
         | 
| 770 815 | 
             
                end
         | 
| 771 | 
            -
                setup_rack(app).call( | 
| 816 | 
            +
                setup_rack(app).call(@env)
         | 
| 772 817 |  | 
| 773 818 | 
             
                $captures.should == [:one]
         | 
| 774 819 | 
             
              end
         | 
| @@ -821,9 +866,8 @@ describe "dynamic default_strategies" do | |
| 821 866 | 
             
                      Rack::Response.new("OK").finish
         | 
| 822 867 | 
             
                    end)
         | 
| 823 868 | 
             
                  end
         | 
| 824 | 
            -
                  env =  | 
| 825 | 
            -
                   | 
| 826 | 
            -
                  builder.to_app.call(env)
         | 
| 869 | 
            +
                  session = @env["rack.session"] = {}
         | 
| 870 | 
            +
                  builder.to_app.call(@env)
         | 
| 827 871 | 
             
                  $captures.should include(:complete)
         | 
| 828 872 | 
             
                  session['warden.user.default.key'].should == "User"
         | 
| 829 873 | 
             
                  session['warden.user.foo.key'].should == "User"
         | 
    
        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 = "1.0.0"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Daniel Neighman"]
         | 
| 12 | 
            -
              s.date = %q{2010- | 
| 12 | 
            +
              s.date = %q{2010-09-24}
         | 
| 13 13 | 
             
              s.email = %q{has.sox@gmail.com}
         | 
| 14 14 | 
             
              s.extra_rdoc_files = [
         | 
| 15 15 | 
             
                "LICENSE",
         | 
| @@ -43,6 +43,7 @@ Gem::Specification.new do |s| | |
| 43 43 | 
             
                 "spec/helpers/strategies/pass.rb",
         | 
| 44 44 | 
             
                 "spec/helpers/strategies/pass_with_message.rb",
         | 
| 45 45 | 
             
                 "spec/helpers/strategies/password.rb",
         | 
| 46 | 
            +
                 "spec/helpers/strategies/single.rb",
         | 
| 46 47 | 
             
                 "spec/spec_helper.rb",
         | 
| 47 48 | 
             
                 "spec/warden/authenticated_data_store_spec.rb",
         | 
| 48 49 | 
             
                 "spec/warden/config_spec.rb",
         | 
| @@ -71,6 +72,7 @@ Gem::Specification.new do |s| | |
| 71 72 | 
             
                 "spec/helpers/strategies/pass.rb",
         | 
| 72 73 | 
             
                 "spec/helpers/strategies/pass_with_message.rb",
         | 
| 73 74 | 
             
                 "spec/helpers/strategies/password.rb",
         | 
| 75 | 
            +
                 "spec/helpers/strategies/single.rb",
         | 
| 74 76 | 
             
                 "spec/spec_helper.rb",
         | 
| 75 77 | 
             
                 "spec/warden/authenticated_data_store_spec.rb",
         | 
| 76 78 | 
             
                 "spec/warden/config_spec.rb",
         | 
| @@ -92,14 +94,14 @@ Gem::Specification.new do |s| | |
| 92 94 |  | 
| 93 95 | 
             
                if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
         | 
| 94 96 | 
             
                  s.add_runtime_dependency(%q<rack>, [">= 1.0.0"])
         | 
| 95 | 
            -
                  s.add_development_dependency(%q<rspec>, [" | 
| 97 | 
            +
                  s.add_development_dependency(%q<rspec>, ["~> 1"])
         | 
| 96 98 | 
             
                else
         | 
| 97 99 | 
             
                  s.add_dependency(%q<rack>, [">= 1.0.0"])
         | 
| 98 | 
            -
                  s.add_dependency(%q<rspec>, [" | 
| 100 | 
            +
                  s.add_dependency(%q<rspec>, ["~> 1"])
         | 
| 99 101 | 
             
                end
         | 
| 100 102 | 
             
              else
         | 
| 101 103 | 
             
                s.add_dependency(%q<rack>, [">= 1.0.0"])
         | 
| 102 | 
            -
                s.add_dependency(%q<rspec>, [" | 
| 104 | 
            +
                s.add_dependency(%q<rspec>, ["~> 1"])
         | 
| 103 105 | 
             
              end
         | 
| 104 106 | 
             
            end
         | 
| 105 107 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: warden
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 4 | 
            +
              hash: 23
         | 
| 5 5 | 
             
              prerelease: false
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 | 
            +
              - 1
         | 
| 7 8 | 
             
              - 0
         | 
| 8 | 
            -
              -  | 
| 9 | 
            -
               | 
| 10 | 
            -
              version: 0.10.7
         | 
| 9 | 
            +
              - 0
         | 
| 10 | 
            +
              version: 1.0.0
         | 
| 11 11 | 
             
            platform: ruby
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - Daniel Neighman
         | 
| @@ -15,7 +15,7 @@ autorequire: | |
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 17 |  | 
| 18 | 
            -
            date: 2010- | 
| 18 | 
            +
            date: 2010-09-24 00:00:00 +10:00
         | 
| 19 19 | 
             
            default_executable: 
         | 
| 20 20 | 
             
            dependencies: 
         | 
| 21 21 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -40,14 +40,12 @@ dependencies: | |
| 40 40 | 
             
              requirement: &id002 !ruby/object:Gem::Requirement 
         | 
| 41 41 | 
             
                none: false
         | 
| 42 42 | 
             
                requirements: 
         | 
| 43 | 
            -
                - -  | 
| 43 | 
            +
                - - ~>
         | 
| 44 44 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 45 | 
            -
                    hash:  | 
| 45 | 
            +
                    hash: 1
         | 
| 46 46 | 
             
                    segments: 
         | 
| 47 47 | 
             
                    - 1
         | 
| 48 | 
            -
                     | 
| 49 | 
            -
                    - 0
         | 
| 50 | 
            -
                    version: 1.0.0
         | 
| 48 | 
            +
                    version: "1"
         | 
| 51 49 | 
             
              type: :development
         | 
| 52 50 | 
             
              version_requirements: *id002
         | 
| 53 51 | 
             
            description: 
         | 
| @@ -87,6 +85,7 @@ files: | |
| 87 85 | 
             
            - spec/helpers/strategies/pass.rb
         | 
| 88 86 | 
             
            - spec/helpers/strategies/pass_with_message.rb
         | 
| 89 87 | 
             
            - spec/helpers/strategies/password.rb
         | 
| 88 | 
            +
            - spec/helpers/strategies/single.rb
         | 
| 90 89 | 
             
            - spec/spec_helper.rb
         | 
| 91 90 | 
             
            - spec/warden/authenticated_data_store_spec.rb
         | 
| 92 91 | 
             
            - spec/warden/config_spec.rb
         | 
| @@ -142,6 +141,7 @@ test_files: | |
| 142 141 | 
             
            - spec/helpers/strategies/pass.rb
         | 
| 143 142 | 
             
            - spec/helpers/strategies/pass_with_message.rb
         | 
| 144 143 | 
             
            - spec/helpers/strategies/password.rb
         | 
| 144 | 
            +
            - spec/helpers/strategies/single.rb
         | 
| 145 145 | 
             
            - spec/spec_helper.rb
         | 
| 146 146 | 
             
            - spec/warden/authenticated_data_store_spec.rb
         | 
| 147 147 | 
             
            - spec/warden/config_spec.rb
         |