authlogic 4.4.3 → 5.0.4

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 (147) hide show
  1. checksums.yaml +4 -4
  2. data/lib/authlogic.rb +4 -28
  3. data/lib/authlogic/acts_as_authentic/base.rb +3 -18
  4. data/lib/authlogic/acts_as_authentic/email.rb +3 -170
  5. data/lib/authlogic/acts_as_authentic/logged_in_status.rb +3 -1
  6. data/lib/authlogic/acts_as_authentic/login.rb +7 -174
  7. data/lib/authlogic/acts_as_authentic/magic_columns.rb +7 -4
  8. data/lib/authlogic/acts_as_authentic/password.rb +54 -253
  9. data/lib/authlogic/acts_as_authentic/perishable_token.rb +8 -5
  10. data/lib/authlogic/acts_as_authentic/persistence_token.rb +10 -4
  11. data/lib/authlogic/acts_as_authentic/queries/case_sensitivity.rb +53 -0
  12. data/lib/authlogic/acts_as_authentic/queries/find_with_case.rb +36 -20
  13. data/lib/authlogic/acts_as_authentic/session_maintenance.rb +8 -6
  14. data/lib/authlogic/acts_as_authentic/single_access_token.rb +10 -8
  15. data/lib/authlogic/config.rb +9 -1
  16. data/lib/authlogic/controller_adapters/abstract_adapter.rb +7 -4
  17. data/lib/authlogic/controller_adapters/rack_adapter.rb +2 -0
  18. data/lib/authlogic/controller_adapters/rails_adapter.rb +6 -29
  19. data/lib/authlogic/controller_adapters/sinatra_adapter.rb +6 -0
  20. data/lib/authlogic/cookie_credentials.rb +63 -0
  21. data/lib/authlogic/crypto_providers.rb +5 -20
  22. data/lib/authlogic/crypto_providers/bcrypt.rb +3 -3
  23. data/lib/authlogic/crypto_providers/md5.rb +3 -6
  24. data/lib/authlogic/crypto_providers/scrypt.rb +2 -0
  25. data/lib/authlogic/crypto_providers/sha1.rb +4 -6
  26. data/lib/authlogic/crypto_providers/sha256.rb +2 -0
  27. data/lib/authlogic/crypto_providers/sha512.rb +6 -5
  28. data/lib/authlogic/i18n.rb +3 -1
  29. data/lib/authlogic/i18n/translator.rb +3 -0
  30. data/lib/authlogic/random.rb +2 -0
  31. data/lib/authlogic/session/base.rb +2087 -39
  32. data/lib/authlogic/session/magic_column/assigns_last_request_at.rb +46 -0
  33. data/lib/authlogic/test_case.rb +4 -0
  34. data/lib/authlogic/test_case/mock_controller.rb +2 -0
  35. data/lib/authlogic/test_case/mock_cookie_jar.rb +7 -35
  36. data/lib/authlogic/test_case/mock_logger.rb +2 -0
  37. data/lib/authlogic/test_case/mock_request.rb +2 -0
  38. data/lib/authlogic/test_case/rails_request_adapter.rb +2 -0
  39. data/lib/authlogic/version.rb +2 -1
  40. metadata +136 -182
  41. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -28
  42. data/.github/ISSUE_TEMPLATE/feature_proposal.md +0 -32
  43. data/.github/triage.md +0 -86
  44. data/.gitignore +0 -15
  45. data/.rubocop.yml +0 -133
  46. data/.rubocop_todo.yml +0 -74
  47. data/.travis.yml +0 -24
  48. data/CHANGELOG.md +0 -336
  49. data/CONTRIBUTING.md +0 -91
  50. data/Gemfile +0 -6
  51. data/LICENSE +0 -20
  52. data/README.md +0 -439
  53. data/Rakefile +0 -21
  54. data/UPGRADING.md +0 -22
  55. data/authlogic.gemspec +0 -40
  56. data/doc/use_normal_rails_validation.md +0 -82
  57. data/gemfiles/Gemfile.rails-4.2.x +0 -6
  58. data/gemfiles/Gemfile.rails-5.1.x +0 -6
  59. data/gemfiles/Gemfile.rails-5.2.x +0 -6
  60. data/lib/authlogic/acts_as_authentic/restful_authentication.rb +0 -106
  61. data/lib/authlogic/acts_as_authentic/validations_scope.rb +0 -35
  62. data/lib/authlogic/authenticates_many/association.rb +0 -50
  63. data/lib/authlogic/authenticates_many/base.rb +0 -81
  64. data/lib/authlogic/crypto_providers/aes256.rb +0 -71
  65. data/lib/authlogic/crypto_providers/wordpress.rb +0 -72
  66. data/lib/authlogic/regex.rb +0 -79
  67. data/lib/authlogic/session/activation.rb +0 -73
  68. data/lib/authlogic/session/active_record_trickery.rb +0 -65
  69. data/lib/authlogic/session/brute_force_protection.rb +0 -127
  70. data/lib/authlogic/session/callbacks.rb +0 -153
  71. data/lib/authlogic/session/cookies.rb +0 -329
  72. data/lib/authlogic/session/existence.rb +0 -103
  73. data/lib/authlogic/session/foundation.rb +0 -105
  74. data/lib/authlogic/session/http_auth.rb +0 -107
  75. data/lib/authlogic/session/id.rb +0 -53
  76. data/lib/authlogic/session/klass.rb +0 -73
  77. data/lib/authlogic/session/magic_columns.rb +0 -119
  78. data/lib/authlogic/session/magic_states.rb +0 -82
  79. data/lib/authlogic/session/params.rb +0 -130
  80. data/lib/authlogic/session/password.rb +0 -318
  81. data/lib/authlogic/session/perishable_token.rb +0 -24
  82. data/lib/authlogic/session/persistence.rb +0 -77
  83. data/lib/authlogic/session/priority_record.rb +0 -38
  84. data/lib/authlogic/session/scopes.rb +0 -138
  85. data/lib/authlogic/session/session.rb +0 -77
  86. data/lib/authlogic/session/timeout.rb +0 -103
  87. data/lib/authlogic/session/unauthorized_record.rb +0 -56
  88. data/lib/authlogic/session/validation.rb +0 -93
  89. data/test/acts_as_authentic_test/base_test.rb +0 -27
  90. data/test/acts_as_authentic_test/email_test.rb +0 -241
  91. data/test/acts_as_authentic_test/logged_in_status_test.rb +0 -64
  92. data/test/acts_as_authentic_test/login_test.rb +0 -153
  93. data/test/acts_as_authentic_test/magic_columns_test.rb +0 -29
  94. data/test/acts_as_authentic_test/password_test.rb +0 -263
  95. data/test/acts_as_authentic_test/perishable_token_test.rb +0 -98
  96. data/test/acts_as_authentic_test/persistence_token_test.rb +0 -62
  97. data/test/acts_as_authentic_test/restful_authentication_test.rb +0 -48
  98. data/test/acts_as_authentic_test/session_maintenance_test.rb +0 -150
  99. data/test/acts_as_authentic_test/single_access_test.rb +0 -46
  100. data/test/adapter_test.rb +0 -23
  101. data/test/authenticates_many_test.rb +0 -33
  102. data/test/config_test.rb +0 -38
  103. data/test/crypto_provider_test/aes256_test.rb +0 -16
  104. data/test/crypto_provider_test/bcrypt_test.rb +0 -16
  105. data/test/crypto_provider_test/scrypt_test.rb +0 -16
  106. data/test/crypto_provider_test/sha1_test.rb +0 -25
  107. data/test/crypto_provider_test/sha256_test.rb +0 -16
  108. data/test/crypto_provider_test/sha512_test.rb +0 -16
  109. data/test/crypto_provider_test/wordpress_test.rb +0 -26
  110. data/test/fixtures/companies.yml +0 -5
  111. data/test/fixtures/employees.yml +0 -17
  112. data/test/fixtures/projects.yml +0 -3
  113. data/test/fixtures/users.yml +0 -41
  114. data/test/i18n/lol.yml +0 -4
  115. data/test/i18n_test.rb +0 -35
  116. data/test/libs/affiliate.rb +0 -9
  117. data/test/libs/company.rb +0 -8
  118. data/test/libs/employee.rb +0 -9
  119. data/test/libs/employee_session.rb +0 -4
  120. data/test/libs/ldaper.rb +0 -5
  121. data/test/libs/project.rb +0 -5
  122. data/test/libs/user.rb +0 -9
  123. data/test/libs/user_session.rb +0 -27
  124. data/test/random_test.rb +0 -15
  125. data/test/session_test/activation_test.rb +0 -45
  126. data/test/session_test/active_record_trickery_test.rb +0 -78
  127. data/test/session_test/brute_force_protection_test.rb +0 -110
  128. data/test/session_test/callbacks_test.rb +0 -42
  129. data/test/session_test/cookies_test.rb +0 -242
  130. data/test/session_test/credentials_test.rb +0 -0
  131. data/test/session_test/existence_test.rb +0 -88
  132. data/test/session_test/foundation_test.rb +0 -24
  133. data/test/session_test/http_auth_test.rb +0 -60
  134. data/test/session_test/id_test.rb +0 -19
  135. data/test/session_test/klass_test.rb +0 -42
  136. data/test/session_test/magic_columns_test.rb +0 -62
  137. data/test/session_test/magic_states_test.rb +0 -60
  138. data/test/session_test/params_test.rb +0 -61
  139. data/test/session_test/password_test.rb +0 -107
  140. data/test/session_test/perishability_test.rb +0 -17
  141. data/test/session_test/persistence_test.rb +0 -35
  142. data/test/session_test/scopes_test.rb +0 -68
  143. data/test/session_test/session_test.rb +0 -80
  144. data/test/session_test/timeout_test.rb +0 -84
  145. data/test/session_test/unauthorized_record_test.rb +0 -15
  146. data/test/session_test/validation_test.rb +0 -25
  147. data/test/test_helper.rb +0 -272
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Authlogic
2
4
  module ActsAsAuthentic
