warden 1.2.4 → 1.2.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +27 -0
  3. data/.gitignore +6 -0
  4. data/.rspec +3 -0
  5. data/{History.rdoc → CHANGELOG.md} +80 -36
  6. data/Gemfile +3 -2
  7. data/LICENSE +2 -1
  8. data/README.md +18 -0
  9. data/Rakefile +4 -8
  10. data/lib/warden.rb +2 -0
  11. data/lib/warden/config.rb +1 -0
  12. data/lib/warden/errors.rb +2 -1
  13. data/lib/warden/hooks.rb +1 -0
  14. data/lib/warden/manager.rb +2 -1
  15. data/lib/warden/mixins/common.rb +1 -0
  16. data/lib/warden/proxy.rb +24 -4
  17. data/lib/warden/session_serializer.rb +1 -0
  18. data/lib/warden/strategies.rb +1 -0
  19. data/lib/warden/strategies/base.rb +3 -1
  20. data/lib/warden/test/helpers.rb +2 -1
  21. data/lib/warden/test/mock.rb +69 -0
  22. data/lib/warden/test/warden_helpers.rb +1 -0
  23. data/lib/warden/version.rb +2 -1
  24. data/warden.gemspec +19 -18
  25. metadata +19 -35
  26. data/README.textile +0 -9
  27. data/spec/helpers/request_helper.rb +0 -51
  28. data/spec/helpers/strategies/fail_with_user.rb +0 -10
  29. data/spec/helpers/strategies/failz.rb +0 -8
  30. data/spec/helpers/strategies/invalid.rb +0 -8
  31. data/spec/helpers/strategies/pass.rb +0 -8
  32. data/spec/helpers/strategies/pass_with_message.rb +0 -8
  33. data/spec/helpers/strategies/password.rb +0 -13
  34. data/spec/helpers/strategies/single.rb +0 -12
  35. data/spec/spec_helper.rb +0 -24
  36. data/spec/warden/authenticated_data_store_spec.rb +0 -114
  37. data/spec/warden/config_spec.rb +0 -48
  38. data/spec/warden/errors_spec.rb +0 -47
  39. data/spec/warden/hooks_spec.rb +0 -373
  40. data/spec/warden/manager_spec.rb +0 -340
  41. data/spec/warden/proxy_spec.rb +0 -1050
  42. data/spec/warden/scoped_session_serializer.rb +0 -123
  43. data/spec/warden/session_serializer_spec.rb +0 -53
  44. data/spec/warden/strategies/base_spec.rb +0 -313
  45. data/spec/warden/strategies_spec.rb +0 -94
  46. data/spec/warden/test/helpers_spec.rb +0 -93
  47. data/spec/warden/test/test_mode_spec.rb +0 -75
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c615ae4a3d5433cece12ea5d28a93e8f5ed3f8ff
4
- data.tar.gz: fc9bae1ddd9b9872aa890235d905147ef7898b72
2
+ SHA256:
3
+ metadata.gz: b7e6c341f27479e6f36339e5d2c211277b4c0e664c960827c2044dd36b5c1c23
4
+ data.tar.gz: 62e22ba4d81a887444d60ff033c7a6b0a0a8e723771d15cee045ee83baece801
5
5
  SHA512:
