authlogic 3.4.6 → 4.2.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.
Files changed (140) hide show
  1. checksums.yaml +5 -5
  2. data/.github/ISSUE_TEMPLATE.md +13 -0
  3. data/.github/triage.md +87 -0
  4. data/.gitignore +4 -0
  5. data/.rubocop.yml +127 -0
  6. data/.rubocop_todo.yml +65 -0
  7. data/.travis.yml +18 -10
  8. data/CHANGELOG.md +156 -6
  9. data/CONTRIBUTING.md +71 -3
  10. data/Gemfile +2 -2
  11. data/README.md +386 -0
  12. data/Rakefile +13 -7
  13. data/UPGRADING.md +22 -0
  14. data/authlogic.gemspec +33 -22
  15. data/lib/authlogic.rb +60 -52
  16. data/lib/authlogic/acts_as_authentic/base.rb +40 -26
  17. data/lib/authlogic/acts_as_authentic/email.rb +96 -32
  18. data/lib/authlogic/acts_as_authentic/logged_in_status.rb +36 -12
  19. data/lib/authlogic/acts_as_authentic/login.rb +114 -49
  20. data/lib/authlogic/acts_as_authentic/magic_columns.rb +17 -6
  21. data/lib/authlogic/acts_as_authentic/password.rb +296 -139
  22. data/lib/authlogic/acts_as_authentic/perishable_token.rb +34 -20
  23. data/lib/authlogic/acts_as_authentic/persistence_token.rb +20 -24
  24. data/lib/authlogic/acts_as_authentic/queries/find_with_case.rb +67 -0
  25. data/lib/authlogic/acts_as_authentic/restful_authentication.rb +68 -23
  26. data/lib/authlogic/acts_as_authentic/session_maintenance.rb +128 -85
  27. data/lib/authlogic/acts_as_authentic/single_access_token.rb +41 -25
  28. data/lib/authlogic/acts_as_authentic/validations_scope.rb +8 -8
  29. data/lib/authlogic/authenticates_many/association.rb +22 -14
  30. data/lib/authlogic/authenticates_many/base.rb +35 -16
  31. data/lib/authlogic/config.rb +10 -10
  32. data/lib/authlogic/controller_adapters/abstract_adapter.rb +40 -12
  33. data/lib/authlogic/controller_adapters/rack_adapter.rb +15 -8
  34. data/lib/authlogic/controller_adapters/rails_adapter.rb +42 -22
  35. data/lib/authlogic/controller_adapters/sinatra_adapter.rb +3 -3
  36. data/lib/authlogic/crypto_providers.rb +91 -0
  37. data/lib/authlogic/crypto_providers/aes256.rb +42 -14
  38. data/lib/authlogic/crypto_providers/bcrypt.rb +35 -20
  39. data/lib/authlogic/crypto_providers/md5.rb +11 -9
  40. data/lib/authlogic/crypto_providers/scrypt.rb +26 -13
  41. data/lib/authlogic/crypto_providers/sha1.rb +14 -8
  42. data/lib/authlogic/crypto_providers/sha256.rb +16 -12
  43. data/lib/authlogic/crypto_providers/sha512.rb +8 -24
  44. data/lib/authlogic/crypto_providers/wordpress.rb +44 -15
  45. data/lib/authlogic/i18n.rb +33 -20
  46. data/lib/authlogic/i18n/translator.rb +1 -1
  47. data/lib/authlogic/random.rb +12 -29
  48. data/lib/authlogic/regex.rb +59 -27
  49. data/lib/authlogic/session/activation.rb +36 -23
  50. data/lib/authlogic/session/active_record_trickery.rb +13 -10
  51. data/lib/authlogic/session/base.rb +20 -8
  52. data/lib/authlogic/session/brute_force_protection.rb +87 -56
  53. data/lib/authlogic/session/callbacks.rb +99 -49
  54. data/lib/authlogic/session/cookies.rb +128 -59
  55. data/lib/authlogic/session/existence.rb +29 -19
  56. data/lib/authlogic/session/foundation.rb +70 -16
  57. data/lib/authlogic/session/http_auth.rb +39 -31
  58. data/lib/authlogic/session/id.rb +27 -15
  59. data/lib/authlogic/session/klass.rb +17 -13
  60. data/lib/authlogic/session/magic_columns.rb +78 -59
  61. data/lib/authlogic/session/magic_states.rb +50 -27
  62. data/lib/authlogic/session/params.rb +79 -50
  63. data/lib/authlogic/session/password.rb +197 -118
  64. data/lib/authlogic/session/perishable_token.rb +12 -6
  65. data/lib/authlogic/session/persistence.rb +20 -14
  66. data/lib/authlogic/session/priority_record.rb +20 -16
  67. data/lib/authlogic/session/scopes.rb +63 -33
  68. data/lib/authlogic/session/session.rb +40 -25
  69. data/lib/authlogic/session/timeout.rb +51 -34
  70. data/lib/authlogic/session/unauthorized_record.rb +24 -18
  71. data/lib/authlogic/session/validation.rb +32 -21
  72. data/lib/authlogic/test_case.rb +123 -35
  73. data/lib/authlogic/test_case/mock_controller.rb +14 -13
  74. data/lib/authlogic/test_case/mock_cookie_jar.rb +14 -5
  75. data/lib/authlogic/test_case/mock_logger.rb +1 -1
  76. data/lib/authlogic/test_case/mock_request.rb +9 -4
  77. data/lib/authlogic/test_case/rails_request_adapter.rb +8 -7
  78. data/lib/authlogic/version.rb +21 -0
  79. data/test/acts_as_authentic_test/base_test.rb +1 -1
  80. data/test/acts_as_authentic_test/email_test.rb +80 -63
  81. data/test/acts_as_authentic_test/logged_in_status_test.rb +14 -8
  82. data/test/acts_as_authentic_test/login_test.rb +91 -49
  83. data/test/acts_as_authentic_test/magic_columns_test.rb +13 -13
  84. data/test/acts_as_authentic_test/password_test.rb +82 -60
  85. data/test/acts_as_authentic_test/perishable_token_test.rb +31 -25
  86. data/test/acts_as_authentic_test/persistence_token_test.rb +9 -5
  87. data/test/acts_as_authentic_test/restful_authentication_test.rb +18 -9
  88. data/test/acts_as_authentic_test/session_maintenance_test.rb +86 -22
  89. data/test/acts_as_authentic_test/single_access_test.rb +15 -15
  90. data/test/adapter_test.rb +21 -0
  91. data/test/authenticates_many_test.rb +26 -11
  92. data/test/config_test.rb +9 -9
  93. data/test/crypto_provider_test/aes256_test.rb +3 -3
  94. data/test/crypto_provider_test/bcrypt_test.rb +1 -1
  95. data/test/crypto_provider_test/scrypt_test.rb +2 -2
  96. data/test/crypto_provider_test/sha1_test.rb +4 -4
  97. data/test/crypto_provider_test/sha256_test.rb +2 -2
  98. data/test/crypto_provider_test/sha512_test.rb +3 -3
  99. data/test/crypto_provider_test/wordpress_test.rb +24 -0
  100. data/test/gemfiles/Gemfile.rails-4.2.x +2 -2
  101. data/test/gemfiles/Gemfile.rails-5.0.x +6 -0
  102. data/test/gemfiles/Gemfile.rails-5.1.x +6 -0
  103. data/test/gemfiles/Gemfile.rails-5.2.x +6 -0
  104. data/test/gemfiles/Gemfile.rails-master +6 -0
  105. data/test/i18n_test.rb +9 -9
  106. data/test/libs/affiliate.rb +2 -2
  107. data/test/libs/company.rb +4 -4
  108. data/test/libs/employee.rb +2 -2
  109. data/test/libs/employee_session.rb +1 -1
  110. data/test/libs/ldaper.rb +1 -1
  111. data/test/libs/project.rb +1 -1
  112. data/test/libs/user_session.rb +2 -2
  113. data/test/random_test.rb +9 -38
  114. data/test/session_test/activation_test.rb +7 -7
  115. data/test/session_test/active_record_trickery_test.rb +9 -6
  116. data/test/session_test/brute_force_protection_test.rb +26 -21
  117. data/test/session_test/callbacks_test.rb +10 -4
  118. data/test/session_test/cookies_test.rb +54 -20
  119. data/test/session_test/existence_test.rb +45 -23
  120. data/test/session_test/foundation_test.rb +17 -1
  121. data/test/session_test/http_auth_test.rb +11 -12
  122. data/test/session_test/id_test.rb +3 -3
  123. data/test/session_test/klass_test.rb +2 -2
  124. data/test/session_test/magic_columns_test.rb +15 -17
  125. data/test/session_test/magic_states_test.rb +17 -19
  126. data/test/session_test/params_test.rb +26 -20
  127. data/test/session_test/password_test.rb +11 -12
  128. data/test/session_test/perishability_test.rb +5 -5
  129. data/test/session_test/persistence_test.rb +4 -3
  130. data/test/session_test/scopes_test.rb +15 -9
  131. data/test/session_test/session_test.rb +7 -6
  132. data/test/session_test/timeout_test.rb +16 -14
  133. data/test/session_test/unauthorized_record_test.rb +3 -3
  134. data/test/session_test/validation_test.rb +5 -5
  135. data/test/test_helper.rb +115 -49
  136. metadata +107 -36
  137. data/README.rdoc +0 -232
  138. data/test/gemfiles/Gemfile.rails-3.2.x +0 -7
  139. data/test/gemfiles/Gemfile.rails-4.0.x +0 -7
  140. data/test/gemfiles/Gemfile.rails-4.1.x +0 -7
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
3
  module SessionTest