3
5
  # This provides a handy token that is "perishable", meaning the token is
@@ -33,7 +35,7 @@ module Authlogic
33
35
  10.minutes.to_i
34
36
  )
35
37
  end
36
- alias_method :perishable_token_valid_for=, :perishable_token_valid_for
38
+ alias perishable_token_valid_for= perishable_token_valid_for
37
39
 
38
40
  # Authlogic tries to expire and change the perishable token as much as
39
41
  # possible, without compromising its purpose. If you want to manage it
@@ -44,7 +46,7 @@ module Authlogic
44
46
  def disable_perishable_token_maintenance(value = nil)
45
47
  rw_config(:disable_perishable_token_maintenance, value, false)
46
48
  end
47
- alias_method :disable_perishable_token_maintenance=, :disable_perishable_token_maintenance
49
+ alias disable_perishable_token_maintenance= disable_perishable_token_maintenance
48
50
  end
49
51
 
50
52
  # All methods relating to the perishable token.
@@ -56,12 +58,13 @@ module Authlogic
56
58
  extend ClassMethods
57
59
  include InstanceMethods
58
60
 
59
- validates_uniqueness_of :perishable_token, if: :perishable_token_changed?
61
+ validates_uniqueness_of :perishable_token, case_sensitive: true,
62
+ if: :will_save_change_to_perishable_token?
60
63
  before_save :reset_perishable_token, unless: :disable_perishable_token_maintenance?
