sorcery 0.3.0 → 0.4.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 +3 -2
- data/Gemfile.lock +13 -11
- data/README.rdoc +99 -33
- data/Rakefile +4 -4
- data/VERSION +1 -1
- data/lib/generators/sorcery_migration/templates/core.rb +2 -2
- data/lib/generators/sorcery_migration/templates/{oauth.rb → external.rb} +1 -1
- data/lib/sorcery/controller/submodules/external/protocols/oauth1.rb +35 -0
- data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +26 -0
- data/lib/sorcery/controller/submodules/{oauth → external}/providers/facebook.rb +24 -6
- data/lib/sorcery/controller/submodules/{oauth → external}/providers/twitter.rb +31 -6
- data/lib/sorcery/controller/submodules/{oauth.rb → external.rb} +18 -30
- data/lib/sorcery/controller/submodules/http_basic_auth.rb +1 -1
- data/lib/sorcery/controller.rb +21 -21
- data/lib/sorcery/crypto_providers/bcrypt.rb +1 -1
- 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/{oauth.rb → external.rb} +3 -3
- data/lib/sorcery/model.rb +13 -8
- data/lib/sorcery/railties/tasks.rake +10 -0
- data/lib/sorcery/sinatra.rb +0 -9
- data/lib/sorcery/test_helpers/rails.rb +6 -9
- data/lib/sorcery/test_helpers/sinatra.rb +6 -9
- data/lib/sorcery/test_helpers.rb +12 -0
- data/lib/sorcery.rb +10 -7
- data/sorcery.gemspec +146 -153
- data/spec/Gemfile +2 -2
- data/spec/Gemfile.lock +10 -10
- 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/{app_root/app → app}/controllers/application_controller.rb +11 -11
- data/spec/rails3/config/database.yml +27 -0
- 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 +23 -22
- data/spec/rails3/{app_root/spec → spec}/controller_oauth_spec.rb +17 -17
- data/spec/rails3/{app_root/spec → spec}/controller_session_timeout_spec.rb +8 -4
- 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 +5 -1
- data/spec/{sinatra → rails3}/spec/user_oauth_spec.rb +7 -7
- data/spec/rails3/{app_root/spec → spec}/user_reset_password_spec.rb +7 -3
- data/spec/rails3/{app_root/spec → spec}/user_spec.rb +5 -11
- data/spec/sinatra/Gemfile +3 -3
- data/spec/sinatra/Gemfile.lock +17 -17
- data/spec/sinatra/Rakefile +1 -0
- data/spec/sinatra/myapp.rb +11 -11
- data/spec/sinatra/spec/controller_brute_force_protection_spec.rb +3 -2
- data/spec/sinatra/spec/controller_oauth2_spec.rb +23 -22
- data/spec/sinatra/spec/controller_oauth_spec.rb +17 -17
- data/spec/sinatra/spec/controller_session_timeout_spec.rb +8 -4
- data/spec/sinatra/spec/spec.opts +2 -4
- data/spec/sinatra/spec/spec_helper.rb +2 -1
- data/spec/sorcery_crypto_providers_spec.rb +5 -4
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +3 -4
- metadata +157 -156
- data/lib/sorcery/controller/submodules/oauth/oauth1.rb +0 -33
- data/lib/sorcery/controller/submodules/oauth/oauth2.rb +0 -24
- data/spec/rails3/app_root/.rspec +0 -1
- data/spec/rails3/app_root/config/database.yml +0 -27
- data/spec/rails3/app_root/spec/spec_helper.rb +0 -62
- data/spec/rails3/app_root/spec/user_oauth_spec.rb +0 -39
- 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_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}/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/migrate/oauth → 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_activity_logging_spec.rb +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}/controller_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/spec → spec}/user_brute_force_protection_spec.rb +0 -0
- /data/spec/rails3/{app_root/spec → spec}/user_remember_me_spec.rb +0 -0
- /data/spec/rails3/{app_root/vendor → vendor}/plugins/.gitkeep +0 -0
- /data/spec/sinatra/db/migrate/{oauth → external}/20101224223628_create_authentications.rb +0 -0
|
@@ -22,7 +22,7 @@ class ApplicationController < ActionController::Base
|
|
|
22
22
|
|
|
23
23
|
def test_return_to
|
|
24
24
|
@user = login(params[:username], params[:password])
|
|
25
|
-
|
|
25
|
+
redirect_back_or_to(:index, :notice => 'haha!')
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def test_logout
|
|
@@ -66,24 +66,24 @@ class ApplicationController < ActionController::Base
|
|
|
66
66
|
render :text => "HTTP Basic Auth"
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
-
def
|
|
70
|
-
|
|
69
|
+
def login_at_test
|
|
70
|
+
login_at(:twitter)
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
-
def
|
|
74
|
-
|
|
73
|
+
def login_at_test2
|
|
74
|
+
login_at(:facebook)
|
|
75
75
|
end
|
|
76
76
|
|
|
77
|
-
def
|
|
78
|
-
if @user =
|
|
77
|
+
def test_login_from
|
|
78
|
+
if @user = login_from(:twitter)
|
|
79
79
|
redirect_to "bla", :notice => "Success!"
|
|
80
80
|
else
|
|
81
81
|
redirect_to "blu", :alert => "Failed!"
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
|
85
|
-
def
|
|
86
|
-
if @user =
|
|
85
|
+
def test_login_from2
|
|
86
|
+
if @user = login_from(:facebook)
|
|
87
87
|
redirect_to "bla", :notice => "Success!"
|
|
88
88
|
else
|
|
89
89
|
redirect_to "blu", :alert => "Failed!"
|
|
@@ -92,8 +92,8 @@ class ApplicationController < ActionController::Base
|
|
|
92
92
|
|
|
93
93
|
def test_create_from_provider
|
|
94
94
|
provider = params[:provider]
|
|
95
|
-
|
|
96
|
-
if @user =
|
|
95
|
+
login_from(provider)
|
|
96
|
+
if @user = create_from(provider)
|
|
97
97
|
redirect_to "bla", :notice => "Success!"
|
|
98
98
|
else
|
|
99
99
|
redirect_to "blu", :alert => "Failed!"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# SQLite version 3.x
|
|
2
|
+
# gem install sqlite3-ruby (not necessary on OS X Leopard)
|
|
3
|
+
# development:
|
|
4
|
+
# adapter: sqlite3
|
|
5
|
+
# database: db/development.sqlite3
|
|
6
|
+
# pool: 5
|
|
7
|
+
# timeout: 5000
|
|
8
|
+
#
|
|
9
|
+
# # Warning: The database defined as "test" will be erased and
|
|
10
|
+
# # re-generated from your development database when you run "rake".
|
|
11
|
+
# # Do not set this db to the same as development or production.
|
|
12
|
+
# test:
|
|
13
|
+
# adapter: sqlite3
|
|
14
|
+
# database: db/test.sqlite3
|
|
15
|
+
# pool: 5
|
|
16
|
+
# timeout: 5000
|
|
17
|
+
#
|
|
18
|
+
# production:
|
|
19
|
+
# adapter: sqlite3
|
|
20
|
+
# database: db/production.sqlite3
|
|
21
|
+
# pool: 5
|
|
22
|
+
# timeout: 5000
|
|
23
|
+
|
|
24
|
+
in_memory:
|
|
25
|
+
adapter: sqlite3
|
|
26
|
+
database: ":memory:"
|
|
27
|
+
verbosity: quiet
|
|
@@ -19,6 +19,7 @@ describe ApplicationController do
|
|
|
19
19
|
after(:each) do
|
|
20
20
|
Sorcery::Controller::Config.reset!
|
|
21
21
|
sorcery_controller_property_set(:user_class, User)
|
|
22
|
+
Timecop.return
|
|
22
23
|
end
|
|
23
24
|
|
|
24
25
|
it "should count login retries" do
|
|
@@ -46,7 +47,7 @@ describe ApplicationController do
|
|
|
46
47
|
get :test_login, :username => 'gizmo', :password => 'blabla'
|
|
47
48
|
get :test_login, :username => 'gizmo', :password => 'blabla'
|
|
48
49
|
User.find_by_username('gizmo').lock_expires_at.should_not be_nil
|
|
49
|
-
|
|
50
|
+
Timecop.travel(Time.now + 0.3)
|
|
50
51
|
get :test_login, :username => 'gizmo', :password => 'blabla'
|
|
51
52
|
User.find_by_username('gizmo').lock_expires_at.should be_nil
|
|
52
53
|
end
|
|
@@ -57,7 +58,7 @@ describe ApplicationController do
|
|
|
57
58
|
get :test_login, :username => 'gizmo', :password => 'blabla'
|
|
58
59
|
get :test_login, :username => 'gizmo', :password => 'blabla'
|
|
59
60
|
unlock_date = User.find_by_username('gizmo').lock_expires_at
|
|
60
|
-
|
|
61
|
+
Timecop.travel(Time.now + 1)
|
|
61
62
|
get :test_login, :username => 'gizmo', :password => 'blabla'
|
|
62
63
|
User.find_by_username('gizmo').lock_expires_at.to_s.should == unlock_date.to_s
|
|
63
64
|
end
|
|
@@ -12,16 +12,16 @@ end
|
|
|
12
12
|
|
|
13
13
|
describe ApplicationController do
|
|
14
14
|
before(:all) do
|
|
15
|
-
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/
|
|
16
|
-
sorcery_reload!([:
|
|
17
|
-
sorcery_controller_property_set(:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/external")
|
|
16
|
+
sorcery_reload!([:external])
|
|
17
|
+
sorcery_controller_property_set(:external_providers, [:facebook])
|
|
18
|
+
sorcery_controller_external_property_set(:facebook, :key, "eYVNBjBDi33aa9GkA3w")
|
|
19
|
+
sorcery_controller_external_property_set(:facebook, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
|
|
20
|
+
sorcery_controller_external_property_set(:facebook, :callback_url, "http://blabla.com")
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
after(:all) do
|
|
24
|
-
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/
|
|
24
|
+
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
|
|
25
25
|
end
|
|
26
26
|
# ----------------- OAuth -----------------------
|
|
27
27
|
describe ApplicationController, "with OAuth features" do
|
|
@@ -35,29 +35,30 @@ describe ApplicationController do
|
|
|
35
35
|
Authentication.delete_all
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
it "
|
|
38
|
+
it "login_at redirects correctly" do
|
|
39
39
|
create_new_user
|
|
40
|
-
get :
|
|
40
|
+
get :login_at_test2
|
|
41
41
|
response.should be_a_redirect
|
|
42
|
-
response.should redirect_to("http://myapi.com/oauth/authorize?client_id=key&redirect_uri=http%3A%2F%2Fblabla.com&scope=email%2Coffline_access&type=web_server")
|
|
42
|
+
#response.should redirect_to("http://myapi.com/oauth/authorize?client_id=key&redirect_uri=http%3A%2F%2Fblabla.com&scope=email%2Coffline_access&type=web_server")
|
|
43
|
+
response.should redirect_to("http://myapi.com/oauth/authorize?client_id=key&redirect_uri=http%3A%2F%2Fblabla.com&scope=email%2Coffline_access&response_type=code")
|
|
43
44
|
end
|
|
44
45
|
|
|
45
|
-
it "'
|
|
46
|
+
it "'login_from' logins if user exists" do
|
|
46
47
|
sorcery_model_property_set(:authentications_class, Authentication)
|
|
47
48
|
create_new_external_user(:facebook)
|
|
48
|
-
get :
|
|
49
|
+
get :test_login_from2
|
|
49
50
|
flash[:notice].should == "Success!"
|
|
50
51
|
end
|
|
51
52
|
|
|
52
|
-
it "'
|
|
53
|
+
it "'login_from' fails if user doesn't exist" do
|
|
53
54
|
sorcery_model_property_set(:authentications_class, Authentication)
|
|
54
55
|
create_new_user
|
|
55
|
-
get :
|
|
56
|
+
get :test_login_from2
|
|
56
57
|
flash[:alert].should == "Failed!"
|
|
57
58
|
end
|
|
58
59
|
end
|
|
59
60
|
|
|
60
|
-
describe ApplicationController, "'
|
|
61
|
+
describe ApplicationController, "'create_from'" do
|
|
61
62
|
before(:each) do
|
|
62
63
|
stub_all_oauth2_requests!
|
|
63
64
|
User.delete_all
|
|
@@ -66,7 +67,7 @@ describe ApplicationController do
|
|
|
66
67
|
|
|
67
68
|
it "should create a new user" do
|
|
68
69
|
sorcery_model_property_set(:authentications_class, Authentication)
|
|
69
|
-
|
|
70
|
+
sorcery_controller_external_property_set(:facebook, :user_info_mapping, {:username => "name"})
|
|
70
71
|
lambda do
|
|
71
72
|
get :test_create_from_provider, :provider => "facebook"
|
|
72
73
|
end.should change(User, :count).by(1)
|
|
@@ -75,7 +76,7 @@ describe ApplicationController do
|
|
|
75
76
|
|
|
76
77
|
it "should support nested attributes" do
|
|
77
78
|
sorcery_model_property_set(:authentications_class, Authentication)
|
|
78
|
-
|
|
79
|
+
sorcery_controller_external_property_set(:facebook, :user_info_mapping, {:username => "hometown/name"})
|
|
79
80
|
lambda do
|
|
80
81
|
get :test_create_from_provider, :provider => "facebook"
|
|
81
82
|
end.should change(User, :count).by(1)
|
|
@@ -86,11 +87,11 @@ describe ApplicationController do
|
|
|
86
87
|
describe ApplicationController, "OAuth with User Activation features" do
|
|
87
88
|
before(:all) do
|
|
88
89
|
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/activation")
|
|
89
|
-
sorcery_reload!([:user_activation,:
|
|
90
|
-
sorcery_controller_property_set(:
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
sorcery_reload!([:user_activation,:external], :user_activation_mailer => ::SorceryMailer)
|
|
91
|
+
sorcery_controller_property_set(:external_providers, [:facebook])
|
|
92
|
+
sorcery_controller_external_property_set(:facebook, :key, "eYVNBjBDi33aa9GkA3w")
|
|
93
|
+
sorcery_controller_external_property_set(:facebook, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
|
|
94
|
+
sorcery_controller_external_property_set(:facebook, :callback_url, "http://blabla.com")
|
|
94
95
|
end
|
|
95
96
|
|
|
96
97
|
after(:all) do
|
|
@@ -19,19 +19,19 @@ end
|
|
|
19
19
|
|
|
20
20
|
describe ApplicationController do
|
|
21
21
|
before(:all) do
|
|
22
|
-
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/
|
|
23
|
-
sorcery_reload!([:
|
|
24
|
-
sorcery_controller_property_set(:
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/external")
|
|
23
|
+
sorcery_reload!([:external])
|
|
24
|
+
sorcery_controller_property_set(:external_providers, [:twitter])
|
|
25
|
+
sorcery_controller_external_property_set(:twitter, :key, "eYVNBjBDi33aa9GkA3w")
|
|
26
|
+
sorcery_controller_external_property_set(:twitter, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
|
|
27
|
+
sorcery_controller_external_property_set(:twitter, :callback_url, "http://blabla.com")
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
after(:all) do
|
|
31
|
-
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/
|
|
31
|
+
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
|
|
32
32
|
end
|
|
33
33
|
# ----------------- OAuth -----------------------
|
|
34
|
-
describe ApplicationController, "'
|
|
34
|
+
describe ApplicationController, "'login_from'" do
|
|
35
35
|
|
|
36
36
|
before(:each) do
|
|
37
37
|
stub_all_oauth_requests!
|
|
@@ -42,9 +42,9 @@ describe ApplicationController do
|
|
|
42
42
|
Authentication.delete_all
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
it "
|
|
45
|
+
it "login_at redirects correctly" do
|
|
46
46
|
create_new_user
|
|
47
|
-
get :
|
|
47
|
+
get :login_at_test
|
|
48
48
|
response.should be_a_redirect
|
|
49
49
|
response.should redirect_to("http://myapi.com/oauth/authorize?oauth_callback=http%3A%2F%2Fblabla.com&oauth_token=")
|
|
50
50
|
end
|
|
@@ -52,19 +52,19 @@ describe ApplicationController do
|
|
|
52
52
|
it "logins if user exists" do
|
|
53
53
|
sorcery_model_property_set(:authentications_class, Authentication)
|
|
54
54
|
create_new_external_user(:twitter)
|
|
55
|
-
get :
|
|
55
|
+
get :test_login_from, :oauth_verifier => "blablaRERASDFcxvSDFA"
|
|
56
56
|
flash[:notice].should == "Success!"
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
-
it "'
|
|
59
|
+
it "'login_from' fails if user doesn't exist" do
|
|
60
60
|
sorcery_model_property_set(:authentications_class, Authentication)
|
|
61
61
|
create_new_user
|
|
62
|
-
get :
|
|
62
|
+
get :test_login_from, :oauth_verifier => "blablaRERASDFcxvSDFA"
|
|
63
63
|
flash[:alert].should == "Failed!"
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
|
|
67
|
-
describe ApplicationController, "'
|
|
67
|
+
describe ApplicationController, "'create_from'" do
|
|
68
68
|
before(:each) do
|
|
69
69
|
stub_all_oauth_requests!
|
|
70
70
|
User.delete_all
|
|
@@ -73,7 +73,7 @@ describe ApplicationController do
|
|
|
73
73
|
|
|
74
74
|
it "should create a new user" do
|
|
75
75
|
sorcery_model_property_set(:authentications_class, Authentication)
|
|
76
|
-
|
|
76
|
+
sorcery_controller_external_property_set(:twitter, :user_info_mapping, {:username => "screen_name"})
|
|
77
77
|
lambda do
|
|
78
78
|
get :test_create_from_provider, :provider => "twitter"
|
|
79
79
|
end.should change(User, :count).by(1)
|
|
@@ -82,7 +82,7 @@ describe ApplicationController do
|
|
|
82
82
|
|
|
83
83
|
it "should support nested attributes" do
|
|
84
84
|
sorcery_model_property_set(:authentications_class, Authentication)
|
|
85
|
-
|
|
85
|
+
sorcery_controller_external_property_set(:twitter, :user_info_mapping, {:username => "status/text"})
|
|
86
86
|
lambda do
|
|
87
87
|
get :test_create_from_provider, :provider => "twitter"
|
|
88
88
|
end.should change(User, :count).by(1)
|
|
@@ -93,7 +93,7 @@ describe ApplicationController do
|
|
|
93
93
|
describe ApplicationController, "OAuth with User Activation features" do
|
|
94
94
|
before(:all) do
|
|
95
95
|
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/activation")
|
|
96
|
-
sorcery_reload!([:user_activation,:
|
|
96
|
+
sorcery_reload!([:user_activation,:external], :user_activation_mailer => ::SorceryMailer)
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
after(:all) do
|
|
@@ -10,6 +10,10 @@ describe ApplicationController do
|
|
|
10
10
|
create_new_user
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
+
after(:each) do
|
|
14
|
+
Timecop.return
|
|
15
|
+
end
|
|
16
|
+
|
|
13
17
|
it "should not reset session before session timeout" do
|
|
14
18
|
login_user
|
|
15
19
|
get :test_should_be_logged_in
|
|
@@ -19,7 +23,7 @@ describe ApplicationController do
|
|
|
19
23
|
|
|
20
24
|
it "should reset session after session timeout" do
|
|
21
25
|
login_user
|
|
22
|
-
|
|
26
|
+
Timecop.travel(Time.now+0.6)
|
|
23
27
|
get :test_should_be_logged_in
|
|
24
28
|
session[:user_id].should be_nil
|
|
25
29
|
response.should be_a_redirect
|
|
@@ -28,10 +32,10 @@ describe ApplicationController do
|
|
|
28
32
|
it "with 'session_timeout_from_last_action' should not logout if there was activity" do
|
|
29
33
|
sorcery_controller_property_set(:session_timeout_from_last_action, true)
|
|
30
34
|
get :test_login, :username => 'gizmo', :password => 'secret'
|
|
31
|
-
|
|
35
|
+
Timecop.travel(Time.now+0.3)
|
|
32
36
|
get :test_should_be_logged_in
|
|
33
37
|
session[:user_id].should_not be_nil
|
|
34
|
-
|
|
38
|
+
Timecop.travel(Time.now+0.3)
|
|
35
39
|
get :test_should_be_logged_in
|
|
36
40
|
session[:user_id].should_not be_nil
|
|
37
41
|
response.should be_a_success
|
|
@@ -40,7 +44,7 @@ describe ApplicationController do
|
|
|
40
44
|
it "with 'session_timeout_from_last_action' should logout if there was no activity" do
|
|
41
45
|
sorcery_controller_property_set(:session_timeout_from_last_action, true)
|
|
42
46
|
get :test_login, :username => 'gizmo', :password => 'secret'
|
|
43
|
-
|
|
47
|
+
Timecop.travel(Time.now+0.6)
|
|
44
48
|
get :test_should_be_logged_in
|
|
45
49
|
session[:user_id].should be_nil
|
|
46
50
|
response.should be_a_redirect
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
$: << File.join(File.dirname(__FILE__), '..', '..', 'lib' )
|
|
2
|
+
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
|
3
|
+
# Set the default environment to sqlite3's in_memory database
|
|
4
|
+
ENV['RAILS_ENV'] ||= 'in_memory'
|
|
5
|
+
require File.expand_path("../../config/environment", __FILE__)
|
|
6
|
+
require 'rspec/rails'
|
|
7
|
+
require 'timecop'
|
|
8
|
+
# require 'simplecov'
|
|
9
|
+
# SimpleCov.root File.join(File.dirname(__FILE__), "..", "..", "rails3" )
|
|
10
|
+
# SimpleCov.start do
|
|
11
|
+
# add_filter "/config/"
|
|
12
|
+
#
|
|
13
|
+
# add_group 'Controllers', 'app/controllers'
|
|
14
|
+
# add_group 'Models', 'app/models'
|
|
15
|
+
# add_group 'Helpers', 'app/helpers'
|
|
16
|
+
# add_group 'Libraries', 'lib'
|
|
17
|
+
# add_group 'Plugins', 'vendor/plugins'
|
|
18
|
+
# add_group 'Migrations', 'db/migrate'
|
|
19
|
+
# end
|
|
20
|
+
|
|
21
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
|
22
|
+
# in spec/support/ and its subdirectories.
|
|
23
|
+
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
RSpec.configure do |config|
|
|
28
|
+
config.include RSpec::Rails::ControllerExampleGroup, :example_group => { :file_path => /controller(.)*_spec.rb$/ }
|
|
29
|
+
# == Mock Framework
|
|
30
|
+
#
|
|
31
|
+
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
|
32
|
+
#
|
|
33
|
+
# config.mock_with :mocha
|
|
34
|
+
# config.mock_with :flexmock
|
|
35
|
+
# config.mock_with :rr
|
|
36
|
+
config.mock_with :rspec
|
|
37
|
+
|
|
38
|
+
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
|
39
|
+
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
|
40
|
+
|
|
41
|
+
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
|
42
|
+
# examples within a transaction, remove the following line or assign false
|
|
43
|
+
# instead of true.
|
|
44
|
+
config.use_transactional_fixtures = true
|
|
45
|
+
|
|
46
|
+
config.before(:suite) do
|
|
47
|
+
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/core")
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
config.after(:suite) do
|
|
51
|
+
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/core")
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
#----------------------------------------------------------------
|
|
56
|
+
# needed when running individual specs
|
|
57
|
+
require File.join(File.dirname(__FILE__), '..','app','models','user')
|
|
58
|
+
require File.join(File.dirname(__FILE__), '..','app','models','authentication')
|
|
59
|
+
|
|
60
|
+
class TestUser < ActiveRecord::Base
|
|
61
|
+
authenticates_with_sorcery!
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
class TestMailer < ActionMailer::Base
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
include ::Sorcery::TestHelpers
|
|
69
|
+
include ::Sorcery::TestHelpers::Rails
|
|
70
|
+
|
|
@@ -150,6 +150,10 @@ describe "User with activation submodule" do
|
|
|
150
150
|
sorcery_reload!([:user_activation], :user_activation_mailer => ::SorceryMailer)
|
|
151
151
|
end
|
|
152
152
|
|
|
153
|
+
after(:each) do
|
|
154
|
+
Timecop.return
|
|
155
|
+
end
|
|
156
|
+
|
|
153
157
|
it "load_from_activation_token should return user when token is found" do
|
|
154
158
|
create_new_user
|
|
155
159
|
User.load_from_activation_token(@user.activation_token).should == @user
|
|
@@ -169,7 +173,7 @@ describe "User with activation submodule" do
|
|
|
169
173
|
it "load_from_activation_token should NOT return user when token is found and expired" do
|
|
170
174
|
sorcery_model_property_set(:activation_token_expiration_period, 0.1)
|
|
171
175
|
create_new_user
|
|
172
|
-
|
|
176
|
+
Timecop.travel(Time.now+0.5)
|
|
173
177
|
User.load_from_activation_token(@user.activation_token).should == nil
|
|
174
178
|
end
|
|
175
179
|
|
|
@@ -2,23 +2,23 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
|
2
2
|
|
|
3
3
|
describe "User with oauth submodule" do
|
|
4
4
|
before(:all) do
|
|
5
|
-
ActiveRecord::Migrator.migrate("#{
|
|
5
|
+
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/external")
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
after(:all) do
|
|
9
|
-
ActiveRecord::Migrator.rollback("#{
|
|
9
|
+
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
# ----------------- PLUGIN CONFIGURATION -----------------------
|
|
13
13
|
describe User, "loaded plugin configuration" do
|
|
14
14
|
|
|
15
15
|
before(:all) do
|
|
16
|
-
sorcery_reload!([:
|
|
17
|
-
sorcery_controller_property_set(:
|
|
16
|
+
sorcery_reload!([:external])
|
|
17
|
+
sorcery_controller_property_set(:external_providers, [:twitter])
|
|
18
18
|
sorcery_model_property_set(:authentications_class, Authentication)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
sorcery_controller_external_property_set(:twitter, :key, "eYVNBjBDi33aa9GkA3w")
|
|
20
|
+
sorcery_controller_external_property_set(:twitter, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
|
|
21
|
+
sorcery_controller_external_property_set(:twitter, :callback_url, "http://blabla.com")
|
|
22
22
|
create_new_external_user(:twitter)
|
|
23
23
|
end
|
|
24
24
|
|
|
@@ -76,7 +76,11 @@ describe "User with reset_password submodule" do
|
|
|
76
76
|
before(:each) do
|
|
77
77
|
User.delete_all
|
|
78
78
|
end
|
|
79
|
-
|
|
79
|
+
|
|
80
|
+
after(:each) do
|
|
81
|
+
Timecop.return
|
|
82
|
+
end
|
|
83
|
+
|
|
80
84
|
it "load_from_reset_password_token should return user when token is found" do
|
|
81
85
|
create_new_user
|
|
82
86
|
@user.deliver_reset_password_instructions!
|
|
@@ -100,7 +104,7 @@ describe "User with reset_password submodule" do
|
|
|
100
104
|
create_new_user
|
|
101
105
|
sorcery_model_property_set(:reset_password_expiration_period, 0.1)
|
|
102
106
|
@user.deliver_reset_password_instructions!
|
|
103
|
-
|
|
107
|
+
Timecop.travel(Time.now+0.5)
|
|
104
108
|
User.load_from_reset_password_token(@user.reset_password_token).should == nil
|
|
105
109
|
end
|
|
106
110
|
|
|
@@ -164,7 +168,7 @@ describe "User with reset_password submodule" do
|
|
|
164
168
|
old_size = ActionMailer::Base.deliveries.size
|
|
165
169
|
@user.deliver_reset_password_instructions!
|
|
166
170
|
ActionMailer::Base.deliveries.size.should == old_size + 1
|
|
167
|
-
|
|
171
|
+
Timecop.travel(Time.now+0.5)
|
|
168
172
|
@user.deliver_reset_password_instructions!
|
|
169
173
|
ActionMailer::Base.deliveries.size.should == old_size + 2
|
|
170
174
|
end
|
|
@@ -8,14 +8,8 @@ describe "User with no submodules (core)" do
|
|
|
8
8
|
|
|
9
9
|
describe User, "when app has plugin loaded" do
|
|
10
10
|
it "should respond to the plugin activation class method" do
|
|
11
|
-
ActiveRecord::Base.should respond_to(:
|
|
12
|
-
User.should respond_to(:
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "plugin activation should yield config to block" do
|
|
16
|
-
User.activate_sorcery! do |config|
|
|
17
|
-
config.class.should == ::Sorcery::Model::Config
|
|
18
|
-
end
|
|
11
|
+
ActiveRecord::Base.should respond_to(:authenticates_with_sorcery!)
|
|
12
|
+
User.should respond_to(:authenticates_with_sorcery!)
|
|
19
13
|
end
|
|
20
14
|
end
|
|
21
15
|
|
|
@@ -23,7 +17,7 @@ describe "User with no submodules (core)" do
|
|
|
23
17
|
describe TestUser, "Testing activated class self-registration" do
|
|
24
18
|
it "should register itself as user_class if activated" do
|
|
25
19
|
TestUser.class_eval do
|
|
26
|
-
|
|
20
|
+
authenticates_with_sorcery!
|
|
27
21
|
end
|
|
28
22
|
::Sorcery::Controller::Config.user_class.should == TestUser
|
|
29
23
|
end
|
|
@@ -286,12 +280,12 @@ describe "User with no submodules (core)" do
|
|
|
286
280
|
|
|
287
281
|
describe User, "external users" do
|
|
288
282
|
before(:all) do
|
|
289
|
-
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/
|
|
283
|
+
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/external")
|
|
290
284
|
sorcery_reload!()
|
|
291
285
|
end
|
|
292
286
|
|
|
293
287
|
after(:all) do
|
|
294
|
-
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/
|
|
288
|
+
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
|
|
295
289
|
end
|
|
296
290
|
|
|
297
291
|
before(:each) do
|
data/spec/sinatra/Gemfile
CHANGED
|
@@ -2,11 +2,11 @@ source 'http://rubygems.org'
|
|
|
2
2
|
|
|
3
3
|
gem 'sinatra', '>= 1.2.0'
|
|
4
4
|
gem 'sqlite3-ruby', :require => 'sqlite3'
|
|
5
|
-
gem "sorcery", '0.
|
|
5
|
+
gem "sorcery", '0.4.0', :path => '../../'
|
|
6
6
|
|
|
7
7
|
group :development, :test do
|
|
8
|
-
gem
|
|
8
|
+
gem "rspec", "~> 2.5.0"
|
|
9
9
|
gem 'ruby-debug19'
|
|
10
10
|
gem 'simplecov', '>= 0.3.8', :require => false # Will install simplecov-html as a dependency
|
|
11
|
-
gem '
|
|
11
|
+
gem 'timecop'
|
|
12
12
|
end
|
data/spec/sinatra/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: ../../
|
|
3
3
|
specs:
|
|
4
|
-
sorcery (0.
|
|
4
|
+
sorcery (0.4.0)
|
|
5
5
|
bcrypt-ruby (~> 2.1.4)
|
|
6
6
|
json (>= 1.5.1)
|
|
7
7
|
oauth (>= 0.4.4)
|
|
@@ -40,7 +40,7 @@ GEM
|
|
|
40
40
|
activemodel (= 3.0.3)
|
|
41
41
|
activesupport (= 3.0.3)
|
|
42
42
|
activesupport (3.0.3)
|
|
43
|
-
addressable (2.2.
|
|
43
|
+
addressable (2.2.5)
|
|
44
44
|
archive-tar-minitar (0.5.2)
|
|
45
45
|
arel (2.0.7)
|
|
46
46
|
bcrypt-ruby (2.1.4)
|
|
@@ -49,7 +49,7 @@ GEM
|
|
|
49
49
|
diff-lcs (1.1.2)
|
|
50
50
|
erubis (2.6.6)
|
|
51
51
|
abstract (>= 1.0.0)
|
|
52
|
-
faraday (0.
|
|
52
|
+
faraday (0.6.1)
|
|
53
53
|
addressable (~> 2.2.4)
|
|
54
54
|
multipart-post (~> 1.1.0)
|
|
55
55
|
rack (< 2, >= 1.1.0)
|
|
@@ -66,12 +66,12 @@ GEM
|
|
|
66
66
|
multi_json (0.0.5)
|
|
67
67
|
multipart-post (1.1.0)
|
|
68
68
|
oauth (0.4.4)
|
|
69
|
-
oauth2 (0.
|
|
70
|
-
faraday (~> 0.
|
|
69
|
+
oauth2 (0.4.0)
|
|
70
|
+
faraday (~> 0.6.0)
|
|
71
71
|
multi_json (~> 0.0.4)
|
|
72
72
|
polyglot (0.3.1)
|
|
73
73
|
rack (1.2.1)
|
|
74
|
-
rack-mount (0.6.
|
|
74
|
+
rack-mount (0.6.14)
|
|
75
75
|
rack (>= 1.0.0)
|
|
76
76
|
rack-test (0.5.7)
|
|
77
77
|
rack (>= 1.0)
|
|
@@ -89,14 +89,14 @@ GEM
|
|
|
89
89
|
rake (>= 0.8.7)
|
|
90
90
|
thor (~> 0.14.4)
|
|
91
91
|
rake (0.8.7)
|
|
92
|
-
rspec (2.
|
|
93
|
-
rspec-core (~> 2.
|
|
94
|
-
rspec-expectations (~> 2.
|
|
95
|
-
rspec-mocks (~> 2.
|
|
96
|
-
rspec-core (2.
|
|
97
|
-
rspec-expectations (2.
|
|
92
|
+
rspec (2.5.0)
|
|
93
|
+
rspec-core (~> 2.5.0)
|
|
94
|
+
rspec-expectations (~> 2.5.0)
|
|
95
|
+
rspec-mocks (~> 2.5.0)
|
|
96
|
+
rspec-core (2.5.1)
|
|
97
|
+
rspec-expectations (2.5.0)
|
|
98
98
|
diff-lcs (~> 1.1.2)
|
|
99
|
-
rspec-mocks (2.
|
|
99
|
+
rspec-mocks (2.5.0)
|
|
100
100
|
ruby-debug-base19 (0.11.24)
|
|
101
101
|
columnize (>= 0.3.1)
|
|
102
102
|
linecache19 (>= 0.5.11)
|
|
@@ -113,10 +113,10 @@ GEM
|
|
|
113
113
|
sinatra (1.2.0)
|
|
114
114
|
rack (~> 1.1)
|
|
115
115
|
tilt (< 2.0, >= 1.2.2)
|
|
116
|
-
spork (0.9.0.rc3)
|
|
117
116
|
sqlite3-ruby (1.3.2)
|
|
118
117
|
thor (0.14.6)
|
|
119
118
|
tilt (1.2.2)
|
|
119
|
+
timecop (0.3.5)
|
|
120
120
|
treetop (1.4.9)
|
|
121
121
|
polyglot (>= 0.3.1)
|
|
122
122
|
tzinfo (0.3.24)
|
|
@@ -125,10 +125,10 @@ PLATFORMS
|
|
|
125
125
|
ruby
|
|
126
126
|
|
|
127
127
|
DEPENDENCIES
|
|
128
|
-
rspec
|
|
128
|
+
rspec (~> 2.5.0)
|
|
129
129
|
ruby-debug19
|
|
130
130
|
simplecov (>= 0.3.8)
|
|
131
131
|
sinatra (>= 1.2.0)
|
|
132
|
-
sorcery (= 0.
|
|
133
|
-
spork (~> 0.9.0.rc)
|
|
132
|
+
sorcery (= 0.4.0)!
|
|
134
133
|
sqlite3-ruby
|
|
134
|
+
timecop
|