4
4
  module SessionTest
@@ -23,15 +23,16 @@ module SessionTest
23
23
 
24
24
  def test_persist_persist_by_session_with_session_fixation_attack
25
25
  ben = users(:ben)
26
- controller.session["user_credentials"] = 'neo'
27
- controller.session["user_credentials_id"] = {:select => " *,'neo' AS persistence_token FROM users WHERE id = #{ben.id} limit 1 -- "}
26
+ controller.session["user_credentials"] = "neo"
27
+ controller.session["user_credentials_id"] = {
28
+ select: " *,'neo' AS persistence_token FROM users WHERE id = #{ben.id} limit 1 -- "
29
+ }
28
30
  @user_session = UserSession.find
29
31
  assert @user_session.blank?
30
32
  end
31
33
 
32
34
  def test_persist_persist_by_session_with_sql_injection_attack
33
- ben = users(:ben)
34
- controller.session["user_credentials"] = {:select => "ABRA CADABRA"}
35
+ controller.session["user_credentials"] = { select: "ABRA CADABRA" }
35
36
  controller.session["user_credentials_id"] = nil
36
37
  assert_nothing_raised do
37
38
  @user_session = UserSession.find
@@ -74,4 +75,4 @@ module SessionTest
74
75
  end
75
76
  end