61
64
  end
62
65
  end
63
66
 
64
- # Class methods for the perishable token
67
+ # :nodoc:
65
68
  module ClassMethods
66
69
  # Use this method to find a record with a perishable token. This
67
70
  # method does 2 things for you:
@@ -94,7 +97,7 @@ module Authlogic
94
97
  end
95
98
  end
96
99
 
97
- # Instance level methods for the perishable token.
100
+ # :nodoc:
98
101
  module InstanceMethods
99
102
  # Resets the perishable token to a random friendly token.
100
103
  def reset_perishable_token
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Authlogic
2
4
  module ActsAsAuthentic
3
5
  # Maintains the persistence token, the token responsible for persisting sessions. This token
@@ -16,19 +18,23 @@ module Authlogic
16
18
  extend ClassMethods
17
19
  include InstanceMethods
18
20
 
21
+ # If the table does not have a password column, then
22
+ # `after_password_set` etc. will not be defined. See
23
+ # `Authlogic::ActsAsAuthentic::Password::Callbacks.included`
19
24
  if respond_to?(:after_password_set) && respond_to?(:after_password_verification)
20
25
  after_password_set :reset_persistence_token
21
26
  after_password_verification :reset_persistence_token!, if: :reset_persistence_token?
22
27
  end
23
28
 
