sorcery 0.1.4 → 0.3.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/Gemfile +4 -2
- data/Gemfile.lock +16 -13
- data/README.rdoc +111 -78
- data/Rakefile +5 -0
- data/VERSION +1 -1
- data/lib/generators/sorcery_migration/sorcery_migration_generator.rb +24 -0
- data/lib/generators/sorcery_migration/templates/activity_logging.rb +17 -0
- data/lib/generators/sorcery_migration/templates/brute_force_protection.rb +11 -0
- data/lib/generators/sorcery_migration/templates/core.rb +16 -0
- data/lib/generators/sorcery_migration/templates/oauth.rb +14 -0
- data/lib/generators/sorcery_migration/templates/remember_me.rb +15 -0
- data/lib/generators/sorcery_migration/templates/reset_password.rb +13 -0
- data/lib/generators/sorcery_migration/templates/user_activation.rb +17 -0
- data/lib/sorcery/controller/adapters/sinatra.rb +97 -0
- data/lib/sorcery/controller/submodules/activity_logging.rb +20 -7
- data/lib/sorcery/controller/submodules/brute_force_protection.rb +9 -2
- data/lib/sorcery/controller/submodules/http_basic_auth.rb +18 -9
- data/lib/sorcery/controller/submodules/oauth/oauth1.rb +33 -0
- data/lib/sorcery/controller/submodules/oauth/oauth2.rb +24 -0
- data/lib/sorcery/controller/submodules/oauth/providers/facebook.rb +64 -0
- data/lib/sorcery/controller/submodules/oauth/providers/twitter.rb +61 -0
- data/lib/sorcery/controller/submodules/oauth.rb +95 -0
- data/lib/sorcery/controller/submodules/remember_me.rb +14 -5
- data/lib/sorcery/controller/submodules/session_timeout.rb +6 -1
- data/lib/sorcery/controller.rb +29 -17
- data/lib/sorcery/engine.rb +9 -2
- data/lib/sorcery/model/submodules/activity_logging.rb +13 -8
- data/lib/sorcery/model/submodules/brute_force_protection.rb +11 -8
- data/lib/sorcery/model/submodules/oauth.rb +53 -0
- data/lib/sorcery/model/submodules/remember_me.rb +5 -3
- data/lib/sorcery/model/submodules/reset_password.rb +16 -13
- data/lib/sorcery/model/submodules/user_activation.rb +38 -19
- data/lib/sorcery/model/temporary_token.rb +22 -0
- data/lib/sorcery/model.rb +10 -3
- data/lib/sorcery/sinatra.rb +14 -0
- data/lib/sorcery/test_helpers/rails.rb +57 -0
- data/lib/sorcery/test_helpers/sinatra.rb +131 -0
- data/lib/sorcery/test_helpers.rb +40 -0
- data/lib/sorcery.rb +20 -0
- data/sorcery.gemspec +144 -41
- data/spec/Gemfile +3 -2
- data/spec/Gemfile.lock +15 -2
- data/spec/rails3/app_root/.rspec +1 -0
- data/spec/rails3/{Gemfile → app_root/Gemfile} +4 -4
- data/spec/rails3/{Gemfile.lock → app_root/Gemfile.lock} +23 -3
- data/spec/rails3/app_root/app/controllers/application_controller.rb +42 -1
- data/spec/rails3/app_root/app/models/authentication.rb +3 -0
- data/spec/rails3/app_root/app/models/user.rb +4 -1
- data/spec/rails3/app_root/config/application.rb +1 -3
- data/spec/rails3/app_root/config/routes.rb +1 -10
- data/spec/rails3/app_root/db/migrate/activation/20101224223622_add_activation_to_users.rb +6 -4
- data/spec/rails3/app_root/db/migrate/core/20101224223620_create_users.rb +4 -4
- data/spec/rails3/app_root/db/migrate/oauth/20101224223628_create_authentications.rb +14 -0
- data/spec/rails3/{controller_activity_logging_spec.rb → app_root/spec/controller_activity_logging_spec.rb} +13 -13
- data/spec/rails3/{controller_brute_force_protection_spec.rb → app_root/spec/controller_brute_force_protection_spec.rb} +16 -6
- data/spec/rails3/{controller_http_basic_auth_spec.rb → app_root/spec/controller_http_basic_auth_spec.rb} +3 -3
- data/spec/rails3/app_root/spec/controller_oauth2_spec.rb +119 -0
- data/spec/rails3/app_root/spec/controller_oauth_spec.rb +122 -0
- data/spec/rails3/{controller_remember_me_spec.rb → app_root/spec/controller_remember_me_spec.rb} +4 -4
- data/spec/rails3/{controller_session_timeout_spec.rb → app_root/spec/controller_session_timeout_spec.rb} +6 -6
- data/spec/rails3/{controller_spec.rb → app_root/spec/controller_spec.rb} +20 -13
- data/spec/rails3/app_root/spec/spec_helper.orig.rb +27 -0
- data/spec/rails3/app_root/spec/spec_helper.rb +62 -0
- data/spec/rails3/{user_activation_spec.rb → app_root/spec/user_activation_spec.rb} +60 -20
- data/spec/rails3/{user_activity_logging_spec.rb → app_root/spec/user_activity_logging_spec.rb} +4 -4
- data/spec/rails3/{user_brute_force_protection_spec.rb → app_root/spec/user_brute_force_protection_spec.rb} +7 -7
- data/spec/rails3/app_root/spec/user_oauth_spec.rb +39 -0
- data/spec/rails3/{user_remember_me_spec.rb → app_root/spec/user_remember_me_spec.rb} +4 -4
- data/spec/rails3/{user_reset_password_spec.rb → app_root/spec/user_reset_password_spec.rb} +21 -41
- data/spec/rails3/app_root/spec/user_spec.rb +317 -0
- data/spec/sinatra/Gemfile +12 -0
- data/spec/sinatra/Gemfile.lock +134 -0
- data/spec/sinatra/Rakefile +10 -0
- data/spec/sinatra/authentication.rb +3 -0
- data/spec/sinatra/db/migrate/activation/20101224223622_add_activation_to_users.rb +17 -0
- data/spec/sinatra/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +17 -0
- data/spec/sinatra/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +11 -0
- data/spec/sinatra/db/migrate/core/20101224223620_create_users.rb +16 -0
- data/spec/sinatra/db/migrate/oauth/20101224223628_create_authentications.rb +14 -0
- data/spec/sinatra/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +15 -0
- data/spec/sinatra/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +13 -0
- data/spec/sinatra/filters.rb +21 -0
- data/spec/sinatra/myapp.rb +133 -0
- data/spec/sinatra/sorcery_mailer.rb +25 -0
- data/spec/sinatra/spec/controller_activity_logging_spec.rb +85 -0
- data/spec/sinatra/spec/controller_brute_force_protection_spec.rb +69 -0
- data/spec/sinatra/spec/controller_http_basic_auth_spec.rb +53 -0
- data/spec/sinatra/spec/controller_oauth2_spec.rb +119 -0
- data/spec/sinatra/spec/controller_oauth_spec.rb +121 -0
- data/spec/sinatra/spec/controller_remember_me_spec.rb +64 -0
- data/spec/sinatra/spec/controller_session_timeout_spec.rb +52 -0
- data/spec/sinatra/spec/controller_spec.rb +120 -0
- data/spec/sinatra/spec/spec.opts +4 -0
- data/spec/sinatra/spec/spec_helper.rb +44 -0
- data/spec/sinatra/spec/user_activation_spec.rb +188 -0
- data/spec/sinatra/spec/user_activity_logging_spec.rb +36 -0
- data/spec/sinatra/spec/user_brute_force_protection_spec.rb +76 -0
- data/spec/sinatra/spec/user_oauth_spec.rb +39 -0
- data/spec/sinatra/spec/user_remember_me_spec.rb +66 -0
- data/spec/sinatra/spec/user_reset_password_spec.rb +178 -0
- data/spec/{rails3 → sinatra/spec}/user_spec.rb +68 -38
- data/spec/sinatra/user.rb +6 -0
- data/spec/sinatra/views/test_login.erb +4 -0
- data/spec/untitled folder +18 -0
- metadata +201 -58
- data/spec/rails3/app_root/test/fixtures/users.yml +0 -9
- data/spec/rails3/app_root/test/performance/browsing_test.rb +0 -9
- data/spec/rails3/app_root/test/test_helper.rb +0 -13
- data/spec/rails3/app_root/test/unit/user_test.rb +0 -8
- data/spec/rails3/spec_helper.rb +0 -135
- /data/spec/rails3/{Rakefile → app_root/Rakefile} +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
+
|
|
3
|
+
describe "User with reset_password submodule" do
|
|
4
|
+
before(:all) do
|
|
5
|
+
ActiveRecord::Migrator.migrate("#{APP_ROOT}/db/migrate/reset_password")
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
after(:all) do
|
|
9
|
+
ActiveRecord::Migrator.rollback("#{APP_ROOT}/db/migrate/reset_password")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# ----------------- PLUGIN CONFIGURATION -----------------------
|
|
13
|
+
describe User, "loaded plugin configuration" do
|
|
14
|
+
|
|
15
|
+
before(:all) do
|
|
16
|
+
sorcery_reload!([:reset_password], :reset_password_mailer => ::SorceryMailer)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
after(:each) do
|
|
20
|
+
User.sorcery_config.reset!
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should respond to 'deliver_reset_password_instructions!'" do
|
|
24
|
+
create_new_user
|
|
25
|
+
@user.should respond_to(:deliver_reset_password_instructions!)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should respond to 'reset_password!" do
|
|
29
|
+
create_new_user
|
|
30
|
+
@user.should respond_to(:reset_password!)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should respond to 'load_from_reset_password_token'" do
|
|
34
|
+
create_new_user
|
|
35
|
+
User.should respond_to(:load_from_reset_password_token)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should allow configuration option 'reset_password_token_attribute_name'" do
|
|
39
|
+
sorcery_model_property_set(:reset_password_token_attribute_name, :my_code)
|
|
40
|
+
User.sorcery_config.reset_password_token_attribute_name.should equal(:my_code)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should allow configuration option 'reset_password_mailer'" do
|
|
44
|
+
sorcery_model_property_set(:reset_password_mailer, TestUser)
|
|
45
|
+
User.sorcery_config.reset_password_mailer.should equal(TestUser)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should allow configuration option 'reset_password_email_method_name'" do
|
|
49
|
+
sorcery_model_property_set(:reset_password_email_method_name, :my_mailer_method)
|
|
50
|
+
User.sorcery_config.reset_password_email_method_name.should equal(:my_mailer_method)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should allow configuration option 'reset_password_expiration_period'" do
|
|
54
|
+
sorcery_model_property_set(:reset_password_expiration_period, 16)
|
|
55
|
+
User.sorcery_config.reset_password_expiration_period.should equal(16)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should allow configuration option 'reset_password_email_sent_at_attribute_name'" do
|
|
59
|
+
sorcery_model_property_set(:reset_password_email_sent_at_attribute_name, :blabla)
|
|
60
|
+
User.sorcery_config.reset_password_email_sent_at_attribute_name.should equal(:blabla)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "should allow configuration option 'reset_password_time_between_emails'" do
|
|
64
|
+
sorcery_model_property_set(:reset_password_time_between_emails, 16)
|
|
65
|
+
User.sorcery_config.reset_password_time_between_emails.should equal(16)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# ----------------- PLUGIN ACTIVATED -----------------------
|
|
70
|
+
describe User, "when activated with sorcery" do
|
|
71
|
+
|
|
72
|
+
before(:all) do
|
|
73
|
+
sorcery_reload!([:reset_password], :reset_password_mailer => ::SorceryMailer)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
before(:each) do
|
|
77
|
+
User.delete_all
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "load_from_reset_password_token should return user when token is found" do
|
|
81
|
+
create_new_user
|
|
82
|
+
@user.deliver_reset_password_instructions!
|
|
83
|
+
User.load_from_reset_password_token(@user.reset_password_token).should == @user
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "load_from_reset_password_token should NOT return user when token is NOT found" do
|
|
87
|
+
create_new_user
|
|
88
|
+
@user.deliver_reset_password_instructions!
|
|
89
|
+
User.load_from_reset_password_token("a").should == nil
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "load_from_reset_password_token should return user when token is found and not expired" do
|
|
93
|
+
create_new_user
|
|
94
|
+
sorcery_model_property_set(:reset_password_expiration_period, 500)
|
|
95
|
+
@user.deliver_reset_password_instructions!
|
|
96
|
+
User.load_from_reset_password_token(@user.reset_password_token).should == @user
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "load_from_reset_password_token should NOT return user when token is found and expired" do
|
|
100
|
+
create_new_user
|
|
101
|
+
sorcery_model_property_set(:reset_password_expiration_period, 0.1)
|
|
102
|
+
@user.deliver_reset_password_instructions!
|
|
103
|
+
sleep 0.5
|
|
104
|
+
User.load_from_reset_password_token(@user.reset_password_token).should == nil
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "load_from_reset_password_token should always be valid if expiration period is nil" do
|
|
108
|
+
create_new_user
|
|
109
|
+
sorcery_model_property_set(:reset_password_expiration_period, nil)
|
|
110
|
+
@user.deliver_reset_password_instructions!
|
|
111
|
+
User.load_from_reset_password_token(@user.reset_password_token).should == @user
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "load_from_reset_password_token should return nil if token is blank" do
|
|
115
|
+
User.load_from_reset_password_token(nil).should == nil
|
|
116
|
+
User.load_from_reset_password_token("").should == nil
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "'deliver_reset_password_instructions!' should generate a reset_password_token" do
|
|
120
|
+
create_new_user
|
|
121
|
+
@user.reset_password_token.should be_nil
|
|
122
|
+
@user.deliver_reset_password_instructions!
|
|
123
|
+
@user.reset_password_token.should_not be_nil
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "the reset_password_token should be random" do
|
|
127
|
+
create_new_user
|
|
128
|
+
sorcery_model_property_set(:reset_password_time_between_emails, 0)
|
|
129
|
+
@user.deliver_reset_password_instructions!
|
|
130
|
+
old_password_code = @user.reset_password_token
|
|
131
|
+
@user.deliver_reset_password_instructions!
|
|
132
|
+
@user.reset_password_token.should_not == old_password_code
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "should send an email on reset" do
|
|
136
|
+
create_new_user
|
|
137
|
+
old_size = ActionMailer::Base.deliveries.size
|
|
138
|
+
@user.deliver_reset_password_instructions!
|
|
139
|
+
ActionMailer::Base.deliveries.size.should == old_size + 1
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "when reset_password! is called, should delete reset_password_token" do
|
|
143
|
+
create_new_user
|
|
144
|
+
@user.deliver_reset_password_instructions!
|
|
145
|
+
@user.reset_password_token.should_not be_nil
|
|
146
|
+
@user.reset_password!(:password => "blabulsdf")
|
|
147
|
+
@user.save!
|
|
148
|
+
@user.reset_password_token.should be_nil
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it "should not send an email if time between emails has not passed since last email" do
|
|
152
|
+
create_new_user
|
|
153
|
+
sorcery_model_property_set(:reset_password_time_between_emails, 10000)
|
|
154
|
+
old_size = ActionMailer::Base.deliveries.size
|
|
155
|
+
@user.deliver_reset_password_instructions!
|
|
156
|
+
ActionMailer::Base.deliveries.size.should == old_size + 1
|
|
157
|
+
@user.deliver_reset_password_instructions!
|
|
158
|
+
ActionMailer::Base.deliveries.size.should == old_size + 1
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it "should send an email if time between emails has passed since last email" do
|
|
162
|
+
create_new_user
|
|
163
|
+
sorcery_model_property_set(:reset_password_time_between_emails, 0.5)
|
|
164
|
+
old_size = ActionMailer::Base.deliveries.size
|
|
165
|
+
@user.deliver_reset_password_instructions!
|
|
166
|
+
ActionMailer::Base.deliveries.size.should == old_size + 1
|
|
167
|
+
sleep 0.5
|
|
168
|
+
@user.deliver_reset_password_instructions!
|
|
169
|
+
ActionMailer::Base.deliveries.size.should == old_size + 2
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it "if mailer is nil on activation, throw exception!" do
|
|
173
|
+
expect{sorcery_reload!([:reset_password])}.to raise_error(ArgumentError)
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
require File.expand_path(File.dirname(__FILE__) + '
|
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/../sorcery_mailer')
|
|
3
3
|
|
|
4
4
|
describe "User with no submodules (core)" do
|
|
5
5
|
before(:all) do
|
|
6
|
-
|
|
6
|
+
sorcery_reload!
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
describe User, "when app has plugin loaded" do
|
|
@@ -36,55 +36,55 @@ describe "User with no submodules (core)" do
|
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
it "should enable configuration option 'username_attribute_name'" do
|
|
39
|
-
|
|
39
|
+
sorcery_model_property_set(:username_attribute_name, :email)
|
|
40
40
|
User.sorcery_config.username_attribute_name.should equal(:email)
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
it "should enable configuration option 'password_attribute_name'" do
|
|
44
|
-
|
|
44
|
+
sorcery_model_property_set(:password_attribute_name, :mypassword)
|
|
45
45
|
User.sorcery_config.password_attribute_name.should equal(:mypassword)
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
it "should enable configuration option 'email_attribute_name'" do
|
|
49
|
-
|
|
49
|
+
sorcery_model_property_set(:email_attribute_name, :my_email)
|
|
50
50
|
User.sorcery_config.email_attribute_name.should equal(:my_email)
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
it "should enable configuration option 'crypted_password_attribute_name'" do
|
|
54
|
-
|
|
54
|
+
sorcery_model_property_set(:crypted_password_attribute_name, :password)
|
|
55
55
|
User.sorcery_config.crypted_password_attribute_name.should equal(:password)
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
it "should enable configuration option 'salt_attribute_name'" do
|
|
59
|
-
|
|
59
|
+
sorcery_model_property_set(:salt_attribute_name, :my_salt)
|
|
60
60
|
User.sorcery_config.salt_attribute_name.should equal(:my_salt)
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
it "should enable configuration option 'encryption_algorithm'" do
|
|
64
|
-
|
|
64
|
+
sorcery_model_property_set(:encryption_algorithm, :none)
|
|
65
65
|
User.sorcery_config.encryption_algorithm.should equal(:none)
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
it "should enable configuration option 'encryption_key'" do
|
|
69
|
-
|
|
69
|
+
sorcery_model_property_set(:encryption_key, 'asdadas424234242')
|
|
70
70
|
User.sorcery_config.encryption_key.should == 'asdadas424234242'
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
it "should enable configuration option 'custom_encryption_provider'" do
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
sorcery_model_property_set(:encryption_algorithm, :custom)
|
|
75
|
+
sorcery_model_property_set(:custom_encryption_provider, Array)
|
|
76
76
|
User.sorcery_config.custom_encryption_provider.should equal(Array)
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
it "should enable configuration option 'salt_join_token'" do
|
|
80
80
|
salt_join_token = "--%%*&-"
|
|
81
|
-
|
|
81
|
+
sorcery_model_property_set(:salt_join_token, salt_join_token)
|
|
82
82
|
User.sorcery_config.salt_join_token.should equal(salt_join_token)
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
it "should enable configuration option 'stretches'" do
|
|
86
86
|
stretches = 15
|
|
87
|
-
|
|
87
|
+
sorcery_model_property_set(:stretches, stretches)
|
|
88
88
|
User.sorcery_config.stretches.should equal(stretches)
|
|
89
89
|
end
|
|
90
90
|
|
|
@@ -93,7 +93,7 @@ describe "User with no submodules (core)" do
|
|
|
93
93
|
# ----------------- PLUGIN ACTIVATED -----------------------
|
|
94
94
|
describe User, "when activated with sorcery" do
|
|
95
95
|
before(:all) do
|
|
96
|
-
|
|
96
|
+
sorcery_reload!()
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
before(:each) do
|
|
@@ -124,7 +124,7 @@ describe "User with no submodules (core)" do
|
|
|
124
124
|
describe User, "registration" do
|
|
125
125
|
|
|
126
126
|
before(:all) do
|
|
127
|
-
|
|
127
|
+
sorcery_reload!()
|
|
128
128
|
end
|
|
129
129
|
|
|
130
130
|
before(:each) do
|
|
@@ -159,9 +159,9 @@ describe "User with no submodules (core)" do
|
|
|
159
159
|
it "should not clear the virtual password field if save failed due to exception" do
|
|
160
160
|
create_new_user
|
|
161
161
|
@user.password = 'blupush'
|
|
162
|
-
@user.
|
|
162
|
+
@user.username = nil
|
|
163
163
|
begin
|
|
164
|
-
@user.save # triggers SQL exception since
|
|
164
|
+
@user.save # triggers SQL exception since username field is defined not null.
|
|
165
165
|
rescue
|
|
166
166
|
end
|
|
167
167
|
@user.password.should_not be_nil
|
|
@@ -186,7 +186,7 @@ describe "User with no submodules (core)" do
|
|
|
186
186
|
# ----------------- PASSWORD ENCRYPTION -----------------------
|
|
187
187
|
describe User, "special encryption cases" do
|
|
188
188
|
before(:all) do
|
|
189
|
-
|
|
189
|
+
sorcery_reload!()
|
|
190
190
|
@text = "Some Text!"
|
|
191
191
|
end
|
|
192
192
|
|
|
@@ -199,7 +199,7 @@ describe "User with no submodules (core)" do
|
|
|
199
199
|
end
|
|
200
200
|
|
|
201
201
|
it "should work with no password encryption" do
|
|
202
|
-
|
|
202
|
+
sorcery_model_property_set(:encryption_algorithm, :none)
|
|
203
203
|
create_new_user
|
|
204
204
|
User.authenticate(@user.send(User.sorcery_config.username_attribute_name), 'secret').should be_true
|
|
205
205
|
end
|
|
@@ -214,66 +214,66 @@ describe "User with no submodules (core)" do
|
|
|
214
214
|
crypted = encrypt(*tokens)
|
|
215
215
|
end
|
|
216
216
|
end
|
|
217
|
-
|
|
218
|
-
|
|
217
|
+
sorcery_model_property_set(:encryption_algorithm, :custom)
|
|
218
|
+
sorcery_model_property_set(:custom_encryption_provider, MyCrypto)
|
|
219
219
|
create_new_user
|
|
220
220
|
User.authenticate(@user.send(User.sorcery_config.username_attribute_name), 'secret').should be_true
|
|
221
221
|
end
|
|
222
222
|
|
|
223
223
|
it "if encryption algo is aes256, it should set key to crypto provider" do
|
|
224
|
-
|
|
225
|
-
|
|
224
|
+
sorcery_model_property_set(:encryption_algorithm, :aes256)
|
|
225
|
+
sorcery_model_property_set(:encryption_key, nil)
|
|
226
226
|
expect{User.encrypt(@text)}.to raise_error(ArgumentError)
|
|
227
|
-
|
|
227
|
+
sorcery_model_property_set(:encryption_key, "asd234dfs423fddsmndsflktsdf32343")
|
|
228
228
|
expect{User.encrypt(@text)}.to_not raise_error(ArgumentError)
|
|
229
229
|
end
|
|
230
230
|
|
|
231
231
|
it "if encryption algo is aes256, it should set key to crypto provider, even if attributes are set in reverse" do
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
232
|
+
sorcery_model_property_set(:encryption_key, nil)
|
|
233
|
+
sorcery_model_property_set(:encryption_algorithm, :none)
|
|
234
|
+
sorcery_model_property_set(:encryption_key, "asd234dfs423fddsmndsflktsdf32343")
|
|
235
|
+
sorcery_model_property_set(:encryption_algorithm, :aes256)
|
|
236
236
|
expect{User.encrypt(@text)}.to_not raise_error(ArgumentError)
|
|
237
237
|
end
|
|
238
238
|
|
|
239
239
|
it "if encryption algo is md5 it should work" do
|
|
240
|
-
|
|
240
|
+
sorcery_model_property_set(:encryption_algorithm, :md5)
|
|
241
241
|
User.encrypt(@text).should == Sorcery::CryptoProviders::MD5.encrypt(@text)
|
|
242
242
|
end
|
|
243
243
|
|
|
244
244
|
it "if encryption algo is sha1 it should work" do
|
|
245
|
-
|
|
245
|
+
sorcery_model_property_set(:encryption_algorithm, :sha1)
|
|
246
246
|
User.encrypt(@text).should == Sorcery::CryptoProviders::SHA1.encrypt(@text)
|
|
247
247
|
end
|
|
248
248
|
|
|
249
249
|
it "if encryption algo is sha256 it should work" do
|
|
250
|
-
|
|
250
|
+
sorcery_model_property_set(:encryption_algorithm, :sha256)
|
|
251
251
|
User.encrypt(@text).should == Sorcery::CryptoProviders::SHA256.encrypt(@text)
|
|
252
252
|
end
|
|
253
253
|
|
|
254
254
|
it "if encryption algo is sha512 it should work" do
|
|
255
|
-
|
|
255
|
+
sorcery_model_property_set(:encryption_algorithm, :sha512)
|
|
256
256
|
User.encrypt(@text).should == Sorcery::CryptoProviders::SHA512.encrypt(@text)
|
|
257
257
|
end
|
|
258
258
|
|
|
259
259
|
it "salt should be random for each user and saved in db" do
|
|
260
|
-
|
|
260
|
+
sorcery_model_property_set(:salt_attribute_name, :salt)
|
|
261
261
|
create_new_user
|
|
262
262
|
@user.salt.should_not be_nil
|
|
263
263
|
end
|
|
264
264
|
|
|
265
265
|
it "if salt is set should use it to encrypt" do
|
|
266
|
-
|
|
267
|
-
|
|
266
|
+
sorcery_model_property_set(:salt_attribute_name, :salt)
|
|
267
|
+
sorcery_model_property_set(:encryption_algorithm, :sha512)
|
|
268
268
|
create_new_user
|
|
269
269
|
@user.crypted_password.should_not == Sorcery::CryptoProviders::SHA512.encrypt('secret')
|
|
270
270
|
@user.crypted_password.should == Sorcery::CryptoProviders::SHA512.encrypt('secret',@user.salt)
|
|
271
271
|
end
|
|
272
272
|
|
|
273
273
|
it "if salt_join_token is set should use it to encrypt" do
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
274
|
+
sorcery_model_property_set(:salt_attribute_name, :salt)
|
|
275
|
+
sorcery_model_property_set(:salt_join_token, "-@=>")
|
|
276
|
+
sorcery_model_property_set(:encryption_algorithm, :sha512)
|
|
277
277
|
create_new_user
|
|
278
278
|
@user.crypted_password.should_not == Sorcery::CryptoProviders::SHA512.encrypt('secret')
|
|
279
279
|
Sorcery::CryptoProviders::SHA512.join_token = ""
|
|
@@ -283,5 +283,35 @@ describe "User with no submodules (core)" do
|
|
|
283
283
|
end
|
|
284
284
|
|
|
285
285
|
end
|
|
286
|
+
|
|
287
|
+
describe User, "external users" do
|
|
288
|
+
before(:all) do
|
|
289
|
+
ActiveRecord::Migrator.migrate("#{APP_ROOT}/db/migrate/oauth")
|
|
290
|
+
sorcery_reload!()
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
after(:all) do
|
|
294
|
+
ActiveRecord::Migrator.rollback("#{APP_ROOT}/db/migrate/oauth")
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
before(:each) do
|
|
298
|
+
User.delete_all
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
it "should respond to 'external?'" do
|
|
302
|
+
create_new_user
|
|
303
|
+
@user.should respond_to(:external?)
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
it "external? should be false for regular users" do
|
|
307
|
+
create_new_user
|
|
308
|
+
@user.external?.should be_false
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
it "external? should be true for external users" do
|
|
312
|
+
create_new_external_user(:twitter)
|
|
313
|
+
@user.external?.should be_true
|
|
314
|
+
end
|
|
315
|
+
end
|
|
286
316
|
|
|
287
317
|
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
3
|
+
|
|
4
|
+
require 'simplecov'
|
|
5
|
+
SimpleCov.root File.join(File.dirname(__FILE__), '..', 'lib')
|
|
6
|
+
SimpleCov.start
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
require 'rspec'
|
|
10
|
+
require 'sorcery'
|
|
11
|
+
|
|
12
|
+
# Requires supporting files with custom matchers and macros, etc,
|
|
13
|
+
# in ./support/ and its subdirectories.
|
|
14
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
|
15
|
+
|
|
16
|
+
RSpec.configure do |config|
|
|
17
|
+
|
|
18
|
+
end
|