76
77
  end
77
- end
78
+ end
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
3
  module SessionTest
4
4
  module TimeoutTest
@@ -6,12 +6,12 @@ module SessionTest
6
6
  def test_logout_on_timeout
7
7
  UserSession.logout_on_timeout = true
8
8
  assert UserSession.logout_on_timeout
9
-
9
+
10
10
  UserSession.logout_on_timeout false
11
- assert !UserSession.logout_on_timeout
11
+ refute UserSession.logout_on_timeout
12
12
  end
13
13
  end
14
-
14
+
15
15
  class InstanceMethods < ActiveSupport::TestCase
16
16
  def test_stale_state
17
17
  UserSession.logout_on_timeout = true
@@ -19,23 +19,23 @@ module SessionTest
19
19
  ben.last_request_at = 3.years.ago
20
20
  ben.save
21
21
  set_session_for(ben)
22
-
22
+
23
23
  session = UserSession.new
24
24
  assert session.persisting?
25
25
  assert session.stale?
26
26
  assert_equal ben, session.stale_record
27
27
  assert_nil session.record
28
28
  assert_nil controller.session["user_credentials_id"]
29
-
29
+
30
30
  set_session_for(ben)
31
-
31
+
32
32
  ben.last_request_at = Time.now
33
33
  ben.save
34
-
34
+
35
35
  assert session.persisting?
36
- assert !session.stale?
36
+ refute session.stale?
37
37
  assert_nil session.stale_record
38
-
38
+
39
39
  UserSession.logout_on_timeout = false
40
40
  end
41
41
 
@@ -63,15 +63,17 @@ module SessionTest
63
63
  assert session.save
64
64
  Timecop.freeze(Time.now + 2.months)
65
65
  assert session.persisting?
66
- assert !session.stale?
66
+ refute session.stale?
67
67
  UserSession.remember_me = false
68
68
  end
69
-
69
+
70
70
  def test_successful_login
71
71
  UserSession.logout_on_timeout = true
72
72
  ben = users(:ben)
73
- assert UserSession.create(:login => ben.login, :password => "benrocks")
74
- assert session = UserSession.find
73
+ session = UserSession.create(login: ben.login, password: "benrocks")
74
+ refute session.new_session?
75
+ session = UserSession.find
76
+ assert session
75
77
  assert_equal ben, session.record
76
78
  UserSession.logout_on_timeout = false
77
79
  end
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
3
  module SessionTest
