authlogic 2.0.1 → 2.1.2
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 +110 -1
- data/{MIT-LICENSE → LICENSE} +1 -1
- data/README.rdoc +138 -161
- data/Rakefile +40 -19
- data/VERSION.yml +4 -0
- data/authlogic.gemspec +212 -0
- data/init.rb +1 -1
- data/lib/authlogic/acts_as_authentic/base.rb +44 -35
- 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 +207 -88
- 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 +16 -4
- data/lib/authlogic/acts_as_authentic/single_access_token.rb +10 -3
- data/lib/authlogic/acts_as_authentic/validations_scope.rb +1 -1
- data/lib/authlogic/controller_adapters/abstract_adapter.rb +13 -1
- data/lib/authlogic/controller_adapters/rails_adapter.rb +14 -4
- data/lib/authlogic/controller_adapters/sinatra_adapter.rb +61 -0
- 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/translator.rb +15 -0
- data/lib/authlogic/i18n.rb +43 -14
- data/lib/authlogic/regex.rb +25 -0
- data/lib/authlogic/session/activation.rb +2 -0
- data/lib/authlogic/session/active_record_trickery.rb +26 -5
- data/lib/authlogic/session/brute_force_protection.rb +30 -11
- data/lib/authlogic/session/callbacks.rb +18 -7
- data/lib/authlogic/session/cookies.rb +21 -17
- data/lib/authlogic/session/existence.rb +6 -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 +29 -9
- data/lib/authlogic/session/magic_states.rb +6 -5
- data/lib/authlogic/session/params.rb +16 -10
- data/lib/authlogic/session/password.rb +115 -31
- data/lib/authlogic/session/priority_record.rb +1 -1
- data/lib/authlogic/session/session.rb +5 -3
- data/lib/authlogic/session/timeout.rb +1 -1
- data/lib/authlogic/session/validation.rb +13 -7
- 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 +4 -3
- data/rails/init.rb +1 -0
- data/shoulda_macros/authlogic.rb +3 -2
- 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 +46 -44
- 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 +26 -18
- data/test/acts_as_authentic_test/single_access_test.rb +6 -1
- data/test/i18n_test.rb +33 -0
- 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 +12 -2
- data/test/session_test/brute_force_protection_test.rb +37 -12
- data/test/session_test/cookies_test.rb +3 -3
- data/test/session_test/existence_test.rb +3 -3
- data/test/session_test/http_auth_test.rb +20 -8
- data/test/session_test/magic_columns_test.rb +9 -6
- 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 +23 -1
- data/test/session_test/session_test.rb +9 -9
- data/test/session_test/timeout_test.rb +10 -1
- data/test/test_helper.rb +53 -23
- metadata +42 -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
|
@@ -2,6 +2,14 @@ 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
|
|
@@ -18,49 +26,49 @@ module ActsAsAuthenticTest
|
|
|
18
26
|
def test_update_session_after_password_modify
|
|
19
27
|
ben = users(:ben)
|
|
20
28
|
UserSession.create(ben)
|
|
21
|
-
old_session_key =
|
|
22
|
-
old_cookie_key =
|
|
29
|
+
old_session_key = controller.session["user_credentials"]
|
|
30
|
+
old_cookie_key = controller.cookies["user_credentials"]
|
|
23
31
|
ben.password = "newpass"
|
|
24
32
|
ben.password_confirmation = "newpass"
|
|
25
33
|
assert ben.save
|
|
26
|
-
assert
|
|
27
|
-
assert
|
|
28
|
-
assert_not_equal
|
|
29
|
-
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
|
|
30
38
|
end
|
|
31
39
|
|
|
32
40
|
def test_no_session_update_after_modify
|
|
33
41
|
ben = users(:ben)
|
|
34
42
|
UserSession.create(ben)
|
|
35
|
-
old_session_key =
|
|
36
|
-
old_cookie_key =
|
|
43
|
+
old_session_key = controller.session["user_credentials"]
|
|
44
|
+
old_cookie_key = controller.cookies["user_credentials"]
|
|
37
45
|
ben.first_name = "Ben"
|
|
38
46
|
assert ben.save
|
|
39
|
-
assert_equal
|
|
40
|
-
assert_equal
|
|
47
|
+
assert_equal controller.session["user_credentials"], old_session_key
|
|
48
|
+
assert_equal controller.cookies["user_credentials"], old_cookie_key
|
|
41
49
|
end
|
|
42
50
|
|
|
43
51
|
def test_creating_other_user
|
|
44
52
|
ben = users(:ben)
|
|
45
53
|
UserSession.create(ben)
|
|
46
|
-
old_session_key =
|
|
47
|
-
old_cookie_key =
|
|
54
|
+
old_session_key = controller.session["user_credentials"]
|
|
55
|
+
old_cookie_key = controller.cookies["user_credentials"]
|
|
48
56
|
assert User.create(:login => "awesome", :password => "saweet", :password_confirmation => "saweet", :email => "awesome@saweet.com")
|
|
49
|
-
assert_equal
|
|
50
|
-
assert_equal
|
|
57
|
+
assert_equal controller.session["user_credentials"], old_session_key
|
|
58
|
+
assert_equal controller.cookies["user_credentials"], old_cookie_key
|
|
51
59
|
end
|
|
52
60
|
|
|
53
61
|
def test_updating_other_user
|
|
54
62
|
ben = users(:ben)
|
|
55
63
|
UserSession.create(ben)
|
|
56
|
-
old_session_key =
|
|
57
|
-
old_cookie_key =
|
|
64
|
+
old_session_key = controller.session["user_credentials"]
|
|
65
|
+
old_cookie_key = controller.cookies["user_credentials"]
|
|
58
66
|
zack = users(:zack)
|
|
59
67
|
zack.password = "newpass"
|
|
60
68
|
zack.password_confirmation = "newpass"
|
|
61
69
|
assert zack.save
|
|
62
|
-
assert_equal
|
|
63
|
-
assert_equal
|
|
70
|
+
assert_equal controller.session["user_credentials"], old_session_key
|
|
71
|
+
assert_equal controller.cookies["user_credentials"], old_cookie_key
|
|
64
72
|
end
|
|
65
73
|
|
|
66
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/i18n_test.rb
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
|
2
|
+
|
|
3
|
+
class I18nTest < ActiveSupport::TestCase
|
|
4
|
+
def test_uses_authlogic_as_scope_by_default
|
|
5
|
+
assert_equal :authlogic, Authlogic::I18n.scope
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_can_set_scope
|
|
9
|
+
assert_nothing_raised { Authlogic::I18n.scope = [:a, :b] }
|
|
10
|
+
assert_equal [:a, :b], Authlogic::I18n.scope
|
|
11
|
+
Authlogic::I18n.scope = :authlogic
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_uses_built_in_translator_by_default
|
|
15
|
+
assert_equal Authlogic::I18n::Translator, Authlogic::I18n.translator.class
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_can_set_custom_translator
|
|
19
|
+
old_translator = Authlogic::I18n.translator
|
|
20
|
+
|
|
21
|
+
assert_nothing_raised do
|
|
22
|
+
Authlogic::I18n.translator = Class.new do
|
|
23
|
+
def translate(key, options = {})
|
|
24
|
+
"Translated: #{key}"
|
|
25
|
+
end
|
|
26
|
+
end.new
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
assert_equal "Translated: x", Authlogic::I18n.translate(:x)
|
|
30
|
+
|
|
31
|
+
Authlogic::I18n.translator = old_translator
|
|
32
|
+
end
|
|
33
|
+
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,15 +5,20 @@ 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
|
|
15
16
|
assert_equal [UserSession], UserSession.self_and_descendents_from_active_record
|
|
16
17
|
end
|
|
18
|
+
|
|
19
|
+
def test_self_and_descendants_from_active_record
|
|
20
|
+
assert_equal [UserSession], UserSession.self_and_descendants_from_active_record
|
|
21
|
+
end
|
|
17
22
|
end
|
|
18
23
|
|
|
19
24
|
class InstanceMethodsTest < ActiveSupport::TestCase
|
|
@@ -21,6 +26,11 @@ module SessionTest
|
|
|
21
26
|
session = UserSession.new
|
|
22
27
|
assert session.new_record?
|
|
23
28
|
end
|
|
29
|
+
|
|
30
|
+
def test_to_model
|
|
31
|
+
session = UserSession.new
|
|
32
|
+
assert session, session.to_model
|
|
33
|
+
end
|
|
24
34
|
end
|
|
25
35
|
end
|
|
26
|
-
end
|
|
36
|
+
end
|
|
@@ -32,10 +32,10 @@ module SessionTest
|
|
|
32
32
|
ben = users(:ben)
|
|
33
33
|
ben.failed_login_count = UserSession.consecutive_failed_logins_limit
|
|
34
34
|
assert ben.save
|
|
35
|
-
assert
|
|
36
|
-
assert
|
|
35
|
+
assert UserSession.create(:login => ben.login, :password => "benrocks").new_session?
|
|
36
|
+
assert UserSession.create(ben).new_session?
|
|
37
37
|
ben.updated_at = (UserSession.failed_login_ban_for + 2.hours.to_i).seconds.ago
|
|
38
|
-
assert UserSession.create(ben)
|
|
38
|
+
assert !UserSession.create(ben).new_session?
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
def test_exceeding_failed_logins_limit
|
|
@@ -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
|
|
@@ -5,10 +5,10 @@ module SessionTest
|
|
|
5
5
|
class ClassMethodsTest < ActiveSupport::TestCase
|
|
6
6
|
def test_create
|
|
7
7
|
ben = users(:ben)
|
|
8
|
-
assert
|
|
9
|
-
assert UserSession.create(:login => ben.login, :password => "benrocks")
|
|
8
|
+
assert UserSession.create(:login => "somelogin", :password => "badpw2").new_session?
|
|
9
|
+
assert !UserSession.create(:login => ben.login, :password => "benrocks").new_session?
|
|
10
10
|
assert_raise(Authlogic::Session::Existence::SessionInvalidError) { UserSession.create!(:login => ben.login, :password => "badpw") }
|
|
11
|
-
assert UserSession.create!(:login => ben.login, :password => "benrocks")
|
|
11
|
+
assert !UserSession.create!(:login => ben.login, :password => "benrocks").new_session?
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
|
|
@@ -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
|
|
@@ -15,6 +15,8 @@ module SessionTest
|
|
|
15
15
|
class InstanceMethodsTest < ActiveSupport::TestCase
|
|
16
16
|
def test_after_persisting_set_last_request_at
|
|
17
17
|
ben = users(:ben)
|
|
18
|
+
assert !UserSession.create(ben).new_session?
|
|
19
|
+
|
|
18
20
|
set_cookie_for(ben)
|
|
19
21
|
old_last_request_at = ben.last_request_at
|
|
20
22
|
assert UserSession.find
|
|
@@ -22,10 +24,10 @@ module SessionTest
|
|
|
22
24
|
assert ben.last_request_at != old_last_request_at
|
|
23
25
|
end
|
|
24
26
|
|
|
25
|
-
def
|
|
27
|
+
def test_valid_increase_failed_login_count
|
|
26
28
|
ben = users(:ben)
|
|
27
29
|
old_failed_login_count = ben.failed_login_count
|
|
28
|
-
assert
|
|
30
|
+
assert UserSession.create(:login => ben.login, :password => "wrong").new_session?
|
|
29
31
|
ben.reload
|
|
30
32
|
assert_equal old_failed_login_count + 1, ben.failed_login_count
|
|
31
33
|
end
|
|
@@ -34,7 +36,7 @@ module SessionTest
|
|
|
34
36
|
ben = users(:ben)
|
|
35
37
|
|
|
36
38
|
# increase failed login count
|
|
37
|
-
assert
|
|
39
|
+
assert UserSession.create(:login => ben.login, :password => "wrong").new_session?
|
|
38
40
|
ben.reload
|
|
39
41
|
|
|
40
42
|
# grab old values
|
|
@@ -45,10 +47,11 @@ module SessionTest
|
|
|
45
47
|
old_last_login_ip = ben.last_login_ip
|
|
46
48
|
old_current_login_ip = ben.current_login_ip
|
|
47
49
|
|
|
48
|
-
assert UserSession.create(ben)
|
|
49
|
-
|
|
50
|
+
assert !UserSession.create(:login => ben.login, :password => "benrocks").new_session?
|
|
51
|
+
|
|
52
|
+
ben.reload
|
|
50
53
|
assert_equal old_login_count + 1, ben.login_count
|
|
51
|
-
assert_equal
|
|
54
|
+
assert_equal 0, ben.failed_login_count
|
|
52
55
|
assert_equal old_current_login_at, ben.last_login_at
|
|
53
56
|
assert ben.current_login_at != old_current_login_at
|
|
54
57
|
assert_equal old_current_login_ip, ben.last_login_ip
|
|
@@ -31,7 +31,7 @@ module SessionTest
|
|
|
31
31
|
|
|
32
32
|
ben.update_attribute(:active, false)
|
|
33
33
|
assert !session.valid?
|
|
34
|
-
assert session.errors.
|
|
34
|
+
assert session.errors[:base].size > 0
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def test_validate_validate_magic_states_approved
|
|
@@ -42,7 +42,7 @@ module SessionTest
|
|
|
42
42
|
|
|
43
43
|
ben.update_attribute(:approved, false)
|
|
44
44
|
assert !session.valid?
|
|
45
|
-
assert session.errors.
|
|
45
|
+
assert session.errors[:base].size > 0
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
def test_validate_validate_magic_states_confirmed
|
|
@@ -53,7 +53,7 @@ module SessionTest
|
|
|
53
53
|
|
|
54
54
|
ben.update_attribute(:confirmed, false)
|
|
55
55
|
assert !session.valid?
|
|
56
|
-
assert session.errors.
|
|
56
|
+
assert session.errors[:base].size > 0
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
end
|
|
@@ -31,22 +31,22 @@ module SessionTest
|
|
|
31
31
|
assert !session.persisting?
|
|
32
32
|
assert !session.unauthorized_record
|
|
33
33
|
assert !session.record
|
|
34
|
-
assert_nil
|
|
34
|
+
assert_nil controller.session["user_credentials"]
|
|
35
35
|
|
|
36
36
|
set_request_content_type("text/plain")
|
|
37
37
|
assert !session.persisting?
|
|
38
38
|
assert !session.unauthorized_record
|
|
39
|
-
assert_nil
|
|
39
|
+
assert_nil controller.session["user_credentials"]
|
|
40
40
|
|
|
41
41
|
set_request_content_type("application/atom+xml")
|
|
42
42
|
assert session.persisting?
|
|
43
43
|
assert_equal ben, session.record
|
|
44
|
-
assert_nil
|
|
44
|
+
assert_nil controller.session["user_credentials"] # should not persist since this is single access
|
|
45
45
|
|
|
46
46
|
set_request_content_type("application/rss+xml")
|
|
47
47
|
assert session.persisting?
|
|
48
48
|
assert_equal ben, session.unauthorized_record
|
|
49
|
-
assert_nil
|
|
49
|
+
assert_nil controller.session["user_credentials"]
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
end
|
|
@@ -19,6 +19,28 @@ module SessionTest
|
|
|
19
19
|
assert_equal "valid_password?", UserSession.verify_password_method
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
def test_generalize_credentials_error_mesages_set_to_false
|
|
23
|
+
UserSession.generalize_credentials_error_messages false
|
|
24
|
+
assert !UserSession.generalize_credentials_error_messages
|
|
25
|
+
session = UserSession.create(:login => users(:ben).login, :password => "invalud-password")
|
|
26
|
+
assert_equal ["Password is not valid"], session.errors.full_messages
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_generalize_credentials_error_messages_set_to_true
|
|
30
|
+
UserSession.generalize_credentials_error_messages true
|
|
31
|
+
assert UserSession.generalize_credentials_error_messages
|
|
32
|
+
session = UserSession.create(:login => users(:ben).login, :password => "invalud-password")
|
|
33
|
+
assert_equal ["Login/Password combination is not valid"], session.errors.full_messages
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_generalize_credentials_error_messages_set_to_string
|
|
37
|
+
UserSession.generalize_credentials_error_messages= "Custom Error Message"
|
|
38
|
+
assert UserSession.generalize_credentials_error_messages
|
|
39
|
+
session = UserSession.create(:login => users(:ben).login, :password => "invalud-password")
|
|
40
|
+
assert_equal ["Custom Error Message"], session.errors.full_messages
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
22
44
|
def test_login_field
|
|
23
45
|
UserSession.configured_password_methods = false
|
|
24
46
|
UserSession.login_field = :saweet
|
|
@@ -81,4 +103,4 @@ module SessionTest
|
|
|
81
103
|
end
|
|
82
104
|
end
|
|
83
105
|
end
|
|
84
|
-
end
|
|
106
|
+
end
|
|
@@ -18,41 +18,41 @@ module SessionTest
|
|
|
18
18
|
set_session_for(ben)
|
|
19
19
|
assert session = UserSession.find
|
|
20
20
|
assert_equal ben, session.record
|
|
21
|
-
assert_equal ben.persistence_token,
|
|
21
|
+
assert_equal ben.persistence_token, controller.session["user_credentials"]
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def test_persist_persist_by_session_with_token_only
|
|
25
25
|
ben = users(:ben)
|
|
26
26
|
set_session_for(ben)
|
|
27
|
-
|
|
27
|
+
controller.session["user_credentials_id"] = nil
|
|
28
28
|
assert session = UserSession.find
|
|
29
29
|
assert_equal ben, session.record
|
|
30
|
-
assert_equal ben.persistence_token,
|
|
30
|
+
assert_equal ben.persistence_token, controller.session["user_credentials"]
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def test_after_save_update_session
|
|
34
34
|
ben = users(:ben)
|
|
35
35
|
session = UserSession.new(ben)
|
|
36
|
-
assert
|
|
36
|
+
assert controller.session["user_credentials"].blank?
|
|
37
37
|
assert session.save
|
|
38
|
-
assert_equal ben.persistence_token,
|
|
38
|
+
assert_equal ben.persistence_token, controller.session["user_credentials"]
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
def test_after_destroy_update_session
|
|
42
42
|
ben = users(:ben)
|
|
43
43
|
set_session_for(ben)
|
|
44
|
-
assert_equal ben.persistence_token,
|
|
44
|
+
assert_equal ben.persistence_token, controller.session["user_credentials"]
|
|
45
45
|
assert session = UserSession.find
|
|
46
46
|
assert session.destroy
|
|
47
|
-
assert
|
|
47
|
+
assert controller.session["user_credentials"].blank?
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
def test_after_persisting_update_session
|
|
51
51
|
ben = users(:ben)
|
|
52
52
|
set_cookie_for(ben)
|
|
53
|
-
assert
|
|
53
|
+
assert controller.session["user_credentials"].blank?
|
|
54
54
|
assert UserSession.find
|
|
55
|
-
assert_equal ben.persistence_token,
|
|
55
|
+
assert_equal ben.persistence_token, controller.session["user_credentials"]
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
end
|
|
@@ -25,7 +25,7 @@ module SessionTest
|
|
|
25
25
|
assert session.stale?
|
|
26
26
|
assert_equal ben, session.stale_record
|
|
27
27
|
assert_nil session.record
|
|
28
|
-
assert_nil
|
|
28
|
+
assert_nil controller.session["user_credentials_id"]
|
|
29
29
|
|
|
30
30
|
set_session_for(ben)
|
|
31
31
|
|
|
@@ -38,6 +38,15 @@ module SessionTest
|
|
|
38
38
|
|
|
39
39
|
UserSession.logout_on_timeout = false
|
|
40
40
|
end
|
|
41
|
+
|
|
42
|
+
def test_successful_login
|
|
43
|
+
UserSession.logout_on_timeout = true
|
|
44
|
+
ben = users(:ben)
|
|
45
|
+
assert UserSession.create(:login => ben.login, :password => "benrocks")
|
|
46
|
+
assert session = UserSession.find
|
|
47
|
+
assert_equal ben, session.record
|
|
48
|
+
UserSession.logout_on_timeout = false
|
|
49
|
+
end
|
|
41
50
|
end
|
|
42
51
|
end
|
|
43
52
|
end
|