authlogic 4.4.2 → 5.0.3
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.
- checksums.yaml +5 -5
- data/lib/authlogic.rb +4 -28
- data/lib/authlogic/acts_as_authentic/base.rb +3 -18
- data/lib/authlogic/acts_as_authentic/email.rb +3 -170
- data/lib/authlogic/acts_as_authentic/logged_in_status.rb +3 -1
- data/lib/authlogic/acts_as_authentic/login.rb +7 -174
- data/lib/authlogic/acts_as_authentic/magic_columns.rb +7 -4
- data/lib/authlogic/acts_as_authentic/password.rb +54 -253
- data/lib/authlogic/acts_as_authentic/perishable_token.rb +8 -5
- data/lib/authlogic/acts_as_authentic/persistence_token.rb +10 -4
- data/lib/authlogic/acts_as_authentic/queries/case_sensitivity.rb +53 -0
- data/lib/authlogic/acts_as_authentic/queries/find_with_case.rb +36 -20
- data/lib/authlogic/acts_as_authentic/session_maintenance.rb +8 -6
- data/lib/authlogic/acts_as_authentic/single_access_token.rb +10 -8
- data/lib/authlogic/config.rb +9 -1
- data/lib/authlogic/controller_adapters/abstract_adapter.rb +7 -4
- data/lib/authlogic/controller_adapters/rack_adapter.rb +2 -0
- data/lib/authlogic/controller_adapters/rails_adapter.rb +19 -19
- data/lib/authlogic/controller_adapters/sinatra_adapter.rb +6 -0
- data/lib/authlogic/cookie_credentials.rb +63 -0
- data/lib/authlogic/crypto_providers.rb +5 -20
- data/lib/authlogic/crypto_providers/bcrypt.rb +3 -3
- data/lib/authlogic/crypto_providers/md5.rb +3 -6
- data/lib/authlogic/crypto_providers/scrypt.rb +2 -0
- data/lib/authlogic/crypto_providers/sha1.rb +4 -6
- data/lib/authlogic/crypto_providers/sha256.rb +2 -0
- data/lib/authlogic/crypto_providers/sha512.rb +6 -5
- data/lib/authlogic/i18n.rb +3 -1
- data/lib/authlogic/i18n/translator.rb +3 -0
- data/lib/authlogic/random.rb +2 -0
- data/lib/authlogic/session/base.rb +2087 -39
- data/lib/authlogic/session/magic_column/assigns_last_request_at.rb +46 -0
- data/lib/authlogic/test_case.rb +4 -0
- data/lib/authlogic/test_case/mock_controller.rb +2 -0
- data/lib/authlogic/test_case/mock_cookie_jar.rb +7 -0
- data/lib/authlogic/test_case/mock_logger.rb +2 -0
- data/lib/authlogic/test_case/mock_request.rb +2 -0
- data/lib/authlogic/test_case/rails_request_adapter.rb +2 -0
- data/lib/authlogic/version.rb +2 -1
- metadata +136 -182
- data/.github/ISSUE_TEMPLATE/bug_report.md +0 -28
- data/.github/ISSUE_TEMPLATE/feature_proposal.md +0 -32
- data/.github/triage.md +0 -86
- data/.gitignore +0 -15
- data/.rubocop.yml +0 -133
- data/.rubocop_todo.yml +0 -74
- data/.travis.yml +0 -24
- data/CHANGELOG.md +0 -326
- data/CONTRIBUTING.md +0 -91
- data/Gemfile +0 -6
- data/LICENSE +0 -20
- data/README.md +0 -439
- data/Rakefile +0 -21
- data/UPGRADING.md +0 -22
- data/authlogic.gemspec +0 -40
- data/doc/use_normal_rails_validation.md +0 -82
- data/gemfiles/Gemfile.rails-4.2.x +0 -6
- data/gemfiles/Gemfile.rails-5.1.x +0 -6
- data/gemfiles/Gemfile.rails-5.2.x +0 -6
- data/lib/authlogic/acts_as_authentic/restful_authentication.rb +0 -106
- data/lib/authlogic/acts_as_authentic/validations_scope.rb +0 -35
- data/lib/authlogic/authenticates_many/association.rb +0 -50
- data/lib/authlogic/authenticates_many/base.rb +0 -81
- data/lib/authlogic/crypto_providers/aes256.rb +0 -71
- data/lib/authlogic/crypto_providers/wordpress.rb +0 -72
- data/lib/authlogic/regex.rb +0 -79
- data/lib/authlogic/session/activation.rb +0 -73
- data/lib/authlogic/session/active_record_trickery.rb +0 -65
- data/lib/authlogic/session/brute_force_protection.rb +0 -127
- data/lib/authlogic/session/callbacks.rb +0 -153
- data/lib/authlogic/session/cookies.rb +0 -296
- data/lib/authlogic/session/existence.rb +0 -103
- data/lib/authlogic/session/foundation.rb +0 -105
- data/lib/authlogic/session/http_auth.rb +0 -107
- data/lib/authlogic/session/id.rb +0 -53
- data/lib/authlogic/session/klass.rb +0 -73
- data/lib/authlogic/session/magic_columns.rb +0 -119
- data/lib/authlogic/session/magic_states.rb +0 -82
- data/lib/authlogic/session/params.rb +0 -130
- data/lib/authlogic/session/password.rb +0 -318
- data/lib/authlogic/session/perishable_token.rb +0 -24
- data/lib/authlogic/session/persistence.rb +0 -77
- data/lib/authlogic/session/priority_record.rb +0 -38
- data/lib/authlogic/session/scopes.rb +0 -138
- data/lib/authlogic/session/session.rb +0 -77
- data/lib/authlogic/session/timeout.rb +0 -103
- data/lib/authlogic/session/unauthorized_record.rb +0 -56
- data/lib/authlogic/session/validation.rb +0 -93
- data/test/acts_as_authentic_test/base_test.rb +0 -27
- data/test/acts_as_authentic_test/email_test.rb +0 -241
- data/test/acts_as_authentic_test/logged_in_status_test.rb +0 -64
- data/test/acts_as_authentic_test/login_test.rb +0 -153
- data/test/acts_as_authentic_test/magic_columns_test.rb +0 -29
- data/test/acts_as_authentic_test/password_test.rb +0 -263
- data/test/acts_as_authentic_test/perishable_token_test.rb +0 -98
- data/test/acts_as_authentic_test/persistence_token_test.rb +0 -62
- data/test/acts_as_authentic_test/restful_authentication_test.rb +0 -48
- data/test/acts_as_authentic_test/session_maintenance_test.rb +0 -150
- data/test/acts_as_authentic_test/single_access_test.rb +0 -46
- data/test/adapter_test.rb +0 -23
- data/test/authenticates_many_test.rb +0 -33
- data/test/config_test.rb +0 -38
- data/test/crypto_provider_test/aes256_test.rb +0 -16
- data/test/crypto_provider_test/bcrypt_test.rb +0 -16
- data/test/crypto_provider_test/scrypt_test.rb +0 -16
- data/test/crypto_provider_test/sha1_test.rb +0 -25
- data/test/crypto_provider_test/sha256_test.rb +0 -16
- data/test/crypto_provider_test/sha512_test.rb +0 -16
- data/test/crypto_provider_test/wordpress_test.rb +0 -26
- data/test/fixtures/companies.yml +0 -5
- data/test/fixtures/employees.yml +0 -17
- data/test/fixtures/projects.yml +0 -3
- data/test/fixtures/users.yml +0 -41
- data/test/i18n/lol.yml +0 -4
- data/test/i18n_test.rb +0 -35
- data/test/libs/affiliate.rb +0 -9
- data/test/libs/company.rb +0 -8
- data/test/libs/employee.rb +0 -9
- data/test/libs/employee_session.rb +0 -4
- data/test/libs/ldaper.rb +0 -5
- data/test/libs/project.rb +0 -5
- data/test/libs/user.rb +0 -9
- data/test/libs/user_session.rb +0 -27
- data/test/random_test.rb +0 -15
- data/test/session_test/activation_test.rb +0 -45
- data/test/session_test/active_record_trickery_test.rb +0 -78
- data/test/session_test/brute_force_protection_test.rb +0 -110
- data/test/session_test/callbacks_test.rb +0 -42
- data/test/session_test/cookies_test.rb +0 -226
- data/test/session_test/credentials_test.rb +0 -0
- data/test/session_test/existence_test.rb +0 -88
- data/test/session_test/foundation_test.rb +0 -24
- data/test/session_test/http_auth_test.rb +0 -60
- data/test/session_test/id_test.rb +0 -19
- data/test/session_test/klass_test.rb +0 -42
- data/test/session_test/magic_columns_test.rb +0 -62
- data/test/session_test/magic_states_test.rb +0 -60
- data/test/session_test/params_test.rb +0 -61
- data/test/session_test/password_test.rb +0 -107
- data/test/session_test/perishability_test.rb +0 -17
- data/test/session_test/persistence_test.rb +0 -35
- data/test/session_test/scopes_test.rb +0 -68
- data/test/session_test/session_test.rb +0 -80
- data/test/session_test/timeout_test.rb +0 -84
- data/test/session_test/unauthorized_record_test.rb +0 -15
- data/test/session_test/validation_test.rb +0 -25
- 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
|
-
|
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
|
-
|
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,
|
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
|
-
#
|
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
|
-
#
|
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,
|
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
|
-
#
|
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
|
-
#
|
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
|
-
|
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
|
-
|
37
|
+
@model_class.where(comparison).first
|
25
38
|
end
|
26
39
|
|
27
40
|
private
|
28
41
|
|
29
42
|
# @api private
|
30
|
-
|
31
|
-
|
32
|
-
|
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
|
45
|
-
if
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
4
|
-
# information the single access token and how to use it, see
|
5
|
-
#
|
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
|
-
|
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,
|
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(
|
data/lib/authlogic/config.rb
CHANGED
@@ -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
|
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
|
4
|
-
# for an example of how to adapt Authlogic to work with
|
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"
|
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
|
32
|
+
raise NotImplementedError, E_COOKIE_DOMAIN_ADAPTER
|
30
33
|
end
|
31
34
|
|
32
35
|
def params
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Authlogic
|
4
4
|
module ControllerAdapters
|
@@ -7,7 +7,19 @@ module Authlogic
|
|
7
7
|
# Similar to how ActiveRecord has an adapter for MySQL, PostgreSQL, SQLite,
|
8
8
|
# etc.
|
9
9
|
class RailsAdapter < AbstractAdapter
|
10
|
-
|
10
|
+
# :nodoc:
|
11
|
+
class AuthlogicLoadedTooLateError < StandardError
|
12
|
+
def message
|
13
|
+
<<~EOS.squish
|
14
|
+
Authlogic is trying to add a callback to ActionController::Base but
|
15
|
+
ApplicationController has already been loaded, so the callback won't
|
16
|
+
be copied into your application. Generally this is due to another
|
17
|
+
gem or plugin requiring your ApplicationController prematurely, such
|
18
|
+
as the resource_controller plugin. Please require Authlogic first,
|
19
|
+
before these other gems / plugins.
|
20
|
+
EOS
|
21
|
+
end
|
22
|
+
end
|
11
23
|
|
12
24
|
def authenticate_with_http_basic(&block)
|
13
25
|
controller.authenticate_with_http_basic(&block)
|
@@ -20,8 +32,7 @@ module Authlogic
|
|
20
32
|
end
|
21
33
|
|
22
34
|
def cookie_domain
|
23
|
-
|
24
|
-
controller.request.session_options[@cookie_domain_key]
|
35
|
+
controller.request.session_options[:domain]
|
25
36
|
end
|
26
37
|
|
27
38
|
def request_content_type
|
@@ -33,17 +44,7 @@ module Authlogic
|
|
33
44
|
module RailsImplementation
|
34
45
|
def self.included(klass) # :nodoc:
|
35
46
|
if defined?(::ApplicationController)
|
36
|
-
raise AuthlogicLoadedTooLateError
|
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
|
+
raise AuthlogicLoadedTooLateError
|
47
48
|
end
|
48
49
|
|
49
50
|
# In Rails 4.0.2, the *_filter methods were renamed to *_action.
|
@@ -64,7 +65,6 @@ module Authlogic
|
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
)
|
68
|
+
ActiveSupport.on_load(:action_controller) do
|
69
|
+
include Authlogic::ControllerAdapters::RailsAdapter::RailsImplementation
|
70
|
+
end
|