sorcery 0.9.1 → 0.16.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/FUNDING.yml +1 -0
- data/.github/ISSUE_TEMPLATE.md +24 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +7 -0
- data/.github/workflows/ruby.yml +70 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +55 -0
- data/.rubocop_todo.yml +163 -0
- data/CHANGELOG.md +132 -34
- data/CODE_OF_CONDUCT.md +14 -0
- data/Gemfile +3 -17
- data/{LICENSE.txt → LICENSE.md} +1 -1
- data/MAINTAINING.md +64 -0
- data/README.md +146 -269
- data/Rakefile +4 -2
- data/SECURITY.md +19 -0
- data/gemfiles/rails_52.gemfile +7 -0
- data/gemfiles/rails_60.gemfile +7 -0
- data/gemfiles/rails_61.gemfile +7 -0
- data/gemfiles/rails_70.gemfile +7 -0
- data/lib/generators/sorcery/USAGE +1 -1
- data/lib/generators/sorcery/helpers.rb +8 -4
- data/lib/generators/sorcery/install_generator.rb +41 -35
- data/lib/generators/sorcery/templates/initializer.rb +216 -112
- data/lib/generators/sorcery/templates/migration/activity_logging.rb +7 -7
- data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +5 -5
- data/lib/generators/sorcery/templates/migration/core.rb +5 -7
- data/lib/generators/sorcery/templates/migration/external.rb +4 -4
- data/lib/generators/sorcery/templates/migration/magic_login.rb +9 -0
- data/lib/generators/sorcery/templates/migration/remember_me.rb +5 -5
- data/lib/generators/sorcery/templates/migration/reset_password.rb +7 -6
- data/lib/generators/sorcery/templates/migration/user_activation.rb +6 -6
- data/lib/sorcery/adapters/active_record_adapter.rb +11 -21
- data/lib/sorcery/adapters/mongoid_adapter.rb +23 -11
- data/lib/sorcery/controller/config.rb +27 -23
- data/lib/sorcery/controller/submodules/activity_logging.rb +16 -18
- data/lib/sorcery/controller/submodules/brute_force_protection.rb +1 -2
- data/lib/sorcery/controller/submodules/external.rb +69 -44
- data/lib/sorcery/controller/submodules/http_basic_auth.rb +18 -19
- data/lib/sorcery/controller/submodules/remember_me.rb +16 -16
- data/lib/sorcery/controller/submodules/session_timeout.rb +33 -11
- data/lib/sorcery/controller.rb +50 -35
- data/lib/sorcery/crypto_providers/aes256.rb +17 -16
- data/lib/sorcery/crypto_providers/bcrypt.rb +26 -22
- data/lib/sorcery/crypto_providers/common.rb +1 -1
- data/lib/sorcery/crypto_providers/md5.rb +5 -5
- data/lib/sorcery/crypto_providers/sha1.rb +5 -5
- data/lib/sorcery/crypto_providers/sha256.rb +2 -2
- data/lib/sorcery/crypto_providers/sha512.rb +3 -3
- data/lib/sorcery/engine.rb +19 -11
- data/lib/sorcery/model/config.rb +73 -50
- data/lib/sorcery/model/submodules/activity_logging.rb +31 -12
- data/lib/sorcery/model/submodules/brute_force_protection.rb +38 -31
- data/lib/sorcery/model/submodules/external.rb +22 -10
- data/lib/sorcery/model/submodules/magic_login.rb +130 -0
- data/lib/sorcery/model/submodules/remember_me.rb +19 -7
- data/lib/sorcery/model/submodules/reset_password.rb +64 -42
- data/lib/sorcery/model/submodules/user_activation.rb +52 -54
- data/lib/sorcery/model/temporary_token.rb +30 -7
- data/lib/sorcery/model.rb +65 -40
- data/lib/sorcery/protocols/oauth.rb +4 -9
- data/lib/sorcery/protocols/oauth2.rb +0 -2
- data/lib/sorcery/providers/auth0.rb +46 -0
- data/lib/sorcery/providers/base.rb +4 -4
- data/lib/sorcery/providers/battlenet.rb +51 -0
- data/lib/sorcery/providers/discord.rb +52 -0
- data/lib/sorcery/providers/facebook.rb +8 -11
- data/lib/sorcery/providers/github.rb +5 -7
- data/lib/sorcery/providers/google.rb +3 -5
- data/lib/sorcery/providers/heroku.rb +7 -8
- data/lib/sorcery/providers/instagram.rb +73 -0
- data/lib/sorcery/providers/jira.rb +12 -17
- data/lib/sorcery/providers/line.rb +63 -0
- data/lib/sorcery/providers/linkedin.rb +44 -35
- data/lib/sorcery/providers/liveid.rb +4 -7
- data/lib/sorcery/providers/microsoft.rb +59 -0
- data/lib/sorcery/providers/paypal.rb +60 -0
- data/lib/sorcery/providers/salesforce.rb +3 -5
- data/lib/sorcery/providers/slack.rb +45 -0
- data/lib/sorcery/providers/twitter.rb +4 -6
- data/lib/sorcery/providers/vk.rb +8 -9
- data/lib/sorcery/providers/wechat.rb +81 -0
- data/lib/sorcery/providers/xing.rb +7 -10
- data/lib/sorcery/test_helpers/internal/rails.rb +25 -17
- data/lib/sorcery/test_helpers/internal.rb +15 -14
- data/lib/sorcery/test_helpers/rails/controller.rb +1 -1
- data/lib/sorcery/test_helpers/rails/integration.rb +5 -6
- data/lib/sorcery/test_helpers/rails/request.rb +20 -0
- data/lib/sorcery/version.rb +1 -1
- data/lib/sorcery.rb +4 -17
- data/sorcery.gemspec +43 -28
- data/spec/active_record/user_activation_spec.rb +4 -5
- data/spec/active_record/user_activity_logging_spec.rb +4 -6
- data/spec/active_record/user_brute_force_protection_spec.rb +5 -6
- data/spec/active_record/user_magic_login_spec.rb +15 -0
- data/spec/active_record/user_oauth_spec.rb +5 -6
- data/spec/active_record/user_remember_me_spec.rb +5 -6
- data/spec/active_record/user_reset_password_spec.rb +4 -5
- data/spec/active_record/user_spec.rb +7 -17
- data/spec/controllers/controller_activity_logging_spec.rb +13 -24
- data/spec/controllers/controller_brute_force_protection_spec.rb +8 -10
- data/spec/controllers/controller_http_basic_auth_spec.rb +20 -21
- data/spec/controllers/controller_oauth2_spec.rb +297 -158
- data/spec/controllers/controller_oauth_spec.rb +97 -71
- data/spec/controllers/controller_remember_me_spec.rb +49 -36
- data/spec/controllers/controller_session_timeout_spec.rb +106 -20
- data/spec/controllers/controller_spec.rb +87 -111
- data/spec/orm/active_record.rb +3 -3
- data/spec/providers/example_provider_spec.rb +17 -0
- data/spec/providers/example_spec.rb +17 -0
- data/spec/providers/examples_spec.rb +17 -0
- data/spec/providers/vk_spec.rb +42 -0
- data/spec/rails_app/app/active_record/authentication.rb +1 -1
- data/spec/rails_app/app/active_record/user.rb +2 -2
- data/spec/rails_app/app/assets/config/manifest.js +1 -0
- data/spec/rails_app/app/controllers/application_controller.rb +2 -0
- data/spec/rails_app/app/controllers/sorcery_controller.rb +250 -46
- data/spec/rails_app/app/mailers/sorcery_mailer.rb +23 -17
- data/spec/rails_app/app/views/sorcery_mailer/magic_login_email.html.erb +13 -0
- data/spec/rails_app/app/views/sorcery_mailer/magic_login_email.text.erb +6 -0
- data/spec/rails_app/config/application.rb +14 -9
- data/spec/rails_app/config/boot.rb +2 -2
- data/spec/rails_app/config/environment.rb +1 -1
- data/spec/rails_app/config/environments/test.rb +1 -1
- data/spec/rails_app/config/initializers/compatible_legacy_migration.rb +11 -0
- data/spec/rails_app/config/initializers/session_store.rb +3 -3
- data/spec/rails_app/config/routes.rb +31 -1
- data/spec/rails_app/config/secrets.yml +4 -0
- data/spec/rails_app/config.ru +1 -1
- data/spec/rails_app/db/migrate/activation/20101224223622_add_activation_to_users.rb +4 -4
- data/spec/rails_app/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +10 -10
- data/spec/rails_app/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +5 -5
- data/spec/rails_app/db/migrate/core/20101224223620_create_users.rb +5 -5
- data/spec/rails_app/db/migrate/external/20101224223628_create_authentications_and_user_providers.rb +3 -3
- data/spec/rails_app/db/migrate/invalidate_active_sessions/20180221093235_add_invalidate_active_sessions_before_to_users.rb +9 -0
- data/spec/rails_app/db/migrate/magic_login/20170924151831_add_magic_login_to_users.rb +17 -0
- data/spec/rails_app/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +6 -6
- data/spec/rails_app/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +7 -5
- data/spec/rails_app/db/schema.rb +7 -9
- data/spec/shared_examples/user_activation_shared_examples.rb +177 -58
- data/spec/shared_examples/user_activity_logging_shared_examples.rb +47 -41
- data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +19 -24
- data/spec/shared_examples/user_magic_login_shared_examples.rb +150 -0
- data/spec/shared_examples/user_oauth_shared_examples.rb +7 -10
- data/spec/shared_examples/user_remember_me_shared_examples.rb +91 -22
- data/spec/shared_examples/user_reset_password_shared_examples.rb +153 -58
- data/spec/shared_examples/user_shared_examples.rb +328 -145
- data/spec/sorcery_crypto_providers_spec.rb +122 -75
- data/spec/sorcery_temporary_token_spec.rb +27 -0
- data/spec/spec.opts +1 -1
- data/spec/spec_helper.rb +19 -14
- data/spec/support/migration_helper.rb +29 -0
- data/spec/support/providers/example.rb +11 -0
- data/spec/support/providers/example_provider.rb +11 -0
- data/spec/support/providers/examples.rb +11 -0
- metadata +119 -89
- data/.travis.yml +0 -132
- data/gemfiles/active_record-rails40.gemfile +0 -7
- data/gemfiles/active_record-rails41.gemfile +0 -7
- data/gemfiles/mongo_mapper-rails40.gemfile +0 -9
- data/gemfiles/mongo_mapper-rails41.gemfile +0 -9
- data/gemfiles/mongoid-rails40.gemfile +0 -9
- data/gemfiles/mongoid-rails41.gemfile +0 -9
- data/gemfiles/mongoid3-rails32.gemfile +0 -9
- data/lib/sorcery/adapters/data_mapper_adapter.rb +0 -176
- data/lib/sorcery/adapters/mongo_mapper_adapter.rb +0 -110
- data/lib/sorcery/railties/tasks.rake +0 -6
- data/spec/data_mapper/user_activation_spec.rb +0 -10
- data/spec/data_mapper/user_activity_logging_spec.rb +0 -14
- data/spec/data_mapper/user_brute_force_protection_spec.rb +0 -9
- data/spec/data_mapper/user_oauth_spec.rb +0 -9
- data/spec/data_mapper/user_remember_me_spec.rb +0 -8
- data/spec/data_mapper/user_reset_password_spec.rb +0 -8
- data/spec/data_mapper/user_spec.rb +0 -27
- data/spec/mongo_mapper/user_activation_spec.rb +0 -9
- data/spec/mongo_mapper/user_activity_logging_spec.rb +0 -8
- data/spec/mongo_mapper/user_brute_force_protection_spec.rb +0 -8
- data/spec/mongo_mapper/user_oauth_spec.rb +0 -8
- data/spec/mongo_mapper/user_remember_me_spec.rb +0 -8
- data/spec/mongo_mapper/user_reset_password_spec.rb +0 -8
- data/spec/mongo_mapper/user_spec.rb +0 -37
- data/spec/mongoid/user_activation_spec.rb +0 -9
- data/spec/mongoid/user_activity_logging_spec.rb +0 -8
- data/spec/mongoid/user_brute_force_protection_spec.rb +0 -8
- data/spec/mongoid/user_oauth_spec.rb +0 -8
- data/spec/mongoid/user_remember_me_spec.rb +0 -8
- data/spec/mongoid/user_reset_password_spec.rb +0 -8
- data/spec/mongoid/user_spec.rb +0 -51
- data/spec/orm/data_mapper.rb +0 -48
- data/spec/orm/mongo_mapper.rb +0 -10
- data/spec/orm/mongoid.rb +0 -22
- data/spec/rails_app/app/data_mapper/authentication.rb +0 -8
- data/spec/rails_app/app/data_mapper/user.rb +0 -7
- data/spec/rails_app/app/mongo_mapper/authentication.rb +0 -6
- data/spec/rails_app/app/mongo_mapper/user.rb +0 -7
- data/spec/rails_app/app/mongoid/authentication.rb +0 -7
- data/spec/rails_app/app/mongoid/user.rb +0 -7
- data/spec/rails_app/config/initializers/secret_token.rb +0 -7
- data/spec/rails_app/log/development.log +0 -1791
@@ -2,10 +2,12 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
# require 'shared_examples/controller_oauth2_shared_examples'
|
4
4
|
|
5
|
-
describe SorceryController, :
|
5
|
+
describe SorceryController, active_record: true, type: :controller do
|
6
6
|
before(:all) do
|
7
7
|
if SORCERY_ORM == :active_record
|
8
|
-
|
8
|
+
MigrationHelper.migrate("#{Rails.root}/db/migrate/external")
|
9
|
+
MigrationHelper.migrate("#{Rails.root}/db/migrate/activation")
|
10
|
+
MigrationHelper.migrate("#{Rails.root}/db/migrate/activity_logging")
|
9
11
|
User.reset_column_information
|
10
12
|
end
|
11
13
|
|
@@ -15,7 +17,9 @@ describe SorceryController, :active_record => true do
|
|
15
17
|
|
16
18
|
after(:all) do
|
17
19
|
if SORCERY_ORM == :active_record
|
18
|
-
|
20
|
+
MigrationHelper.rollback("#{Rails.root}/db/migrate/external")
|
21
|
+
MigrationHelper.rollback("#{Rails.root}/db/migrate/activity_logging")
|
22
|
+
MigrationHelper.rollback("#{Rails.root}/db/migrate/activation")
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
@@ -26,45 +30,44 @@ describe SorceryController, :active_record => true do
|
|
26
30
|
|
27
31
|
it 'creates a new user' do
|
28
32
|
sorcery_model_property_set(:authentications_class, Authentication)
|
29
|
-
sorcery_controller_external_property_set(:facebook, :user_info_mapping,
|
33
|
+
sorcery_controller_external_property_set(:facebook, :user_info_mapping, username: 'name')
|
30
34
|
|
31
|
-
expect(User).to receive(:create_from_provider).with('facebook', '123',
|
32
|
-
get :test_create_from_provider, provider: 'facebook'
|
35
|
+
expect(User).to receive(:create_from_provider).with('facebook', '123', username: 'Noam Ben Ari')
|
36
|
+
get :test_create_from_provider, params: { provider: 'facebook' }
|
33
37
|
end
|
34
38
|
|
35
39
|
it 'supports nested attributes' do
|
36
40
|
sorcery_model_property_set(:authentications_class, Authentication)
|
37
|
-
sorcery_controller_external_property_set(:facebook, :user_info_mapping,
|
38
|
-
expect(User).to receive(:create_from_provider).with('facebook', '123',
|
41
|
+
sorcery_controller_external_property_set(:facebook, :user_info_mapping, username: 'hometown/name')
|
42
|
+
expect(User).to receive(:create_from_provider).with('facebook', '123', username: 'Haifa, Israel')
|
39
43
|
|
40
|
-
get :test_create_from_provider, provider: 'facebook'
|
44
|
+
get :test_create_from_provider, params: { provider: 'facebook' }
|
41
45
|
end
|
42
46
|
|
43
47
|
it 'does not crash on missing nested attributes' do
|
44
48
|
sorcery_model_property_set(:authentications_class, Authentication)
|
45
|
-
sorcery_controller_external_property_set(:facebook, :user_info_mapping,
|
49
|
+
sorcery_controller_external_property_set(:facebook, :user_info_mapping, username: 'name', created_at: 'does/not/exist')
|
46
50
|
|
47
|
-
expect(User).to receive(:create_from_provider).with('facebook', '123',
|
51
|
+
expect(User).to receive(:create_from_provider).with('facebook', '123', username: 'Noam Ben Ari')
|
48
52
|
|
49
|
-
get :test_create_from_provider, provider: 'facebook'
|
53
|
+
get :test_create_from_provider, params: { provider: 'facebook' }
|
50
54
|
end
|
51
55
|
|
52
56
|
describe 'with a block' do
|
53
57
|
it 'does not create user' do
|
54
58
|
sorcery_model_property_set(:authentications_class, Authentication)
|
55
|
-
sorcery_controller_external_property_set(:facebook, :user_info_mapping,
|
59
|
+
sorcery_controller_external_property_set(:facebook, :user_info_mapping, username: 'name')
|
56
60
|
|
57
61
|
u = double('user')
|
58
|
-
expect(User).to receive(:create_from_provider).with('facebook', '123',
|
62
|
+
expect(User).to receive(:create_from_provider).with('facebook', '123', username: 'Noam Ben Ari').and_return(u).and_yield(u)
|
59
63
|
# test_create_from_provider_with_block in controller will check for uniqueness of username
|
60
|
-
get :test_create_from_provider_with_block, provider: 'facebook'
|
64
|
+
get :test_create_from_provider_with_block, params: { provider: 'facebook' }
|
61
65
|
end
|
62
66
|
end
|
63
67
|
end
|
64
68
|
|
65
69
|
# ----------------- OAuth -----------------------
|
66
|
-
context
|
67
|
-
|
70
|
+
context 'with OAuth features' do
|
68
71
|
let(:user) { double('user', id: 42) }
|
69
72
|
|
70
73
|
before(:each) do
|
@@ -76,48 +79,57 @@ describe SorceryController, :active_record => true do
|
|
76
79
|
Authentication.sorcery_adapter.delete_all
|
77
80
|
end
|
78
81
|
|
79
|
-
context
|
82
|
+
context 'when callback_url begin with /' do
|
80
83
|
before do
|
81
|
-
sorcery_controller_external_property_set(:facebook, :callback_url,
|
84
|
+
sorcery_controller_external_property_set(:facebook, :callback_url, '/oauth/twitter/callback')
|
82
85
|
end
|
83
|
-
it
|
86
|
+
it 'login_at redirects correctly' do
|
84
87
|
get :login_at_test_facebook
|
85
88
|
expect(response).to be_a_redirect
|
86
|
-
expect(response).to redirect_to("https://www.facebook.com/dialog/oauth?client_id=#{::Sorcery::Controller::Config.facebook.key}&display=page&redirect_uri=http%3A%2F%2Ftest.host%2Foauth%2Ftwitter%2Fcallback&response_type=code&scope=email&state
|
89
|
+
expect(response).to redirect_to("https://www.facebook.com/dialog/oauth?client_id=#{::Sorcery::Controller::Config.facebook.key}&display=page&redirect_uri=http%3A%2F%2Ftest.host%2Foauth%2Ftwitter%2Fcallback&response_type=code&scope=email&state")
|
87
90
|
end
|
88
91
|
|
89
|
-
it
|
92
|
+
it 'logins with state' do
|
90
93
|
get :login_at_test_with_state
|
91
94
|
expect(response).to be_a_redirect
|
92
95
|
expect(response).to redirect_to("https://www.facebook.com/dialog/oauth?client_id=#{::Sorcery::Controller::Config.facebook.key}&display=page&redirect_uri=http%3A%2F%2Ftest.host%2Foauth%2Ftwitter%2Fcallback&response_type=code&scope=email&state=bla")
|
93
96
|
end
|
94
97
|
|
95
|
-
it
|
96
|
-
sorcery_controller_external_property_set(:facebook, :api_version,
|
98
|
+
it 'logins with Graph API version' do
|
99
|
+
sorcery_controller_external_property_set(:facebook, :api_version, 'v2.2')
|
97
100
|
get :login_at_test_with_state
|
98
101
|
expect(response).to be_a_redirect
|
99
102
|
expect(response).to redirect_to("https://www.facebook.com/v2.2/dialog/oauth?client_id=#{::Sorcery::Controller::Config.facebook.key}&display=page&redirect_uri=http%3A%2F%2Ftest.host%2Foauth%2Ftwitter%2Fcallback&response_type=code&scope=email&state=bla")
|
100
103
|
end
|
101
104
|
|
102
|
-
it
|
105
|
+
it 'logins without state after login with state' do
|
103
106
|
get :login_at_test_with_state
|
104
107
|
expect(response).to redirect_to("https://www.facebook.com/v2.2/dialog/oauth?client_id=#{::Sorcery::Controller::Config.facebook.key}&display=page&redirect_uri=http%3A%2F%2Ftest.host%2Foauth%2Ftwitter%2Fcallback&response_type=code&scope=email&state=bla")
|
105
108
|
|
106
109
|
get :login_at_test_facebook
|
107
|
-
expect(response).to redirect_to("https://www.facebook.com/v2.2/dialog/oauth?client_id=#{::Sorcery::Controller::Config.facebook.key}&display=page&redirect_uri=http%3A%2F%2Ftest.host%2Foauth%2Ftwitter%2Fcallback&response_type=code&scope=email&state
|
110
|
+
expect(response).to redirect_to("https://www.facebook.com/v2.2/dialog/oauth?client_id=#{::Sorcery::Controller::Config.facebook.key}&display=page&redirect_uri=http%3A%2F%2Ftest.host%2Foauth%2Ftwitter%2Fcallback&response_type=code&scope=email&state")
|
108
111
|
end
|
109
112
|
|
110
113
|
after do
|
111
|
-
sorcery_controller_external_property_set(:facebook, :callback_url,
|
114
|
+
sorcery_controller_external_property_set(:facebook, :callback_url, 'http://blabla.com')
|
112
115
|
end
|
113
116
|
end
|
114
117
|
|
115
|
-
context
|
116
|
-
|
118
|
+
context 'when callback_url begin with http://' do
|
119
|
+
before do
|
120
|
+
sorcery_controller_external_property_set(:facebook, :callback_url, '/oauth/twitter/callback')
|
121
|
+
sorcery_controller_external_property_set(:facebook, :api_version, 'v2.2')
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'login_at redirects correctly' do
|
117
125
|
create_new_user
|
118
126
|
get :login_at_test_facebook
|
119
127
|
expect(response).to be_a_redirect
|
120
|
-
expect(response).to redirect_to("https://www.facebook.com/v2.2/dialog/oauth?client_id=#{::Sorcery::Controller::Config.facebook.key}&display=page&redirect_uri=http%3A%2F%2Ftest.host%2Foauth%2Ftwitter%2Fcallback&response_type=code&scope=email&state
|
128
|
+
expect(response).to redirect_to("https://www.facebook.com/v2.2/dialog/oauth?client_id=#{::Sorcery::Controller::Config.facebook.key}&display=page&redirect_uri=http%3A%2F%2Ftest.host%2Foauth%2Ftwitter%2Fcallback&response_type=code&scope=email&state")
|
129
|
+
end
|
130
|
+
|
131
|
+
after do
|
132
|
+
sorcery_controller_external_property_set(:facebook, :callback_url, 'http://blabla.com')
|
121
133
|
end
|
122
134
|
end
|
123
135
|
|
@@ -129,7 +141,7 @@ describe SorceryController, :active_record => true do
|
|
129
141
|
expect(User).to receive(:load_from_provider).with(:facebook, '123').and_return(user)
|
130
142
|
get :test_login_from_facebook
|
131
143
|
|
132
|
-
expect(flash[:notice]).to eq
|
144
|
+
expect(flash[:notice]).to eq 'Success!'
|
133
145
|
end
|
134
146
|
|
135
147
|
it "'login_from' fails if user doesn't exist" do
|
@@ -137,30 +149,28 @@ describe SorceryController, :active_record => true do
|
|
137
149
|
expect(User).to receive(:load_from_provider).with(:facebook, '123').and_return(nil)
|
138
150
|
get :test_login_from_facebook
|
139
151
|
|
140
|
-
expect(flash[:alert]).to eq
|
152
|
+
expect(flash[:alert]).to eq 'Failed!'
|
141
153
|
end
|
142
154
|
|
143
|
-
it
|
155
|
+
it 'on successful login_from the user is redirected to the url he originally wanted' do
|
144
156
|
# dirty hack for rails 4
|
145
157
|
allow(subject).to receive(:register_last_activity_time_to_db)
|
146
158
|
|
147
159
|
sorcery_model_property_set(:authentications_class, Authentication)
|
148
160
|
expect(User).to receive(:load_from_provider).with(:facebook, '123').and_return(user)
|
149
|
-
get :test_return_to_with_external_facebook, {}, :return_to_url
|
161
|
+
get :test_return_to_with_external_facebook, params: {}, session: { return_to_url: 'fuu' }
|
150
162
|
|
151
|
-
expect(response).to redirect_to(
|
152
|
-
expect(flash[:notice]).to eq
|
163
|
+
expect(response).to redirect_to('fuu')
|
164
|
+
expect(flash[:notice]).to eq 'Success!'
|
153
165
|
end
|
154
166
|
|
155
|
-
[
|
156
|
-
|
167
|
+
%i[github google liveid vk salesforce paypal slack wechat microsoft instagram auth0 discord battlenet].each do |provider|
|
157
168
|
describe "with #{provider}" do
|
158
|
-
|
159
|
-
it "login_at redirects correctly" do
|
169
|
+
it 'login_at redirects correctly' do
|
160
170
|
get :"login_at_test_#{provider}"
|
161
171
|
|
162
172
|
expect(response).to be_a_redirect
|
163
|
-
expect(response).to redirect_to(provider_url
|
173
|
+
expect(response).to redirect_to(provider_url(provider))
|
164
174
|
end
|
165
175
|
|
166
176
|
it "'login_from' logins if user exists" do
|
@@ -171,7 +181,7 @@ describe SorceryController, :active_record => true do
|
|
171
181
|
expect(User).to receive(:load_from_provider).with(provider, '123').and_return(user)
|
172
182
|
get :"test_login_from_#{provider}"
|
173
183
|
|
174
|
-
expect(flash[:notice]).to eq
|
184
|
+
expect(flash[:notice]).to eq 'Success!'
|
175
185
|
end
|
176
186
|
|
177
187
|
it "'login_from' fails if user doesn't exist" do
|
@@ -179,7 +189,7 @@ describe SorceryController, :active_record => true do
|
|
179
189
|
expect(User).to receive(:load_from_provider).with(provider, '123').and_return(nil)
|
180
190
|
get :"test_login_from_#{provider}"
|
181
191
|
|
182
|
-
expect(flash[:alert]).to eq
|
192
|
+
expect(flash[:alert]).to eq 'Failed!'
|
183
193
|
end
|
184
194
|
|
185
195
|
it "on successful login_from the user is redirected to the url he originally wanted (#{provider})" do
|
@@ -188,63 +198,100 @@ describe SorceryController, :active_record => true do
|
|
188
198
|
|
189
199
|
sorcery_model_property_set(:authentications_class, Authentication)
|
190
200
|
expect(User).to receive(:load_from_provider).with(provider, '123').and_return(user)
|
191
|
-
get :"test_return_to_with_external_#{provider}", {}, :return_to_url
|
201
|
+
get :"test_return_to_with_external_#{provider}", params: {}, session: { return_to_url: 'fuu' }
|
192
202
|
|
193
|
-
expect(response).to redirect_to
|
194
|
-
expect(flash[:notice]).to eq
|
203
|
+
expect(response).to redirect_to 'fuu'
|
204
|
+
expect(flash[:notice]).to eq 'Success!'
|
195
205
|
end
|
196
206
|
end
|
197
207
|
end
|
198
|
-
|
199
208
|
end
|
200
209
|
|
201
|
-
describe
|
210
|
+
describe 'OAuth with User Activation features' do
|
202
211
|
before(:all) do
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
sorcery_controller_external_property_set(:
|
227
|
-
sorcery_controller_external_property_set(:
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
212
|
+
sorcery_reload!(%i[user_activation external], user_activation_mailer: ::SorceryMailer)
|
213
|
+
sorcery_controller_property_set(
|
214
|
+
:external_providers,
|
215
|
+
%i[
|
216
|
+
facebook
|
217
|
+
github
|
218
|
+
google
|
219
|
+
liveid
|
220
|
+
vk
|
221
|
+
salesforce
|
222
|
+
paypal
|
223
|
+
slack
|
224
|
+
wechat
|
225
|
+
microsoft
|
226
|
+
instagram
|
227
|
+
auth0
|
228
|
+
line
|
229
|
+
discord
|
230
|
+
battlenet
|
231
|
+
]
|
232
|
+
)
|
233
|
+
|
234
|
+
# TODO: refactor
|
235
|
+
sorcery_controller_external_property_set(:facebook, :key, 'eYVNBjBDi33aa9GkA3w')
|
236
|
+
sorcery_controller_external_property_set(:facebook, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
237
|
+
sorcery_controller_external_property_set(:facebook, :callback_url, 'http://blabla.com')
|
238
|
+
sorcery_controller_external_property_set(:github, :key, 'eYVNBjBDi33aa9GkA3w')
|
239
|
+
sorcery_controller_external_property_set(:github, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
240
|
+
sorcery_controller_external_property_set(:github, :callback_url, 'http://blabla.com')
|
241
|
+
sorcery_controller_external_property_set(:google, :key, 'eYVNBjBDi33aa9GkA3w')
|
242
|
+
sorcery_controller_external_property_set(:google, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
243
|
+
sorcery_controller_external_property_set(:google, :callback_url, 'http://blabla.com')
|
244
|
+
sorcery_controller_external_property_set(:liveid, :key, 'eYVNBjBDi33aa9GkA3w')
|
245
|
+
sorcery_controller_external_property_set(:liveid, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
246
|
+
sorcery_controller_external_property_set(:liveid, :callback_url, 'http://blabla.com')
|
247
|
+
sorcery_controller_external_property_set(:vk, :key, 'eYVNBjBDi33aa9GkA3w')
|
248
|
+
sorcery_controller_external_property_set(:vk, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
249
|
+
sorcery_controller_external_property_set(:vk, :callback_url, 'http://blabla.com')
|
250
|
+
sorcery_controller_external_property_set(:salesforce, :key, 'eYVNBjBDi33aa9GkA3w')
|
251
|
+
sorcery_controller_external_property_set(:salesforce, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
252
|
+
sorcery_controller_external_property_set(:salesforce, :callback_url, 'http://blabla.com')
|
253
|
+
sorcery_controller_external_property_set(:paypal, :key, 'eYVNBjBDi33aa9GkA3w')
|
254
|
+
sorcery_controller_external_property_set(:paypal, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
255
|
+
sorcery_controller_external_property_set(:paypal, :callback_url, 'http://blabla.com')
|
256
|
+
sorcery_controller_external_property_set(:slack, :key, 'eYVNBjBDi33aa9GkA3w')
|
257
|
+
sorcery_controller_external_property_set(:slack, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
258
|
+
sorcery_controller_external_property_set(:slack, :callback_url, 'http://blabla.com')
|
259
|
+
sorcery_controller_external_property_set(:wechat, :key, 'eYVNBjBDi33aa9GkA3w')
|
260
|
+
sorcery_controller_external_property_set(:wechat, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
261
|
+
sorcery_controller_external_property_set(:wechat, :callback_url, 'http://blabla.com')
|
262
|
+
sorcery_controller_external_property_set(:microsoft, :key, 'eYVNBjBDi33aa9GkA3w')
|
263
|
+
sorcery_controller_external_property_set(:microsoft, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
264
|
+
sorcery_controller_external_property_set(:microsoft, :callback_url, 'http://blabla.com')
|
265
|
+
sorcery_controller_external_property_set(:instagram, :key, 'eYVNBjBDi33aa9GkA3w')
|
266
|
+
sorcery_controller_external_property_set(:instagram, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
267
|
+
sorcery_controller_external_property_set(:instagram, :callback_url, 'http://blabla.com')
|
268
|
+
sorcery_controller_external_property_set(:auth0, :key, 'eYVNBjBDi33aa9GkA3w')
|
269
|
+
sorcery_controller_external_property_set(:auth0, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
270
|
+
sorcery_controller_external_property_set(:auth0, :callback_url, 'http://blabla.com')
|
271
|
+
sorcery_controller_external_property_set(:auth0, :site, 'https://sorcery-test.auth0.com')
|
272
|
+
sorcery_controller_external_property_set(:line, :key, "eYVNBjBDi33aa9GkA3w")
|
273
|
+
sorcery_controller_external_property_set(:line, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
|
274
|
+
sorcery_controller_external_property_set(:line, :callback_url, "http://blabla.com")
|
275
|
+
sorcery_controller_external_property_set(:discord, :key, 'eYVNBjBDi33aa9GkA3w')
|
276
|
+
sorcery_controller_external_property_set(:discord, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
277
|
+
sorcery_controller_external_property_set(:discord, :callback_url, 'http://blabla.com')
|
278
|
+
sorcery_controller_external_property_set(:battlenet, :key, '4c43d4862c774ca5bbde89873bf0d338')
|
279
|
+
sorcery_controller_external_property_set(:battlenet, :secret, 'TxY7IwKOykACd8kUxPyVGTqBs44UBDdX')
|
280
|
+
sorcery_controller_external_property_set(:battlenet, :callback_url, 'http://blabla.com')
|
234
281
|
end
|
235
282
|
|
236
283
|
after(:each) do
|
237
284
|
User.sorcery_adapter.delete_all
|
238
285
|
end
|
239
286
|
|
240
|
-
it
|
287
|
+
it 'does not send activation email to external users' do
|
241
288
|
old_size = ActionMailer::Base.deliveries.size
|
242
289
|
create_new_external_user(:facebook)
|
243
290
|
|
244
291
|
expect(ActionMailer::Base.deliveries.size).to eq old_size
|
245
292
|
end
|
246
293
|
|
247
|
-
it
|
294
|
+
it 'does not send external users an activation success email' do
|
248
295
|
sorcery_model_property_set(:activation_success_email_method_name, nil)
|
249
296
|
create_new_external_user(:facebook)
|
250
297
|
old_size = ActionMailer::Base.deliveries.size
|
@@ -253,7 +300,7 @@ describe SorceryController, :active_record => true do
|
|
253
300
|
expect(ActionMailer::Base.deliveries.size).to eq old_size
|
254
301
|
end
|
255
302
|
|
256
|
-
[
|
303
|
+
%i[github google liveid vk salesforce paypal wechat microsoft instagram auth0 discord battlenet].each do |provider|
|
257
304
|
it "does not send activation email to external users (#{provider})" do
|
258
305
|
old_size = ActionMailer::Base.deliveries.size
|
259
306
|
create_new_external_user provider
|
@@ -265,26 +312,19 @@ describe SorceryController, :active_record => true do
|
|
265
312
|
create_new_external_user provider
|
266
313
|
old_size = ActionMailer::Base.deliveries.size
|
267
314
|
@user.activate!
|
315
|
+
expect(ActionMailer::Base.deliveries.size).to eq old_size
|
268
316
|
end
|
269
317
|
end
|
270
318
|
end
|
271
319
|
|
272
|
-
describe
|
273
|
-
|
320
|
+
describe 'OAuth with user activation features' do
|
274
321
|
let(:user) { double('user', id: 42) }
|
275
322
|
|
276
323
|
before(:all) do
|
277
|
-
sorcery_reload!([
|
278
|
-
end
|
279
|
-
|
280
|
-
after(:all) do
|
281
|
-
if SORCERY_ORM == :active_record
|
282
|
-
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
|
283
|
-
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/activity_logging")
|
284
|
-
end
|
324
|
+
sorcery_reload!(%i[activity_logging external])
|
285
325
|
end
|
286
326
|
|
287
|
-
%w
|
327
|
+
%w[facebook github google liveid vk salesforce slack discord battlenet].each do |provider|
|
288
328
|
context "when #{provider}" do
|
289
329
|
before(:each) do
|
290
330
|
sorcery_controller_property_set(:register_login_time, true)
|
@@ -295,7 +335,7 @@ describe SorceryController, :active_record => true do
|
|
295
335
|
sorcery_model_property_set(:authentications_class, Authentication)
|
296
336
|
end
|
297
337
|
|
298
|
-
it
|
338
|
+
it 'registers login time' do
|
299
339
|
now = Time.now.in_time_zone
|
300
340
|
Timecop.freeze(now)
|
301
341
|
expect(User).to receive(:load_from_provider).and_return(user)
|
@@ -304,31 +344,30 @@ describe SorceryController, :active_record => true do
|
|
304
344
|
Timecop.return
|
305
345
|
end
|
306
346
|
|
307
|
-
it
|
347
|
+
it 'does not register login time if configured so' do
|
308
348
|
sorcery_controller_property_set(:register_login_time, false)
|
309
349
|
now = Time.now.in_time_zone
|
310
350
|
Timecop.freeze(now)
|
311
351
|
expect(User).to receive(:load_from_provider).and_return(user)
|
312
352
|
expect(user).to receive(:set_last_login_at).never
|
313
353
|
get "test_login_from_#{provider}".to_sym
|
314
|
-
|
315
354
|
end
|
316
355
|
end
|
317
356
|
end
|
318
357
|
end
|
319
358
|
|
320
|
-
describe
|
359
|
+
describe 'OAuth with session timeout features' do
|
321
360
|
before(:all) do
|
322
|
-
sorcery_reload!([
|
361
|
+
sorcery_reload!(%i[session_timeout external])
|
323
362
|
end
|
324
363
|
|
325
364
|
let(:user) { double('user', id: 42) }
|
326
365
|
|
327
|
-
%w
|
366
|
+
%w[facebook github google liveid vk salesforce slack discord battlenet].each do |provider|
|
328
367
|
context "when #{provider}" do
|
329
368
|
before(:each) do
|
330
369
|
sorcery_model_property_set(:authentications_class, Authentication)
|
331
|
-
sorcery_controller_property_set(:session_timeout,0.5)
|
370
|
+
sorcery_controller_property_set(:session_timeout, 0.5)
|
332
371
|
stub_all_oauth2_requests!
|
333
372
|
end
|
334
373
|
|
@@ -336,19 +375,19 @@ describe SorceryController, :active_record => true do
|
|
336
375
|
Timecop.return
|
337
376
|
end
|
338
377
|
|
339
|
-
it
|
378
|
+
it 'does not reset session before session timeout' do
|
340
379
|
expect(User).to receive(:load_from_provider).with(provider.to_sym, '123').and_return(user)
|
341
380
|
get "test_login_from_#{provider}".to_sym
|
342
381
|
|
343
382
|
expect(session[:user_id]).not_to be_nil
|
344
|
-
expect(flash[:notice]).to eq
|
383
|
+
expect(flash[:notice]).to eq 'Success!'
|
345
384
|
end
|
346
385
|
|
347
|
-
it
|
386
|
+
it 'resets session after session timeout' do
|
348
387
|
expect(User).to receive(:load_from_provider).with(provider.to_sym, '123').and_return(user)
|
349
388
|
get "test_login_from_#{provider}".to_sym
|
350
|
-
expect(session[:user_id]).to eq
|
351
|
-
Timecop.travel(Time.now.in_time_zone+0.6)
|
389
|
+
expect(session[:user_id]).to eq '42'
|
390
|
+
Timecop.travel(Time.now.in_time_zone + 0.6)
|
352
391
|
get :test_should_be_logged_in
|
353
392
|
|
354
393
|
expect(session[:user_id]).to be_nil
|
@@ -359,71 +398,171 @@ describe SorceryController, :active_record => true do
|
|
359
398
|
end
|
360
399
|
|
361
400
|
def stub_all_oauth2_requests!
|
362
|
-
access_token
|
401
|
+
access_token = double(OAuth2::AccessToken)
|
363
402
|
allow(access_token).to receive(:token_param=)
|
364
|
-
|
365
|
-
allow(
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
403
|
+
# Needed for Instagram
|
404
|
+
allow(access_token).to receive(:[]).with(:client_id) { 'eYVNBjBDi33aa9GkA3w' }
|
405
|
+
response = double(OAuth2::Response)
|
406
|
+
allow(response).to receive(:body) {
|
407
|
+
{
|
408
|
+
'id' => '123',
|
409
|
+
'user_id' => '123', # Needed for Salesforce
|
410
|
+
'sub' => '123', # Needed for Auth0
|
411
|
+
'name' => 'Noam Ben Ari',
|
412
|
+
'first_name' => 'Noam',
|
413
|
+
'last_name' => 'Ben Ari',
|
414
|
+
'link' => 'http://www.facebook.com/nbenari1',
|
415
|
+
'hometown' => {
|
416
|
+
'id' => '110619208966868',
|
417
|
+
'name' => 'Haifa, Israel'
|
418
|
+
},
|
419
|
+
'location' => {
|
420
|
+
'id' => '106906559341067',
|
421
|
+
'name' => 'Pardes Hanah, Hefa, Israel'
|
422
|
+
},
|
423
|
+
'bio' => "I'm a new daddy, and enjoying it!",
|
424
|
+
'gender' => 'male',
|
425
|
+
'email' => 'nbenari@gmail.com',
|
426
|
+
'timezone' => 2,
|
427
|
+
'locale' => 'en_US',
|
428
|
+
'languages' => [
|
429
|
+
{
|
430
|
+
'id' => '108405449189952',
|
431
|
+
'name' => 'Hebrew'
|
432
|
+
},
|
384
433
|
{
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
434
|
+
'id' => '106059522759137',
|
435
|
+
'name' => 'English'
|
436
|
+
},
|
437
|
+
{
|
438
|
+
'id' => '112624162082677',
|
439
|
+
'name' => 'Russian'
|
440
|
+
}
|
441
|
+
],
|
442
|
+
'verified' => true,
|
443
|
+
'updated_time' => '2011-02-16T20:59:38+0000',
|
444
|
+
# response for VK auth
|
445
|
+
'response' => [
|
446
|
+
{
|
447
|
+
'id' => '123',
|
448
|
+
'first_name' => 'Noam',
|
449
|
+
'last_name' => 'Ben Ari'
|
450
|
+
}
|
451
|
+
],
|
452
|
+
'user' => {
|
453
|
+
'name' => 'Sonny Whether',
|
454
|
+
'id' => '123',
|
455
|
+
'email' => 'bobby@example.com'
|
456
|
+
},
|
457
|
+
# response for wechat auth
|
458
|
+
'unionid' => '123',
|
459
|
+
# response for instagram
|
460
|
+
'data' => {
|
461
|
+
'username' => 'pnmahoney',
|
462
|
+
'bio' => 'turn WHAT down?',
|
463
|
+
'website' => '',
|
464
|
+
'profile_picture' => 'http://photos-d.ak.instagram.com/hphotos-ak-xpa1/10454121_417985815007395_867850883_a.jpg',
|
465
|
+
'full_name' => 'Patrick Mahoney',
|
466
|
+
'counts' => {
|
467
|
+
'media' => 2,
|
468
|
+
'followed_by' => 100,
|
469
|
+
'follows' => 71
|
470
|
+
},
|
471
|
+
'id' => '123'
|
472
|
+
}
|
473
|
+
}.to_json
|
474
|
+
}
|
390
475
|
allow(access_token).to receive(:get) { response }
|
391
|
-
allow(access_token).to receive(:token) {
|
476
|
+
allow(access_token).to receive(:token) { '187041a618229fdaf16613e96e1caabc1e86e46bbfad228de41520e63fe45873684c365a14417289599f3' }
|
392
477
|
# access_token params for VK auth
|
393
|
-
allow(access_token).to receive(:params) { {
|
478
|
+
allow(access_token).to receive(:params) { { 'user_id' => '100500', 'email' => 'nbenari@gmail.com' } }
|
394
479
|
allow_any_instance_of(OAuth2::Strategy::AuthCode).to receive(:get_token) { access_token }
|
395
480
|
end
|
396
481
|
|
397
482
|
def set_external_property
|
398
|
-
sorcery_controller_property_set(
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
483
|
+
sorcery_controller_property_set(
|
484
|
+
:external_providers,
|
485
|
+
%i[
|
486
|
+
facebook
|
487
|
+
github
|
488
|
+
google
|
489
|
+
liveid
|
490
|
+
vk
|
491
|
+
salesforce
|
492
|
+
paypal
|
493
|
+
slack
|
494
|
+
wechat
|
495
|
+
microsoft
|
496
|
+
instagram
|
497
|
+
auth0
|
498
|
+
line
|
499
|
+
discord
|
500
|
+
battlenet
|
501
|
+
]
|
502
|
+
)
|
503
|
+
sorcery_controller_external_property_set(:facebook, :key, 'eYVNBjBDi33aa9GkA3w')
|
504
|
+
sorcery_controller_external_property_set(:facebook, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
505
|
+
sorcery_controller_external_property_set(:facebook, :callback_url, 'http://blabla.com')
|
506
|
+
sorcery_controller_external_property_set(:github, :key, 'eYVNBjBDi33aa9GkA3w')
|
507
|
+
sorcery_controller_external_property_set(:github, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
508
|
+
sorcery_controller_external_property_set(:github, :callback_url, 'http://blabla.com')
|
509
|
+
sorcery_controller_external_property_set(:google, :key, 'eYVNBjBDi33aa9GkA3w')
|
510
|
+
sorcery_controller_external_property_set(:google, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
511
|
+
sorcery_controller_external_property_set(:google, :callback_url, 'http://blabla.com')
|
512
|
+
sorcery_controller_external_property_set(:liveid, :key, 'eYVNBjBDi33aa9GkA3w')
|
513
|
+
sorcery_controller_external_property_set(:liveid, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
514
|
+
sorcery_controller_external_property_set(:liveid, :callback_url, 'http://blabla.com')
|
515
|
+
sorcery_controller_external_property_set(:vk, :key, 'eYVNBjBDi33aa9GkA3w')
|
516
|
+
sorcery_controller_external_property_set(:vk, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
517
|
+
sorcery_controller_external_property_set(:vk, :callback_url, 'http://blabla.com')
|
518
|
+
sorcery_controller_external_property_set(:salesforce, :key, 'eYVNBjBDi33aa9GkA3w')
|
519
|
+
sorcery_controller_external_property_set(:salesforce, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
520
|
+
sorcery_controller_external_property_set(:salesforce, :callback_url, 'http://blabla.com')
|
521
|
+
sorcery_controller_external_property_set(:paypal, :key, 'eYVNBjBDi33aa9GkA3w')
|
522
|
+
sorcery_controller_external_property_set(:paypal, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
523
|
+
sorcery_controller_external_property_set(:paypal, :callback_url, 'http://blabla.com')
|
524
|
+
sorcery_controller_external_property_set(:slack, :key, 'eYVNBjBDi33aa9GkA3w')
|
525
|
+
sorcery_controller_external_property_set(:slack, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
526
|
+
sorcery_controller_external_property_set(:slack, :callback_url, 'http://blabla.com')
|
527
|
+
sorcery_controller_external_property_set(:wechat, :key, 'eYVNBjBDi33aa9GkA3w')
|
528
|
+
sorcery_controller_external_property_set(:wechat, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
529
|
+
sorcery_controller_external_property_set(:wechat, :callback_url, 'http://blabla.com')
|
530
|
+
sorcery_controller_external_property_set(:microsoft, :key, 'eYVNBjBDi33aa9GkA3w')
|
531
|
+
sorcery_controller_external_property_set(:microsoft, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
532
|
+
sorcery_controller_external_property_set(:microsoft, :callback_url, 'http://blabla.com')
|
533
|
+
sorcery_controller_external_property_set(:instagram, :key, 'eYVNBjBDi33aa9GkA3w')
|
534
|
+
sorcery_controller_external_property_set(:instagram, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
535
|
+
sorcery_controller_external_property_set(:instagram, :callback_url, 'http://blabla.com')
|
536
|
+
sorcery_controller_external_property_set(:auth0, :key, 'eYVNBjBDi33aa9GkA3w')
|
537
|
+
sorcery_controller_external_property_set(:auth0, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
538
|
+
sorcery_controller_external_property_set(:auth0, :callback_url, 'http://blabla.com')
|
539
|
+
sorcery_controller_external_property_set(:auth0, :site, 'https://sorcery-test.auth0.com')
|
540
|
+
sorcery_controller_external_property_set(:line, :key, "eYVNBjBDi33aa9GkA3w")
|
541
|
+
sorcery_controller_external_property_set(:line, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
|
542
|
+
sorcery_controller_external_property_set(:line, :callback_url, "http://blabla.com")
|
543
|
+
sorcery_controller_external_property_set(:discord, :key, 'eYVNBjBDi33aa9GkA3w')
|
544
|
+
sorcery_controller_external_property_set(:discord, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
545
|
+
sorcery_controller_external_property_set(:discord, :callback_url, 'http://blabla.com')
|
546
|
+
sorcery_controller_external_property_set(:battlenet, :key, '4c43d4862c774ca5bbde89873bf0d338')
|
547
|
+
sorcery_controller_external_property_set(:battlenet, :secret, 'TxY7IwKOykACd8kUxPyVGTqBs44UBDdX')
|
548
|
+
sorcery_controller_external_property_set(:battlenet, :callback_url, 'http://blabla.com')
|
417
549
|
end
|
418
550
|
|
419
551
|
def provider_url(provider)
|
420
552
|
{
|
421
|
-
github: "https://github.com/login/oauth/authorize?client_id=#{::Sorcery::Controller::Config.github.key}&display
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
553
|
+
github: "https://github.com/login/oauth/authorize?client_id=#{::Sorcery::Controller::Config.github.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope&state",
|
554
|
+
paypal: "https://www.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize?client_id=#{::Sorcery::Controller::Config.paypal.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=openid+email&state",
|
555
|
+
google: "https://accounts.google.com/o/oauth2/auth?client_id=#{::Sorcery::Controller::Config.google.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&state",
|
556
|
+
liveid: "https://oauth.live.com/authorize?client_id=#{::Sorcery::Controller::Config.liveid.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=wl.basic+wl.emails+wl.offline_access&state",
|
557
|
+
vk: "https://oauth.vk.com/authorize?client_id=#{::Sorcery::Controller::Config.vk.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=#{::Sorcery::Controller::Config.vk.scope}&state",
|
558
|
+
salesforce: "https://login.salesforce.com/services/oauth2/authorize?client_id=#{::Sorcery::Controller::Config.salesforce.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope#{'=' + ::Sorcery::Controller::Config.salesforce.scope unless ::Sorcery::Controller::Config.salesforce.scope.nil?}&state",
|
559
|
+
slack: "https://slack.com/oauth/authorize?client_id=#{::Sorcery::Controller::Config.slack.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=identity.basic%2C+identity.email&state",
|
560
|
+
wechat: "https://open.weixin.qq.com/connect/qrconnect?appid=#{::Sorcery::Controller::Config.wechat.key}&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=snsapi_login&state=#wechat_redirect",
|
561
|
+
microsoft: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=#{::Sorcery::Controller::Config.microsoft.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=openid+email+https%3A%2F%2Fgraph.microsoft.com%2FUser.Read&state",
|
562
|
+
instagram: "https://api.instagram.com/oauth/authorize?client_id=#{::Sorcery::Controller::Config.instagram.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=#{::Sorcery::Controller::Config.instagram.scope}&state",
|
563
|
+
auth0: "https://sorcery-test.auth0.com/authorize?client_id=#{::Sorcery::Controller::Config.auth0.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=openid+profile+email&state",
|
564
|
+
discord: "https://discordapp.com/api/oauth2/authorize?client_id=#{::Sorcery::Controller::Config.discord.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=identify&state",
|
565
|
+
battlenet: "https://eu.battle.net/oauth/authorize?client_id=#{::Sorcery::Controller::Config.battlenet.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=openid&state"
|
426
566
|
}[provider]
|
427
567
|
end
|
428
568
|
end
|
429
|
-
|