4
4
  class UnauthorizedRecordTest < ActiveSupport::TestCase
@@ -7,7 +7,7 @@ module SessionTest
7
7
  session = UserSession.new
8
8
  session.credentials = [ben]
9
9
  assert_equal ben, session.unauthorized_record
10
- assert_equal({:unauthorized_record => "<protected>"}, session.credentials)
10
+ assert_equal({ unauthorized_record: "<protected>" }, session.credentials)
11
11
  end
12
12
  end
13
- end
13
+ end
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
3
  module SessionTest
4
4
  class ValidationTest < ActiveSupport::TestCase
@@ -6,13 +6,13 @@ module SessionTest
6
6
  session = UserSession.new
7
7
  assert session.errors.is_a?(Authlogic::Session::Validation::Errors)
8
8
  end
9
-
9
+
10
10
  def test_valid
11
11
  session = UserSession.new
12
- assert !session.valid?
12
+ refute session.valid?
13
13
  assert_nil session.record
14
14
  assert session.errors.count > 0
15
-
15
+
16
16
  ben = users(:ben)
17
17
  session.unauthorized_record = ben
18
18
  assert session.valid?
@@ -20,4 +20,4 @@ module SessionTest
20
20
  assert session.errors.empty?
21
21
  end
22
22
  end
23
- end
23
+ end
@@ -1,24 +1,32 @@
1
+ require "byebug"
1
2
  require "rubygems"
2
3
  require "minitest/autorun"
3
4
  require "active_record"
4
5
  require "active_record/fixtures"
5
6
  require "timecop"
6
7
  require "i18n"
8
+ require "minitest/reporters"
7
9
 
10
+ Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
8
11
 
9
- I18n.load_path << File.dirname(__FILE__) + '/i18n/lol.yml'
12
+ I18n.load_path << File.dirname(__FILE__) + "/i18n/lol.yml"
10
13
 
11
- #ActiveRecord::Schema.verbose = false
12
- ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
14
+ # ActiveRecord::Schema.verbose = false
15
+ ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
13
16
  logger = Logger.new(STDOUT)
14
- logger.level= Logger::FATAL
17
+ logger.level = Logger::FATAL
15
18
  ActiveRecord::Base.logger = logger
16
19
 
17
- if (ActiveRecord::VERSION::STRING < '4.1')
20
+ if ActiveRecord::VERSION::STRING < "4.1"
18
21
  ActiveRecord::Base.configurations = true
19
22
  end
23
+
24
+ if ActiveSupport.respond_to?(:test_order)
25
+ ActiveSupport.test_order = :sorted
26
+ end
27
+
20
28
  ActiveRecord::Base.default_timezone = :local
21
- ActiveRecord::Schema.define(:version => 1) do
29
+ ActiveRecord::Schema.define(version: 1) do
22
30
  create_table :companies do |t|
23
31
  t.datetime :created_at
24
32
  t.datetime :updated_at
@@ -32,7 +40,7 @@ ActiveRecord::Schema.define(:version => 1) do
32
40
  t.string :name
33
41
  end
34
42
 
35
- create_table :projects_users, :id => false do |t|
43
+ create_table :projects_users, id: false do |t|
36
44
  t.integer :project_id
37
45
  t.integer :user_id
38
46
  end
@@ -40,7 +48,7 @@ ActiveRecord::Schema.define(:version => 1) do
40
48
  create_table :users do |t|
41
49
  t.datetime :created_at
42
50
  t.datetime :updated_at
43
- t.integer :lock_version, :default => 0
51
+ t.integer :lock_version, default: 0
44
52
  t.integer :company_id
45
53
  t.string :login
46
54
  t.string :crypted_password
@@ -51,16 +59,16 @@ ActiveRecord::Schema.define(:version => 1) do
51
59
  t.string :email
52
60
  t.string :first_name
53
61
  t.string :last_name
54
- t.integer :login_count, :default => 0, :null => false
55
- t.integer :failed_login_count, :default => 0, :null => false
62
+ t.integer :login_count, default: 0, null: false
63
+ t.integer :failed_login_count, default: 0, null: false
56
64
  t.datetime :last_request_at
57
65
  t.datetime :current_login_at
58
66
  t.datetime :last_login_at
59
67
  t.string :current_login_ip
60
68
  t.string :last_login_ip
61
- t.boolean :active, :default => true
62
- t.boolean :approved, :default => true
63
- t.boolean :confirmed, :default => true
69
+ t.boolean :active, default: true
70
+ t.boolean :approved, default: true
71
+ t.boolean :confirmed, default: true
64
72
  end