24
29
  validates_presence_of :persistence_token
25
- validates_uniqueness_of :persistence_token, if: :persistence_token_changed?
30
+ validates_uniqueness_of :persistence_token, case_sensitive: true,
31
+ if: :will_save_change_to_persistence_token?
26
32
 
27
33
  before_validation :reset_persistence_token, if: :reset_persistence_token?
28
34
  end
29
35
  end
30
36
 
31
- # Class level methods for the persistence token.
37
+ # :nodoc:
32
38
  module ClassMethods
33
39
  # Resets ALL persistence tokens in the database, which will require
34
40
  # all users to re-authenticate.
@@ -38,7 +44,7 @@ module Authlogic
38
44
  end
39
45
  end
40
46
 
41
- # Instance level methods for the persistence token.
47
+ # :nodoc:
42
48
  module InstanceMethods
43
49
  # Resets the persistence_token field to a random hex value.
44
50
  def reset_persistence_token
@@ -50,7 +56,7 @@ module Authlogic
50
56
  reset_persistence_token
51
57
  save_without_session_maintenance(validate: false)
52
58
  end
53
- alias_method :forget!, :reset_persistence_token!
59
+ alias forget! reset_persistence_token!
54
60
 
55
61
  private
56
62
 
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Authlogic
4
+ module ActsAsAuthentic
5
+ module Queries
6
+ # @api private
7
+ class CaseSensitivity
8
+ E_UNABLE_TO_DETERMINE_SENSITIVITY = <<~EOS
9
+ Authlogic was unable to determine what case-sensitivity to use when
10
+ searching for email/login. To specify a sensitivity, validate the
11
+ uniqueness of the email/login and use the `case_sensitive` option,
12
+ like this:
13
+
14
+ validates :email, uniqueness: { case_sensitive: false }
15
+
16
+ Authlogic will now perform a case-insensitive query.
17
+ EOS
18
+
19
+ # @api private
20
+ def initialize(model_class, attribute)
21
+ @model_class = model_class
22
+ @attribute = attribute.to_sym
23
+ end
24
+
25
+ # @api private
26
+ def sensitive?
27
+ sensitive = uniqueness_validator_options[:case_sensitive]
28
+ if sensitive.nil?
29
+ ::Kernel.warn(E_UNABLE_TO_DETERMINE_SENSITIVITY)
30
+ false
31
+ else
32
+ sensitive
33
+ end
34
+ end
35
+
36
+ private
37
+
38
+ # @api private
39
+ def uniqueness_validator
40
+ @model_class.validators.select { |v|
41
+ v.is_a?(::ActiveRecord::Validations::UniquenessValidator) &&
42
+ v.attributes == [@attribute]
43
+ }.first
44
+ end
45
+
46
+ # @api private
47
+ def uniqueness_validator_options
48
+ uniqueness_validator&.options || {}
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -4,12 +4,25 @@ module Authlogic
4
4
  module ActsAsAuthentic
5
5
  module Queries
6
6
  # The query used by public-API method `find_by_smart_case_login_field`.
