sorcery 0.3.1 → 0.4.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/Gemfile +3 -2
- data/Gemfile.lock +13 -11
- data/README.rdoc +89 -61
- data/Rakefile +4 -4
- data/VERSION +1 -1
- data/lib/generators/sorcery_migration/templates/core.rb +2 -2
- data/lib/sorcery/controller/submodules/http_basic_auth.rb +1 -1
- data/lib/sorcery/controller.rb +16 -18
- data/lib/sorcery/crypto_providers/bcrypt.rb +3 -5
- data/lib/sorcery/crypto_providers/common.rb +35 -0
- data/lib/sorcery/crypto_providers/md5.rb +3 -23
- data/lib/sorcery/crypto_providers/sha1.rb +4 -16
- data/lib/sorcery/crypto_providers/sha256.rb +3 -23
- data/lib/sorcery/crypto_providers/sha512.rb +3 -23
- data/lib/sorcery/engine.rb +4 -0
- data/lib/sorcery/initializers/initializer.rb +86 -0
- data/lib/sorcery/model/submodules/activity_logging.rb +1 -1
- data/lib/sorcery/model/submodules/brute_force_protection.rb +1 -1
- data/lib/sorcery/model/submodules/reset_password.rb +1 -1
- data/lib/sorcery/model.rb +25 -3
- data/lib/sorcery/railties/tasks.rake +10 -0
- data/lib/sorcery/sinatra.rb +0 -9
- data/lib/sorcery/test_helpers/internal/rails.rb +52 -0
- data/lib/sorcery/test_helpers/internal/sinatra.rb +122 -0
- data/lib/sorcery/test_helpers/internal.rb +55 -0
- data/lib/sorcery/test_helpers/rails.rb +5 -46
- data/lib/sorcery/test_helpers/sinatra.rb +58 -104
- data/lib/sorcery/test_helpers.rb +0 -35
- data/lib/sorcery.rb +8 -0
- data/sorcery.gemspec +140 -146
- data/spec/Gemfile +2 -2
- data/spec/Gemfile.lock +20 -12
- data/spec/Rakefile +1 -0
- data/spec/rails3/.rspec +1 -1
- data/spec/rails3/{app_root/Gemfile → Gemfile} +4 -4
- data/spec/rails3/{app_root/Gemfile.lock → Gemfile.lock} +20 -20
- data/spec/rails3/{app_root/Rakefile → Rakefile} +1 -0
- data/spec/rails3/config/database.yml +27 -0
- data/spec/rails3/{app_root/spec → spec}/controller_activity_logging_spec.rb +2 -4
- data/spec/rails3/{app_root/spec → spec}/controller_brute_force_protection_spec.rb +3 -2
- data/spec/rails3/{app_root/spec → spec}/controller_oauth2_spec.rb +10 -9
- data/spec/rails3/{app_root/spec → spec}/controller_oauth_spec.rb +8 -8
- data/spec/rails3/spec/controller_session_timeout_spec.rb +55 -0
- data/spec/rails3/{app_root/spec → spec}/controller_spec.rb +6 -16
- data/spec/rails3/spec/spec.opts +2 -0
- data/spec/rails3/spec/spec_helper.rb +70 -0
- data/spec/rails3/{app_root/spec → spec}/user_activation_spec.rb +7 -13
- data/spec/rails3/{app_root/spec → spec}/user_brute_force_protection_spec.rb +2 -30
- data/spec/rails3/{app_root/spec → spec}/user_oauth_spec.rb +3 -3
- data/spec/rails3/{app_root/spec → spec}/user_remember_me_spec.rb +3 -11
- data/spec/rails3/{app_root/spec → spec}/user_reset_password_spec.rb +20 -17
- data/spec/rails3/{app_root/spec → spec}/user_spec.rb +19 -9
- data/spec/sinatra/Gemfile +3 -3
- data/spec/sinatra/Gemfile.lock +17 -17
- data/spec/sinatra/Rakefile +1 -0
- data/spec/sinatra/spec/controller_brute_force_protection_spec.rb +3 -2
- data/spec/sinatra/spec/controller_oauth2_spec.rb +10 -9
- data/spec/sinatra/spec/controller_oauth_spec.rb +5 -5
- data/spec/sinatra/spec/controller_session_timeout_spec.rb +28 -23
- data/spec/sinatra/spec/spec.opts +2 -4
- data/spec/sinatra/spec/spec_helper.rb +4 -2
- data/spec/sorcery_crypto_providers_spec.rb +5 -4
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +3 -4
- metadata +151 -149
- data/lib/sorcery/controller/submodules/email.rb +0 -44
- data/lib/sorcery/controller/submodules/oauth.rb +0 -95
- data/spec/rails3/app_root/.rspec +0 -1
- data/spec/rails3/app_root/config/database.yml +0 -27
- data/spec/rails3/app_root/spec/controller_session_timeout_spec.rb +0 -50
- data/spec/rails3/app_root/spec/spec_helper.rb +0 -62
- data/spec/sinatra/spec/user_activation_spec.rb +0 -188
- data/spec/sinatra/spec/user_activity_logging_spec.rb +0 -36
- data/spec/sinatra/spec/user_brute_force_protection_spec.rb +0 -76
- data/spec/sinatra/spec/user_oauth_spec.rb +0 -39
- data/spec/sinatra/spec/user_remember_me_spec.rb +0 -66
- data/spec/sinatra/spec/user_reset_password_spec.rb +0 -178
- data/spec/sinatra/spec/user_spec.rb +0 -317
- /data/spec/rails3/{app_root/.gitignore → .gitignore} +0 -0
- /data/spec/rails3/{app_root/README → README} +0 -0
- /data/spec/rails3/{app_root/Rakefile.unused → Rakefile.unused} +0 -0
- /data/spec/rails3/{app_root/app → app}/controllers/application_controller.rb +0 -0
- /data/spec/rails3/{app_root/app → app}/helpers/application_helper.rb +0 -0
- /data/spec/rails3/{app_root/app → app}/mailers/sorcery_mailer.rb +0 -0
- /data/spec/rails3/{app_root/app → app}/models/authentication.rb +0 -0
- /data/spec/rails3/{app_root/app → app}/models/user.rb +0 -0
- /data/spec/rails3/{app_root/app → app}/views/layouts/application.html.erb +0 -0
- /data/spec/rails3/{app_root/app → app}/views/sorcery_mailer/activation_email.html.erb +0 -0
- /data/spec/rails3/{app_root/app → app}/views/sorcery_mailer/activation_email.text.erb +0 -0
- /data/spec/rails3/{app_root/app → app}/views/sorcery_mailer/activation_success_email.html.erb +0 -0
- /data/spec/rails3/{app_root/app → app}/views/sorcery_mailer/activation_success_email.text.erb +0 -0
- /data/spec/rails3/{app_root/app → app}/views/sorcery_mailer/reset_password_email.html.erb +0 -0
- /data/spec/rails3/{app_root/app → app}/views/sorcery_mailer/reset_password_email.text.erb +0 -0
- /data/spec/rails3/{app_root/config → config}/application.rb +0 -0
- /data/spec/rails3/{app_root/config → config}/boot.rb +0 -0
- /data/spec/rails3/{app_root/config → config}/environment.rb +0 -0
- /data/spec/rails3/{app_root/config → config}/environments/development.rb +0 -0
- /data/spec/rails3/{app_root/config → config}/environments/in_memory.rb +0 -0
- /data/spec/rails3/{app_root/config → config}/environments/production.rb +0 -0
- /data/spec/rails3/{app_root/config → config}/environments/test.rb +0 -0
- /data/spec/rails3/{app_root/config → config}/initializers/backtrace_silencers.rb +0 -0
- /data/spec/rails3/{app_root/config → config}/initializers/inflections.rb +0 -0
- /data/spec/rails3/{app_root/config → config}/initializers/mime_types.rb +0 -0
- /data/spec/rails3/{app_root/config → config}/initializers/secret_token.rb +0 -0
- /data/spec/rails3/{app_root/config → config}/initializers/session_store.rb +0 -0
- /data/spec/rails3/{app_root/config → config}/locales/en.yml +0 -0
- /data/spec/rails3/{app_root/config → config}/routes.rb +0 -0
- /data/spec/rails3/{app_root/config.ru → config.ru} +0 -0
- /data/spec/rails3/{app_root/db → db}/migrate/activation/20101224223622_add_activation_to_users.rb +0 -0
- /data/spec/rails3/{app_root/db → db}/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -0
- /data/spec/rails3/{app_root/db → db}/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -0
- /data/spec/rails3/{app_root/db → db}/migrate/core/20101224223620_create_users.rb +0 -0
- /data/spec/rails3/{app_root/db → db}/migrate/external/20101224223628_create_authentications.rb +0 -0
- /data/spec/rails3/{app_root/db → db}/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -0
- /data/spec/rails3/{app_root/db → db}/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -0
- /data/spec/rails3/{app_root/db → db}/schema.rb +0 -0
- /data/spec/rails3/{app_root/db → db}/seeds.rb +0 -0
- /data/spec/rails3/{app_root/lib → lib}/tasks/.gitkeep +0 -0
- /data/spec/rails3/{app_root/public → public}/404.html +0 -0
- /data/spec/rails3/{app_root/public → public}/422.html +0 -0
- /data/spec/rails3/{app_root/public → public}/500.html +0 -0
- /data/spec/rails3/{app_root/public → public}/favicon.ico +0 -0
- /data/spec/rails3/{app_root/public → public}/images/rails.png +0 -0
- /data/spec/rails3/{app_root/public → public}/index.html +0 -0
- /data/spec/rails3/{app_root/public → public}/javascripts/application.js +0 -0
- /data/spec/rails3/{app_root/public → public}/javascripts/controls.js +0 -0
- /data/spec/rails3/{app_root/public → public}/javascripts/dragdrop.js +0 -0
- /data/spec/rails3/{app_root/public → public}/javascripts/effects.js +0 -0
- /data/spec/rails3/{app_root/public → public}/javascripts/prototype.js +0 -0
- /data/spec/rails3/{app_root/public → public}/javascripts/rails.js +0 -0
- /data/spec/rails3/{app_root/public → public}/robots.txt +0 -0
- /data/spec/rails3/{app_root/public → public}/stylesheets/.gitkeep +0 -0
- /data/spec/rails3/{app_root/script → script}/rails +0 -0
- /data/spec/rails3/{app_root/spec → spec}/controller_http_basic_auth_spec.rb +0 -0
- /data/spec/rails3/{app_root/spec → spec}/controller_remember_me_spec.rb +0 -0
- /data/spec/rails3/{app_root/spec → spec}/spec_helper.orig.rb +0 -0
- /data/spec/rails3/{app_root/spec → spec}/user_activity_logging_spec.rb +0 -0
- /data/spec/rails3/{app_root/vendor → vendor}/plugins/.gitkeep +0 -0
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
$: << File.join(File.dirname(__FILE__), '..', '..', 'lib' )
|
|
2
|
-
|
|
3
|
-
require 'simplecov'
|
|
4
|
-
SimpleCov.root File.join(File.dirname(__FILE__), "..", "..", "app_root" )
|
|
5
|
-
SimpleCov.start do
|
|
6
|
-
add_filter "/config/"
|
|
7
|
-
|
|
8
|
-
add_group 'Controllers', 'app/controllers'
|
|
9
|
-
add_group 'Models', 'app/models'
|
|
10
|
-
add_group 'Helpers', 'app/helpers'
|
|
11
|
-
add_group 'Libraries', 'lib'
|
|
12
|
-
add_group 'Plugins', 'vendor/plugins'
|
|
13
|
-
add_group 'Migrations', 'db/migrate'
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
require 'spork'
|
|
17
|
-
|
|
18
|
-
Spork.prefork do
|
|
19
|
-
# Set the default environment to sqlite3's in_memory database
|
|
20
|
-
ENV['RAILS_ENV'] ||= 'in_memory'
|
|
21
|
-
ENV['RAILS_ROOT'] = 'app_root'
|
|
22
|
-
|
|
23
|
-
# Load the Rails environment and testing framework
|
|
24
|
-
require "#{File.dirname(__FILE__)}/../config/environment"
|
|
25
|
-
#require "#{File.dirname(__FILE__)}/../../init" # for plugins
|
|
26
|
-
require 'rspec/rails'
|
|
27
|
-
|
|
28
|
-
RSpec.configure do |config|
|
|
29
|
-
config.use_transactional_fixtures = true
|
|
30
|
-
config.use_instantiated_fixtures = false
|
|
31
|
-
config.include RSpec::Rails::ControllerExampleGroup, :example_group => { :file_path => /controller(.)*_spec.rb$/ }
|
|
32
|
-
|
|
33
|
-
config.before(:suite) do
|
|
34
|
-
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/core")
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
config.after(:suite) do
|
|
38
|
-
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/core")
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
#----------------------------------------------------------------
|
|
43
|
-
# needed when running individual specs
|
|
44
|
-
require File.join(File.dirname(__FILE__), '..','app','models','user')
|
|
45
|
-
require File.join(File.dirname(__FILE__), '..','app','models','authentication')
|
|
46
|
-
|
|
47
|
-
class TestUser < ActiveRecord::Base
|
|
48
|
-
activate_sorcery!
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
class TestMailer < ActionMailer::Base
|
|
52
|
-
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
include ::Sorcery::TestHelpers
|
|
56
|
-
include ::Sorcery::TestHelpers::Rails
|
|
57
|
-
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
Spork.each_run do
|
|
61
|
-
# This code will be run each time you run your specs.
|
|
62
|
-
end
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
require File.expand_path(File.dirname(__FILE__) + '/../sorcery_mailer')
|
|
3
|
-
|
|
4
|
-
describe "User with activation submodule" do
|
|
5
|
-
before(:all) do
|
|
6
|
-
ActiveRecord::Migrator.migrate("#{APP_ROOT}/db/migrate/activation")
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
after(:all) do
|
|
10
|
-
ActiveRecord::Migrator.rollback("#{APP_ROOT}/db/migrate/activation")
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# ----------------- PLUGIN CONFIGURATION -----------------------
|
|
14
|
-
describe User, "loaded plugin configuration" do
|
|
15
|
-
before(:all) do
|
|
16
|
-
sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
after(:each) do
|
|
20
|
-
User.sorcery_config.reset!
|
|
21
|
-
sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should enable configuration option 'activation_state_attribute_name'" do
|
|
25
|
-
sorcery_model_property_set(:activation_state_attribute_name, :status)
|
|
26
|
-
User.sorcery_config.activation_state_attribute_name.should equal(:status)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "should enable configuration option 'activation_token_attribute_name'" do
|
|
30
|
-
sorcery_model_property_set(:activation_token_attribute_name, :code)
|
|
31
|
-
User.sorcery_config.activation_token_attribute_name.should equal(:code)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should enable configuration option 'user_activation_mailer'" do
|
|
35
|
-
sorcery_model_property_set(:user_activation_mailer, TestMailer)
|
|
36
|
-
User.sorcery_config.user_activation_mailer.should equal(TestMailer)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "should enable configuration option 'activation_needed_email_method_name'" do
|
|
40
|
-
sorcery_model_property_set(:activation_needed_email_method_name, :my_activation_email)
|
|
41
|
-
User.sorcery_config.activation_needed_email_method_name.should equal(:my_activation_email)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it "should enable configuration option 'activation_success_email_method_name'" do
|
|
45
|
-
sorcery_model_property_set(:activation_success_email_method_name, :my_activation_email)
|
|
46
|
-
User.sorcery_config.activation_success_email_method_name.should equal(:my_activation_email)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it "if mailer is nil on activation, throw exception!" do
|
|
50
|
-
expect{sorcery_reload!([:user_activation])}.to raise_error(ArgumentError)
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# ----------------- ACTIVATION PROCESS -----------------------
|
|
55
|
-
describe User, "activation process" do
|
|
56
|
-
before(:all) do
|
|
57
|
-
sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "should generate an activation code on registration" do
|
|
61
|
-
create_new_user
|
|
62
|
-
@user.activation_token.should_not be_nil
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "should initialize user state to 'pending'" do
|
|
66
|
-
create_new_user
|
|
67
|
-
@user.activation_state.should == "pending"
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "should respond to 'activate!'" do
|
|
71
|
-
create_new_user
|
|
72
|
-
@user.should respond_to(:activate!)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
it "should clear activation code and change state to 'active' on activation" do
|
|
76
|
-
create_new_user
|
|
77
|
-
activation_token = @user.activation_token
|
|
78
|
-
@user.activate!
|
|
79
|
-
@user2 = User.find(@user.id) # go to db to make sure it was saved and not just in memory
|
|
80
|
-
@user2.activation_token.should be_nil
|
|
81
|
-
@user2.activation_state.should == "active"
|
|
82
|
-
User.find_by_activation_token(activation_token).should be_nil
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it "should send the user an activation email" do
|
|
86
|
-
old_size = ActionMailer::Base.deliveries.size
|
|
87
|
-
create_new_user
|
|
88
|
-
ActionMailer::Base.deliveries.size.should == old_size + 1
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "subsequent saves do not send activation email" do
|
|
92
|
-
create_new_user
|
|
93
|
-
old_size = ActionMailer::Base.deliveries.size
|
|
94
|
-
@user.username = "Shauli"
|
|
95
|
-
@user.save!
|
|
96
|
-
ActionMailer::Base.deliveries.size.should == old_size
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
it "should send the user an activation success email on successful activation" do
|
|
100
|
-
create_new_user
|
|
101
|
-
old_size = ActionMailer::Base.deliveries.size
|
|
102
|
-
@user.activate!
|
|
103
|
-
ActionMailer::Base.deliveries.size.should == old_size + 1
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it "subsequent saves do not send activation success email" do
|
|
107
|
-
create_new_user
|
|
108
|
-
@user.activate!
|
|
109
|
-
old_size = ActionMailer::Base.deliveries.size
|
|
110
|
-
@user.username = "Shauli"
|
|
111
|
-
@user.save!
|
|
112
|
-
ActionMailer::Base.deliveries.size.should == old_size
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "activation needed email is optional" do
|
|
116
|
-
sorcery_model_property_set(:activation_needed_email_method_name, nil)
|
|
117
|
-
old_size = ActionMailer::Base.deliveries.size
|
|
118
|
-
create_new_user
|
|
119
|
-
ActionMailer::Base.deliveries.size.should == old_size
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it "activation success email is optional" do
|
|
123
|
-
sorcery_model_property_set(:activation_success_email_method_name, nil)
|
|
124
|
-
create_new_user
|
|
125
|
-
old_size = ActionMailer::Base.deliveries.size
|
|
126
|
-
@user.activate!
|
|
127
|
-
ActionMailer::Base.deliveries.size.should == old_size
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
describe User, "prevent non-active login feature" do
|
|
132
|
-
before(:all) do
|
|
133
|
-
sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
it "should not allow a non-active user to authenticate" do
|
|
137
|
-
create_new_user
|
|
138
|
-
User.authenticate(@user.username,'secret').should be_false
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
it "should allow a non-active user to authenticate if configured so" do
|
|
142
|
-
create_new_user
|
|
143
|
-
sorcery_model_property_set(:prevent_non_active_users_to_login, false)
|
|
144
|
-
User.authenticate(@user.username,'secret').should be_true
|
|
145
|
-
end
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
describe User, "load_from_activation_token" do
|
|
149
|
-
before(:all) do
|
|
150
|
-
sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
it "load_from_activation_token should return user when token is found" do
|
|
154
|
-
create_new_user
|
|
155
|
-
User.load_from_activation_token(@user.activation_token).should == @user
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
it "load_from_activation_token should NOT return user when token is NOT found" do
|
|
159
|
-
create_new_user
|
|
160
|
-
User.load_from_activation_token("a").should == nil
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
it "load_from_activation_token should return user when token is found and not expired" do
|
|
164
|
-
sorcery_model_property_set(:activation_token_expiration_period, 500)
|
|
165
|
-
create_new_user
|
|
166
|
-
User.load_from_activation_token(@user.activation_token).should == @user
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
it "load_from_activation_token should NOT return user when token is found and expired" do
|
|
170
|
-
sorcery_model_property_set(:activation_token_expiration_period, 0.1)
|
|
171
|
-
create_new_user
|
|
172
|
-
sleep 0.5
|
|
173
|
-
User.load_from_activation_token(@user.activation_token).should == nil
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
it "load_from_activation_token should return nil if token is blank" do
|
|
177
|
-
User.load_from_activation_token(nil).should == nil
|
|
178
|
-
User.load_from_activation_token("").should == nil
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
it "load_from_activation_token should always be valid if expiration period is nil" do
|
|
182
|
-
sorcery_model_property_set(:activation_token_expiration_period, nil)
|
|
183
|
-
create_new_user
|
|
184
|
-
User.load_from_activation_token(@user.activation_token).should == @user
|
|
185
|
-
end
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
3
|
-
describe "User with activity logging submodule" do
|
|
4
|
-
before(:all) do
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
after(:all) do
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
# ----------------- PLUGIN CONFIGURATION -----------------------
|
|
11
|
-
describe User, "loaded plugin configuration" do
|
|
12
|
-
before(:all) do
|
|
13
|
-
sorcery_reload!([:activity_logging])
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
after(:each) do
|
|
17
|
-
User.sorcery_config.reset!
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it "should allow configuration option 'last_login_at_attribute_name'" do
|
|
21
|
-
sorcery_model_property_set(:last_login_at_attribute_name, :login_time)
|
|
22
|
-
User.sorcery_config.last_login_at_attribute_name.should equal(:login_time)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should allow configuration option 'last_logout_at_attribute_name'" do
|
|
26
|
-
sorcery_model_property_set(:last_logout_at_attribute_name, :logout_time)
|
|
27
|
-
User.sorcery_config.last_logout_at_attribute_name.should equal(:logout_time)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "should allow configuration option 'last_activity_at_attribute_name'" do
|
|
31
|
-
sorcery_model_property_set(:last_activity_at_attribute_name, :activity_time)
|
|
32
|
-
User.sorcery_config.last_activity_at_attribute_name.should equal(:activity_time)
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
end
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
3
|
-
describe "User with brute_force_protection submodule" do
|
|
4
|
-
before(:all) do
|
|
5
|
-
ActiveRecord::Migrator.migrate("#{APP_ROOT}/db/migrate/brute_force_protection")
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
after(:all) do
|
|
9
|
-
ActiveRecord::Migrator.rollback("#{APP_ROOT}/db/migrate/brute_force_protection")
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# ----------------- PLUGIN CONFIGURATION -----------------------
|
|
13
|
-
describe User, "loaded plugin configuration" do
|
|
14
|
-
|
|
15
|
-
before(:all) do
|
|
16
|
-
sorcery_reload!([:brute_force_protection])
|
|
17
|
-
create_new_user
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
after(:each) do
|
|
21
|
-
User.sorcery_config.reset!
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should respond to 'failed_logins_count'" do
|
|
25
|
-
@user.should respond_to(:failed_logins_count)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "should respond to 'lock_expires_at'" do
|
|
29
|
-
@user.should respond_to(:failed_logins_count)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "should enable configuration option 'failed_logins_count_attribute_name'" do
|
|
33
|
-
sorcery_model_property_set(:failed_logins_count_attribute_name, :my_count)
|
|
34
|
-
User.sorcery_config.failed_logins_count_attribute_name.should equal(:my_count)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "should enable configuration option 'lock_expires_at_attribute_name'" do
|
|
38
|
-
sorcery_model_property_set(:lock_expires_at_attribute_name, :expires)
|
|
39
|
-
User.sorcery_config.lock_expires_at_attribute_name.should equal(:expires)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "should enable configuration option 'consecutive_login_retries_amount_allowed'" do
|
|
43
|
-
sorcery_model_property_set(:consecutive_login_retries_amount_limit, 34)
|
|
44
|
-
User.sorcery_config.consecutive_login_retries_amount_limit.should equal(34)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "should enable configuration option 'login_lock_time_period'" do
|
|
48
|
-
sorcery_model_property_set(:login_lock_time_period, 2.hours)
|
|
49
|
-
User.sorcery_config.login_lock_time_period.should == 2.hours
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# ----------------- PLUGIN ACTIVATED -----------------------
|
|
54
|
-
describe User, "when activated with sorcery" do
|
|
55
|
-
|
|
56
|
-
before(:all) do
|
|
57
|
-
sorcery_reload!([:brute_force_protection])
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
before(:each) do
|
|
61
|
-
User.delete_all
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# it "should increment failed_logins_count on a failed login" do
|
|
65
|
-
# create_new_user
|
|
66
|
-
#
|
|
67
|
-
# end
|
|
68
|
-
#
|
|
69
|
-
# it "should set lock expiry (effectively lock user) when failed_logins_count reaches max within max period" do
|
|
70
|
-
# create_new_user
|
|
71
|
-
# @user.lock_expires_at.should == Time.now.utc + 30
|
|
72
|
-
# end
|
|
73
|
-
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
end
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
3
|
-
describe "User with oauth submodule" do
|
|
4
|
-
before(:all) do
|
|
5
|
-
ActiveRecord::Migrator.migrate("#{APP_ROOT}/db/migrate/external")
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
after(:all) do
|
|
9
|
-
ActiveRecord::Migrator.rollback("#{APP_ROOT}/db/migrate/external")
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# ----------------- PLUGIN CONFIGURATION -----------------------
|
|
13
|
-
describe User, "loaded plugin configuration" do
|
|
14
|
-
|
|
15
|
-
before(:all) do
|
|
16
|
-
sorcery_reload!([:external])
|
|
17
|
-
sorcery_controller_property_set(:external_providers, [:twitter])
|
|
18
|
-
sorcery_model_property_set(:authentications_class, Authentication)
|
|
19
|
-
sorcery_controller_oauth_property_set(:twitter, :key, "eYVNBjBDi33aa9GkA3w")
|
|
20
|
-
sorcery_controller_oauth_property_set(:twitter, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
|
|
21
|
-
sorcery_controller_oauth_property_set(:twitter, :callback_url, "http://blabla.com")
|
|
22
|
-
create_new_external_user(:twitter)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should respond to 'load_from_provider'" do
|
|
26
|
-
User.should respond_to(:load_from_provider)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "'load_from_provider' should load user if exists" do
|
|
30
|
-
User.load_from_provider(:twitter,123).should == @user
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "'load_from_provider' should return nil if user doesn't exist" do
|
|
34
|
-
User.load_from_provider(:twitter,980342).should be_nil
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
end
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
3
|
-
describe "User with remember_me submodule" do
|
|
4
|
-
before(:all) do
|
|
5
|
-
ActiveRecord::Migrator.migrate("#{APP_ROOT}/db/migrate/remember_me")
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
after(:all) do
|
|
9
|
-
ActiveRecord::Migrator.rollback("#{APP_ROOT}/db/migrate/remember_me")
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# ----------------- PLUGIN CONFIGURATION -----------------------
|
|
13
|
-
describe User, "loaded plugin configuration" do
|
|
14
|
-
before(:all) do
|
|
15
|
-
sorcery_reload!([:remember_me])
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
after(:each) do
|
|
19
|
-
User.sorcery_config.reset!
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "should allow configuration option 'remember_me_token_attribute_name'" do
|
|
23
|
-
sorcery_model_property_set(:remember_me_token_attribute_name, :my_token)
|
|
24
|
-
User.sorcery_config.remember_me_token_attribute_name.should equal(:my_token)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should allow configuration option 'remember_me_token_expires_at_attribute_name'" do
|
|
28
|
-
sorcery_model_property_set(:remember_me_token_expires_at_attribute_name, :my_expires)
|
|
29
|
-
User.sorcery_config.remember_me_token_expires_at_attribute_name.should equal(:my_expires)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "should respond to 'remember_me!'" do
|
|
33
|
-
create_new_user
|
|
34
|
-
@user.should respond_to(:remember_me!)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "should respond to 'forget_me!'" do
|
|
38
|
-
create_new_user
|
|
39
|
-
@user.should respond_to(:forget_me!)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "should generate a new token on 'remember_me!'" do
|
|
43
|
-
create_new_user
|
|
44
|
-
@user.remember_me_token.should be_nil
|
|
45
|
-
@user.remember_me!
|
|
46
|
-
@user.remember_me_token.should_not be_nil
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it "should set an expiration based on 'remember_me_for' attribute" do
|
|
50
|
-
create_new_user
|
|
51
|
-
sorcery_model_property_set(:remember_me_for, 2 * 60 * 60 * 24)
|
|
52
|
-
@user.remember_me!
|
|
53
|
-
@user.remember_me_token_expires_at.to_s.should == (Time.now + 2 * 60 * 60 * 24).to_s
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "should delete the token and expiration on 'forget_me!'" do
|
|
57
|
-
create_new_user
|
|
58
|
-
@user.remember_me!
|
|
59
|
-
@user.remember_me_token.should_not be_nil
|
|
60
|
-
@user.forget_me!
|
|
61
|
-
@user.remember_me_token.should be_nil
|
|
62
|
-
@user.remember_me_token_expires_at.should be_nil
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
end
|
|
@@ -1,178 +0,0 @@
|
|
|
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
|