65
73
 
66
74
  create_table :employees do |t|
@@ -73,7 +81,7 @@ ActiveRecord::Schema.define(:version => 1) do
73
81
  t.string :persistence_token
74
82
  t.string :first_name
75
83
  t.string :last_name
76
- t.integer :login_count, :default => 0, :null => false
84
+ t.integer :login_count, default: 0, null: false
77
85
  t.datetime :last_request_at
78
86
  t.datetime :current_login_at
79
87
  t.datetime :last_login_at
@@ -99,46 +107,81 @@ ActiveRecord::Schema.define(:version => 1) do
99
107
  end
100
108
  end
101
109
 
102
- require_relative '../lib/authlogic' unless defined?(Authlogic)
103
- require_relative '../lib/authlogic/test_case'
104
- require_relative 'libs/project'
105
- require_relative 'libs/affiliate'
106
- require_relative 'libs/employee'
107
- require_relative 'libs/employee_session'
108
- require_relative 'libs/ldaper'
109
- require_relative 'libs/user'
110
- require_relative 'libs/user_session'
111
- require_relative 'libs/company'
112
-
113
- Authlogic::CryptoProviders::AES256.key = "myafdsfddddddddddddddddddddddddddddddddddddddddddddddd"
114
-
115
- class ActiveSupport::TestCase
116
- include ActiveRecord::TestFixtures
117
- self.fixture_path = File.dirname(__FILE__) + "/fixtures"
118
- self.use_transactional_fixtures = false
119
- self.use_instantiated_fixtures = false
120
- self.pre_loaded_fixtures = false
121
- fixtures :all
122
- setup :activate_authlogic
123
- setup :config_setup
124
- teardown :config_teardown
125
- teardown { Timecop.return } # for tests that need to freeze the time
126
-
127
-
128
- private
110
+ require "English"
111
+ $LOAD_PATH.unshift(File.expand_path("../lib", __dir__))
112
+ require "authlogic"
113
+ require "authlogic/test_case"
114
+ require "libs/project"
115
+ require "libs/affiliate"
116
+ require "libs/employee"
117
+ require "libs/employee_session"
118
+ require "libs/ldaper"
119
+ require "libs/user"
120
+ require "libs/user_session"
121
+ require "libs/company"
122
+
123
+ # Recent change, 2017-10-23: We had used a 54-letter string here. In the default
124
+ # encoding, UTF-8, that's 54 bytes, which is clearly incorrect for an algorithm
125
+ # with a 256-bit key, but I guess it worked. With the release of ruby 2.4 (and
126
+ # thus openssl gem 2.0), it is more strict, and must be exactly 32 bytes.
127
+ Authlogic::CryptoProviders::AES256.key = ::OpenSSL::Random.random_bytes(32)
128
+
129
+ module ActiveSupport
130
+ class TestCase
131
+ include ActiveRecord::TestFixtures
132
+ self.fixture_path = File.dirname(__FILE__) + "/fixtures"
133
+
134
+ # use_transactional_fixtures= is deprecated and will be removed from Rails 5.1
135
+ # (use use_transactional_tests= instead)
136
+ if respond_to?(:use_transactional_tests=)
137
+ self.use_transactional_tests = false
138
+ else
139
+ self.use_transactional_fixtures = false
140
+ end
141
+
142
+ self.use_instantiated_fixtures = false
143
+ self.pre_loaded_fixtures = false
144
+ fixtures :all
145
+ setup :activate_authlogic
146
+ setup :config_setup
147
+ teardown :config_teardown
148
+ teardown { Timecop.return } # for tests that need to freeze the time
149
+
150
+ private
151
+
129
152
  # Many of the tests change Authlogic config for the test models. Some tests
130
153
  # were not resetting the config after tests, which didn't surface as broken
131
154
  # tests until Rails 4.1 was added for testing. This ensures that all the
132
155
  # models start tests with their original config.
133
156
  def config_setup
134
- [Project, Affiliate, Employee, EmployeeSession, Ldaper, User, UserSession, Company].each do |model|
135
- model.class_attribute :original_acts_as_authentic_config unless model.respond_to?(:original_acts_as_authentic_config)
157
+ [
158
+ Project,
159
+ Affiliate,
160
+ Employee,
161
+ EmployeeSession,
162
+ Ldaper,
163
+ User,
164
+ UserSession,
165
+ Company
166
+ ].each do |model|
167
+ unless model.respond_to?(:original_acts_as_authentic_config)
168
+ model.class_attribute :original_acts_as_authentic_config
169
+ end
136
170
  model.original_acts_as_authentic_config = model.acts_as_authentic_config