7
+ #
8
+ # We use the rails methods `case_insensitive_comparison` and
9
+ # `case_sensitive_comparison`. These methods nicely take into account
10
+ # MySQL collations. (Consider the case where a user *says* they want a
11
+ # case-sensitive uniqueness validation, but then they configure their
12
+ # database to have an insensitive collation. Rails will handle this for
13
+ # us, by downcasing, see
14
+ # `active_record/connection_adapters/abstract_mysql_adapter.rb`) So that's
15
+ # great! But, these methods are not part of rails' public API, so there
16
+ # are no docs. So, everything we know about how to use the methods
17
+ # correctly comes from mimicing what we find in
18
+ # `active_record/validations/uniqueness.rb`.
19
+ #
7
20
  # @api private
8
21
  class FindWithCase
9
22
  # Dup ActiveRecord.gem_version before freezing, in case someone
10
23
  # else wants to modify it. Freezing modifies an object in place.
11
24
  # https://github.com/binarylogic/authlogic/pull/590
12
- AR_GEM_VERSION = ActiveRecord.gem_version.dup.freeze
25
+ AR_GEM_VERSION = ::ActiveRecord.gem_version.dup.freeze
13
26
 
14
27
  # @api private
15
28
  def initialize(model_class, field, value, sensitive)
@@ -21,44 +34,47 @@ module Authlogic
21
34
 
22
35
  # @api private
23
36
  def execute
24
- bind(relation).first
37
+ @model_class.where(comparison).first
25
38
  end
26
39
 
27
40
  private
28
41
 
29
42
  # @api private
30
- def bind(relation)
31
- if AR_GEM_VERSION >= Gem::Version.new("5")
32
- bind = ActiveRecord::Relation::QueryAttribute.new(
33
- @field,
34
- @value,
35
- ActiveRecord::Type::Value.new
36
- )
37
- @model_class.where(relation, bind)
38
- else
39
- @model_class.where(relation)
40
- end
43
+ # @return Arel::Nodes::Equality
44
+ def comparison
45
+ @sensitive ? sensitive_comparison : insensitive_comparison
41
46
  end
42
47
 
43
48
  # @api private
44
- def relation
45
- if !@sensitive
49
+ def insensitive_comparison
50
+ if AR_GEM_VERSION > Gem::Version.new("5.3")
51
+ @model_class.connection.case_insensitive_comparison(
52
+ @model_class.arel_table[@field], @value
53
+ )
54
+ else
46
55
  @model_class.connection.case_insensitive_comparison(
47
56
  @model_class.arel_table,
48
57
  @field,
49
58
  @model_class.columns_hash[@field],
50
59
  @value
51
60
  )
52
- elsif AR_GEM_VERSION >= Gem::Version.new("5.0")
61
+ end
62
+ end
63
+
64
+ # @api private
65
+ def sensitive_comparison
66
+ bound_value = @model_class.predicate_builder.build_bind_attribute(@field, @value)
67
+ if AR_GEM_VERSION > Gem::Version.new("5.3")
68
+ @model_class.connection.case_sensitive_comparison(
69
+ @model_class.arel_table[@field], bound_value
70
+ )
71
+ else
53
72
  @model_class.connection.case_sensitive_comparison(
54
73
  @model_class.arel_table,
55
74
  @field,
56
75
  @model_class.columns_hash[@field],
57
- @value
76
+ bound_value
58
77
  )
59
- else
60
- value = @model_class.connection.case_sensitive_modifier(@value, @field)
61
- @model_class.arel_table[@field].eq(value)
62
78
  end
63
79
  end
64
80
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Authlogic
2
4
  module ActsAsAuthentic
3
5
  # This is one of my favorite features that I think is pretty cool. It's
@@ -40,7 +42,7 @@ module Authlogic
40
42
  def log_in_after_create(value = nil)
41
43
  rw_config(:log_in_after_create, value, true)
42
44
  end
43
- alias_method :log_in_after_create=, :log_in_after_create
45
+ alias log_in_after_create= log_in_after_create
44
46
 
45
47
  # In order to turn off automatic maintenance of sessions when updating
46
48
  # the password, just set this to false.
@@ -50,7 +52,7 @@ module Authlogic
50
52
  def log_in_after_password_change(value = nil)
51
53
  rw_config(:log_in_after_password_change, value, true)
