authlogic 2.0.0 → 2.1.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/.gitignore +9 -0
- data/CHANGELOG.rdoc +107 -2
- data/{MIT-LICENSE → LICENSE} +1 -1
- data/README.rdoc +136 -159
- data/Rakefile +47 -18
- data/VERSION.yml +4 -0
- data/authlogic.gemspec +205 -0
- data/init.rb +1 -1
- data/lib/authlogic/acts_as_authentic/base.rb +33 -12
- data/lib/authlogic/acts_as_authentic/email.rb +47 -14
- data/lib/authlogic/acts_as_authentic/logged_in_status.rb +20 -14
- data/lib/authlogic/acts_as_authentic/login.rb +84 -8
- data/lib/authlogic/acts_as_authentic/password.rb +216 -87
- data/lib/authlogic/acts_as_authentic/perishable_token.rb +9 -4
- data/lib/authlogic/acts_as_authentic/persistence_token.rb +4 -2
- data/lib/authlogic/acts_as_authentic/restful_authentication.rb +5 -4
- data/lib/authlogic/acts_as_authentic/session_maintenance.rb +17 -5
- data/lib/authlogic/acts_as_authentic/single_access_token.rb +10 -3
- data/lib/authlogic/acts_as_authentic/validations_scope.rb +2 -2
- data/lib/authlogic/controller_adapters/abstract_adapter.rb +13 -1
- data/lib/authlogic/controller_adapters/rails_adapter.rb +1 -1
- data/lib/authlogic/crypto_providers/aes256.rb +2 -2
- data/lib/authlogic/crypto_providers/bcrypt.rb +3 -1
- data/lib/authlogic/crypto_providers/sha1.rb +2 -2
- data/lib/authlogic/i18n.rb +10 -1
- data/lib/authlogic/regex.rb +25 -0
- data/lib/authlogic/session/activation.rb +2 -0
- data/lib/authlogic/session/active_record_trickery.rb +19 -3
- data/lib/authlogic/session/brute_force_protection.rb +26 -11
- data/lib/authlogic/session/callbacks.rb +16 -6
- data/lib/authlogic/session/cookies.rb +15 -11
- data/lib/authlogic/session/existence.rb +4 -2
- data/lib/authlogic/session/foundation.rb +1 -1
- data/lib/authlogic/session/http_auth.rb +46 -11
- data/lib/authlogic/session/magic_columns.rb +25 -6
- data/lib/authlogic/session/magic_states.rb +4 -4
- data/lib/authlogic/session/params.rb +14 -9
- data/lib/authlogic/session/password.rb +86 -24
- data/lib/authlogic/session/priority_record.rb +1 -1
- data/lib/authlogic/session/session.rb +2 -2
- data/lib/authlogic/session/timeout.rb +1 -1
- data/lib/authlogic/session/validation.rb +9 -5
- data/lib/authlogic/test_case/mock_controller.rb +45 -0
- data/lib/authlogic/test_case/mock_cookie_jar.rb +14 -0
- data/lib/authlogic/test_case/mock_logger.rb +10 -0
- data/lib/authlogic/test_case/mock_request.rb +19 -0
- data/lib/authlogic/test_case/rails_request_adapter.rb +30 -0
- data/lib/authlogic/test_case.rb +114 -0
- data/lib/authlogic.rb +1 -1
- data/rails/init.rb +1 -0
- data/shoulda_macros/authlogic.rb +2 -1
- data/test/acts_as_authentic_test/base_test.rb +6 -0
- data/test/acts_as_authentic_test/email_test.rb +25 -7
- data/test/acts_as_authentic_test/login_test.rb +37 -7
- data/test/acts_as_authentic_test/magic_columns_test.rb +4 -4
- data/test/acts_as_authentic_test/password_test.rb +64 -40
- data/test/acts_as_authentic_test/perishable_token_test.rb +36 -2
- data/test/acts_as_authentic_test/restful_authentication_test.rb +40 -0
- data/test/acts_as_authentic_test/session_maintenance_test.rb +34 -18
- data/test/acts_as_authentic_test/single_access_test.rb +6 -1
- data/test/libs/affiliate.rb +7 -0
- data/test/libs/ldaper.rb +3 -0
- data/test/random_test.rb +2 -2
- data/test/session_test/activation_test.rb +1 -1
- data/test/session_test/active_record_trickery_test.rb +2 -1
- data/test/session_test/brute_force_protection_test.rb +34 -9
- data/test/session_test/cookies_test.rb +3 -3
- data/test/session_test/http_auth_test.rb +20 -8
- data/test/session_test/magic_columns_test.rb +7 -4
- data/test/session_test/magic_states_test.rb +3 -3
- data/test/session_test/params_test.rb +4 -4
- data/test/session_test/password_test.rb +8 -0
- data/test/session_test/session_test.rb +9 -9
- data/test/session_test/timeout_test.rb +10 -1
- data/test/test_helper.rb +46 -24
- metadata +38 -27
- data/Manifest.txt +0 -111
- data/lib/authlogic/testing/test_unit_helpers.rb +0 -39
- data/lib/authlogic/version.rb +0 -56
- data/test/libs/mock_controller.rb +0 -35
- data/test/libs/mock_cookie_jar.rb +0 -10
- data/test/libs/mock_request.rb +0 -5
|
@@ -33,7 +33,7 @@ module ActsAsAuthenticTest
|
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def test_validates_format_of_login_field_options_config
|
|
36
|
-
default = {:with => /\A\w[\w
|
|
36
|
+
default = {:with => /\A\w[\w\.+\-_@ ]+\z/, :message => I18n.t('error_messages.login_invalid', :default => "should use only letters, numbers, spaces, and .-_@ please.")}
|
|
37
37
|
assert_equal default, User.validates_format_of_login_field_options
|
|
38
38
|
assert_equal default, Employee.validates_format_of_login_field_options
|
|
39
39
|
|
|
@@ -43,37 +43,67 @@ module ActsAsAuthenticTest
|
|
|
43
43
|
assert_equal default, User.validates_format_of_login_field_options
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
+
def test_validates_uniqueness_of_login_field_options_config
|
|
47
|
+
default = {:case_sensitive => false, :scope => User.validations_scope, :if => "#{User.login_field}_changed?".to_sym}
|
|
48
|
+
assert_equal default, User.validates_uniqueness_of_login_field_options
|
|
49
|
+
|
|
50
|
+
User.validates_uniqueness_of_login_field_options = {:yes => "no"}
|
|
51
|
+
assert_equal({:yes => "no"}, User.validates_uniqueness_of_login_field_options)
|
|
52
|
+
User.validates_uniqueness_of_login_field_options default
|
|
53
|
+
assert_equal default, User.validates_uniqueness_of_login_field_options
|
|
54
|
+
end
|
|
55
|
+
|
|
46
56
|
def test_validates_length_of_login_field
|
|
47
57
|
u = User.new
|
|
48
58
|
u.login = "a"
|
|
49
59
|
assert !u.valid?
|
|
50
|
-
assert u.errors
|
|
60
|
+
assert u.errors[:login].size > 0
|
|
51
61
|
|
|
52
62
|
u.login = "aaaaaaaaaa"
|
|
53
63
|
assert !u.valid?
|
|
54
|
-
assert
|
|
64
|
+
assert u.errors[:login].size == 0
|
|
55
65
|
end
|
|
56
66
|
|
|
57
67
|
def test_validates_format_of_login_field
|
|
58
68
|
u = User.new
|
|
59
69
|
u.login = "fdsf@^&*"
|
|
60
70
|
assert !u.valid?
|
|
61
|
-
assert u.errors
|
|
71
|
+
assert u.errors[:login].size > 0
|
|
62
72
|
|
|
63
73
|
u.login = "fdsfdsfdsfdsfs"
|
|
64
74
|
assert !u.valid?
|
|
65
|
-
assert
|
|
75
|
+
assert u.errors[:login].size == 0
|
|
76
|
+
|
|
77
|
+
u.login = "dakota.dux+1@gmail.com"
|
|
78
|
+
assert !u.valid?
|
|
79
|
+
assert u.errors[:login].size == 0
|
|
66
80
|
end
|
|
67
81
|
|
|
68
82
|
def test_validates_uniqueness_of_login_field
|
|
69
83
|
u = User.new
|
|
70
84
|
u.login = "bjohnson"
|
|
71
85
|
assert !u.valid?
|
|
72
|
-
assert u.errors
|
|
86
|
+
assert u.errors[:login].size > 0
|
|
87
|
+
|
|
88
|
+
u.login = "BJOHNSON"
|
|
89
|
+
assert !u.valid?
|
|
90
|
+
assert u.errors[:login].size > 0
|
|
73
91
|
|
|
74
92
|
u.login = "fdsfdsf"
|
|
75
93
|
assert !u.valid?
|
|
76
|
-
assert
|
|
94
|
+
assert u.errors[:login].size == 0
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def test_find_by_smart_case_login_field
|
|
98
|
+
ben = users(:ben)
|
|
99
|
+
assert_equal ben, User.find_by_smart_case_login_field("bjohnson")
|
|
100
|
+
assert_equal ben, User.find_by_smart_case_login_field("BJOHNSON")
|
|
101
|
+
assert_equal ben, User.find_by_smart_case_login_field("Bjohnson")
|
|
102
|
+
|
|
103
|
+
drew = employees(:drew)
|
|
104
|
+
assert_equal drew, Employee.find_by_smart_case_login_field("dgainor@binarylogic.com")
|
|
105
|
+
assert_equal drew, Employee.find_by_smart_case_login_field("Dgainor@binarylogic.com")
|
|
106
|
+
assert_equal drew, Employee.find_by_smart_case_login_field("DGAINOR@BINARYLOGIC.COM")
|
|
77
107
|
end
|
|
78
108
|
end
|
|
79
109
|
end
|
|
@@ -6,22 +6,22 @@ module ActsAsAuthenticTest
|
|
|
6
6
|
u = User.new
|
|
7
7
|
u.login_count = -1
|
|
8
8
|
assert !u.valid?
|
|
9
|
-
assert u.errors
|
|
9
|
+
assert u.errors[:login_count].size > 0
|
|
10
10
|
|
|
11
11
|
u.login_count = 0
|
|
12
12
|
assert !u.valid?
|
|
13
|
-
assert
|
|
13
|
+
assert u.errors[:login_count].size == 0
|
|
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
19
|
assert !u.valid?
|
|
20
|
-
assert u.errors
|
|
20
|
+
assert u.errors[:failed_login_count].size > 0
|
|
21
21
|
|
|
22
22
|
u.failed_login_count = 0
|
|
23
23
|
assert !u.valid?
|
|
24
|
-
assert
|
|
24
|
+
assert u.errors[:failed_login_count].size == 0
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
end
|
|
@@ -22,6 +22,24 @@ module ActsAsAuthenticTest
|
|
|
22
22
|
assert_equal :password_salt, User.password_salt_field
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
+
def test_ignore_blank_passwords_config
|
|
26
|
+
assert User.ignore_blank_passwords
|
|
27
|
+
assert Employee.ignore_blank_passwords
|
|
28
|
+
|
|
29
|
+
User.ignore_blank_passwords = false
|
|
30
|
+
assert !User.ignore_blank_passwords
|
|
31
|
+
User.ignore_blank_passwords true
|
|
32
|
+
assert User.ignore_blank_passwords
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_check_passwords_against_database
|
|
36
|
+
assert User.check_passwords_against_database
|
|
37
|
+
User.check_passwords_against_database = false
|
|
38
|
+
assert !User.check_passwords_against_database
|
|
39
|
+
User.check_passwords_against_database true
|
|
40
|
+
assert User.check_passwords_against_database
|
|
41
|
+
end
|
|
42
|
+
|
|
25
43
|
def test_validate_password_field_config
|
|
26
44
|
assert User.validate_password_field
|
|
27
45
|
assert Employee.validate_password_field
|
|
@@ -32,8 +50,19 @@ module ActsAsAuthenticTest
|
|
|
32
50
|
assert User.validate_password_field
|
|
33
51
|
end
|
|
34
52
|
|
|
53
|
+
def test_validates_length_of_password_field_options_config
|
|
54
|
+
default = {:minimum => 4, :if => :require_password?}
|
|
55
|
+
assert_equal default, User.validates_length_of_password_field_options
|
|
56
|
+
assert_equal default, Employee.validates_length_of_password_field_options
|
|
57
|
+
|
|
58
|
+
User.validates_length_of_password_field_options = {:yes => "no"}
|
|
59
|
+
assert_equal({:yes => "no"}, User.validates_length_of_password_field_options)
|
|
60
|
+
User.validates_length_of_password_field_options default
|
|
61
|
+
assert_equal default, User.validates_length_of_password_field_options
|
|
62
|
+
end
|
|
63
|
+
|
|
35
64
|
def test_validates_confirmation_of_password_field_options_config
|
|
36
|
-
default = {:
|
|
65
|
+
default = {:if => :require_password?}
|
|
37
66
|
assert_equal default, User.validates_confirmation_of_password_field_options
|
|
38
67
|
assert_equal default, Employee.validates_confirmation_of_password_field_options
|
|
39
68
|
|
|
@@ -44,7 +73,7 @@ module ActsAsAuthenticTest
|
|
|
44
73
|
end
|
|
45
74
|
|
|
46
75
|
def test_validates_length_of_password_confirmation_field_options_config
|
|
47
|
-
default = {:minimum => 4, :if => :
|
|
76
|
+
default = {:minimum => 4, :if => :require_password?}
|
|
48
77
|
assert_equal default, User.validates_length_of_password_confirmation_field_options
|
|
49
78
|
assert_equal default, Employee.validates_length_of_password_confirmation_field_options
|
|
50
79
|
|
|
@@ -74,37 +103,15 @@ module ActsAsAuthenticTest
|
|
|
74
103
|
assert_equal [], User.transition_from_crypto_providers
|
|
75
104
|
end
|
|
76
105
|
|
|
77
|
-
def
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
assert User.act_like_restful_authentication
|
|
83
|
-
assert_equal Authlogic::CryptoProviders::Sha1, User.crypto_provider
|
|
84
|
-
assert defined?(::REST_AUTH_SITE_KEY)
|
|
85
|
-
assert_equal 1, Authlogic::CryptoProviders::Sha1.stretches
|
|
86
|
-
|
|
87
|
-
User.act_like_restful_authentication false
|
|
88
|
-
assert !User.act_like_restful_authentication
|
|
89
|
-
|
|
90
|
-
User.crypto_provider = Authlogic::CryptoProviders::Sha512
|
|
91
|
-
User.transition_from_crypto_providers = []
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def test_transition_from_restful_authentication_config
|
|
95
|
-
assert !User.transition_from_restful_authentication
|
|
96
|
-
assert !Employee.transition_from_restful_authentication
|
|
97
|
-
|
|
98
|
-
User.transition_from_restful_authentication = true
|
|
99
|
-
assert User.transition_from_restful_authentication
|
|
100
|
-
assert defined?(::REST_AUTH_SITE_KEY)
|
|
101
|
-
assert_equal 1, Authlogic::CryptoProviders::Sha1.stretches
|
|
102
|
-
|
|
103
|
-
User.transition_from_restful_authentication false
|
|
104
|
-
assert !User.transition_from_restful_authentication
|
|
106
|
+
def test_validates_length_of_password
|
|
107
|
+
u = User.new
|
|
108
|
+
u.password_confirmation = "test2"
|
|
109
|
+
assert !u.valid?
|
|
110
|
+
assert u.errors[:password].size > 0
|
|
105
111
|
|
|
106
|
-
|
|
107
|
-
|
|
112
|
+
u.password = "test"
|
|
113
|
+
assert !u.valid?
|
|
114
|
+
assert u.errors[:password_confirmation].size == 0
|
|
108
115
|
end
|
|
109
116
|
|
|
110
117
|
def test_validates_confirmation_of_password
|
|
@@ -112,34 +119,31 @@ module ActsAsAuthenticTest
|
|
|
112
119
|
u.password = "test"
|
|
113
120
|
u.password_confirmation = "test2"
|
|
114
121
|
assert !u.valid?
|
|
115
|
-
assert u.errors
|
|
122
|
+
assert u.errors[:password].size > 0
|
|
116
123
|
|
|
117
124
|
u.password_confirmation = "test"
|
|
118
125
|
assert !u.valid?
|
|
119
|
-
assert
|
|
126
|
+
assert u.errors[:password].size == 0
|
|
120
127
|
end
|
|
121
128
|
|
|
122
129
|
def test_validates_length_of_password_confirmation
|
|
123
130
|
u = User.new
|
|
124
131
|
|
|
125
|
-
assert !u.valid?
|
|
126
|
-
assert u.errors.on(:password_confirmation)
|
|
127
|
-
|
|
128
132
|
u.password = "test"
|
|
129
133
|
u.password_confirmation = ""
|
|
130
134
|
assert !u.valid?
|
|
131
|
-
assert u.errors
|
|
135
|
+
assert u.errors[:password_confirmation].size > 0
|
|
132
136
|
|
|
133
137
|
u.password_confirmation = "test"
|
|
134
138
|
assert !u.valid?
|
|
135
|
-
assert
|
|
139
|
+
assert u.errors[:password_confirmation].size == 0
|
|
136
140
|
|
|
137
141
|
ben = users(:ben)
|
|
138
142
|
assert ben.valid?
|
|
139
143
|
|
|
140
144
|
ben.password = "newpass"
|
|
141
145
|
assert !ben.valid?
|
|
142
|
-
assert ben.errors
|
|
146
|
+
assert ben.errors[:password_confirmation].size > 0
|
|
143
147
|
|
|
144
148
|
ben.password_confirmation = "newpass"
|
|
145
149
|
assert ben.valid?
|
|
@@ -161,6 +165,26 @@ module ActsAsAuthenticTest
|
|
|
161
165
|
transition_password_to(Authlogic::CryptoProviders::Sha512, ben, [Authlogic::CryptoProviders::Sha1, Authlogic::CryptoProviders::BCrypt])
|
|
162
166
|
end
|
|
163
167
|
|
|
168
|
+
def test_checks_password_against_database
|
|
169
|
+
ben = users(:ben)
|
|
170
|
+
ben.password = "new pass"
|
|
171
|
+
assert !ben.valid_password?("new pass")
|
|
172
|
+
assert ben.valid_password?("benrocks")
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def test_checks_password_against_database_and_always_fails_on_new_records
|
|
176
|
+
user = User.new
|
|
177
|
+
user.password = "new pass"
|
|
178
|
+
assert !user.valid_password?("new pass")
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def test_checks_password_against_object
|
|
182
|
+
ben = users(:ben)
|
|
183
|
+
ben.password = "new pass"
|
|
184
|
+
assert ben.valid_password?("new pass", false)
|
|
185
|
+
assert !ben.valid_password?("benrocks", false)
|
|
186
|
+
end
|
|
187
|
+
|
|
164
188
|
def test_reset_password
|
|
165
189
|
ben = users(:ben)
|
|
166
190
|
old_crypted_password = ben.crypted_password
|
|
@@ -26,7 +26,7 @@ module ActsAsAuthenticTest
|
|
|
26
26
|
u = User.new
|
|
27
27
|
u.perishable_token = users(:ben).perishable_token
|
|
28
28
|
assert !u.valid?
|
|
29
|
-
assert u.errors
|
|
29
|
+
assert u.errors[:perishable_token].size > 0
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def test_before_save_reset_perishable_token
|
|
@@ -52,5 +52,39 @@ module ActsAsAuthenticTest
|
|
|
52
52
|
ben.reload
|
|
53
53
|
assert_not_equal old_perishable_token, ben.perishable_token
|
|
54
54
|
end
|
|
55
|
+
|
|
56
|
+
def test_find_using_perishable_token
|
|
57
|
+
ben = users(:ben)
|
|
58
|
+
assert_equal ben, User.find_using_perishable_token(ben.perishable_token)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_find_using_perishable_token_when_perished
|
|
62
|
+
ben = users(:ben)
|
|
63
|
+
ActiveRecord::Base.connection.execute("UPDATE users set updated_at = '#{1.week.ago.to_s(:db)}' where id = #{ben.id}")
|
|
64
|
+
assert_nil User.find_using_perishable_token(ben.perishable_token)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def test_find_using_perishable_token_when_perished
|
|
68
|
+
User.perishable_token_valid_for = 1.minute
|
|
69
|
+
ben = users(:ben)
|
|
70
|
+
ActiveRecord::Base.connection.execute("UPDATE users set updated_at = '#{2.minutes.ago.to_s(:db)}' where id = #{ben.id}")
|
|
71
|
+
assert_nil User.find_using_perishable_token(ben.perishable_token)
|
|
72
|
+
User.perishable_token_valid_for = 10.minutes
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_find_using_perishable_token_when_passing_threshold
|
|
76
|
+
User.perishable_token_valid_for = 1.minute
|
|
77
|
+
ben = users(:ben)
|
|
78
|
+
ActiveRecord::Base.connection.execute("UPDATE users set updated_at = '#{10.minutes.ago.to_s(:db)}' where id = #{ben.id}")
|
|
79
|
+
assert_nil User.find_using_perishable_token(ben.perishable_token, 5.minutes)
|
|
80
|
+
assert_equal ben, User.find_using_perishable_token(ben.perishable_token, 20.minutes)
|
|
81
|
+
User.perishable_token_valid_for = 10.minutes
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_find_perishable_token_with_bang
|
|
85
|
+
assert_raises ActiveRecord::RecordNotFound do
|
|
86
|
+
User.find_using_perishable_token!('some_bad_value')
|
|
87
|
+
end
|
|
88
|
+
end
|
|
55
89
|
end
|
|
56
|
-
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
|
2
|
+
|
|
3
|
+
module ActsAsAuthenticTest
|
|
4
|
+
class RestfulAuthenticationTest < ActiveSupport::TestCase
|
|
5
|
+
def test_act_like_restful_authentication_config
|
|
6
|
+
assert !User.act_like_restful_authentication
|
|
7
|
+
assert !Employee.act_like_restful_authentication
|
|
8
|
+
|
|
9
|
+
User.act_like_restful_authentication = true
|
|
10
|
+
assert User.act_like_restful_authentication
|
|
11
|
+
assert_equal Authlogic::CryptoProviders::Sha1, User.crypto_provider
|
|
12
|
+
assert defined?(::REST_AUTH_SITE_KEY)
|
|
13
|
+
assert_equal '', ::REST_AUTH_SITE_KEY
|
|
14
|
+
assert_equal 1, Authlogic::CryptoProviders::Sha1.stretches
|
|
15
|
+
|
|
16
|
+
User.act_like_restful_authentication false
|
|
17
|
+
assert !User.act_like_restful_authentication
|
|
18
|
+
|
|
19
|
+
User.crypto_provider = Authlogic::CryptoProviders::Sha512
|
|
20
|
+
User.transition_from_crypto_providers = []
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_transition_from_restful_authentication_config
|
|
24
|
+
assert !User.transition_from_restful_authentication
|
|
25
|
+
assert !Employee.transition_from_restful_authentication
|
|
26
|
+
|
|
27
|
+
User.transition_from_restful_authentication = true
|
|
28
|
+
assert User.transition_from_restful_authentication
|
|
29
|
+
assert defined?(::REST_AUTH_SITE_KEY)
|
|
30
|
+
assert_equal '', ::REST_AUTH_SITE_KEY
|
|
31
|
+
assert_equal 1, Authlogic::CryptoProviders::Sha1.stretches
|
|
32
|
+
|
|
33
|
+
User.transition_from_restful_authentication false
|
|
34
|
+
assert !User.transition_from_restful_authentication
|
|
35
|
+
|
|
36
|
+
User.crypto_provider = Authlogic::CryptoProviders::Sha512
|
|
37
|
+
User.transition_from_crypto_providers = []
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -2,57 +2,73 @@ require File.dirname(__FILE__) + '/../test_helper.rb'
|
|
|
2
2
|
|
|
3
3
|
module ActsAsAuthenticTest
|
|
4
4
|
class SessionMaintenanceTest < ActiveSupport::TestCase
|
|
5
|
+
def test_maintain_sessions_config
|
|
6
|
+
assert User.maintain_sessions
|
|
7
|
+
User.maintain_sessions = false
|
|
8
|
+
assert !User.maintain_sessions
|
|
9
|
+
User.maintain_sessions true
|
|
10
|
+
assert User.maintain_sessions
|
|
11
|
+
end
|
|
12
|
+
|
|
5
13
|
def test_login_after_create
|
|
6
14
|
assert User.create(:login => "awesome", :password => "saweet", :password_confirmation => "saweet", :email => "awesome@awesome.com")
|
|
7
15
|
assert UserSession.find
|
|
8
16
|
end
|
|
17
|
+
|
|
18
|
+
def test_updating_session_with_failed_magic_state
|
|
19
|
+
ben = users(:ben)
|
|
20
|
+
ben.confirmed = false
|
|
21
|
+
ben.password = "newpass"
|
|
22
|
+
ben.password_confirmation = "newpass"
|
|
23
|
+
assert ben.save
|
|
24
|
+
end
|
|
9
25
|
|
|
10
26
|
def test_update_session_after_password_modify
|
|
11
27
|
ben = users(:ben)
|
|
12
28
|
UserSession.create(ben)
|
|
13
|
-
old_session_key =
|
|
14
|
-
old_cookie_key =
|
|
29
|
+
old_session_key = controller.session["user_credentials"]
|
|
30
|
+
old_cookie_key = controller.cookies["user_credentials"]
|
|
15
31
|
ben.password = "newpass"
|
|
16
32
|
ben.password_confirmation = "newpass"
|
|
17
33
|
assert ben.save
|
|
18
|
-
assert
|
|
19
|
-
assert
|
|
20
|
-
assert_not_equal
|
|
21
|
-
assert_not_equal
|
|
34
|
+
assert controller.session["user_credentials"]
|
|
35
|
+
assert controller.cookies["user_credentials"]
|
|
36
|
+
assert_not_equal controller.session["user_credentials"], old_session_key
|
|
37
|
+
assert_not_equal controller.cookies["user_credentials"], old_cookie_key
|
|
22
38
|
end
|
|
23
39
|
|
|
24
40
|
def test_no_session_update_after_modify
|
|
25
41
|
ben = users(:ben)
|
|
26
42
|
UserSession.create(ben)
|
|
27
|
-
old_session_key =
|
|
28
|
-
old_cookie_key =
|
|
43
|
+
old_session_key = controller.session["user_credentials"]
|
|
44
|
+
old_cookie_key = controller.cookies["user_credentials"]
|
|
29
45
|
ben.first_name = "Ben"
|
|
30
46
|
assert ben.save
|
|
31
|
-
assert_equal
|
|
32
|
-
assert_equal
|
|
47
|
+
assert_equal controller.session["user_credentials"], old_session_key
|
|
48
|
+
assert_equal controller.cookies["user_credentials"], old_cookie_key
|
|
33
49
|
end
|
|
34
50
|
|
|
35
51
|
def test_creating_other_user
|
|
36
52
|
ben = users(:ben)
|
|
37
53
|
UserSession.create(ben)
|
|
38
|
-
old_session_key =
|
|
39
|
-
old_cookie_key =
|
|
54
|
+
old_session_key = controller.session["user_credentials"]
|
|
55
|
+
old_cookie_key = controller.cookies["user_credentials"]
|
|
40
56
|
assert User.create(:login => "awesome", :password => "saweet", :password_confirmation => "saweet", :email => "awesome@saweet.com")
|
|
41
|
-
assert_equal
|
|
42
|
-
assert_equal
|
|
57
|
+
assert_equal controller.session["user_credentials"], old_session_key
|
|
58
|
+
assert_equal controller.cookies["user_credentials"], old_cookie_key
|
|
43
59
|
end
|
|
44
60
|
|
|
45
61
|
def test_updating_other_user
|
|
46
62
|
ben = users(:ben)
|
|
47
63
|
UserSession.create(ben)
|
|
48
|
-
old_session_key =
|
|
49
|
-
old_cookie_key =
|
|
64
|
+
old_session_key = controller.session["user_credentials"]
|
|
65
|
+
old_cookie_key = controller.cookies["user_credentials"]
|
|
50
66
|
zack = users(:zack)
|
|
51
67
|
zack.password = "newpass"
|
|
52
68
|
zack.password_confirmation = "newpass"
|
|
53
69
|
assert zack.save
|
|
54
|
-
assert_equal
|
|
55
|
-
assert_equal
|
|
70
|
+
assert_equal controller.session["user_credentials"], old_session_key
|
|
71
|
+
assert_equal controller.cookies["user_credentials"], old_cookie_key
|
|
56
72
|
end
|
|
57
73
|
|
|
58
74
|
def test_resetting_password_when_logged_out
|
|
@@ -16,7 +16,7 @@ module ActsAsAuthenticTest
|
|
|
16
16
|
u = User.new
|
|
17
17
|
u.single_access_token = users(:ben).single_access_token
|
|
18
18
|
assert !u.valid?
|
|
19
|
-
assert u.errors
|
|
19
|
+
assert u.errors[:single_access_token].size > 0
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def test_before_validation_reset_single_access_token
|
|
@@ -35,5 +35,10 @@ module ActsAsAuthenticTest
|
|
|
35
35
|
|
|
36
36
|
User.change_single_access_token_with_password = false
|
|
37
37
|
end
|
|
38
|
+
|
|
39
|
+
def test_after_password_set_is_not_called
|
|
40
|
+
ldaper = Ldaper.new
|
|
41
|
+
assert ldaper.save
|
|
42
|
+
end
|
|
38
43
|
end
|
|
39
44
|
end
|
data/test/libs/ldaper.rb
ADDED
data/test/random_test.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + '
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
|
2
2
|
|
|
3
3
|
class RandomTest < ActiveSupport::TestCase
|
|
4
4
|
def test_random_tokens_have_consisten_length
|
|
@@ -36,7 +36,7 @@ class RandomTest < ActiveSupport::TestCase
|
|
|
36
36
|
def reload_authlogic_with_sec_random!(secure_random, enabled = true)
|
|
37
37
|
silence_warnings do
|
|
38
38
|
secure_random.parent.const_set(secure_random.name.sub("#{secure_random.parent}::", ''), enabled ? secure_random : nil)
|
|
39
|
-
load(File.dirname(__FILE__) + '
|
|
39
|
+
load(File.dirname(__FILE__) + '/../lib/authlogic/random.rb')
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
|
|
@@ -5,10 +5,11 @@ module SessionTest
|
|
|
5
5
|
class ClassMethodsTest < ActiveSupport::TestCase
|
|
6
6
|
def test_human_attribute_name
|
|
7
7
|
assert_equal "Some attribute", UserSession.human_attribute_name("some_attribute")
|
|
8
|
+
assert_equal "Some attribute", UserSession.human_attribute_name(:some_attribute)
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
def test_human_name
|
|
11
|
-
assert_equal "
|
|
12
|
+
assert_equal "Usersession", UserSession.human_name
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def test_self_and_descendents_from_active_record
|
|
@@ -45,31 +45,56 @@ module SessionTest
|
|
|
45
45
|
2.times do |i|
|
|
46
46
|
session = UserSession.new(:login => ben.login, :password => "badpassword1")
|
|
47
47
|
assert !session.save
|
|
48
|
-
assert session.errors
|
|
48
|
+
assert session.errors[:password].size > 0
|
|
49
49
|
assert_equal i + 1, ben.reload.failed_login_count
|
|
50
50
|
end
|
|
51
|
-
|
|
51
|
+
|
|
52
52
|
session = UserSession.new(:login => ben.login, :password => "badpassword2")
|
|
53
53
|
assert !session.save
|
|
54
|
-
assert
|
|
55
|
-
assert_equal
|
|
54
|
+
assert session.errors[:password].size == 0
|
|
55
|
+
assert_equal 3, ben.reload.failed_login_count
|
|
56
56
|
|
|
57
57
|
UserSession.consecutive_failed_logins_limit = 50
|
|
58
58
|
end
|
|
59
|
-
|
|
60
|
-
def
|
|
59
|
+
|
|
60
|
+
def test_exceeded_ban_for
|
|
61
|
+
UserSession.consecutive_failed_logins_limit = 2
|
|
62
|
+
UserSession.generalize_credentials_error_messages true
|
|
61
63
|
ben = users(:ben)
|
|
62
64
|
|
|
63
65
|
2.times do |i|
|
|
64
|
-
session = UserSession.new(:login => ben.login, :password => "
|
|
66
|
+
session = UserSession.new(:login => ben.login, :password => "badpassword1")
|
|
65
67
|
assert !session.save
|
|
66
|
-
assert session.
|
|
68
|
+
assert session.invalid_password?
|
|
67
69
|
assert_equal i + 1, ben.reload.failed_login_count
|
|
68
70
|
end
|
|
69
|
-
|
|
71
|
+
|
|
72
|
+
ActiveRecord::Base.connection.execute("update users set updated_at = '#{1.day.ago.to_s(:db)}' where login = '#{ben.login}'")
|
|
70
73
|
session = UserSession.new(:login => ben.login, :password => "benrocks")
|
|
71
74
|
assert session.save
|
|
72
75
|
assert_equal 0, ben.reload.failed_login_count
|
|
76
|
+
|
|
77
|
+
UserSession.consecutive_failed_logins_limit = 50
|
|
78
|
+
UserSession.generalize_credentials_error_messages false
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_exceeded_ban_and_failed_doesnt_ban_again
|
|
82
|
+
UserSession.consecutive_failed_logins_limit = 2
|
|
83
|
+
ben = users(:ben)
|
|
84
|
+
|
|
85
|
+
2.times do |i|
|
|
86
|
+
session = UserSession.new(:login => ben.login, :password => "badpassword1")
|
|
87
|
+
assert !session.save
|
|
88
|
+
assert session.errors[:password].size > 0
|
|
89
|
+
assert_equal i + 1, ben.reload.failed_login_count
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
ActiveRecord::Base.connection.execute("update users set updated_at = '#{1.day.ago.to_s(:db)}' where login = '#{ben.login}'")
|
|
93
|
+
session = UserSession.new(:login => ben.login, :password => "badpassword1")
|
|
94
|
+
assert !session.save
|
|
95
|
+
assert_equal 1, ben.reload.failed_login_count
|
|
96
|
+
|
|
97
|
+
UserSession.consecutive_failed_logins_limit = 50
|
|
73
98
|
end
|
|
74
99
|
end
|
|
75
100
|
end
|
|
@@ -91,16 +91,16 @@ module SessionTest
|
|
|
91
91
|
ben = users(:ben)
|
|
92
92
|
session = UserSession.new(ben)
|
|
93
93
|
assert session.save
|
|
94
|
-
assert_equal ben.persistence_token,
|
|
94
|
+
assert_equal "#{ben.persistence_token}::#{ben.id}", controller.cookies["user_credentials"]
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
def test_after_destroy_destroy_cookie
|
|
98
98
|
ben = users(:ben)
|
|
99
99
|
set_cookie_for(ben)
|
|
100
100
|
session = UserSession.find
|
|
101
|
-
assert
|
|
101
|
+
assert controller.cookies["user_credentials"]
|
|
102
102
|
assert session.destroy
|
|
103
|
-
assert
|
|
103
|
+
assert !controller.cookies["user_credentials"]
|
|
104
104
|
end
|
|
105
105
|
end
|
|
106
106
|
end
|
|
@@ -2,14 +2,26 @@ require File.dirname(__FILE__) + '/../test_helper.rb'
|
|
|
2
2
|
|
|
3
3
|
module SessionTest
|
|
4
4
|
class HttpAuthTest < ActiveSupport::TestCase
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
assert_equal
|
|
12
|
-
|
|
5
|
+
class ConfiTest < ActiveSupport::TestCase
|
|
6
|
+
def test_allow_http_basic_auth
|
|
7
|
+
UserSession.allow_http_basic_auth = false
|
|
8
|
+
assert_equal false, UserSession.allow_http_basic_auth
|
|
9
|
+
|
|
10
|
+
UserSession.allow_http_basic_auth true
|
|
11
|
+
assert_equal true, UserSession.allow_http_basic_auth
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class InstanceMethodsTest < ActiveSupport::TestCase
|
|
16
|
+
def test_persist_persist_by_http_auth
|
|
17
|
+
ben = users(:ben)
|
|
18
|
+
http_basic_auth_for { assert !UserSession.find }
|
|
19
|
+
http_basic_auth_for(ben) do
|
|
20
|
+
assert session = UserSession.find
|
|
21
|
+
assert_equal ben, session.record
|
|
22
|
+
assert_equal ben.login, session.login
|
|
23
|
+
assert_equal "benrocks", session.send(:protected_password)
|
|
24
|
+
end
|
|
13
25
|
end
|
|
14
26
|
end
|
|
15
27
|
end
|