137
171
  end
138
172
  end
139
173
 
140
174
  def config_teardown
141
- [Project, Affiliate, Employee, EmployeeSession, Ldaper, User, UserSession, Company].each do |model|
175
+ [
176
+ Project,
177
+ Affiliate,
178
+ Employee,
179
+ EmployeeSession,
180
+ Ldaper,
181
+ User,
182
+ UserSession,
183
+ Company
184
+ ].each do |model|
142
185
  model.acts_as_authentic_config = model.original_acts_as_authentic_config
143
186
  end
144
187
  end
@@ -154,7 +197,7 @@ class ActiveSupport::TestCase
154
197
  end
155
198
  end
156
199
 
157
- def http_basic_auth_for(user = nil, &block)
200
+ def http_basic_auth_for(user = nil)
158
201
  unless user.blank?
159
202
  controller.http_user = user.login
160
203
  controller.http_password = password_for(user)
@@ -164,7 +207,10 @@ class ActiveSupport::TestCase
164
207
  end
165
208
 
166
209
  def set_cookie_for(user)
167
- controller.cookies["user_credentials"] = {:value => "#{user.persistence_token}::#{user.id}", :expires => nil}
210
+ controller.cookies["user_credentials"] = {
211
+ value: "#{user.persistence_token}::#{user.id}",
212
+ expires: nil
213
+ }
168
214
  end
169
215
 
170
216
  def unset_cookie
@@ -187,12 +233,32 @@ class ActiveSupport::TestCase
187
233
  controller.request_content_type = nil
188
234
  end
189
235
 
190
- def set_session_for(user)
191
- controller.session["user_credentials"] = user.persistence_token
192
- controller.session["user_credentials_id"] = user.id
236
+ def session_credentials_prefix(scope_record)
237
+ if scope_record.nil?
238
+ ""
239
+ else
240
+ format(
241
+ "%s_%d_",
242
+ scope_record.class.model_name.name.underscore,
243
+ scope_record.id
244
+ )
245
+ end
246
+ end
247
+
248
+ # Sets the session variables that `record` (eg. a `User`) would have after
249
+ # logging in.
250
+ #
251
+ # If `record` belongs to an `authenticates_many` association that uses the
252
+ # `scope_cookies` option, then a `scope_record` can be provided.
253
+ def set_session_for(record, scope_record = nil)
254
+ prefix = session_credentials_prefix(scope_record)
255
+ record_class_name = record.class.model_name.name.underscore
256
+ controller.session["#{prefix}#{record_class_name}_credentials"] = record.persistence_token
257
+ controller.session["#{prefix}#{record_class_name}_credentials_id"] = record.id
193
258
  end
194
259
 
195
260
  def unset_session
196
261
  controller.session["user_credentials"] = controller.session["user_credentials_id"] = nil
197
262
  end
263
+ end
198
264
  end
metadata CHANGED
@@ -1,120 +1,183 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authlogic
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.6
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Johnson
8
+ - Tieg Zaharia
9
+ - Jared Beck
8
10
  autorequire:
9
11
  bindir: bin
10
12
  cert_chain: []
11
- date: 2015-07-13 00:00:00.000000000 Z
13
+ date: 2018-07-18 00:00:00.000000000 Z
12
14
  dependencies:
13
15
  - !ruby/object:Gem::Dependency
14
16
  name: activerecord
15
17
  requirement: !ruby/object:Gem::Requirement
16
18
  requirements:
17
- - - '>='
19
+ - - ">="
18
20
  - !ruby/object:Gem::Version
19
- version: '3.2'
21
+ version: '4.2'
22
+ - - "<"
23
+ - !ruby/object:Gem::Version
24
+ version: '5.3'
20
25
  type: :runtime
21
26
  prerelease: false
22
27
  version_requirements: !ruby/object:Gem::Requirement
23
28
  requirements:
24
- - - '>='
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: '4.2'
32
+ - - "<"
25
33
  - !ruby/object:Gem::Version
26
- version: '3.2'
34
+ version: '5.3'
27
35
  - !ruby/object:Gem::Dependency
28
36
  name: activesupport
29
37
  requirement: !ruby/object:Gem::Requirement
30
38
  requirements:
31
- - - '>='
39
+ - - ">="
32
40
  - !ruby/object:Gem::Version