52
54
  end
53
- alias_method :log_in_after_password_change=, :log_in_after_password_change
55
+ alias log_in_after_password_change= log_in_after_password_change
54
56
 
55
57
  # As you may know, authlogic sessions can be separate by id (See
56
58
  # Authlogic::Session::Base#id). You can specify here what session ids
@@ -62,7 +64,7 @@ module Authlogic
62
64
  def session_ids(value = nil)
63
65
  rw_config(:session_ids, value, [nil])
64
66
  end
65
- alias_method :session_ids=, :session_ids
67
+ alias session_ids= session_ids
66
68
 
67
69
  # The name of the associated session class. This is inferred by the name
68
70
  # of the model.
@@ -77,7 +79,7 @@ module Authlogic
77
79
  end
78
80
  rw_config(:session_class, value, const)
79
81
  end
80
- alias_method :session_class=, :session_class
82
+ alias session_class= session_class
81
83
  end
82
84
 
83
85
  # This module, as one of the `acts_as_authentic_modules`, is only included
@@ -114,7 +116,7 @@ module Authlogic
114
116
  session_class.activated? &&
115
117
  maintain_session? &&
116
118
  !session_ids.blank? &&
117
- persistence_token_changed?
119
+ will_save_change_to_persistence_token?
118
120
  end
119
121
 
120
122
  def maintain_session?
@@ -174,7 +176,7 @@ module Authlogic
174
176
  end
175
177
 
176
178
  def log_in_after_password_change?
177
- persistence_token_changed? && self.class.log_in_after_password_change
179
+ will_save_change_to_persistence_token? && self.class.log_in_after_password_change
178
180
  end
179
181
  end
180
182
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Authlogic
2
4
  module ActsAsAuthentic
3
- # This module is responsible for maintaining the single_access token. For more
4
- # information the single access token and how to use it, see the
5
- # Authlogic::Session::Params module.
5
+ # This module is responsible for maintaining the single_access token. For
6
+ # more information the single access token and how to use it, see "Params"
7
+ # in `Session::Base`.
6
8
  module SingleAccessToken
7
9
  def self.included(klass)
8
10
  klass.class_eval do
@@ -25,10 +27,7 @@ module Authlogic
25
27
  def change_single_access_token_with_password(value = nil)
26
28
  rw_config(:change_single_access_token_with_password, value, false)
27
29
  end
28
- alias_method(
29
- :change_single_access_token_with_password=,
30
- :change_single_access_token_with_password
31
- )
30
+ alias change_single_access_token_with_password= change_single_access_token_with_password
32
31
  end
33
32
 
34
33
  # All method, for the single_access token aspect of acts_as_authentic.
@@ -41,7 +40,10 @@ module Authlogic
41
40
 
42
41
  klass.class_eval do
43
42
  include InstanceMethods
44
- validates_uniqueness_of :single_access_token, if: :single_access_token_changed?
43
+ validates_uniqueness_of :single_access_token,
44
+ case_sensitive: true,
45
+ if: :will_save_change_to_single_access_token?
46
+
45
47
  before_validation :reset_single_access_token, if: :reset_single_access_token?
46
48
  if respond_to?(:after_password_set)
