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.
- checksums.yaml +5 -5
- data/.github/ISSUE_TEMPLATE.md +13 -0
- data/.github/triage.md +87 -0
- data/.gitignore +4 -0
- data/.rubocop.yml +127 -0
- data/.rubocop_todo.yml +65 -0
- data/.travis.yml +18 -10
- data/CHANGELOG.md +156 -6
- data/CONTRIBUTING.md +71 -3
- data/Gemfile +2 -2
- data/README.md +386 -0
- data/Rakefile +13 -7
- data/UPGRADING.md +22 -0
- data/authlogic.gemspec +33 -22
- data/lib/authlogic.rb +60 -52
- data/lib/authlogic/acts_as_authentic/base.rb +40 -26
- data/lib/authlogic/acts_as_authentic/email.rb +96 -32
- data/lib/authlogic/acts_as_authentic/logged_in_status.rb +36 -12
- data/lib/authlogic/acts_as_authentic/login.rb +114 -49
- data/lib/authlogic/acts_as_authentic/magic_columns.rb +17 -6
- data/lib/authlogic/acts_as_authentic/password.rb +296 -139
- data/lib/authlogic/acts_as_authentic/perishable_token.rb +34 -20
- data/lib/authlogic/acts_as_authentic/persistence_token.rb +20 -24
- data/lib/authlogic/acts_as_authentic/queries/find_with_case.rb +67 -0
- data/lib/authlogic/acts_as_authentic/restful_authentication.rb +68 -23
- data/lib/authlogic/acts_as_authentic/session_maintenance.rb +128 -85
- data/lib/authlogic/acts_as_authentic/single_access_token.rb +41 -25
- data/lib/authlogic/acts_as_authentic/validations_scope.rb +8 -8
- data/lib/authlogic/authenticates_many/association.rb +22 -14
- data/lib/authlogic/authenticates_many/base.rb +35 -16
- data/lib/authlogic/config.rb +10 -10
- data/lib/authlogic/controller_adapters/abstract_adapter.rb +40 -12
- data/lib/authlogic/controller_adapters/rack_adapter.rb +15 -8
- data/lib/authlogic/controller_adapters/rails_adapter.rb +42 -22
- data/lib/authlogic/controller_adapters/sinatra_adapter.rb +3 -3
- data/lib/authlogic/crypto_providers.rb +91 -0
- data/lib/authlogic/crypto_providers/aes256.rb +42 -14
- data/lib/authlogic/crypto_providers/bcrypt.rb +35 -20
- data/lib/authlogic/crypto_providers/md5.rb +11 -9
- data/lib/authlogic/crypto_providers/scrypt.rb +26 -13
- data/lib/authlogic/crypto_providers/sha1.rb +14 -8
- data/lib/authlogic/crypto_providers/sha256.rb +16 -12
- data/lib/authlogic/crypto_providers/sha512.rb +8 -24
- data/lib/authlogic/crypto_providers/wordpress.rb +44 -15
- data/lib/authlogic/i18n.rb +33 -20
- data/lib/authlogic/i18n/translator.rb +1 -1
- data/lib/authlogic/random.rb +12 -29
- data/lib/authlogic/regex.rb +59 -27
- data/lib/authlogic/session/activation.rb +36 -23
- data/lib/authlogic/session/active_record_trickery.rb +13 -10
- data/lib/authlogic/session/base.rb +20 -8
- data/lib/authlogic/session/brute_force_protection.rb +87 -56
- data/lib/authlogic/session/callbacks.rb +99 -49
- data/lib/authlogic/session/cookies.rb +128 -59
- data/lib/authlogic/session/existence.rb +29 -19
- data/lib/authlogic/session/foundation.rb +70 -16
- data/lib/authlogic/session/http_auth.rb +39 -31
- data/lib/authlogic/session/id.rb +27 -15
- data/lib/authlogic/session/klass.rb +17 -13
- data/lib/authlogic/session/magic_columns.rb +78 -59
- data/lib/authlogic/session/magic_states.rb +50 -27
- data/lib/authlogic/session/params.rb +79 -50
- data/lib/authlogic/session/password.rb +197 -118
- data/lib/authlogic/session/perishable_token.rb +12 -6
- data/lib/authlogic/session/persistence.rb +20 -14
- data/lib/authlogic/session/priority_record.rb +20 -16
- data/lib/authlogic/session/scopes.rb +63 -33
- data/lib/authlogic/session/session.rb +40 -25
- data/lib/authlogic/session/timeout.rb +51 -34
- data/lib/authlogic/session/unauthorized_record.rb +24 -18
- data/lib/authlogic/session/validation.rb +32 -21
- data/lib/authlogic/test_case.rb +123 -35
- data/lib/authlogic/test_case/mock_controller.rb +14 -13
- data/lib/authlogic/test_case/mock_cookie_jar.rb +14 -5
- data/lib/authlogic/test_case/mock_logger.rb +1 -1
- data/lib/authlogic/test_case/mock_request.rb +9 -4
- data/lib/authlogic/test_case/rails_request_adapter.rb +8 -7
- data/lib/authlogic/version.rb +21 -0
- data/test/acts_as_authentic_test/base_test.rb +1 -1
- data/test/acts_as_authentic_test/email_test.rb +80 -63
- data/test/acts_as_authentic_test/logged_in_status_test.rb +14 -8
- data/test/acts_as_authentic_test/login_test.rb +91 -49
- data/test/acts_as_authentic_test/magic_columns_test.rb +13 -13
- data/test/acts_as_authentic_test/password_test.rb +82 -60
- data/test/acts_as_authentic_test/perishable_token_test.rb +31 -25
- data/test/acts_as_authentic_test/persistence_token_test.rb +9 -5
- data/test/acts_as_authentic_test/restful_authentication_test.rb +18 -9
- data/test/acts_as_authentic_test/session_maintenance_test.rb +86 -22
- data/test/acts_as_authentic_test/single_access_test.rb +15 -15
- data/test/adapter_test.rb +21 -0
- data/test/authenticates_many_test.rb +26 -11
- data/test/config_test.rb +9 -9
- data/test/crypto_provider_test/aes256_test.rb +3 -3
- data/test/crypto_provider_test/bcrypt_test.rb +1 -1
- data/test/crypto_provider_test/scrypt_test.rb +2 -2
- data/test/crypto_provider_test/sha1_test.rb +4 -4
- data/test/crypto_provider_test/sha256_test.rb +2 -2
- data/test/crypto_provider_test/sha512_test.rb +3 -3
- data/test/crypto_provider_test/wordpress_test.rb +24 -0
- data/test/gemfiles/Gemfile.rails-4.2.x +2 -2
- data/test/gemfiles/Gemfile.rails-5.0.x +6 -0
- data/test/gemfiles/Gemfile.rails-5.1.x +6 -0
- data/test/gemfiles/Gemfile.rails-5.2.x +6 -0
- data/test/gemfiles/Gemfile.rails-master +6 -0
- data/test/i18n_test.rb +9 -9
- data/test/libs/affiliate.rb +2 -2
- data/test/libs/company.rb +4 -4
- data/test/libs/employee.rb +2 -2
- data/test/libs/employee_session.rb +1 -1
- data/test/libs/ldaper.rb +1 -1
- data/test/libs/project.rb +1 -1
- data/test/libs/user_session.rb +2 -2
- data/test/random_test.rb +9 -38
- data/test/session_test/activation_test.rb +7 -7
- data/test/session_test/active_record_trickery_test.rb +9 -6
- data/test/session_test/brute_force_protection_test.rb +26 -21
- data/test/session_test/callbacks_test.rb +10 -4
- data/test/session_test/cookies_test.rb +54 -20
- data/test/session_test/existence_test.rb +45 -23
- data/test/session_test/foundation_test.rb +17 -1
- data/test/session_test/http_auth_test.rb +11 -12
- data/test/session_test/id_test.rb +3 -3
- data/test/session_test/klass_test.rb +2 -2
- data/test/session_test/magic_columns_test.rb +15 -17
- data/test/session_test/magic_states_test.rb +17 -19
- data/test/session_test/params_test.rb +26 -20
- data/test/session_test/password_test.rb +11 -12
- data/test/session_test/perishability_test.rb +5 -5
- data/test/session_test/persistence_test.rb +4 -3
- data/test/session_test/scopes_test.rb +15 -9
- data/test/session_test/session_test.rb +7 -6
- data/test/session_test/timeout_test.rb +16 -14
- data/test/session_test/unauthorized_record_test.rb +3 -3
- data/test/session_test/validation_test.rb +5 -5
- data/test/test_helper.rb +115 -49
- metadata +107 -36
- data/README.rdoc +0 -232
- data/test/gemfiles/Gemfile.rails-3.2.x +0 -7
- data/test/gemfiles/Gemfile.rails-4.0.x +0 -7
- data/test/gemfiles/Gemfile.rails-4.1.x +0 -7
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
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"] =
|
27
|
-
controller.session["user_credentials_id"] = {
|
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
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
74
|
-
|
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
|
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({:
|
10
|
+
assert_equal({ unauthorized_record: "<protected>" }, session.credentials)
|
11
11
|
end
|
12
12
|
end
|
13
|
-
end
|
13
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
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
|
-
|
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
|
data/test/test_helper.rb
CHANGED
@@ -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__) +
|
12
|
+
I18n.load_path << File.dirname(__FILE__) + "/i18n/lol.yml"
|
10
13
|
|
11
|
-
#ActiveRecord::Schema.verbose = false
|
12
|
-
ActiveRecord::Base.establish_connection(:
|
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
|
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(:
|
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, :
|
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, :
|
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, :
|
55
|
-
t.integer :failed_login_count, :
|
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, :
|
62
|
-
t.boolean :approved, :
|
63
|
-
t.boolean :confirmed, :
|
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, :
|
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
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
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
|
-
[
|
135
|
-
|
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
|
-
[
|
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
|
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"] = {
|
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
|
191
|
-
|
192
|
-
|
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:
|
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:
|
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: '
|
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
|
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: '
|
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
|
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: '
|
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: '
|
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:
|
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
|
-
- .
|
111
|
-
- .
|
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.
|
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:
|
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.
|
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
|