33
- version: '3.2'
41
+ version: '4.2'
42
+ - - "<"
43
+ - !ruby/object:Gem::Version
44
+ version: '5.3'
34
45
  type: :runtime
35
46
  prerelease: false
36
47
  version_requirements: !ruby/object:Gem::Requirement
37
48
  requirements:
38
- - - '>='
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '4.2'
52
+ - - "<"
39
53
  - !ruby/object:Gem::Version
40
- version: '3.2'
54
+ version: '5.3'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: request_store
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ~>
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
61
  version: '1.0'
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ~>
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '1.0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: scrypt
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - '>='
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
75
  version: '1.2'
62
- - - <
76
+ - - "<"
63
77
  - !ruby/object:Gem::Version
64
- version: '3.0'
78
+ version: '4.0'
65
79
  type: :runtime
66
80
  prerelease: false
67
81
  version_requirements: !ruby/object:Gem::Requirement
68
82
  requirements:
69
- - - '>='
83
+ - - ">="
70
84
  - !ruby/object:Gem::Version
71
85
  version: '1.2'
72
- - - <
86
+ - - "<"
73
87
  - !ruby/object:Gem::Version
74
- version: '3.0'
88
+ version: '4.0'
75
89
  - !ruby/object:Gem::Dependency
76
90
  name: bcrypt
77
91
  requirement: !ruby/object:Gem::Requirement
78
92
  requirements:
79
- - - ~>
93
+ - - "~>"
80
94
  - !ruby/object:Gem::Version
81
95
  version: '3.1'
82
96
  type: :development
83
97
  prerelease: false
84
98
  version_requirements: !ruby/object:Gem::Requirement
85
99
  requirements:
86
- - - ~>
100
+ - - "~>"
87
101
  - !ruby/object:Gem::Version
88
102
  version: '3.1'
103
+ - !ruby/object:Gem::Dependency
104
+ name: byebug
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '10.0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '10.0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: minitest-reporters
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.3'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.3'
131
+ - !ruby/object:Gem::Dependency
132
+ name: rubocop
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: 0.58.1
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: 0.58.1
89
145
  - !ruby/object:Gem::Dependency
90
146
  name: timecop
91
147
  requirement: !ruby/object:Gem::Requirement
92
148
  requirements:
93
- - - ~>
149
+ - - "~>"
94
150
  - !ruby/object:Gem::Version
95
151
  version: '0.7'
96
152
  type: :development
97
153
  prerelease: false
98
154
  version_requirements: !ruby/object:Gem::Requirement
99
155
  requirements:
100
- - - ~>
156
+ - - "~>"
101
157
  - !ruby/object:Gem::Version
102
158
  version: '0.7'
103
- description: A clean, simple, and unobtrusive ruby authentication solution.
159
+ description:
104
160
  email:
105
161
  - bjohnson@binarylogic.com
162
+ - tieg.zaharia@gmail.com
163
+ - jared@jaredbeck.com
106
164
  executables: []
107
165
  extensions: []
108
166
  extra_rdoc_files: []
109
167
  files:
110
- - .gitignore
111
- - .travis.yml
168
+ - ".github/ISSUE_TEMPLATE.md"
169
+ - ".github/triage.md"
170
+ - ".gitignore"
171
+ - ".rubocop.yml"
172
+ - ".rubocop_todo.yml"
173
+ - ".travis.yml"
112
174
  - CHANGELOG.md
113
175
  - CONTRIBUTING.md
114
176
  - Gemfile
115
177
  - LICENSE
116
- - README.rdoc
178
+ - README.md
117
179
  - Rakefile
180
+ - UPGRADING.md
118
181
  - authlogic.gemspec
119
182
  - lib/authlogic.rb
120
183
  - lib/authlogic/acts_as_authentic/base.rb
@@ -125,6 +188,7 @@ files:
125
188
  - lib/authlogic/acts_as_authentic/password.rb
126
189
  - lib/authlogic/acts_as_authentic/perishable_token.rb
127
190
  - lib/authlogic/acts_as_authentic/persistence_token.rb
191
+ - lib/authlogic/acts_as_authentic/queries/find_with_case.rb
128
192
  - lib/authlogic/acts_as_authentic/restful_authentication.rb
129
193
  - lib/authlogic/acts_as_authentic/session_maintenance.rb
130
194
  - lib/authlogic/acts_as_authentic/single_access_token.rb
@@ -178,6 +242,7 @@ files:
178
242
  - lib/authlogic/test_case/mock_logger.rb
179
243
  - lib/authlogic/test_case/mock_request.rb