47
49
  after_password_set(
@@ -1,6 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Authlogic
4
+ # Mixed into `Authlogic::ActsAsAuthentic::Base` and
5
+ # `Authlogic::Session::Base`.
2
6
  module Config
3
- E_USE_NORMAL_RAILS_VALIDATION = <<~EOS.freeze
7
+ E_USE_NORMAL_RAILS_VALIDATION = <<~EOS
4
8
  This Authlogic configuration option (%s) is deprecated. Use normal
5
9
  ActiveRecord validation instead. Detailed instructions:
6
10
  https://github.com/binarylogic/authlogic/blob/master/doc/use_normal_rails_validation.md
@@ -8,6 +12,10 @@ module Authlogic
8
12
 
9
13
  def self.extended(klass)
10
14
  klass.class_eval do
15
+ # TODO: Is this a confusing name, given this module is mixed into
16
+ # both `Authlogic::ActsAsAuthentic::Base` and
17
+ # `Authlogic::Session::Base`? Perhaps a more generic name, like
18
+ # `authlogic_config` would be better?
11
19
  class_attribute :acts_as_authentic_config
12
20
  self.acts_as_authentic_config ||= {}
13
21
  end
@@ -1,10 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Authlogic
2
4
  module ControllerAdapters # :nodoc:
3
- # Allows you to use Authlogic in any framework you want, not just rails. See the RailsAdapter
4
- # for an example of how to adapt Authlogic to work with your framework.
5
+ # Allows you to use Authlogic in any framework you want, not just rails. See
6
+ # the RailsAdapter for an example of how to adapt Authlogic to work with
7
+ # your framework.
5
8
  class AbstractAdapter
6
9
  E_COOKIE_DOMAIN_ADAPTER = "The cookie_domain method has not been " \
7
- "implemented by the controller adapter".freeze
10
+ "implemented by the controller adapter"
8
11
 
9
12
  attr_accessor :controller
10
13
 
@@ -26,7 +29,7 @@ module Authlogic
26
29
  end
27
30
 
28
31
  def cookie_domain
29
- raise NotImplementedError.new(E_COOKIE_DOMAIN_ADAPTER)
32
+ raise NotImplementedError, E_COOKIE_DOMAIN_ADAPTER
30
33
  end
31
34
 
32
35
  def params
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Authlogic
2
4
  module ControllerAdapters
3
5
  # Adapter for authlogic to make it function as a Rack middleware.
@@ -1,4 +1,4 @@
1
- require "action_controller"
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Authlogic
4
4
  module ControllerAdapters
@@ -7,8 +7,6 @@ module Authlogic
7
7
  # Similar to how ActiveRecord has an adapter for MySQL, PostgreSQL, SQLite,
8
8
  # etc.
9
9
  class RailsAdapter < AbstractAdapter
10
- class AuthlogicLoadedTooLateError < StandardError; end
11
-
12
10
  def authenticate_with_http_basic(&block)
13
11
  controller.authenticate_with_http_basic(&block)
14
12
  end
@@ -20,8 +18,7 @@ module Authlogic
20
18
  end
21
19
 
22
20
  def cookie_domain
23
- @cookie_domain_key ||= Rails::VERSION::STRING >= "2.3" ? :domain : :session_domain
24
- controller.request.session_options[@cookie_domain_key]
21
+ controller.request.session_options[:domain]
25
22
  end
26
23
 
27
24
  def request_content_type
@@ -32,26 +29,7 @@ module Authlogic
32
29
  # "activates" authlogic.
33
30
  module RailsImplementation
34
31
  def self.included(klass) # :nodoc:
35
- if defined?(::ApplicationController)
36
- raise AuthlogicLoadedTooLateError.new(
37
- <<~EOS.squish
38
- Authlogic is trying to add a callback to ActionController::Base
39
- but ApplicationController has already been loaded, so the
40
- callback won't be copied into your application. Generally this
41
- is due to another gem or plugin requiring your
42
- ApplicationController prematurely, such as the
43
- resource_controller plugin. Please require Authlogic first,
44
- before these other gems / plugins.
45
- EOS
46
- )
47
- end
48
-
49
- # In Rails 4.0.2, the *_filter methods were renamed to *_action.
50
- if klass.respond_to? :prepend_before_action
51
- klass.prepend_before_action :activate_authlogic
52
- else
53
- klass.prepend_before_filter :activate_authlogic
54
- end
32
+ klass.prepend_before_action :activate_authlogic
55
33
  end
56
34
 
57
35
  private
@@ -64,7 +42,6 @@ module Authlogic
64
42
  end
65
43
  end
66
44
 
67
- ActionController::Base.send(
68
- :include,
69
- Authlogic::ControllerAdapters::RailsAdapter::RailsImplementation
70
- )
45
+ ActiveSupport.on_load(:action_controller) do
46
+ include Authlogic::ControllerAdapters::RailsAdapter::RailsImplementation
47
+ end