kschrader-authlogic 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 +346 -0
- data/LICENSE +20 -0
- data/README.rdoc +245 -0
- data/Rakefile +49 -0
- data/VERSION.yml +4 -0
- data/authlogic.gemspec +205 -0
- data/generators/session/session_generator.rb +9 -0
- data/generators/session/templates/session.rb +2 -0
- data/init.rb +1 -0
- data/lib/authlogic.rb +55 -0
- data/lib/authlogic/acts_as_authentic/base.rb +112 -0
- data/lib/authlogic/acts_as_authentic/email.rb +110 -0
- data/lib/authlogic/acts_as_authentic/logged_in_status.rb +60 -0
- data/lib/authlogic/acts_as_authentic/login.rb +141 -0
- data/lib/authlogic/acts_as_authentic/magic_columns.rb +24 -0
- data/lib/authlogic/acts_as_authentic/password.rb +344 -0
- data/lib/authlogic/acts_as_authentic/perishable_token.rb +105 -0
- data/lib/authlogic/acts_as_authentic/persistence_token.rb +68 -0
- data/lib/authlogic/acts_as_authentic/restful_authentication.rb +61 -0
- data/lib/authlogic/acts_as_authentic/session_maintenance.rb +139 -0
- data/lib/authlogic/acts_as_authentic/single_access_token.rb +65 -0
- data/lib/authlogic/acts_as_authentic/validations_scope.rb +32 -0
- data/lib/authlogic/authenticates_many/association.rb +42 -0
- data/lib/authlogic/authenticates_many/base.rb +55 -0
- data/lib/authlogic/controller_adapters/abstract_adapter.rb +67 -0
- data/lib/authlogic/controller_adapters/merb_adapter.rb +30 -0
- data/lib/authlogic/controller_adapters/rails_adapter.rb +48 -0
- data/lib/authlogic/crypto_providers/aes256.rb +43 -0
- data/lib/authlogic/crypto_providers/bcrypt.rb +89 -0
- data/lib/authlogic/crypto_providers/md5.rb +34 -0
- data/lib/authlogic/crypto_providers/sha1.rb +35 -0
- data/lib/authlogic/crypto_providers/sha512.rb +50 -0
- data/lib/authlogic/i18n.rb +63 -0
- data/lib/authlogic/random.rb +33 -0
- data/lib/authlogic/regex.rb +25 -0
- data/lib/authlogic/session/activation.rb +58 -0
- data/lib/authlogic/session/active_record_trickery.rb +55 -0
- data/lib/authlogic/session/base.rb +37 -0
- data/lib/authlogic/session/brute_force_protection.rb +92 -0
- data/lib/authlogic/session/callbacks.rb +87 -0
- data/lib/authlogic/session/cookies.rb +130 -0
- data/lib/authlogic/session/existence.rb +93 -0
- data/lib/authlogic/session/foundation.rb +63 -0
- data/lib/authlogic/session/http_auth.rb +58 -0
- data/lib/authlogic/session/id.rb +41 -0
- data/lib/authlogic/session/klass.rb +75 -0
- data/lib/authlogic/session/magic_columns.rb +94 -0
- data/lib/authlogic/session/magic_states.rb +58 -0
- data/lib/authlogic/session/params.rb +100 -0
- data/lib/authlogic/session/password.rb +231 -0
- data/lib/authlogic/session/perishable_token.rb +18 -0
- data/lib/authlogic/session/persistence.rb +70 -0
- data/lib/authlogic/session/priority_record.rb +34 -0
- data/lib/authlogic/session/scopes.rb +101 -0
- data/lib/authlogic/session/session.rb +60 -0
- data/lib/authlogic/session/timeout.rb +82 -0
- data/lib/authlogic/session/unauthorized_record.rb +50 -0
- data/lib/authlogic/session/validation.rb +80 -0
- data/lib/authlogic/test_case.rb +114 -0
- 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/rails/init.rb +1 -0
- data/shoulda_macros/authlogic.rb +13 -0
- data/test/acts_as_authentic_test/base_test.rb +18 -0
- data/test/acts_as_authentic_test/email_test.rb +97 -0
- data/test/acts_as_authentic_test/logged_in_status_test.rb +36 -0
- data/test/acts_as_authentic_test/login_test.rb +109 -0
- data/test/acts_as_authentic_test/magic_columns_test.rb +27 -0
- data/test/acts_as_authentic_test/password_test.rb +236 -0
- data/test/acts_as_authentic_test/perishable_token_test.rb +90 -0
- data/test/acts_as_authentic_test/persistence_token_test.rb +55 -0
- data/test/acts_as_authentic_test/restful_authentication_test.rb +40 -0
- data/test/acts_as_authentic_test/session_maintenance_test.rb +84 -0
- data/test/acts_as_authentic_test/single_access_test.rb +44 -0
- data/test/authenticates_many_test.rb +16 -0
- data/test/crypto_provider_test/aes256_test.rb +14 -0
- data/test/crypto_provider_test/bcrypt_test.rb +14 -0
- data/test/crypto_provider_test/sha1_test.rb +23 -0
- data/test/crypto_provider_test/sha512_test.rb +14 -0
- data/test/fixtures/companies.yml +5 -0
- data/test/fixtures/employees.yml +17 -0
- data/test/fixtures/projects.yml +3 -0
- data/test/fixtures/users.yml +24 -0
- data/test/libs/affiliate.rb +7 -0
- data/test/libs/company.rb +6 -0
- data/test/libs/employee.rb +7 -0
- data/test/libs/employee_session.rb +2 -0
- data/test/libs/ldaper.rb +3 -0
- data/test/libs/ordered_hash.rb +9 -0
- data/test/libs/project.rb +3 -0
- data/test/libs/user.rb +5 -0
- data/test/libs/user_session.rb +2 -0
- data/test/random_test.rb +49 -0
- data/test/session_test/activation_test.rb +43 -0
- data/test/session_test/active_record_trickery_test.rb +27 -0
- data/test/session_test/brute_force_protection_test.rb +101 -0
- data/test/session_test/callbacks_test.rb +6 -0
- data/test/session_test/cookies_test.rb +107 -0
- data/test/session_test/credentials_test.rb +0 -0
- data/test/session_test/existence_test.rb +64 -0
- data/test/session_test/http_auth_test.rb +28 -0
- data/test/session_test/id_test.rb +17 -0
- data/test/session_test/klass_test.rb +35 -0
- data/test/session_test/magic_columns_test.rb +62 -0
- data/test/session_test/magic_states_test.rb +60 -0
- data/test/session_test/params_test.rb +53 -0
- data/test/session_test/password_test.rb +106 -0
- data/test/session_test/perishability_test.rb +15 -0
- data/test/session_test/persistence_test.rb +21 -0
- data/test/session_test/scopes_test.rb +60 -0
- data/test/session_test/session_test.rb +59 -0
- data/test/session_test/timeout_test.rb +52 -0
- data/test/session_test/unauthorized_record_test.rb +13 -0
- data/test/session_test/validation_test.rb +23 -0
- data/test/test_helper.rb +174 -0
- metadata +229 -0
@@ -0,0 +1,53 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module SessionTest
|
4
|
+
module ParamsTest
|
5
|
+
class ConfigTest < ActiveSupport::TestCase
|
6
|
+
def test_params_key
|
7
|
+
UserSession.params_key = "my_params_key"
|
8
|
+
assert_equal "my_params_key", UserSession.params_key
|
9
|
+
|
10
|
+
UserSession.params_key "user_credentials"
|
11
|
+
assert_equal "user_credentials", UserSession.params_key
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_single_access_allowed_request_types
|
15
|
+
UserSession.single_access_allowed_request_types = ["my request type"]
|
16
|
+
assert_equal ["my request type"], UserSession.single_access_allowed_request_types
|
17
|
+
|
18
|
+
UserSession.single_access_allowed_request_types ["application/rss+xml", "application/atom+xml"]
|
19
|
+
assert_equal ["application/rss+xml", "application/atom+xml"], UserSession.single_access_allowed_request_types
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class InstanceMethodsTest < ActiveSupport::TestCase
|
24
|
+
def test_persist_persist_by_params
|
25
|
+
ben = users(:ben)
|
26
|
+
session = UserSession.new
|
27
|
+
|
28
|
+
assert !session.persisting?
|
29
|
+
set_params_for(ben)
|
30
|
+
|
31
|
+
assert !session.persisting?
|
32
|
+
assert !session.unauthorized_record
|
33
|
+
assert !session.record
|
34
|
+
assert_nil controller.session["user_credentials"]
|
35
|
+
|
36
|
+
set_request_content_type("text/plain")
|
37
|
+
assert !session.persisting?
|
38
|
+
assert !session.unauthorized_record
|
39
|
+
assert_nil controller.session["user_credentials"]
|
40
|
+
|
41
|
+
set_request_content_type("application/atom+xml")
|
42
|
+
assert session.persisting?
|
43
|
+
assert_equal ben, session.record
|
44
|
+
assert_nil controller.session["user_credentials"] # should not persist since this is single access
|
45
|
+
|
46
|
+
set_request_content_type("application/rss+xml")
|
47
|
+
assert session.persisting?
|
48
|
+
assert_equal ben, session.unauthorized_record
|
49
|
+
assert_nil controller.session["user_credentials"]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module SessionTest
|
4
|
+
module PasswordTest
|
5
|
+
class ConfigTest < ActiveSupport::TestCase
|
6
|
+
def test_find_by_login_method
|
7
|
+
UserSession.find_by_login_method = "my_login_method"
|
8
|
+
assert_equal "my_login_method", UserSession.find_by_login_method
|
9
|
+
|
10
|
+
UserSession.find_by_login_method "find_by_login"
|
11
|
+
assert_equal "find_by_login", UserSession.find_by_login_method
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_verify_password_method
|
15
|
+
UserSession.verify_password_method = "my_login_method"
|
16
|
+
assert_equal "my_login_method", UserSession.verify_password_method
|
17
|
+
|
18
|
+
UserSession.verify_password_method "valid_password?"
|
19
|
+
assert_equal "valid_password?", UserSession.verify_password_method
|
20
|
+
end
|
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
|
+
|
44
|
+
def test_login_field
|
45
|
+
UserSession.configured_password_methods = false
|
46
|
+
UserSession.login_field = :saweet
|
47
|
+
assert_equal :saweet, UserSession.login_field
|
48
|
+
session = UserSession.new
|
49
|
+
assert session.respond_to?(:saweet)
|
50
|
+
|
51
|
+
UserSession.login_field :login
|
52
|
+
assert_equal :login, UserSession.login_field
|
53
|
+
session = UserSession.new
|
54
|
+
assert session.respond_to?(:login)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_password_field
|
58
|
+
UserSession.configured_password_methods = false
|
59
|
+
UserSession.password_field = :saweet
|
60
|
+
assert_equal :saweet, UserSession.password_field
|
61
|
+
session = UserSession.new
|
62
|
+
assert session.respond_to?(:saweet)
|
63
|
+
|
64
|
+
UserSession.password_field :password
|
65
|
+
assert_equal :password, UserSession.password_field
|
66
|
+
session = UserSession.new
|
67
|
+
assert session.respond_to?(:password)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class InstanceMethodsTest < ActiveSupport::TestCase
|
72
|
+
def test_init
|
73
|
+
session = UserSession.new
|
74
|
+
assert session.respond_to?(:login)
|
75
|
+
assert session.respond_to?(:login=)
|
76
|
+
assert session.respond_to?(:password)
|
77
|
+
assert session.respond_to?(:password=)
|
78
|
+
assert session.respond_to?(:protected_password, true)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_credentials
|
82
|
+
session = UserSession.new
|
83
|
+
session.credentials = {:login => "login", :password => "pass"}
|
84
|
+
assert_equal "login", session.login
|
85
|
+
assert_nil session.password
|
86
|
+
assert_equal "pass", session.send(:protected_password)
|
87
|
+
assert_equal({:password => "<protected>", :login => "login"}, session.credentials)
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_credentials_are_params_safe
|
91
|
+
session = UserSession.new
|
92
|
+
assert_nothing_raised { session.credentials = {:hacker_method => "error!"} }
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_save_with_credentials
|
96
|
+
ben = users(:ben)
|
97
|
+
session = UserSession.new(:login => ben.login, :password => "benrocks")
|
98
|
+
assert session.save
|
99
|
+
assert !session.new_session?
|
100
|
+
assert_equal 1, session.record.login_count
|
101
|
+
assert Time.zone.now >= session.record.current_login_at
|
102
|
+
assert_equal "1.1.1.1", session.record.current_login_ip
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module SessionTest
|
4
|
+
class PerishabilityTest < ActiveSupport::TestCase
|
5
|
+
def test_after_save
|
6
|
+
ben = users(:ben)
|
7
|
+
old_perishable_token = ben.perishable_token
|
8
|
+
session = UserSession.create(ben)
|
9
|
+
assert_not_equal old_perishable_token, ben.perishable_token
|
10
|
+
|
11
|
+
drew = employees(:drew)
|
12
|
+
assert UserSession.create(drew)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module SessionTest
|
4
|
+
class PersistenceTest < ActiveSupport::TestCase
|
5
|
+
def test_find
|
6
|
+
ben = users(:ben)
|
7
|
+
assert !UserSession.find
|
8
|
+
http_basic_auth_for(ben) { assert UserSession.find }
|
9
|
+
set_cookie_for(ben)
|
10
|
+
assert UserSession.find
|
11
|
+
unset_cookie
|
12
|
+
set_session_for(ben)
|
13
|
+
session = UserSession.find
|
14
|
+
assert session
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_persisting
|
18
|
+
# tested thoroughly in test_find
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module SessionTest
|
4
|
+
class ScopesTest < ActiveSupport::TestCase
|
5
|
+
def test_scope_method
|
6
|
+
assert_nil Authlogic::Session::Base.scope
|
7
|
+
|
8
|
+
thread1 = Thread.new do
|
9
|
+
scope = {:id => :scope1}
|
10
|
+
Authlogic::Session::Base.send(:scope=, scope)
|
11
|
+
assert_equal scope, Authlogic::Session::Base.scope
|
12
|
+
end
|
13
|
+
thread1.join
|
14
|
+
|
15
|
+
assert_nil Authlogic::Session::Base.scope
|
16
|
+
|
17
|
+
thread2 = Thread.new do
|
18
|
+
scope = {:id => :scope2}
|
19
|
+
Authlogic::Session::Base.send(:scope=, scope)
|
20
|
+
assert_equal scope, Authlogic::Session::Base.scope
|
21
|
+
end
|
22
|
+
thread2.join
|
23
|
+
|
24
|
+
assert_nil Authlogic::Session::Base.scope
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_with_scope_method
|
28
|
+
assert_raise(ArgumentError) { UserSession.with_scope }
|
29
|
+
|
30
|
+
UserSession.with_scope(:find_options => {:conditions => "awesome = 1"}, :id => "some_id") do
|
31
|
+
assert_equal({:find_options => {:conditions => "awesome = 1"}, :id => "some_id"}, UserSession.scope)
|
32
|
+
end
|
33
|
+
|
34
|
+
assert_nil UserSession.scope
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_initialize
|
38
|
+
UserSession.with_scope(:find_options => {:conditions => "awesome = 1"}, :id => "some_id") do
|
39
|
+
session = UserSession.new
|
40
|
+
assert_equal({:find_options => {:conditions => "awesome = 1"}, :id => "some_id"}, session.scope)
|
41
|
+
session.id = :another_id
|
42
|
+
assert_equal "another_id_some_id_test", session.send(:build_key, "test")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_search_for_record_with_scopes
|
47
|
+
binary_logic = companies(:binary_logic)
|
48
|
+
ben = users(:ben)
|
49
|
+
zack = users(:zack)
|
50
|
+
|
51
|
+
session = UserSession.new
|
52
|
+
assert_equal zack, session.send(:search_for_record, "find_by_login", zack.login)
|
53
|
+
|
54
|
+
session.scope = {:find_options => {:conditions => ["company_id = ?", binary_logic.id]}}
|
55
|
+
assert_nil session.send(:search_for_record, "find_by_login", zack.login)
|
56
|
+
|
57
|
+
assert_equal ben, session.send(:search_for_record, "find_by_login", ben.login)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module SessionTest
|
4
|
+
module SessionTest
|
5
|
+
class ConfigTest < ActiveSupport::TestCase
|
6
|
+
def test_session_key
|
7
|
+
UserSession.session_key = "my_session_key"
|
8
|
+
assert_equal "my_session_key", UserSession.session_key
|
9
|
+
|
10
|
+
UserSession.session_key "user_credentials"
|
11
|
+
assert_equal "user_credentials", UserSession.session_key
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class InstanceMethodsTest < ActiveSupport::TestCase
|
16
|
+
def test_persist_persist_by_session
|
17
|
+
ben = users(:ben)
|
18
|
+
set_session_for(ben)
|
19
|
+
assert session = UserSession.find
|
20
|
+
assert_equal ben, session.record
|
21
|
+
assert_equal ben.persistence_token, controller.session["user_credentials"]
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_persist_persist_by_session_with_token_only
|
25
|
+
ben = users(:ben)
|
26
|
+
set_session_for(ben)
|
27
|
+
controller.session["user_credentials_id"] = nil
|
28
|
+
assert session = UserSession.find
|
29
|
+
assert_equal ben, session.record
|
30
|
+
assert_equal ben.persistence_token, controller.session["user_credentials"]
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_after_save_update_session
|
34
|
+
ben = users(:ben)
|
35
|
+
session = UserSession.new(ben)
|
36
|
+
assert controller.session["user_credentials"].blank?
|
37
|
+
assert session.save
|
38
|
+
assert_equal ben.persistence_token, controller.session["user_credentials"]
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_after_destroy_update_session
|
42
|
+
ben = users(:ben)
|
43
|
+
set_session_for(ben)
|
44
|
+
assert_equal ben.persistence_token, controller.session["user_credentials"]
|
45
|
+
assert session = UserSession.find
|
46
|
+
assert session.destroy
|
47
|
+
assert controller.session["user_credentials"].blank?
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_after_persisting_update_session
|
51
|
+
ben = users(:ben)
|
52
|
+
set_cookie_for(ben)
|
53
|
+
assert controller.session["user_credentials"].blank?
|
54
|
+
assert UserSession.find
|
55
|
+
assert_equal ben.persistence_token, controller.session["user_credentials"]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module SessionTest
|
4
|
+
module TimeoutTest
|
5
|
+
class ConfigTest < ActiveSupport::TestCase
|
6
|
+
def test_logout_on_timeout
|
7
|
+
UserSession.logout_on_timeout = true
|
8
|
+
assert UserSession.logout_on_timeout
|
9
|
+
|
10
|
+
UserSession.logout_on_timeout false
|
11
|
+
assert !UserSession.logout_on_timeout
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class InstanceMethods < ActiveSupport::TestCase
|
16
|
+
def test_stale_state
|
17
|
+
UserSession.logout_on_timeout = true
|
18
|
+
ben = users(:ben)
|
19
|
+
ben.last_request_at = 3.years.ago
|
20
|
+
ben.save
|
21
|
+
set_session_for(ben)
|
22
|
+
|
23
|
+
session = UserSession.new
|
24
|
+
assert session.persisting?
|
25
|
+
assert session.stale?
|
26
|
+
assert_equal ben, session.stale_record
|
27
|
+
assert_nil session.record
|
28
|
+
assert_nil controller.session["user_credentials_id"]
|
29
|
+
|
30
|
+
set_session_for(ben)
|
31
|
+
|
32
|
+
ben.last_request_at = Time.zone.now
|
33
|
+
ben.save
|
34
|
+
|
35
|
+
assert session.persisting?
|
36
|
+
assert !session.stale?
|
37
|
+
assert_nil session.stale_record
|
38
|
+
|
39
|
+
UserSession.logout_on_timeout = false
|
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
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module SessionTest
|
4
|
+
class UnauthorizedRecordTest < ActiveSupport::TestCase
|
5
|
+
def test_credentials
|
6
|
+
ben = users(:ben)
|
7
|
+
session = UserSession.new
|
8
|
+
session.credentials = [ben]
|
9
|
+
assert_equal ben, session.unauthorized_record
|
10
|
+
assert_equal({:unauthorized_record => "<protected>"}, session.credentials)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module SessionTest
|
4
|
+
class ValidationTest < ActiveSupport::TestCase
|
5
|
+
def test_errors
|
6
|
+
session = UserSession.new
|
7
|
+
assert session.errors.is_a?(Authlogic::Session::Validation::Errors)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_valid
|
11
|
+
session = UserSession.new
|
12
|
+
assert !session.valid?
|
13
|
+
assert_nil session.record
|
14
|
+
assert session.errors.count > 0
|
15
|
+
|
16
|
+
ben = users(:ben)
|
17
|
+
session.unauthorized_record = ben
|
18
|
+
assert session.valid?
|
19
|
+
assert_equal ben, session.attempted_record
|
20
|
+
assert session.errors.empty?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "rubygems"
|
3
|
+
require "ruby-debug"
|
4
|
+
require "active_record"
|
5
|
+
require "active_record/fixtures"
|
6
|
+
|
7
|
+
# A temporary fix to bring active record errors up to speed with rails edge.
|
8
|
+
# I need to remove this once the new gem is released. This is only here so my tests pass.
|
9
|
+
class ActiveRecord::Errors
|
10
|
+
def [](key)
|
11
|
+
value = on(key)
|
12
|
+
value.is_a?(Array) ? value : [value].compact
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
ActiveRecord::Schema.verbose = false
|
18
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
|
19
|
+
ActiveRecord::Base.configurations = true
|
20
|
+
ActiveRecord::Schema.define(:version => 1) do
|
21
|
+
create_table :companies do |t|
|
22
|
+
t.datetime :created_at
|
23
|
+
t.datetime :updated_at
|
24
|
+
t.string :name
|
25
|
+
t.boolean :active
|
26
|
+
end
|
27
|
+
|
28
|
+
create_table :projects do |t|
|
29
|
+
t.datetime :created_at
|
30
|
+
t.datetime :updated_at
|
31
|
+
t.string :name
|
32
|
+
end
|
33
|
+
|
34
|
+
create_table :projects_users, :id => false do |t|
|
35
|
+
t.integer :project_id
|
36
|
+
t.integer :user_id
|
37
|
+
end
|
38
|
+
|
39
|
+
create_table :users do |t|
|
40
|
+
t.datetime :created_at
|
41
|
+
t.datetime :updated_at
|
42
|
+
t.integer :lock_version, :default => 0
|
43
|
+
t.integer :company_id
|
44
|
+
t.string :login
|
45
|
+
t.string :crypted_password
|
46
|
+
t.string :password_salt
|
47
|
+
t.string :persistence_token
|
48
|
+
t.string :single_access_token
|
49
|
+
t.string :perishable_token
|
50
|
+
t.string :email
|
51
|
+
t.string :first_name
|
52
|
+
t.string :last_name
|
53
|
+
t.integer :login_count, :default => 0, :null => false
|
54
|
+
t.integer :failed_login_count, :default => 0, :null => false
|
55
|
+
t.datetime :last_request_at
|
56
|
+
t.datetime :current_login_at
|
57
|
+
t.datetime :last_login_at
|
58
|
+
t.string :current_login_ip
|
59
|
+
t.string :last_login_ip
|
60
|
+
t.boolean :active, :default => true
|
61
|
+
t.boolean :approved, :default => true
|
62
|
+
t.boolean :confirmed, :default => true
|
63
|
+
end
|
64
|
+
|
65
|
+
create_table :employees do |t|
|
66
|
+
t.datetime :created_at
|
67
|
+
t.datetime :updated_at
|
68
|
+
t.integer :company_id
|
69
|
+
t.string :email
|
70
|
+
t.string :crypted_password
|
71
|
+
t.string :password_salt
|
72
|
+
t.string :persistence_token
|
73
|
+
t.string :first_name
|
74
|
+
t.string :last_name
|
75
|
+
t.integer :login_count, :default => 0, :null => false
|
76
|
+
t.datetime :last_request_at
|
77
|
+
t.datetime :current_login_at
|
78
|
+
t.datetime :last_login_at
|
79
|
+
t.string :current_login_ip
|
80
|
+
t.string :last_login_ip
|
81
|
+
end
|
82
|
+
|
83
|
+
create_table :affiliates do |t|
|
84
|
+
t.datetime :created_at
|
85
|
+
t.datetime :updated_at
|
86
|
+
t.integer :company_id
|
87
|
+
t.string :username
|
88
|
+
t.string :pw_hash
|
89
|
+
t.string :pw_salt
|
90
|
+
t.string :persistence_token
|
91
|
+
end
|
92
|
+
|
93
|
+
create_table :ldapers do |t|
|
94
|
+
t.datetime :created_at
|
95
|
+
t.datetime :updated_at
|
96
|
+
t.string :ldap_login
|
97
|
+
t.string :persistence_token
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
require File.dirname(__FILE__) + '/../lib/authlogic' unless defined?(Authlogic)
|
102
|
+
require File.dirname(__FILE__) + '/../lib/authlogic/test_case'
|
103
|
+
require File.dirname(__FILE__) + '/libs/project'
|
104
|
+
require File.dirname(__FILE__) + '/libs/affiliate'
|
105
|
+
require File.dirname(__FILE__) + '/libs/employee'
|
106
|
+
require File.dirname(__FILE__) + '/libs/employee_session'
|
107
|
+
require File.dirname(__FILE__) + '/libs/ldaper'
|
108
|
+
require File.dirname(__FILE__) + '/libs/user'
|
109
|
+
require File.dirname(__FILE__) + '/libs/user_session'
|
110
|
+
require File.dirname(__FILE__) + '/libs/company'
|
111
|
+
|
112
|
+
Authlogic::CryptoProviders::AES256.key = "myafdsfddddddddddddddddddddddddddddddddddddddddddddddd"
|
113
|
+
|
114
|
+
class ActiveSupport::TestCase
|
115
|
+
include ActiveRecord::TestFixtures
|
116
|
+
self.fixture_path = File.dirname(__FILE__) + "/fixtures"
|
117
|
+
self.use_transactional_fixtures = false
|
118
|
+
self.use_instantiated_fixtures = false
|
119
|
+
self.pre_loaded_fixtures = false
|
120
|
+
fixtures :all
|
121
|
+
setup :activate_authlogic
|
122
|
+
|
123
|
+
private
|
124
|
+
def password_for(user)
|
125
|
+
case user
|
126
|
+
when users(:ben)
|
127
|
+
"benrocks"
|
128
|
+
when users(:zack)
|
129
|
+
"zackrocks"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def http_basic_auth_for(user = nil, &block)
|
134
|
+
unless user.blank?
|
135
|
+
controller.http_user = user.login
|
136
|
+
controller.http_password = password_for(user)
|
137
|
+
end
|
138
|
+
yield
|
139
|
+
controller.http_user = controller.http_password = nil
|
140
|
+
end
|
141
|
+
|
142
|
+
def set_cookie_for(user, id = nil)
|
143
|
+
controller.cookies["user_credentials"] = {:value => user.persistence_token, :expires => nil}
|
144
|
+
end
|
145
|
+
|
146
|
+
def unset_cookie
|
147
|
+
controller.cookies["user_credentials"] = nil
|
148
|
+
end
|
149
|
+
|
150
|
+
def set_params_for(user, id = nil)
|
151
|
+
controller.params["user_credentials"] = user.single_access_token
|
152
|
+
end
|
153
|
+
|
154
|
+
def unset_params
|
155
|
+
controller.params["user_credentials"] = nil
|
156
|
+
end
|
157
|
+
|
158
|
+
def set_request_content_type(type)
|
159
|
+
controller.request_content_type = type
|
160
|
+
end
|
161
|
+
|
162
|
+
def unset_request_content_type
|
163
|
+
controller.request_content_type = nil
|
164
|
+
end
|
165
|
+
|
166
|
+
def set_session_for(user, id = nil)
|
167
|
+
controller.session["user_credentials"] = user.persistence_token
|
168
|
+
controller.session["user_credentials_id"] = user.id
|
169
|
+
end
|
170
|
+
|
171
|
+
def unset_session
|
172
|
+
controller.session["user_credentials"] = controller.session["user_credentials_id"] = nil
|
173
|
+
end
|
174
|
+
end
|