sorcery 0.12.0 → 0.13.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.
Potentially problematic release.
This version of sorcery might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/.github/ISSUE_TEMPLATE.md +20 -0
- data/.rubocop.yml +52 -2
- data/.rubocop_todo.yml +1 -429
- data/.travis.yml +11 -21
- data/CHANGELOG.md +16 -0
- data/Gemfile +2 -2
- data/{LICENSE.txt → LICENSE.md} +1 -1
- data/README.md +7 -1
- data/gemfiles/{active_record-rails40.gemfile → active_record_rails_40.gemfile} +1 -2
- data/gemfiles/{active_record-rails41.gemfile → active_record_rails_41.gemfile} +1 -2
- data/gemfiles/{active_record-rails42.gemfile → active_record_rails_42.gemfile} +1 -2
- data/lib/generators/sorcery/USAGE +1 -1
- data/lib/generators/sorcery/install_generator.rb +21 -21
- data/lib/generators/sorcery/templates/initializer.rb +19 -1
- data/lib/sorcery/adapters/active_record_adapter.rb +1 -1
- data/lib/sorcery/adapters/mongoid_adapter.rb +23 -11
- data/lib/sorcery/controller.rb +22 -16
- data/lib/sorcery/controller/config.rb +2 -0
- data/lib/sorcery/controller/submodules/activity_logging.rb +4 -0
- data/lib/sorcery/controller/submodules/external.rb +37 -33
- data/lib/sorcery/controller/submodules/http_basic_auth.rb +1 -0
- data/lib/sorcery/controller/submodules/remember_me.rb +1 -7
- data/lib/sorcery/controller/submodules/session_timeout.rb +25 -4
- data/lib/sorcery/crypto_providers/aes256.rb +1 -0
- data/lib/sorcery/crypto_providers/bcrypt.rb +2 -1
- data/lib/sorcery/engine.rb +10 -3
- data/lib/sorcery/model.rb +9 -6
- data/lib/sorcery/model/config.rb +3 -3
- data/lib/sorcery/model/submodules/brute_force_protection.rb +6 -7
- data/lib/sorcery/model/submodules/external.rb +4 -3
- data/lib/sorcery/model/submodules/magic_login.rb +29 -36
- data/lib/sorcery/model/submodules/reset_password.rb +5 -4
- data/lib/sorcery/model/submodules/user_activation.rb +1 -1
- data/lib/sorcery/protocols/oauth.rb +1 -0
- data/lib/sorcery/providers/auth0.rb +46 -0
- data/lib/sorcery/providers/heroku.rb +1 -0
- data/lib/sorcery/providers/instagram.rb +73 -0
- data/lib/sorcery/providers/linkedin.rb +1 -1
- data/lib/sorcery/providers/vk.rb +1 -1
- data/lib/sorcery/providers/wechat.rb +8 -6
- data/lib/sorcery/test_helpers/internal.rb +5 -4
- data/lib/sorcery/test_helpers/internal/rails.rb +11 -11
- data/lib/sorcery/version.rb +1 -1
- data/sorcery.gemspec +25 -9
- data/spec/active_record/user_activation_spec.rb +2 -2
- data/spec/active_record/user_activity_logging_spec.rb +2 -2
- data/spec/active_record/user_brute_force_protection_spec.rb +2 -2
- data/spec/active_record/user_magic_login_spec.rb +4 -4
- data/spec/active_record/user_oauth_spec.rb +2 -2
- data/spec/active_record/user_remember_me_spec.rb +2 -2
- data/spec/active_record/user_reset_password_spec.rb +2 -2
- data/spec/active_record/user_spec.rb +0 -10
- data/spec/controllers/controller_http_basic_auth_spec.rb +1 -1
- data/spec/controllers/controller_oauth2_spec.rb +195 -123
- data/spec/controllers/controller_oauth_spec.rb +7 -7
- data/spec/controllers/controller_remember_me_spec.rb +11 -6
- data/spec/controllers/controller_session_timeout_spec.rb +90 -3
- data/spec/controllers/controller_spec.rb +2 -2
- data/spec/orm/active_record.rb +2 -2
- data/spec/providers/vk_spec.rb +13 -12
- data/spec/rails_app/app/controllers/sorcery_controller.rb +83 -32
- data/spec/rails_app/app/mailers/sorcery_mailer.rb +1 -1
- data/spec/rails_app/config/application.rb +8 -3
- data/spec/rails_app/config/boot.rb +1 -1
- data/spec/rails_app/config/environment.rb +1 -1
- data/spec/rails_app/config/routes.rb +7 -0
- data/spec/rails_app/config/secrets.yml +4 -0
- data/spec/rails_app/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +2 -2
- 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 +3 -3
- data/spec/rails_app/db/schema.rb +7 -9
- data/spec/shared_examples/user_magic_login_shared_examples.rb +50 -50
- data/spec/shared_examples/user_oauth_shared_examples.rb +1 -1
- data/spec/shared_examples/user_remember_me_shared_examples.rb +1 -1
- data/spec/shared_examples/user_reset_password_shared_examples.rb +3 -3
- data/spec/shared_examples/user_shared_examples.rb +41 -43
- data/spec/sorcery_crypto_providers_spec.rb +1 -1
- data/spec/spec.opts +1 -1
- data/spec/spec_helper.rb +2 -2
- data/spec/support/migration_helper.rb +19 -0
- metadata +60 -38
- data/spec/rails_app/config/initializers/secret_token.rb +0 -7
data/lib/sorcery/version.rb
CHANGED
data/sorcery.gemspec
CHANGED
@@ -1,34 +1,50 @@
|
|
1
|
-
lib = File.expand_path('
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
require 'sorcery/version'
|
4
4
|
|
5
|
+
# rubocop:disable Metrics/BlockLength
|
5
6
|
Gem::Specification.new do |s|
|
6
7
|
s.name = 'sorcery'
|
7
8
|
s.version = Sorcery::VERSION
|
8
|
-
s.authors = [
|
9
|
-
|
9
|
+
s.authors = [
|
10
|
+
'Noam Ben Ari',
|
11
|
+
'Kir Shatrov',
|
12
|
+
'Grzegorz Witek',
|
13
|
+
'Chase Gilliam',
|
14
|
+
'Josh Buker'
|
15
|
+
]
|
16
|
+
s.email = [
|
17
|
+
'chase.gilliam@gmail.com',
|
18
|
+
'contact@joshbuker.com'
|
19
|
+
]
|
20
|
+
|
21
|
+
# TODO: Cleanup formatting.
|
22
|
+
# rubocop:disable Metrics/LineLength
|
10
23
|
s.description = 'Provides common authentication needs such as signing in/out, activating by email and resetting password.'
|
11
24
|
s.summary = 'Magical authentication for Rails applications'
|
12
25
|
s.homepage = 'https://github.com/Sorcery/sorcery'
|
13
26
|
s.post_install_message = "As of version 1.0 oauth/oauth2 won't be automatically bundled so you may need to add those dependencies to your Gemfile.\n"
|
14
27
|
s.post_install_message += 'You may need oauth2 if you use external providers such as any of these: https://github.com/Sorcery/sorcery/tree/master/lib/sorcery/providers'
|
28
|
+
# rubocop:enable Metrics/LineLength
|
15
29
|
|
16
30
|
s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
31
|
s.require_paths = ['lib']
|
18
32
|
|
19
33
|
s.licenses = ['MIT']
|
20
34
|
|
21
|
-
s.required_ruby_version = '>= 2.2.
|
35
|
+
s.required_ruby_version = '>= 2.2.9'
|
22
36
|
|
37
|
+
s.add_dependency 'bcrypt', '~> 3.1'
|
23
38
|
s.add_dependency 'oauth', '~> 0.4', '>= 0.4.4'
|
24
39
|
s.add_dependency 'oauth2', '~> 1.0', '>= 0.8.0'
|
25
|
-
s.add_dependency 'bcrypt', '~> 3.1'
|
26
40
|
|
27
|
-
s.add_development_dependency '
|
28
|
-
s.add_development_dependency 'timecop'
|
29
|
-
s.add_development_dependency 'simplecov', '>= 0.3.8'
|
41
|
+
s.add_development_dependency 'byebug', '~> 10.0.0'
|
30
42
|
s.add_development_dependency 'rspec-rails', '~> 3.7.0'
|
43
|
+
s.add_development_dependency 'rubocop'
|
44
|
+
s.add_development_dependency 'simplecov', '>= 0.3.8'
|
31
45
|
s.add_development_dependency 'test-unit', '~> 3.2.0'
|
32
|
-
s.add_development_dependency '
|
46
|
+
s.add_development_dependency 'timecop'
|
33
47
|
s.add_development_dependency 'webmock', '~> 3.3.0'
|
48
|
+
s.add_development_dependency 'yard', '~> 0.9.0', '>= 0.9.12'
|
34
49
|
end
|
50
|
+
# rubocop:enable Metrics/BlockLength
|
@@ -5,12 +5,12 @@ require 'shared_examples/user_activation_shared_examples'
|
|
5
5
|
|
6
6
|
describe User, 'with activation submodule', active_record: true do
|
7
7
|
before(:all) do
|
8
|
-
|
8
|
+
MigrationHelper.migrate("#{Rails.root}/db/migrate/activation")
|
9
9
|
User.reset_column_information
|
10
10
|
end
|
11
11
|
|
12
12
|
after(:all) do
|
13
|
-
|
13
|
+
MigrationHelper.rollback("#{Rails.root}/db/migrate/activation")
|
14
14
|
end
|
15
15
|
|
16
16
|
it_behaves_like 'rails_3_activation_model'
|
@@ -3,12 +3,12 @@ require 'shared_examples/user_activity_logging_shared_examples'
|
|
3
3
|
|
4
4
|
describe User, 'with activity logging submodule', active_record: true do
|
5
5
|
before(:all) do
|
6
|
-
|
6
|
+
MigrationHelper.migrate("#{Rails.root}/db/migrate/activity_logging")
|
7
7
|
User.reset_column_information
|
8
8
|
end
|
9
9
|
|
10
10
|
after(:all) do
|
11
|
-
|
11
|
+
MigrationHelper.rollback("#{Rails.root}/db/migrate/activity_logging")
|
12
12
|
end
|
13
13
|
|
14
14
|
it_behaves_like 'rails_3_activity_logging_model'
|
@@ -3,12 +3,12 @@ require 'shared_examples/user_brute_force_protection_shared_examples'
|
|
3
3
|
|
4
4
|
describe User, 'with brute_force_protection submodule', active_record: true do
|
5
5
|
before(:all) do
|
6
|
-
|
6
|
+
MigrationHelper.migrate("#{Rails.root}/db/migrate/brute_force_protection")
|
7
7
|
User.reset_column_information
|
8
8
|
end
|
9
9
|
|
10
10
|
after(:all) do
|
11
|
-
|
11
|
+
MigrationHelper.rollback("#{Rails.root}/db/migrate/brute_force_protection")
|
12
12
|
end
|
13
13
|
|
14
14
|
it_behaves_like 'rails_3_brute_force_protection_model'
|
@@ -3,13 +3,13 @@ require 'shared_examples/user_magic_login_shared_examples'
|
|
3
3
|
|
4
4
|
describe User, 'with magic_login submodule', active_record: true do
|
5
5
|
before(:all) do
|
6
|
-
|
6
|
+
MigrationHelper.migrate("#{Rails.root}/db/migrate/magic_login")
|
7
7
|
User.reset_column_information
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
after(:all) do
|
11
|
-
|
11
|
+
MigrationHelper.rollback("#{Rails.root}/db/migrate/magic_login")
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
it_behaves_like 'magic_login_model'
|
15
15
|
end
|
@@ -3,12 +3,12 @@ require 'shared_examples/user_oauth_shared_examples'
|
|
3
3
|
|
4
4
|
describe User, 'with oauth submodule', active_record: true do
|
5
5
|
before(:all) do
|
6
|
-
|
6
|
+
MigrationHelper.migrate("#{Rails.root}/db/migrate/external")
|
7
7
|
User.reset_column_information
|
8
8
|
end
|
9
9
|
|
10
10
|
after(:all) do
|
11
|
-
|
11
|
+
MigrationHelper.rollback("#{Rails.root}/db/migrate/external")
|
12
12
|
end
|
13
13
|
|
14
14
|
it_behaves_like 'rails_3_oauth_model'
|
@@ -3,12 +3,12 @@ require 'shared_examples/user_remember_me_shared_examples'
|
|
3
3
|
|
4
4
|
describe User, 'with remember_me submodule', active_record: true do
|
5
5
|
before(:all) do
|
6
|
-
|
6
|
+
MigrationHelper.migrate("#{Rails.root}/db/migrate/remember_me")
|
7
7
|
User.reset_column_information
|
8
8
|
end
|
9
9
|
|
10
10
|
after(:all) do
|
11
|
-
|
11
|
+
MigrationHelper.rollback("#{Rails.root}/db/migrate/remember_me")
|
12
12
|
end
|
13
13
|
|
14
14
|
it_behaves_like 'rails_3_remember_me_model'
|
@@ -3,12 +3,12 @@ require 'shared_examples/user_reset_password_shared_examples'
|
|
3
3
|
|
4
4
|
describe User, 'with reset_password submodule', active_record: true do
|
5
5
|
before(:all) do
|
6
|
-
|
6
|
+
MigrationHelper.migrate("#{Rails.root}/db/migrate/reset_password")
|
7
7
|
User.reset_column_information
|
8
8
|
end
|
9
9
|
|
10
10
|
after(:all) do
|
11
|
-
|
11
|
+
MigrationHelper.rollback("#{Rails.root}/db/migrate/reset_password")
|
12
12
|
end
|
13
13
|
|
14
14
|
it_behaves_like 'rails_3_reset_password_model'
|
@@ -22,16 +22,6 @@ describe User, 'with no submodules (core)', active_record: true do
|
|
22
22
|
it_should_behave_like 'rails_3_core_model'
|
23
23
|
|
24
24
|
describe 'external users' do
|
25
|
-
before(:all) do
|
26
|
-
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/external")
|
27
|
-
User.reset_column_information
|
28
|
-
sorcery_reload!
|
29
|
-
end
|
30
|
-
|
31
|
-
after(:all) do
|
32
|
-
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
|
33
|
-
end
|
34
|
-
|
35
25
|
it_should_behave_like 'external_user'
|
36
26
|
end
|
37
27
|
end
|
@@ -28,7 +28,7 @@ describe SorceryController, type: :controller do
|
|
28
28
|
expect(User).to receive('authenticate').with('bla@bla.com', 'secret').and_return(user)
|
29
29
|
get :test_http_basic_auth, params: {}, session: { http_authentication_used: true }
|
30
30
|
|
31
|
-
expect(response).to
|
31
|
+
expect(response).to be_successful
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'fails authentication if credentials are wrong' do
|
@@ -5,7 +5,9 @@ require 'spec_helper'
|
|
5
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, type: :controller 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
|
|
@@ -151,7 +155,7 @@ describe SorceryController, active_record: true, type: :controller do
|
|
151
155
|
expect(flash[:notice]).to eq 'Success!'
|
152
156
|
end
|
153
157
|
|
154
|
-
[
|
158
|
+
%i[github google liveid vk salesforce paypal slack wechat microsoft instagram auth0].each do |provider|
|
155
159
|
describe "with #{provider}" do
|
156
160
|
it 'login_at redirects correctly' do
|
157
161
|
get :"login_at_test_#{provider}"
|
@@ -196,51 +200,63 @@ describe SorceryController, active_record: true, type: :controller do
|
|
196
200
|
|
197
201
|
describe 'OAuth with User Activation features' do
|
198
202
|
before(:all) do
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
203
|
+
sorcery_reload!(%i[user_activation external], user_activation_mailer: ::SorceryMailer)
|
204
|
+
sorcery_controller_property_set(
|
205
|
+
:external_providers,
|
206
|
+
%i[
|
207
|
+
facebook
|
208
|
+
github
|
209
|
+
google
|
210
|
+
liveid
|
211
|
+
vk
|
212
|
+
salesforce
|
213
|
+
paypal
|
214
|
+
slack
|
215
|
+
wechat
|
216
|
+
microsoft
|
217
|
+
instagram
|
218
|
+
auth0
|
219
|
+
]
|
220
|
+
)
|
205
221
|
|
206
222
|
# TODO: refactor
|
207
|
-
sorcery_controller_external_property_set(:facebook, :key,
|
208
|
-
sorcery_controller_external_property_set(:facebook, :secret,
|
209
|
-
sorcery_controller_external_property_set(:facebook, :callback_url,
|
210
|
-
sorcery_controller_external_property_set(:github, :key,
|
211
|
-
sorcery_controller_external_property_set(:github, :secret,
|
212
|
-
sorcery_controller_external_property_set(:github, :callback_url,
|
213
|
-
sorcery_controller_external_property_set(:google, :key,
|
214
|
-
sorcery_controller_external_property_set(:google, :secret,
|
215
|
-
sorcery_controller_external_property_set(:google, :callback_url,
|
216
|
-
sorcery_controller_external_property_set(:liveid, :key,
|
217
|
-
sorcery_controller_external_property_set(:liveid, :secret,
|
218
|
-
sorcery_controller_external_property_set(:liveid, :callback_url,
|
219
|
-
sorcery_controller_external_property_set(:vk, :key,
|
220
|
-
sorcery_controller_external_property_set(:vk, :secret,
|
221
|
-
sorcery_controller_external_property_set(:vk, :callback_url,
|
222
|
-
sorcery_controller_external_property_set(:salesforce, :key,
|
223
|
-
sorcery_controller_external_property_set(:salesforce, :secret,
|
224
|
-
sorcery_controller_external_property_set(:salesforce, :callback_url,
|
225
|
-
sorcery_controller_external_property_set(:paypal, :key,
|
226
|
-
sorcery_controller_external_property_set(:paypal, :secret,
|
227
|
-
sorcery_controller_external_property_set(:paypal, :callback_url,
|
228
|
-
sorcery_controller_external_property_set(:slack, :key,
|
229
|
-
sorcery_controller_external_property_set(:slack, :secret,
|
230
|
-
sorcery_controller_external_property_set(:slack, :callback_url,
|
231
|
-
sorcery_controller_external_property_set(:wechat, :key,
|
232
|
-
sorcery_controller_external_property_set(:wechat, :secret,
|
233
|
-
sorcery_controller_external_property_set(:wechat, :callback_url,
|
234
|
-
sorcery_controller_external_property_set(:microsoft, :key,
|
235
|
-
sorcery_controller_external_property_set(:microsoft, :secret,
|
236
|
-
sorcery_controller_external_property_set(:microsoft, :callback_url,
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
223
|
+
sorcery_controller_external_property_set(:facebook, :key, 'eYVNBjBDi33aa9GkA3w')
|
224
|
+
sorcery_controller_external_property_set(:facebook, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
225
|
+
sorcery_controller_external_property_set(:facebook, :callback_url, 'http://blabla.com')
|
226
|
+
sorcery_controller_external_property_set(:github, :key, 'eYVNBjBDi33aa9GkA3w')
|
227
|
+
sorcery_controller_external_property_set(:github, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
228
|
+
sorcery_controller_external_property_set(:github, :callback_url, 'http://blabla.com')
|
229
|
+
sorcery_controller_external_property_set(:google, :key, 'eYVNBjBDi33aa9GkA3w')
|
230
|
+
sorcery_controller_external_property_set(:google, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
231
|
+
sorcery_controller_external_property_set(:google, :callback_url, 'http://blabla.com')
|
232
|
+
sorcery_controller_external_property_set(:liveid, :key, 'eYVNBjBDi33aa9GkA3w')
|
233
|
+
sorcery_controller_external_property_set(:liveid, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
234
|
+
sorcery_controller_external_property_set(:liveid, :callback_url, 'http://blabla.com')
|
235
|
+
sorcery_controller_external_property_set(:vk, :key, 'eYVNBjBDi33aa9GkA3w')
|
236
|
+
sorcery_controller_external_property_set(:vk, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
237
|
+
sorcery_controller_external_property_set(:vk, :callback_url, 'http://blabla.com')
|
238
|
+
sorcery_controller_external_property_set(:salesforce, :key, 'eYVNBjBDi33aa9GkA3w')
|
239
|
+
sorcery_controller_external_property_set(:salesforce, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
240
|
+
sorcery_controller_external_property_set(:salesforce, :callback_url, 'http://blabla.com')
|
241
|
+
sorcery_controller_external_property_set(:paypal, :key, 'eYVNBjBDi33aa9GkA3w')
|
242
|
+
sorcery_controller_external_property_set(:paypal, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
243
|
+
sorcery_controller_external_property_set(:paypal, :callback_url, 'http://blabla.com')
|
244
|
+
sorcery_controller_external_property_set(:slack, :key, 'eYVNBjBDi33aa9GkA3w')
|
245
|
+
sorcery_controller_external_property_set(:slack, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
246
|
+
sorcery_controller_external_property_set(:slack, :callback_url, 'http://blabla.com')
|
247
|
+
sorcery_controller_external_property_set(:wechat, :key, 'eYVNBjBDi33aa9GkA3w')
|
248
|
+
sorcery_controller_external_property_set(:wechat, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
249
|
+
sorcery_controller_external_property_set(:wechat, :callback_url, 'http://blabla.com')
|
250
|
+
sorcery_controller_external_property_set(:microsoft, :key, 'eYVNBjBDi33aa9GkA3w')
|
251
|
+
sorcery_controller_external_property_set(:microsoft, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
252
|
+
sorcery_controller_external_property_set(:microsoft, :callback_url, 'http://blabla.com')
|
253
|
+
sorcery_controller_external_property_set(:instagram, :key, 'eYVNBjBDi33aa9GkA3w')
|
254
|
+
sorcery_controller_external_property_set(:instagram, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
255
|
+
sorcery_controller_external_property_set(:instagram, :callback_url, 'http://blabla.com')
|
256
|
+
sorcery_controller_external_property_set(:auth0, :key, 'eYVNBjBDi33aa9GkA3w')
|
257
|
+
sorcery_controller_external_property_set(:auth0, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
258
|
+
sorcery_controller_external_property_set(:auth0, :callback_url, 'http://blabla.com')
|
259
|
+
sorcery_controller_external_property_set(:auth0, :site, 'https://sorcery-test.auth0.com')
|
244
260
|
end
|
245
261
|
|
246
262
|
after(:each) do
|
@@ -263,7 +279,7 @@ describe SorceryController, active_record: true, type: :controller do
|
|
263
279
|
expect(ActionMailer::Base.deliveries.size).to eq old_size
|
264
280
|
end
|
265
281
|
|
266
|
-
[
|
282
|
+
%i[github google liveid vk salesforce paypal wechat microsoft instagram auth0].each do |provider|
|
267
283
|
it "does not send activation email to external users (#{provider})" do
|
268
284
|
old_size = ActionMailer::Base.deliveries.size
|
269
285
|
create_new_external_user provider
|
@@ -275,6 +291,7 @@ describe SorceryController, active_record: true, type: :controller do
|
|
275
291
|
create_new_external_user provider
|
276
292
|
old_size = ActionMailer::Base.deliveries.size
|
277
293
|
@user.activate!
|
294
|
+
expect(ActionMailer::Base.deliveries.size).to eq old_size
|
278
295
|
end
|
279
296
|
end
|
280
297
|
end
|
@@ -283,17 +300,10 @@ describe SorceryController, active_record: true, type: :controller do
|
|
283
300
|
let(:user) { double('user', id: 42) }
|
284
301
|
|
285
302
|
before(:all) do
|
286
|
-
sorcery_reload!([
|
287
|
-
end
|
288
|
-
|
289
|
-
after(:all) do
|
290
|
-
if SORCERY_ORM == :active_record
|
291
|
-
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
|
292
|
-
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/activity_logging")
|
293
|
-
end
|
303
|
+
sorcery_reload!(%i[activity_logging external])
|
294
304
|
end
|
295
305
|
|
296
|
-
%w
|
306
|
+
%w[facebook github google liveid vk salesforce slack].each do |provider|
|
297
307
|
context "when #{provider}" do
|
298
308
|
before(:each) do
|
299
309
|
sorcery_controller_property_set(:register_login_time, true)
|
@@ -327,12 +337,12 @@ describe SorceryController, active_record: true, type: :controller do
|
|
327
337
|
|
328
338
|
describe 'OAuth with session timeout features' do
|
329
339
|
before(:all) do
|
330
|
-
sorcery_reload!([
|
340
|
+
sorcery_reload!(%i[session_timeout external])
|
331
341
|
end
|
332
342
|
|
333
343
|
let(:user) { double('user', id: 42) }
|
334
344
|
|
335
|
-
%w
|
345
|
+
%w[facebook github google liveid vk salesforce slack].each do |provider|
|
336
346
|
context "when #{provider}" do
|
337
347
|
before(:each) do
|
338
348
|
sorcery_model_property_set(:authentications_class, Authentication)
|
@@ -369,41 +379,78 @@ describe SorceryController, active_record: true, type: :controller do
|
|
369
379
|
def stub_all_oauth2_requests!
|
370
380
|
access_token = double(OAuth2::AccessToken)
|
371
381
|
allow(access_token).to receive(:token_param=)
|
382
|
+
# Needed for Instagram
|
383
|
+
allow(access_token).to receive(:[]).with(:client_id) { 'eYVNBjBDi33aa9GkA3w' }
|
372
384
|
response = double(OAuth2::Response)
|
373
385
|
allow(response).to receive(:body) {
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
386
|
+
{
|
387
|
+
'id' => '123',
|
388
|
+
'user_id' => '123', # Needed for Salesforce
|
389
|
+
'sub' => '123', # Needed for Auth0
|
390
|
+
'name' => 'Noam Ben Ari',
|
391
|
+
'first_name' => 'Noam',
|
392
|
+
'last_name' => 'Ben Ari',
|
393
|
+
'link' => 'http://www.facebook.com/nbenari1',
|
394
|
+
'hometown' => {
|
395
|
+
'id' => '110619208966868',
|
396
|
+
'name' => 'Haifa, Israel'
|
397
|
+
},
|
398
|
+
'location' => {
|
399
|
+
'id' => '106906559341067',
|
400
|
+
'name' => 'Pardes Hanah, Hefa, Israel'
|
401
|
+
},
|
402
|
+
'bio' => "I'm a new daddy, and enjoying it!",
|
403
|
+
'gender' => 'male',
|
404
|
+
'email' => 'nbenari@gmail.com',
|
405
|
+
'timezone' => 2,
|
406
|
+
'locale' => 'en_US',
|
407
|
+
'languages' => [
|
408
|
+
{
|
409
|
+
'id' => '108405449189952',
|
410
|
+
'name' => 'Hebrew'
|
411
|
+
},
|
412
|
+
{
|
413
|
+
'id' => '106059522759137',
|
414
|
+
'name' => 'English'
|
415
|
+
},
|
416
|
+
{
|
417
|
+
'id' => '112624162082677',
|
418
|
+
'name' => 'Russian'
|
419
|
+
}
|
420
|
+
],
|
421
|
+
'verified' => true,
|
422
|
+
'updated_time' => '2011-02-16T20:59:38+0000',
|
423
|
+
# response for VK auth
|
424
|
+
'response' => [
|
425
|
+
{
|
426
|
+
'uid' => '123',
|
427
|
+
'first_name' => 'Noam',
|
428
|
+
'last_name' => 'Ben Ari'
|
429
|
+
}
|
430
|
+
],
|
431
|
+
'user' => {
|
432
|
+
'name' => 'Sonny Whether',
|
433
|
+
'id' => '123',
|
434
|
+
'email' => 'bobby@example.com'
|
435
|
+
},
|
436
|
+
# response for wechat auth
|
437
|
+
'unionid' => '123',
|
438
|
+
# response for instagram
|
439
|
+
'data' => {
|
440
|
+
'username' => 'pnmahoney',
|
441
|
+
'bio' => 'turn WHAT down?',
|
442
|
+
'website' => '',
|
443
|
+
'profile_picture' => 'http://photos-d.ak.instagram.com/hphotos-ak-xpa1/10454121_417985815007395_867850883_a.jpg',
|
444
|
+
'full_name' => 'Patrick Mahoney',
|
445
|
+
'counts' => {
|
446
|
+
'media' => 2,
|
447
|
+
'followed_by' => 100,
|
448
|
+
'follows' => 71
|
449
|
+
},
|
450
|
+
'id' => '123'
|
451
|
+
}
|
452
|
+
}.to_json
|
453
|
+
}
|
407
454
|
allow(access_token).to receive(:get) { response }
|
408
455
|
allow(access_token).to receive(:token) { '187041a618229fdaf16613e96e1caabc1e86e46bbfad228de41520e63fe45873684c365a14417289599f3' }
|
409
456
|
# access_token params for VK auth
|
@@ -412,37 +459,60 @@ describe SorceryController, active_record: true, type: :controller do
|
|
412
459
|
end
|
413
460
|
|
414
461
|
def set_external_property
|
415
|
-
sorcery_controller_property_set(
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
sorcery_controller_external_property_set(:
|
433
|
-
sorcery_controller_external_property_set(:
|
434
|
-
sorcery_controller_external_property_set(:
|
435
|
-
sorcery_controller_external_property_set(:
|
436
|
-
sorcery_controller_external_property_set(:
|
437
|
-
sorcery_controller_external_property_set(:
|
438
|
-
sorcery_controller_external_property_set(:
|
439
|
-
sorcery_controller_external_property_set(:
|
440
|
-
sorcery_controller_external_property_set(:
|
441
|
-
sorcery_controller_external_property_set(:
|
442
|
-
sorcery_controller_external_property_set(:
|
443
|
-
sorcery_controller_external_property_set(:
|
444
|
-
sorcery_controller_external_property_set(:
|
445
|
-
sorcery_controller_external_property_set(:
|
462
|
+
sorcery_controller_property_set(
|
463
|
+
:external_providers,
|
464
|
+
%i[
|
465
|
+
facebook
|
466
|
+
github
|
467
|
+
google
|
468
|
+
liveid
|
469
|
+
vk
|
470
|
+
salesforce
|
471
|
+
paypal
|
472
|
+
slack
|
473
|
+
wechat
|
474
|
+
microsoft
|
475
|
+
instagram
|
476
|
+
auth0
|
477
|
+
]
|
478
|
+
)
|
479
|
+
sorcery_controller_external_property_set(:facebook, :key, 'eYVNBjBDi33aa9GkA3w')
|
480
|
+
sorcery_controller_external_property_set(:facebook, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
481
|
+
sorcery_controller_external_property_set(:facebook, :callback_url, 'http://blabla.com')
|
482
|
+
sorcery_controller_external_property_set(:github, :key, 'eYVNBjBDi33aa9GkA3w')
|
483
|
+
sorcery_controller_external_property_set(:github, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
484
|
+
sorcery_controller_external_property_set(:github, :callback_url, 'http://blabla.com')
|
485
|
+
sorcery_controller_external_property_set(:google, :key, 'eYVNBjBDi33aa9GkA3w')
|
486
|
+
sorcery_controller_external_property_set(:google, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
487
|
+
sorcery_controller_external_property_set(:google, :callback_url, 'http://blabla.com')
|
488
|
+
sorcery_controller_external_property_set(:liveid, :key, 'eYVNBjBDi33aa9GkA3w')
|
489
|
+
sorcery_controller_external_property_set(:liveid, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
490
|
+
sorcery_controller_external_property_set(:liveid, :callback_url, 'http://blabla.com')
|
491
|
+
sorcery_controller_external_property_set(:vk, :key, 'eYVNBjBDi33aa9GkA3w')
|
492
|
+
sorcery_controller_external_property_set(:vk, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
493
|
+
sorcery_controller_external_property_set(:vk, :callback_url, 'http://blabla.com')
|
494
|
+
sorcery_controller_external_property_set(:salesforce, :key, 'eYVNBjBDi33aa9GkA3w')
|
495
|
+
sorcery_controller_external_property_set(:salesforce, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
496
|
+
sorcery_controller_external_property_set(:salesforce, :callback_url, 'http://blabla.com')
|
497
|
+
sorcery_controller_external_property_set(:paypal, :key, 'eYVNBjBDi33aa9GkA3w')
|
498
|
+
sorcery_controller_external_property_set(:paypal, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
499
|
+
sorcery_controller_external_property_set(:paypal, :callback_url, 'http://blabla.com')
|
500
|
+
sorcery_controller_external_property_set(:slack, :key, 'eYVNBjBDi33aa9GkA3w')
|
501
|
+
sorcery_controller_external_property_set(:slack, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
502
|
+
sorcery_controller_external_property_set(:slack, :callback_url, 'http://blabla.com')
|
503
|
+
sorcery_controller_external_property_set(:wechat, :key, 'eYVNBjBDi33aa9GkA3w')
|
504
|
+
sorcery_controller_external_property_set(:wechat, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
505
|
+
sorcery_controller_external_property_set(:wechat, :callback_url, 'http://blabla.com')
|
506
|
+
sorcery_controller_external_property_set(:microsoft, :key, 'eYVNBjBDi33aa9GkA3w')
|
507
|
+
sorcery_controller_external_property_set(:microsoft, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
508
|
+
sorcery_controller_external_property_set(:microsoft, :callback_url, 'http://blabla.com')
|
509
|
+
sorcery_controller_external_property_set(:instagram, :key, 'eYVNBjBDi33aa9GkA3w')
|
510
|
+
sorcery_controller_external_property_set(:instagram, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
511
|
+
sorcery_controller_external_property_set(:instagram, :callback_url, 'http://blabla.com')
|
512
|
+
sorcery_controller_external_property_set(:auth0, :key, 'eYVNBjBDi33aa9GkA3w')
|
513
|
+
sorcery_controller_external_property_set(:auth0, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
514
|
+
sorcery_controller_external_property_set(:auth0, :callback_url, 'http://blabla.com')
|
515
|
+
sorcery_controller_external_property_set(:auth0, :site, 'https://sorcery-test.auth0.com')
|
446
516
|
end
|
447
517
|
|
448
518
|
def provider_url(provider)
|
@@ -455,7 +525,9 @@ describe SorceryController, active_record: true, type: :controller do
|
|
455
525
|
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",
|
456
526
|
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",
|
457
527
|
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",
|
458
|
-
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"
|
528
|
+
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",
|
529
|
+
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",
|
530
|
+
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"
|
459
531
|
}[provider]
|
460
532
|
end
|
461
533
|
end
|