6
- metadata.gz: c16efdf510c03e0f5455c496044f81b050d9f8887cc88dbb656ea920a01d722bd1557e824f34f107e7dcee4f9d8dbffbbeb3e37d4d77217f65cbe2d822a016c2
7
- data.tar.gz: f83439dd79f0edc6b822750838a131c0f64c772a1f038f0ae371e2362c0ff401e5ef47f4e184390422c3e53f25a484cc64e86c8b01e26733c51f1f4b0d8df4cf
6
+ metadata.gz: a6b602f560ebc6f04848c0c7e2d9017af8bf55c6cd6e6fec978e28e0463960761eaf488fabdba1b14d78bcf16e352a97d9b95b361142c3a4c14672517ca9e5b5
7
+ data.tar.gz: 9a6397e9d84063c8f7cf221c878b0657151a0cf01a6f98172b2ca0dfd1d5e7eddf7da9ce616f550928f5f14dcb073553379add7a006acc875fb162a7ce2a8210
@@ -0,0 +1,27 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Tests
9
+ on: [push, pull_request]
10
+
11
+ jobs:
12
+ test:
13
+ runs-on: ubuntu-latest
14
+ strategy:
15
+ matrix:
16
+ ruby: [ '2.5', '2.6', '2.7' ]
17
+ name: Ruby ${{ matrix.ruby }}
18
+ steps:
19
+ - uses: actions/checkout@v2
20
+ - name: Set up Ruby
21
+ uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: 2.6
24
+ - name: Install dependencies
25
+ run: bundle install
26
+ - name: Run tests
27
+ run: bundle exec rake
@@ -0,0 +1,6 @@
1
+ .DS_Store
2
+ pkg
3
+ .*~
4
+
5
+ *.gem
6
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --require spec_helper
2
+ --format documentation
3
+ --color
@@ -1,71 +1,114 @@
1
- == Version 1.2.3 / 2013-07-14
1
+ # CHANGELOG
2
+
3
+ ## Version 1.2.9 / 2020-08-31
4
+ * Avoid warning on uninitialized instance variable (#188)
5
+ * Bump rack to 2.2.3 (#190)
6
+ * Remove Gemfile.lock
7
+ * Resolve outstanding TODO entries (#179)
8
+ * A bunch of gem structure cleanup (thanks @olleolleolle)
9
+ * Set winning strategy when :warden is thrown (#174)
10
+ * Bump rack dependency to >= 2.0.9 due to CVEs
11
+
12
+ ## Version 1.2.8 / 2018-11-15
13
+
14
+ * Bugfix: Flips two lines to allow scopes authenticating from another without stepping on each other's toes. (PR #144)
15
+ * Update `rack` dependency to >= 2.0.6 due to security vulnerability
16
+ * Internal: Add Rubocop Lint checking
17
+ * Internal: Update RSpec to use `.rspec` file
18
+
19
+ ## Version 1.2.7 / 2016-10-12
20
+
21
+ * Added 'frozen_string_literal' comment, bump ruby to 2.3
22
+
23
+ ## Version 1.2.6 / 2016-01-31
24
+
25
+ * Separate test helpers to encapsulate Warden object mocking inside it's own class
26
+
27
+ ## Version 1.2.5 / 2016-01-28
28
+
29
+ * Expands on the test helpers available to make it easier for testing gems
30
+
31
+ ## Version 1.2.3 / 2013-07-14
32
+
2
33
  * Fix an issue with lazy loaded sessions
3
34
 
4
- == Version 1.2.2 / 2013-07-12
35
+ ## Version 1.2.2 / 2013-07-12
36
+
5
37
  * Support nil session stores on logout
6
38
  * Fix strategies blowing up with undefined method base
7
39
 
8
- == Version 1.2.1 / 2012-06-16
40
+ ## Version 1.2.1 / 2012-06-16
41
+
9
42
  * Minor caching and speed improvements
10
43
  * Add support to #lock in the proxy
11
44
  * Add support to after_failed_fetch callback
12
45
 
13
- == Version 1.2.0 / 2012-05-08
46
+ ## Version 1.2.0 / 2012-05-08
47
+
14
48
  * Deprecate warden_cookies since it was never functional
15
49
  * Add support to serialize_from_session and serialize_into_session per scope
16
50
 
17
- == Version 1.1.1 / 2012-02-16
51
+ ## Version 1.1.1 / 2012-02-16
52
+
18
53
  * Allow run_callbacks as an option to set_user and user
19
54
 
20
- == Version 1.1.0 / 2011-11-02
55
+ ## Version 1.1.0 / 2011-11-02
56
+
21
57
  * Use the default scopes action when using a bare throw(:warden)
22
58
 
23
- == Version 1.0.6
59
+ ## Version 1.0.6
60
+
24
61
  * Remove gem files from the packaged gem
25
62
 
26
- == Version 1.0.3
63
+ ## Version 1.0.3
64
+
27
65
  * Do not renew session on user fetch
28
66
 
29
- == Version 1.0.2
67
+ ## Version 1.0.2
68
+
30
69
  * Added :intercept_401 to Warden::Config
31
70
 
32
- == Version 1.0.1
71
+ ## Version 1.0.1
72
+
33
73
  * Bug fix on strategies errors handler
34
74
 
35
- == Version 1.0.0
75
+ ## Version 1.0.0
76
+
36
77
  * Bump!
37
78
  * Allow strategies to configure if user should be stored or not
38
79
  * Force session id renewal when user is set
39
80
 
40
- == Version 0.10.7
81
+ ## Version 0.10.7
82
+
41
83
  * Performance boost. config object to use raw accessors
42
84
  * Add per strategy storage option
43
85
 
44
- == Version 0.10.6 / 0.10.7 / 2010-05-22
86
+ ## Version 0.10.6 / 0.10.7 / 2010-05-22
87
+
45
88
  * Bugfix set_user was not respecting logouts in hooks
46
89
 
47
- == Version 0.10.4 / 0.10.5 / 2010-05-20
90
+ ## Version 0.10.4 / 0.10.5 / 2010-05-20
48
91
  * Add action specifying in scope_defaults
49
92
 
50
- == Version 0.10.3 / 2010-03-01
93
+ ## Version 0.10.3 / 2010-03-01
51
94
  * Bugfix prevent halted winning strategy from being skipped in subsequent runs
52
95
 
53
- == Version 0.10.2 / 2010-03-26
96
+ ## Version 0.10.2 / 2010-03-26
54
97
  * Halt on fail!. Add fail to allow cascading
55
98
  * cache the winning strategy
56
99
  * Make the config object Dupable
57
100
 
58
- == Version 0.10.1 / 2010-03-23
101
+ ## Version 0.10.1 / 2010-03-23
59
102
  * Merge previous from master
60
103
  * tag
61
104
 
62
- == Version 0.10.0 / 2010-03-22
105
+ ## Version 0.10.0 / 2010-03-22
63
106
  * Allow default strategies to be set on the proxy
64
107
  * Provide each scope with it's own default strategies
65
108
  * Provide each scope with default set_user opts
66
109
  * depricate the Proxy#default_strategies= method
67
110
 
68
- == Version 0.9.5 / 2010-02-28
111
+ ## Version 0.9.5 / 2010-02-28
69
112
 
70
113
  * Add Warden.test_mode!
71
114
  * Add Warden.on_next_request
@@ -73,42 +116,42 @@
73
116
  ** login_as
74
117
  ** logout
75
118
 
76
- == Version 0.9.4 / 2010-02-23
119
+ ## Version 0.9.4 / 2010-02-23
77
120
 
78
121
  * Fix an issue where winning_strategy was not cleaned, allowing multiple scopes to sign in, even when the second one should not
79
122
 
80
- == Version 0.9.3 / 2010-02-17
123
+ ## Version 0.9.3 / 2010-02-17
81
124
 
82
125
  * Add prepend_ to all hooks (josevalim)
83
126
 
84
- == Version 0.9.2 / 2010-02-10
127
+ ## Version 0.9.2 / 2010-02-10
85
128
 
86
129
  * Ruby 1.9 compatibility changes (grimen)
87
130
 
88
- == Version 0.9.1 / 2010-02-09
131
+ ## Version 0.9.1 / 2010-02-09
89
132
 
90
133
  * Support for passing a custom message with Warden::Strategy::Base#success! as second optional (grimen)
91
134
 
92
- == Version 0.9.0 / 2010-01-21
135
+ ## Version 0.9.0 / 2010-01-21
93
136
 
94
137
  * Remove serializers and make strategies more powerful, including cache behavior (josevalim)
95
138
 
96
- == Version 0.8.1 / 2010-01-06
139
+ ## Version 0.8.1 / 2010-01-06
97
140
 
98
141
  * Fix a bug when silence missing serializers is set (josevalim)
99
142
 
100
- == Version 0.8.0 / 2010-01-06
143
+ ## Version 0.8.0 / 2010-01-06
101
144
 
102
145
  * enhancements
103
146
  * Add conditionals to callbacks (josevalim)
104
147
  * Extract Warden::Config from Warden::Manager (josevalim)
105
148
 
106
- == Version 0.7.0 / 2010-01-04
149
+ ## Version 0.7.0 / 2010-01-04
107
150
 
108
151
  * enhancements
109
152
  * Expose config in warden proxy (hassox)
110
153
 
111
- == Version 0.6.0 / 2009-11-16
154
+ ## Version 0.6.0 / 2009-11-16
112
155
 
113
156
  * enhancements
114
157
  * added serializers, including session serializer (set by default) and a cookie serializer (josevalim)
@@ -116,24 +159,27 @@
116
159
  * deprecation
117
160
  * serializer_into_session and serializer_from_session are deprecated, overwrite serialize and deserializer in Warden::Serializers::Session instead (josevalim)
118
161
 
119
- == Version 0.5.3 / 2009-11-10
162
+ ## Version 0.5.3 / 2009-11-10
163
+
120
164
  * bug fixes
121
165
  * authenticated? and unauthenticated? should return true or false, not the user or false. (hassox)
122
166
 
123
- == Version 0.5.2 / 2009-11-09
167
+ ## Version 0.5.2 / 2009-11-09
168
+
124
169
  * enhancements
125
170
  * authenticated? always try to serialize the user from session (josevalim)
126
171
  * stored_in_session? checks if user information is stored in session, without serializing (josevalim)
127
172
  * 401 behaves exactly like throw :warden (staugaard)
128
173
 
129
- === Version 0.5.1 / 2009-10-25
174
+ ## Version 0.5.1 / 2009-10-25
175
+
130
176
  * enhancements
131
- * Adds yeilding to authenticated? and unauthenticated? methods (hassox)
177
+ * Adds yielding to authenticated? and unauthenticated? methods (hassox)
132
178
  * Adds an option to silence missing strategies (josevalim)
133
179
  * Add an option to authenticate(!) to prevent storage of a user into the session (hassox)
134
180
  * allow custom :action to be thrown (josevalim)
135
181
 
136
- === Version 0.4.0 / 2009-10-12
182
+ ## Version 0.4.0 / 2009-10-12
137
183
 
138
184
  * enhancements
139
185
  * add Content-Type header to redirects (staugaard)
@@ -142,9 +188,7 @@
142
188
  * bug fixes
143
189
  * Do not consume opts twice, otherwise just the first will parse the scope (josevalim)
144
190
 
145
- === Version 0.3.2 / 2009-09-15
191
+ ## Version 0.3.2 / 2009-09-15
146
192
 
147
193
  * enhancements
148
194
  * add a hook for plugins to specify how they can clear the whole section
149
-
150
-
data/Gemfile CHANGED
@@ -1,11 +1,12 @@
1
+ # frozen_string_literal: true
1
2
  source 'https://rubygems.org'
2
3
 
3
4
  gemspec
4
5
 
5
6
  gem 'rake'
6
- gem 'rack', '1.3'
7
+ gem 'pry'
7
8
 
8
9
  group :test do
9
- gem 'rspec', '~>3'
10
+ gem 'rspec', '~> 3'
10
11
  gem 'rack-test'
11
12
  end
data/LICENSE CHANGED
@@ -1,4 +1,5 @@
1
- Copyright (c) 2009 Daniel Neighman
1
+ Copyright (c) 2009-2017 Daniel Neighman
2
+ Copyright (c) 2017-2020 Justin Smestad
2
3
 
3
4
  Permission is hereby granted, free of charge, to any person obtaining
4
5
  a copy of this software and associated documentation files (the
@@ -0,0 +1,18 @@
1
+ # Warden
2
+
3
+ ## Getting Started
4
+
5
+ Please see the [Warden Wiki](https://github.com/wardencommunity/warden/wiki) for overview documentation.
6
+
7
+ ## Maintainers
8
+
9
+ * Daniel Neighman (hassox)
10
+ * José Valim (josevalim)
11
+ * Justin Smestad (jsmestad)
12
+ * Whitney Smestad (whithub)
13
+
14
+ [A list of all contributors is available on Github.](https://github.com/hassox/warden/contributors)
15
+
16
+ ## LICENSE
17
+
18
+ See `LICENSE` file.
data/Rakefile CHANGED
@@ -1,12 +1,8 @@
1
1
  # -*- encoding: utf-8 -*-
2
- require 'rubygems'
3
- require 'rake'
4
- $:.unshift File.join(File.dirname(__FILE__), "lib")
2
+ # frozen_string_literal: true
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
5
 
6
- require 'rspec/core'
7
- require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec)
8
7
 
9
8
  task :default => :spec
10
-
11
- desc "Run all specs in spec directory"
12
- RSpec::Core::RakeTask.new(:spec)
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  require 'forwardable'
3
4
 
4
5
  require 'warden/mixins/common'
@@ -15,6 +16,7 @@ module Warden
15
16
  module Test
16
17
  autoload :WardenHelpers, 'warden/test/warden_helpers'
17
18
  autoload :Helpers, 'warden/test/helpers'
19
+ autoload :Mock, 'warden/test/mock'
18
20
  end
19
21
 
20
22
  # Provides helper methods to warden for testing.
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Warden
4
5
  # This class is yielded inside Warden::Manager. If you have a plugin and want to
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  module Warden
3
4
  class Proxy
4
5
  # Lifted from DataMapper's dm-validations plugin :)
@@ -38,7 +39,7 @@ module Warden
38
39
  end
39
40
 
40
41
  def each
41
- errors.map.each do |k,v|
42
+ errors.map.each do |_k,v|
42
43
  next if blank?(v)
43
44
  yield(v)
44
45
  end
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  module Warden
3
4
  module Hooks
4
5
 
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  require 'warden/hooks'
3
4
  require 'warden/config'
4
5
 
@@ -21,7 +22,6 @@ module Warden
21
22
  @app, @config = app, Warden::Config.new(options)
22
23
  @config.default_strategies(*default_strategies) if default_strategies
23
24
  yield @config if block_given?
24
- self
25
25
  end
26
26
 
27
27
  # Invoke the application guarding for throw :warden.
@@ -32,6 +32,7 @@ module Warden
32
32
 
33
33
  env['warden'] = Proxy.new(env, self)
34
34
  result = catch(:warden) do
35
+ env['warden'].on_request
35
36
  @app.call(env)
36
37
  end
37
38
 
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  module Warden
3
4
  module Mixins
4
5
  module Common
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Warden
4
5
  class UserNotSet < RuntimeError; end
@@ -28,6 +29,11 @@ module Warden
28
29
  @env, @users, @winning_strategies, @locked = env, {}, {}, false
29
30
  @manager, @config = manager, manager.config.dup
30
31
  @strategies = Hash.new { |h,k| h[k] = {} }
32
+ end
33
+
34
+ # Run the on_request callbacks
35
+ # :api: private
36
+ def on_request
31
37
  manager._run_callbacks(:on_request, self)
32
38
  end
33
39
 
@@ -105,7 +111,7 @@ module Warden
105
111
  user
106
112
  end
107
113
 
108
- # Same API as authenticated, but returns a boolean instead of a user.
114
+ # Same API as authenticate, but returns a boolean instead of a user.
109
115
  # The difference between this method (authenticate?) and authenticated?
110
116
  # is that the former will run strategies if the user has not yet been
111
117
  # authenticated, and the second relies on already performed ones.
@@ -171,7 +177,13 @@ module Warden
171
177
 
172
178
  if opts[:store] != false && opts[:event] != :fetch
173
179
  options = env[ENV_SESSION_OPTIONS]
174
- options[:renew] = true if options
180
+ if options
181
+ if options.frozen?
182
+ env[ENV_SESSION_OPTIONS] = options.merge(:renew => true).freeze
183
+ else
184
+ options[:renew] = true
185
+ end
186
+ end
175
187
  session_serializer.store(user, scope)
176
188
  end
177
189
 
@@ -318,7 +330,7 @@ module Warden
318
330
  user = nil
319
331
 
320
332
  # Look for an existing user in the session for this scope.
321
- # If there was no user in the session. See if we can get one from the request.
333
+ # If there was no user in the session, see if we can get one from the request.
322
334
  return user, opts if user = user(opts.merge(:scope => scope))
323
335
  _run_strategies_for(scope, args)
324
336
 
@@ -353,9 +365,12 @@ module Warden
353
365
  (strategies || args).each do |name|
354
366
  strategy = _fetch_strategy(name, scope)
355
367
  next unless strategy && !strategy.performed? && strategy.valid?
368
+ catch(:warden) do
369
+ _update_winning_strategy(strategy, scope)
370
+ end
356
371
 
357
- self.winning_strategy = @winning_strategies[scope] = strategy
358
372
  strategy._run!
373
+ _update_winning_strategy(strategy, scope)
359
374
  break if strategy.halted?
360
375
  end
361
376
  end
@@ -370,6 +385,11 @@ module Warden
370
385
  raise "Invalid strategy #{name}"
371
386
  end
372
387
  end
388
+
389
+ # Updates the winning strategy for a given scope
390
+ def _update_winning_strategy(strategy, scope)
391
+ self.winning_strategy = @winning_strategies[scope] = strategy
392
+ end
373
393
  end # Proxy
374
394
 
375
395
  end # Warden