authlogic 3.5.0 → 3.8.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.
- data/.github/ISSUE_TEMPLATE.md +13 -0
- data/.rubocop_todo.yml +1 -37
- data/.travis.yml +15 -6
- data/CHANGELOG.md +2 -130
- data/CONTRIBUTING.md +13 -2
- data/README.md +2 -3
- data/authlogic.gemspec +4 -5
- data/lib/authlogic/acts_as_authentic/base.rb +4 -2
- data/lib/authlogic/acts_as_authentic/email.rb +8 -3
- data/lib/authlogic/acts_as_authentic/logged_in_status.rb +21 -3
- data/lib/authlogic/acts_as_authentic/login.rb +44 -25
- data/lib/authlogic/acts_as_authentic/password.rb +28 -12
- data/lib/authlogic/acts_as_authentic/perishable_token.rb +21 -12
- data/lib/authlogic/acts_as_authentic/restful_authentication.rb +16 -9
- data/lib/authlogic/acts_as_authentic/session_maintenance.rb +5 -3
- data/lib/authlogic/authenticates_many/association.rb +11 -4
- data/lib/authlogic/authenticates_many/base.rb +5 -4
- data/lib/authlogic/controller_adapters/rack_adapter.rb +6 -2
- data/lib/authlogic/controller_adapters/rails_adapter.rb +11 -8
- data/lib/authlogic/crypto_providers/aes256.rb +21 -2
- data/lib/authlogic/crypto_providers/bcrypt.rb +4 -1
- data/lib/authlogic/crypto_providers/sha512.rb +15 -10
- data/lib/authlogic/regex.rb +7 -6
- data/lib/authlogic/session/activation.rb +19 -10
- data/lib/authlogic/session/cookies.rb +3 -1
- data/lib/authlogic/session/id.rb +13 -7
- data/lib/authlogic/session/magic_columns.rb +19 -10
- data/lib/authlogic/session/magic_states.rb +7 -1
- data/lib/authlogic/session/password.rb +82 -35
- data/lib/authlogic/session/perishable_token.rb +7 -3
- data/lib/authlogic/session/validation.rb +13 -11
- data/lib/authlogic/test_case.rb +52 -32
- data/lib/authlogic.rb +6 -0
- data/test/acts_as_authentic_test/email_test.rb +33 -27
- data/test/acts_as_authentic_test/logged_in_status_test.rb +2 -2
- data/test/acts_as_authentic_test/login_test.rb +50 -37
- data/test/acts_as_authentic_test/magic_columns_test.rb +8 -8
- data/test/acts_as_authentic_test/password_test.rb +14 -14
- data/test/acts_as_authentic_test/perishable_token_test.rb +5 -5
- data/test/acts_as_authentic_test/persistence_token_test.rb +4 -4
- data/test/acts_as_authentic_test/restful_authentication_test.rb +6 -6
- data/test/acts_as_authentic_test/session_maintenance_test.rb +15 -10
- data/test/acts_as_authentic_test/single_access_test.rb +6 -6
- data/test/authenticates_many_test.rb +21 -6
- data/test/gemfiles/Gemfile.rails-5.1.x +6 -0
- data/test/gemfiles/Gemfile.rails-5.2.x +6 -0
- data/test/libs/company.rb +1 -1
- data/test/session_test/activation_test.rb +1 -1
- data/test/session_test/active_record_trickery_test.rb +3 -3
- data/test/session_test/brute_force_protection_test.rb +19 -14
- data/test/session_test/cookies_test.rb +21 -12
- data/test/session_test/existence_test.rb +15 -10
- data/test/session_test/http_auth_test.rb +2 -2
- data/test/session_test/magic_columns_test.rb +7 -4
- data/test/session_test/magic_states_test.rb +7 -9
- data/test/session_test/params_test.rb +6 -6
- data/test/session_test/password_test.rb +2 -2
- data/test/session_test/perishability_test.rb +1 -1
- data/test/session_test/persistence_test.rb +2 -2
- data/test/session_test/timeout_test.rb +7 -5
- data/test/session_test/validation_test.rb +1 -1
- data/test/test_helper.rb +37 -6
- metadata +57 -36
- checksums.yaml +0 -7
@@ -17,7 +17,7 @@ module ActsAsAuthenticTest
|
|
17
17
|
assert Employee.validate_login_field
|
18
18
|
|
19
19
|
User.validate_login_field = false
|
20
|
-
|
20
|
+
refute User.validate_login_field
|
21
21
|
User.validate_login_field true
|
22
22
|
assert User.validate_login_field
|
23
23
|
end
|
@@ -35,13 +35,26 @@ module ActsAsAuthenticTest
|
|
35
35
|
def test_validates_format_of_login_field_options_config
|
36
36
|
default = {
|
37
37
|
:with => /\A[a-zA-Z0-9_][a-zA-Z0-9\.+\-_@ ]+\z/,
|
38
|
-
:message =>
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
:message => proc do
|
39
|
+
I18n.t(
|
40
|
+
'error_messages.login_invalid',
|
41
|
+
:default => "should use only letters, numbers, spaces, and .-_@+ please."
|
42
|
+
)
|
43
|
+
end
|
42
44
|
}
|
43
|
-
|
44
|
-
|
45
|
+
default_message = default.delete(:message).call
|
46
|
+
|
47
|
+
options = User.validates_format_of_login_field_options
|
48
|
+
message = options.delete(:message)
|
49
|
+
assert message.is_a?(Proc)
|
50
|
+
assert_equal default_message, message.call
|
51
|
+
assert_equal default, options
|
52
|
+
|
53
|
+
options = Employee.validates_format_of_login_field_options
|
54
|
+
message = options.delete(:message)
|
55
|
+
assert message.is_a?(Proc)
|
56
|
+
assert_equal default_message, message.call
|
57
|
+
assert_equal default, options
|
45
58
|
|
46
59
|
User.validates_format_of_login_field_options = { :yes => "no" }
|
47
60
|
assert_equal({ :yes => "no" }, User.validates_format_of_login_field_options)
|
@@ -62,70 +75,70 @@ module ActsAsAuthenticTest
|
|
62
75
|
def test_validates_length_of_login_field
|
63
76
|
u = User.new
|
64
77
|
u.login = "a"
|
65
|
-
|
66
|
-
|
78
|
+
refute u.valid?
|
79
|
+
refute u.errors[:login].empty?
|
67
80
|
|
68
81
|
u.login = "aaaaaaaaaa"
|
69
|
-
|
70
|
-
assert u.errors[:login].
|
82
|
+
refute u.valid?
|
83
|
+
assert u.errors[:login].empty?
|
71
84
|
end
|
72
85
|
|
73
86
|
def test_validates_format_of_login_field
|
74
87
|
u = User.new
|
75
88
|
u.login = "fdsf@^&*"
|
76
|
-
|
77
|
-
|
89
|
+
refute u.valid?
|
90
|
+
refute u.errors[:login].empty?
|
78
91
|
|
79
92
|
u.login = "fdsfdsfdsfdsfs"
|
80
|
-
|
81
|
-
assert u.errors[:login].
|
93
|
+
refute u.valid?
|
94
|
+
assert u.errors[:login].empty?
|
82
95
|
|
83
96
|
u.login = "dakota.dux+1@gmail.com"
|
84
|
-
|
85
|
-
assert u.errors[:login].
|
97
|
+
refute u.valid?
|
98
|
+
assert u.errors[:login].empty?
|
86
99
|
|
87
100
|
u.login = "marks .-_@+"
|
88
|
-
|
89
|
-
assert u.errors[:login].
|
101
|
+
refute u.valid?
|
102
|
+
assert u.errors[:login].empty?
|
90
103
|
|
91
104
|
u.login = " space"
|
92
|
-
|
93
|
-
|
105
|
+
refute u.valid?
|
106
|
+
refute u.errors[:login].empty?
|
94
107
|
|
95
108
|
u.login = ".dot"
|
96
|
-
|
97
|
-
|
109
|
+
refute u.valid?
|
110
|
+
refute u.errors[:login].empty?
|
98
111
|
|
99
112
|
u.login = "-hyphen"
|
100
|
-
|
101
|
-
|
113
|
+
refute u.valid?
|
114
|
+
refute u.errors[:login].empty?
|
102
115
|
|
103
116
|
u.login = "_underscore"
|
104
|
-
|
105
|
-
assert u.errors[:login].
|
117
|
+
refute u.valid?
|
118
|
+
assert u.errors[:login].empty?
|
106
119
|
|
107
120
|
u.login = "@atmark"
|
108
|
-
|
109
|
-
|
121
|
+
refute u.valid?
|
122
|
+
refute u.errors[:login].empty?
|
110
123
|
|
111
124
|
u.login = "+plus"
|
112
|
-
|
113
|
-
|
125
|
+
refute u.valid?
|
126
|
+
refute u.errors[:login].empty?
|
114
127
|
end
|
115
128
|
|
116
129
|
def test_validates_uniqueness_of_login_field
|
117
130
|
u = User.new
|
118
131
|
u.login = "bjohnson"
|
119
|
-
|
120
|
-
|
132
|
+
refute u.valid?
|
133
|
+
refute u.errors[:login].empty?
|
121
134
|
|
122
135
|
u.login = "BJOHNSON"
|
123
|
-
|
124
|
-
|
136
|
+
refute u.valid?
|
137
|
+
refute u.errors[:login].empty?
|
125
138
|
|
126
139
|
u.login = "fdsfdsf"
|
127
|
-
|
128
|
-
assert u.errors[:login].
|
140
|
+
refute u.valid?
|
141
|
+
assert u.errors[:login].empty?
|
129
142
|
end
|
130
143
|
|
131
144
|
def test_find_by_smart_case_login_field
|
@@ -5,23 +5,23 @@ module ActsAsAuthenticTest
|
|
5
5
|
def test_validates_numericality_of_login_count
|
6
6
|
u = User.new
|
7
7
|
u.login_count = -1
|
8
|
-
|
9
|
-
|
8
|
+
refute u.valid?
|
9
|
+
refute u.errors[:login_count].empty?
|
10
10
|
|
11
11
|
u.login_count = 0
|
12
|
-
|
13
|
-
assert u.errors[:login_count].
|
12
|
+
refute u.valid?
|
13
|
+
assert u.errors[:login_count].empty?
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_validates_numericality_of_failed_login_count
|
17
17
|
u = User.new
|
18
18
|
u.failed_login_count = -1
|
19
|
-
|
20
|
-
|
19
|
+
refute u.valid?
|
20
|
+
refute u.errors[:failed_login_count].empty?
|
21
21
|
|
22
22
|
u.failed_login_count = 0
|
23
|
-
|
24
|
-
assert u.errors[:failed_login_count].
|
23
|
+
refute u.valid?
|
24
|
+
assert u.errors[:failed_login_count].empty?
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -28,7 +28,7 @@ module ActsAsAuthenticTest
|
|
28
28
|
assert Employee.ignore_blank_passwords
|
29
29
|
|
30
30
|
User.ignore_blank_passwords = false
|
31
|
-
|
31
|
+
refute User.ignore_blank_passwords
|
32
32
|
User.ignore_blank_passwords true
|
33
33
|
assert User.ignore_blank_passwords
|
34
34
|
end
|
@@ -36,7 +36,7 @@ module ActsAsAuthenticTest
|
|
36
36
|
def test_check_passwords_against_database
|
37
37
|
assert User.check_passwords_against_database
|
38
38
|
User.check_passwords_against_database = false
|
39
|
-
|
39
|
+
refute User.check_passwords_against_database
|
40
40
|
User.check_passwords_against_database true
|
41
41
|
assert User.check_passwords_against_database
|
42
42
|
end
|
@@ -46,7 +46,7 @@ module ActsAsAuthenticTest
|
|
46
46
|
assert Employee.validate_password_field
|
47
47
|
|
48
48
|
User.validate_password_field = false
|
49
|
-
|
49
|
+
refute User.validate_password_field
|
50
50
|
User.validate_password_field true
|
51
51
|
assert User.validate_password_field
|
52
52
|
end
|
@@ -109,7 +109,7 @@ module ActsAsAuthenticTest
|
|
109
109
|
assert u.valid?
|
110
110
|
|
111
111
|
u.password = u.password_confirmation = "abcdef"
|
112
|
-
|
112
|
+
refute u.valid?
|
113
113
|
|
114
114
|
assert u.errors[:password].include?("is too short (minimum is 8 characters)")
|
115
115
|
assert u.errors[:password_confirmation].include?("is too short (minimum is 8 characters)")
|
@@ -120,7 +120,7 @@ module ActsAsAuthenticTest
|
|
120
120
|
assert u.valid?
|
121
121
|
|
122
122
|
u.password_confirmation = "abcdefghij"
|
123
|
-
|
123
|
+
refute u.valid?
|
124
124
|
|
125
125
|
if ActiveModel.respond_to?(:version) and ActiveModel.version.segments.first >= 4
|
126
126
|
assert u.errors[:password_confirmation].include?("doesn't match Password")
|
@@ -134,19 +134,19 @@ module ActsAsAuthenticTest
|
|
134
134
|
|
135
135
|
u.password = "testpass"
|
136
136
|
u.password_confirmation = ""
|
137
|
-
|
138
|
-
|
137
|
+
refute u.valid?
|
138
|
+
refute u.errors[:password_confirmation].empty?
|
139
139
|
|
140
140
|
u.password_confirmation = "testpass"
|
141
|
-
|
142
|
-
assert u.errors[:password_confirmation].
|
141
|
+
refute u.valid?
|
142
|
+
assert u.errors[:password_confirmation].empty?
|
143
143
|
|
144
144
|
ben = users(:ben)
|
145
145
|
assert ben.valid?
|
146
146
|
|
147
147
|
ben.password = "newpasswd"
|
148
|
-
|
149
|
-
|
148
|
+
refute ben.valid?
|
149
|
+
refute ben.errors[:password_confirmation].empty?
|
150
150
|
|
151
151
|
ben.password_confirmation = "newpasswd"
|
152
152
|
assert ben.valid?
|
@@ -180,21 +180,21 @@ module ActsAsAuthenticTest
|
|
180
180
|
def test_checks_password_against_database
|
181
181
|
ben = users(:aaron)
|
182
182
|
ben.password = "new pass"
|
183
|
-
|
183
|
+
refute ben.valid_password?("new pass")
|
184
184
|
assert ben.valid_password?("aaronrocks")
|
185
185
|
end
|
186
186
|
|
187
187
|
def test_checks_password_against_database_and_always_fails_on_new_records
|
188
188
|
user = User.new
|
189
189
|
user.password = "new pass"
|
190
|
-
|
190
|
+
refute user.valid_password?("new pass")
|
191
191
|
end
|
192
192
|
|
193
193
|
def test_checks_password_against_object
|
194
194
|
ben = users(:ben)
|
195
195
|
ben.password = "new pass"
|
196
196
|
assert ben.valid_password?("new pass", false)
|
197
|
-
|
197
|
+
refute ben.valid_password?("benrocks", false)
|
198
198
|
end
|
199
199
|
|
200
200
|
def test_reset_password
|
@@ -13,20 +13,20 @@ module ActsAsAuthenticTest
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_disable_perishable_token_maintenance_config
|
16
|
-
|
17
|
-
|
16
|
+
refute User.disable_perishable_token_maintenance
|
17
|
+
refute Employee.disable_perishable_token_maintenance
|
18
18
|
|
19
19
|
User.disable_perishable_token_maintenance = true
|
20
20
|
assert User.disable_perishable_token_maintenance
|
21
21
|
User.disable_perishable_token_maintenance false
|
22
|
-
|
22
|
+
refute User.disable_perishable_token_maintenance
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_validates_uniqueness_of_perishable_token
|
26
26
|
u = User.new
|
27
27
|
u.perishable_token = users(:ben).perishable_token
|
28
|
-
|
29
|
-
|
28
|
+
refute u.valid?
|
29
|
+
refute u.errors[:perishable_token].empty?
|
30
30
|
end
|
31
31
|
|
32
32
|
def test_before_save_reset_perishable_token
|
@@ -24,7 +24,7 @@ module ActsAsAuthenticTest
|
|
24
24
|
|
25
25
|
def test_before_validate_reset_persistence_token
|
26
26
|
u = User.new
|
27
|
-
|
27
|
+
refute u.valid?
|
28
28
|
assert_not_nil u.persistence_token
|
29
29
|
end
|
30
30
|
|
@@ -34,8 +34,8 @@ module ActsAsAuthenticTest
|
|
34
34
|
assert UserSession.find
|
35
35
|
assert UserSession.find(:ziggity_zack)
|
36
36
|
User.forget_all
|
37
|
-
|
38
|
-
|
37
|
+
refute UserSession.find
|
38
|
+
refute UserSession.find(:ziggity_zack)
|
39
39
|
end
|
40
40
|
|
41
41
|
def test_forget
|
@@ -49,7 +49,7 @@ module ActsAsAuthenticTest
|
|
49
49
|
|
50
50
|
ben.forget!
|
51
51
|
|
52
|
-
|
52
|
+
refute UserSession.find
|
53
53
|
assert UserSession.find(:ziggity_zack)
|
54
54
|
end
|
55
55
|
end
|
@@ -3,8 +3,8 @@ require 'test_helper'
|
|
3
3
|
module ActsAsAuthenticTest
|
4
4
|
class RestfulAuthenticationTest < ActiveSupport::TestCase
|
5
5
|
def test_act_like_restful_authentication_config
|
6
|
-
|
7
|
-
|
6
|
+
refute User.act_like_restful_authentication
|
7
|
+
refute Employee.act_like_restful_authentication
|
8
8
|
|
9
9
|
User.act_like_restful_authentication = true
|
10
10
|
assert User.act_like_restful_authentication
|
@@ -14,15 +14,15 @@ module ActsAsAuthenticTest
|
|
14
14
|
assert_equal 1, Authlogic::CryptoProviders::Sha1.stretches
|
15
15
|
|
16
16
|
User.act_like_restful_authentication false
|
17
|
-
|
17
|
+
refute User.act_like_restful_authentication
|
18
18
|
|
19
19
|
User.crypto_provider = Authlogic::CryptoProviders::Sha512
|
20
20
|
User.transition_from_crypto_providers = []
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_transition_from_restful_authentication_config
|
24
|
-
|
25
|
-
|
24
|
+
refute User.transition_from_restful_authentication
|
25
|
+
refute Employee.transition_from_restful_authentication
|
26
26
|
|
27
27
|
User.transition_from_restful_authentication = true
|
28
28
|
assert User.transition_from_restful_authentication
|
@@ -31,7 +31,7 @@ module ActsAsAuthenticTest
|
|
31
31
|
assert_equal 1, Authlogic::CryptoProviders::Sha1.stretches
|
32
32
|
|
33
33
|
User.transition_from_restful_authentication false
|
34
|
-
|
34
|
+
refute User.transition_from_restful_authentication
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -5,20 +5,19 @@ module ActsAsAuthenticTest
|
|
5
5
|
def test_maintain_sessions_config
|
6
6
|
assert User.maintain_sessions
|
7
7
|
User.maintain_sessions = false
|
8
|
-
|
8
|
+
refute User.maintain_sessions
|
9
9
|
User.maintain_sessions true
|
10
10
|
assert User.maintain_sessions
|
11
11
|
end
|
12
12
|
|
13
13
|
def test_login_after_create
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
:email => "awesome@awesome.com"
|
20
|
-
)
|
14
|
+
user = User.create(
|
15
|
+
:login => "awesome",
|
16
|
+
:password => "saweeeet",
|
17
|
+
:password_confirmation => "saweeeet",
|
18
|
+
:email => "awesome@awesome.com"
|
21
19
|
)
|
20
|
+
assert user.persisted?
|
22
21
|
assert UserSession.find
|
23
22
|
end
|
24
23
|
|
@@ -60,7 +59,13 @@ module ActsAsAuthenticTest
|
|
60
59
|
UserSession.create(ben)
|
61
60
|
old_session_key = controller.session["user_credentials"]
|
62
61
|
old_cookie_key = controller.cookies["user_credentials"]
|
63
|
-
|
62
|
+
user = User.create(
|
63
|
+
:login => "awesome",
|
64
|
+
:password => "saweet", # Password is too short, user invalid
|
65
|
+
:password_confirmation => "saweet",
|
66
|
+
:email => "awesome@saweet.com"
|
67
|
+
)
|
68
|
+
refute user.persisted?
|
64
69
|
assert_equal controller.session["user_credentials"], old_session_key
|
65
70
|
assert_equal controller.cookies["user_credentials"], old_cookie_key
|
66
71
|
end
|
@@ -80,7 +85,7 @@ module ActsAsAuthenticTest
|
|
80
85
|
|
81
86
|
def test_resetting_password_when_logged_out
|
82
87
|
ben = users(:ben)
|
83
|
-
|
88
|
+
refute UserSession.find
|
84
89
|
ben.password = "newpasswd"
|
85
90
|
ben.password_confirmation = "newpasswd"
|
86
91
|
assert ben.save
|
@@ -3,25 +3,25 @@ require 'test_helper'
|
|
3
3
|
module ActsAsAuthenticTest
|
4
4
|
class SingleAccessTest < ActiveSupport::TestCase
|
5
5
|
def test_change_single_access_token_with_password_config
|
6
|
-
|
7
|
-
|
6
|
+
refute User.change_single_access_token_with_password
|
7
|
+
refute Employee.change_single_access_token_with_password
|
8
8
|
|
9
9
|
User.change_single_access_token_with_password = true
|
10
10
|
assert User.change_single_access_token_with_password
|
11
11
|
User.change_single_access_token_with_password false
|
12
|
-
|
12
|
+
refute User.change_single_access_token_with_password
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_validates_uniqueness_of_single_access_token
|
16
16
|
u = User.new
|
17
17
|
u.single_access_token = users(:ben).single_access_token
|
18
|
-
|
19
|
-
|
18
|
+
refute u.valid?
|
19
|
+
refute u.errors[:single_access_token].empty?
|
20
20
|
end
|
21
21
|
|
22
22
|
def test_before_validation_reset_single_access_token
|
23
23
|
u = User.new
|
24
|
-
|
24
|
+
refute u.valid?
|
25
25
|
assert_not_nil u.single_access_token
|
26
26
|
end
|
27
27
|
|
@@ -1,16 +1,31 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class AuthenticatesManyTest < ActiveSupport::TestCase
|
4
|
-
def
|
5
|
-
zack = users(:zack)
|
6
|
-
ben = users(:ben)
|
4
|
+
def test_employee_sessions
|
7
5
|
binary_logic = companies(:binary_logic)
|
8
|
-
set_session_for(zack)
|
9
6
|
|
10
|
-
|
7
|
+
# Drew is a binary_logic employee, authentication succeeds
|
8
|
+
drew = employees(:drew)
|
9
|
+
set_session_for(drew)
|
10
|
+
assert binary_logic.employee_sessions.find
|
11
|
+
|
12
|
+
# Jennifer is not a binary_logic employee, authentication fails
|
13
|
+
jennifer = employees(:jennifer)
|
14
|
+
set_session_for(jennifer)
|
15
|
+
refute binary_logic.employee_sessions.find
|
16
|
+
end
|
11
17
|
|
12
|
-
|
18
|
+
def test_user_sessions
|
19
|
+
binary_logic = companies(:binary_logic)
|
13
20
|
|
21
|
+
# Ben is a binary_logic user, authentication succeeds
|
22
|
+
ben = users(:ben)
|
23
|
+
set_session_for(ben, binary_logic)
|
14
24
|
assert binary_logic.user_sessions.find
|
25
|
+
|
26
|
+
# Zack is not a binary_logic user, authentication fails
|
27
|
+
zack = users(:zack)
|
28
|
+
set_session_for(zack, binary_logic)
|
29
|
+
refute binary_logic.user_sessions.find
|
15
30
|
end
|
16
31
|
end
|
data/test/libs/company.rb
CHANGED
@@ -49,18 +49,18 @@ module SessionTest
|
|
49
49
|
|
50
50
|
def test_persisted
|
51
51
|
session = UserSession.new(users(:ben))
|
52
|
-
|
52
|
+
refute session.persisted?
|
53
53
|
|
54
54
|
session.save
|
55
55
|
assert session.persisted?
|
56
56
|
|
57
57
|
session.destroy
|
58
|
-
|
58
|
+
refute session.persisted?
|
59
59
|
end
|
60
60
|
|
61
61
|
def test_destroyed?
|
62
62
|
session = UserSession.create(users(:ben))
|
63
|
-
|
63
|
+
refute session.destroyed?
|
64
64
|
|
65
65
|
session.destroy
|
66
66
|
assert session.destroyed?
|
@@ -25,19 +25,20 @@ module SessionTest
|
|
25
25
|
ben = users(:ben)
|
26
26
|
ben.failed_login_count = UserSession.consecutive_failed_logins_limit - 1
|
27
27
|
assert ben.save
|
28
|
-
|
28
|
+
session = UserSession.create(:login => ben.login, :password => "benrocks")
|
29
|
+
refute session.new_session?
|
29
30
|
end
|
30
31
|
|
31
32
|
def test_exceeded_limit
|
32
33
|
ben = users(:ben)
|
33
34
|
ben.failed_login_count = UserSession.consecutive_failed_logins_limit
|
34
35
|
assert ben.save
|
35
|
-
|
36
|
+
session = UserSession.create(:login => ben.login, :password => "benrocks")
|
37
|
+
assert session.new_session?
|
36
38
|
assert UserSession.create(ben).new_session?
|
37
|
-
|
38
39
|
ben.reload
|
39
40
|
ben.updated_at = (UserSession.failed_login_ban_for + 2.hours.to_i).seconds.ago
|
40
|
-
|
41
|
+
refute UserSession.create(ben).new_session?
|
41
42
|
end
|
42
43
|
|
43
44
|
def test_exceeding_failed_logins_limit
|
@@ -46,14 +47,14 @@ module SessionTest
|
|
46
47
|
|
47
48
|
2.times do |i|
|
48
49
|
session = UserSession.new(:login => ben.login, :password => "badpassword1")
|
49
|
-
|
50
|
-
|
50
|
+
refute session.save
|
51
|
+
refute session.errors[:password].empty?
|
51
52
|
assert_equal i + 1, ben.reload.failed_login_count
|
52
53
|
end
|
53
54
|
|
54
55
|
session = UserSession.new(:login => ben.login, :password => "badpassword2")
|
55
|
-
|
56
|
-
assert session.errors[:password].
|
56
|
+
refute session.save
|
57
|
+
assert session.errors[:password].empty?
|
57
58
|
assert_equal 3, ben.reload.failed_login_count
|
58
59
|
|
59
60
|
UserSession.consecutive_failed_logins_limit = 50
|
@@ -66,12 +67,14 @@ module SessionTest
|
|
66
67
|
|
67
68
|
2.times do |i|
|
68
69
|
session = UserSession.new(:login => ben.login, :password => "badpassword1")
|
69
|
-
|
70
|
+
refute session.save
|
70
71
|
assert session.invalid_password?
|
71
72
|
assert_equal i + 1, ben.reload.failed_login_count
|
72
73
|
end
|
73
74
|
|
74
|
-
ActiveRecord::Base.connection.execute(
|
75
|
+
ActiveRecord::Base.connection.execute(
|
76
|
+
"update users set updated_at = '#{1.day.ago.to_s(:db)}' where login = '#{ben.login}'"
|
77
|
+
)
|
75
78
|
session = UserSession.new(:login => ben.login, :password => "benrocks")
|
76
79
|
assert session.save
|
77
80
|
assert_equal 0, ben.reload.failed_login_count
|
@@ -86,14 +89,16 @@ module SessionTest
|
|
86
89
|
|
87
90
|
2.times do |i|
|
88
91
|
session = UserSession.new(:login => ben.login, :password => "badpassword1")
|
89
|
-
|
90
|
-
|
92
|
+
refute session.save
|
93
|
+
refute session.errors[:password].empty?
|
91
94
|
assert_equal i + 1, ben.reload.failed_login_count
|
92
95
|
end
|
93
96
|
|
94
|
-
ActiveRecord::Base.connection.execute(
|
97
|
+
ActiveRecord::Base.connection.execute(
|
98
|
+
"update users set updated_at = '#{1.day.ago.to_s(:db)}' where login = '#{ben.login}'"
|
99
|
+
)
|
95
100
|
session = UserSession.new(:login => ben.login, :password => "badpassword1")
|
96
|
-
|
101
|
+
refute session.save
|
97
102
|
assert_equal 1, ben.reload.failed_login_count
|
98
103
|
|
99
104
|
UserSession.consecutive_failed_logins_limit = 50
|