180
244
  - lib/authlogic/test_case/rails_request_adapter.rb
245
+ - lib/authlogic/version.rb
181
246
  - test/acts_as_authentic_test/base_test.rb
182
247
  - test/acts_as_authentic_test/email_test.rb
183
248
  - test/acts_as_authentic_test/logged_in_status_test.rb
@@ -189,6 +254,7 @@ files:
189
254
  - test/acts_as_authentic_test/restful_authentication_test.rb
190
255
  - test/acts_as_authentic_test/session_maintenance_test.rb
191
256
  - test/acts_as_authentic_test/single_access_test.rb
257
+ - test/adapter_test.rb
192
258
  - test/authenticates_many_test.rb
193
259
  - test/config_test.rb
194
260
  - test/crypto_provider_test/aes256_test.rb
@@ -197,14 +263,16 @@ files:
197
263
  - test/crypto_provider_test/sha1_test.rb
198
264
  - test/crypto_provider_test/sha256_test.rb
199
265
  - test/crypto_provider_test/sha512_test.rb
266
+ - test/crypto_provider_test/wordpress_test.rb
200
267
  - test/fixtures/companies.yml
201
268
  - test/fixtures/employees.yml
202
269
  - test/fixtures/projects.yml
203
270
  - test/fixtures/users.yml
204
- - test/gemfiles/Gemfile.rails-3.2.x
205
- - test/gemfiles/Gemfile.rails-4.0.x
206
- - test/gemfiles/Gemfile.rails-4.1.x
207
271
  - test/gemfiles/Gemfile.rails-4.2.x
272
+ - test/gemfiles/Gemfile.rails-5.0.x
273
+ - test/gemfiles/Gemfile.rails-5.1.x
274
+ - test/gemfiles/Gemfile.rails-5.2.x
275
+ - test/gemfiles/Gemfile.rails-master
208
276
  - test/i18n/lol.yml
209
277
  - test/i18n_test.rb
210
278
  - test/libs/affiliate.rb
@@ -249,17 +317,17 @@ require_paths:
249
317
  - lib
250
318
  required_ruby_version: !ruby/object:Gem::Requirement
251
319
  requirements:
252
- - - '>='
320
+ - - ">="
253
321
  - !ruby/object:Gem::Version
254
- version: '0'
322
+ version: 2.2.0
255
323
  required_rubygems_version: !ruby/object:Gem::Requirement
256
324
  requirements:
257
- - - '>='
325
+ - - ">="
258
326
  - !ruby/object:Gem::Version
259
327
  version: '0'
260
328
  requirements: []
261
329
  rubyforge_project:
262
- rubygems_version: 2.0.14
330
+ rubygems_version: 2.7.6
263
331
  signing_key:
264
332
  specification_version: 4
265
333
  summary: A clean, simple, and unobtrusive ruby authentication solution.
@@ -275,6 +343,7 @@ test_files:
275
343
  - test/acts_as_authentic_test/restful_authentication_test.rb
276
344
  - test/acts_as_authentic_test/session_maintenance_test.rb
277
345
  - test/acts_as_authentic_test/single_access_test.rb
346
+ - test/adapter_test.rb
278
347
  - test/authenticates_many_test.rb
279
348
  - test/config_test.rb
280
349
  - test/crypto_provider_test/aes256_test.rb
@@ -283,14 +352,16 @@ test_files:
283
352
  - test/crypto_provider_test/sha1_test.rb
284
353
  - test/crypto_provider_test/sha256_test.rb
285
354
  - test/crypto_provider_test/sha512_test.rb
355
+ - test/crypto_provider_test/wordpress_test.rb
286
356
  - test/fixtures/companies.yml
287
357
  - test/fixtures/employees.yml
288
358
  - test/fixtures/projects.yml
289
359
  - test/fixtures/users.yml
290
- - test/gemfiles/Gemfile.rails-3.2.x
291
- - test/gemfiles/Gemfile.rails-4.0.x
292
- - test/gemfiles/Gemfile.rails-4.1.x
293
360
  - test/gemfiles/Gemfile.rails-4.2.x
361
+ - test/gemfiles/Gemfile.rails-5.0.x
362
+ - test/gemfiles/Gemfile.rails-5.1.x
363
+ - test/gemfiles/Gemfile.rails-5.2.x
364
+ - test/gemfiles/Gemfile.rails-master
294
365
  - test/i18n/lol.yml
295
366
  - test/i18n_test.rb
296
367
  - test/libs/affiliate.rb