sorcery 0.11.0 → 0.15.1
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.
- checksums.yaml +5 -5
- data/.github/ISSUE_TEMPLATE.md +20 -0
- data/.rubocop.yml +55 -0
- data/.rubocop_todo.yml +145 -0
- data/.travis.yml +3 -52
- data/CHANGELOG.md +69 -0
- data/Gemfile +3 -3
- data/{LICENSE.txt → LICENSE.md} +1 -1
- data/README.md +34 -7
- data/lib/generators/sorcery/USAGE +1 -1
- data/lib/generators/sorcery/install_generator.rb +21 -21
- data/lib/generators/sorcery/templates/initializer.rb +164 -69
- data/lib/generators/sorcery/templates/migration/activity_logging.rb +4 -4
- data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +3 -3
- data/lib/generators/sorcery/templates/migration/core.rb +2 -2
- data/lib/generators/sorcery/templates/migration/external.rb +3 -3
- data/lib/generators/sorcery/templates/migration/magic_login.rb +9 -0
- data/lib/generators/sorcery/templates/migration/remember_me.rb +2 -2
- data/lib/generators/sorcery/templates/migration/reset_password.rb +4 -3
- data/lib/generators/sorcery/templates/migration/user_activation.rb +3 -3
- data/lib/sorcery.rb +2 -0
- data/lib/sorcery/adapters/active_record_adapter.rb +3 -2
- data/lib/sorcery/adapters/mongoid_adapter.rb +23 -11
- data/lib/sorcery/controller.rb +26 -15
- data/lib/sorcery/controller/config.rb +2 -0
- data/lib/sorcery/controller/submodules/activity_logging.rb +14 -3
- data/lib/sorcery/controller/submodules/brute_force_protection.rb +7 -3
- data/lib/sorcery/controller/submodules/external.rb +48 -33
- data/lib/sorcery/controller/submodules/http_basic_auth.rb +5 -1
- data/lib/sorcery/controller/submodules/remember_me.rb +9 -10
- data/lib/sorcery/controller/submodules/session_timeout.rb +32 -6
- data/lib/sorcery/crypto_providers/aes256.rb +2 -1
- data/lib/sorcery/crypto_providers/bcrypt.rb +8 -2
- data/lib/sorcery/engine.rb +16 -3
- data/lib/sorcery/model.rb +14 -10
- data/lib/sorcery/model/config.rb +12 -4
- data/lib/sorcery/model/submodules/brute_force_protection.rb +6 -7
- data/lib/sorcery/model/submodules/external.rb +19 -3
- data/lib/sorcery/model/submodules/magic_login.rb +130 -0
- data/lib/sorcery/model/submodules/reset_password.rb +25 -2
- data/lib/sorcery/model/submodules/user_activation.rb +1 -1
- data/lib/sorcery/model/temporary_token.rb +3 -1
- data/lib/sorcery/protocols/oauth.rb +1 -0
- data/lib/sorcery/providers/auth0.rb +46 -0
- data/lib/sorcery/providers/discord.rb +52 -0
- data/lib/sorcery/providers/heroku.rb +1 -0
- data/lib/sorcery/providers/instagram.rb +73 -0
- data/lib/sorcery/providers/line.rb +47 -0
- data/lib/sorcery/providers/linkedin.rb +45 -36
- data/lib/sorcery/providers/vk.rb +5 -4
- 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/test_helpers/rails/request.rb +20 -0
- data/lib/sorcery/version.rb +1 -1
- data/sorcery.gemspec +28 -11
- 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 +15 -0
- 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 +212 -123
- data/spec/controllers/controller_oauth_spec.rb +7 -7
- data/spec/controllers/controller_remember_me_spec.rb +16 -8
- data/spec/controllers/controller_session_timeout_spec.rb +90 -3
- data/spec/controllers/controller_spec.rb +13 -3
- data/spec/orm/active_record.rb +2 -2
- data/spec/providers/example_provider_spec.rb +17 -0
- data/spec/providers/example_spec.rb +17 -0
- data/spec/providers/vk_spec.rb +42 -0
- data/spec/rails_app/app/assets/config/manifest.js +1 -0
- data/spec/rails_app/app/controllers/sorcery_controller.rb +131 -32
- data/spec/rails_app/app/mailers/sorcery_mailer.rb +7 -0
- 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 +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 +14 -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 +17 -0
- data/spec/rails_app/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +2 -0
- data/spec/rails_app/db/schema.rb +7 -9
- data/spec/shared_examples/user_magic_login_shared_examples.rb +150 -0
- 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 +37 -5
- data/spec/shared_examples/user_shared_examples.rb +104 -43
- data/spec/sorcery_crypto_providers_spec.rb +61 -1
- data/spec/sorcery_temporary_token_spec.rb +27 -0
- data/spec/spec.opts +1 -1
- data/spec/spec_helper.rb +2 -2
- data/spec/support/migration_helper.rb +19 -0
- data/spec/support/providers/example.rb +11 -0
- data/spec/support/providers/example_provider.rb +11 -0
- metadata +89 -33
- data/gemfiles/active_record-rails40.gemfile +0 -7
- data/gemfiles/active_record-rails41.gemfile +0 -7
- data/gemfiles/active_record-rails42.gemfile +0 -7
- data/spec/rails_app/config/initializers/secret_token.rb +0 -7
@@ -37,10 +37,13 @@ module Sorcery
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def get_user_hash(access_token)
|
40
|
-
response = access_token.get(
|
41
|
-
|
42
|
-
|
43
|
-
|
40
|
+
response = access_token.get(
|
41
|
+
user_info_path,
|
42
|
+
params: {
|
43
|
+
access_token: access_token.token,
|
44
|
+
openid: access_token.params['openid']
|
45
|
+
}
|
46
|
+
)
|
44
47
|
|
45
48
|
{}.tap do |h|
|
46
49
|
h[:user_info] = JSON.parse(response.body)
|
@@ -70,10 +73,9 @@ module Sorcery
|
|
70
73
|
args,
|
71
74
|
token_url: token_url,
|
72
75
|
mode: mode,
|
73
|
-
param_name: param_name
|
76
|
+
param_name: param_name
|
74
77
|
)
|
75
78
|
end
|
76
79
|
end
|
77
80
|
end
|
78
81
|
end
|
79
|
-
|
@@ -17,7 +17,7 @@ module Sorcery
|
|
17
17
|
# a patch to fix a bug in testing that happens when you 'destroy' a session twice.
|
18
18
|
# After the first destroy, the session is an ordinary hash, and then when destroy
|
19
19
|
# is called again there's an exception.
|
20
|
-
class ::Hash
|
20
|
+
class ::Hash # rubocop:disable Style/ClassAndModuleChildren
|
21
21
|
def destroy
|
22
22
|
clear
|
23
23
|
end
|
@@ -69,9 +69,10 @@ module Sorcery
|
|
69
69
|
def reload_user_class
|
70
70
|
User && Object.send(:remove_const, 'User')
|
71
71
|
load 'user.rb'
|
72
|
-
|
73
|
-
|
74
|
-
|
72
|
+
|
73
|
+
return unless User.respond_to?(:reset_column_information)
|
74
|
+
|
75
|
+
User.reset_column_information
|
75
76
|
end
|
76
77
|
end
|
77
78
|
end
|
@@ -4,11 +4,11 @@ module Sorcery
|
|
4
4
|
module Rails
|
5
5
|
include ::Sorcery::TestHelpers::Rails::Controller
|
6
6
|
|
7
|
-
SUBMODULES_AUTO_ADDED_CONTROLLER_FILTERS = [
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
]
|
7
|
+
SUBMODULES_AUTO_ADDED_CONTROLLER_FILTERS = %i[
|
8
|
+
register_last_activity_time_to_db
|
9
|
+
deny_banned_user
|
10
|
+
validate_session
|
11
|
+
].freeze
|
12
12
|
|
13
13
|
def sorcery_reload!(submodules = [], options = {})
|
14
14
|
reload_user_class
|
@@ -40,11 +40,11 @@ module Sorcery
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
User.authenticates_with_sorcery!
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
43
|
+
return unless defined?(DataMapper) && User.ancestors.include?(DataMapper::Resource)
|
44
|
+
|
45
|
+
DataMapper.auto_migrate!
|
46
|
+
User.finalize
|
47
|
+
Authentication.finalize
|
48
48
|
end
|
49
49
|
|
50
50
|
def sorcery_controller_property_set(property, value)
|
@@ -64,7 +64,7 @@ module Sorcery
|
|
64
64
|
end
|
65
65
|
|
66
66
|
if ::Rails.version < '5.0.0'
|
67
|
-
%w
|
67
|
+
%w[get post put].each do |method|
|
68
68
|
define_method(method) do |action, options = {}|
|
69
69
|
super action, options[:params] || {}, options[:session]
|
70
70
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Sorcery
|
2
|
+
module TestHelpers
|
3
|
+
module Rails
|
4
|
+
module Request
|
5
|
+
# Accepts arguments for user to login, the password, route to use and HTTP method
|
6
|
+
# Defaults - @user, 'secret', 'user_sessions_url' and http_method: POST
|
7
|
+
def login_user(user = nil, password = 'secret', route = nil, http_method = :post)
|
8
|
+
user ||= @user
|
9
|
+
route ||= user_sessions_url
|
10
|
+
|
11
|
+
username_attr = user.sorcery_config.username_attribute_names.first
|
12
|
+
username = user.send(username_attr)
|
13
|
+
password_attr = user.sorcery_config.password_attribute_name
|
14
|
+
|
15
|
+
send(http_method, route, params: { "#{username_attr}": username, "#{password_attr}": password })
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/sorcery/version.rb
CHANGED
data/sorcery.gemspec
CHANGED
@@ -1,33 +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 Layout/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 Layout/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.
|
35
|
+
s.required_ruby_version = '>= 2.4.9'
|
22
36
|
|
23
|
-
s.add_dependency 'oauth', '~> 0.4', '>= 0.4.4'
|
24
|
-
s.add_dependency 'oauth2', '~> 1.0', '>= 0.8.0'
|
25
37
|
s.add_dependency 'bcrypt', '~> 3.1'
|
38
|
+
s.add_dependency 'oauth', '~> 0.5', '>= 0.5.5'
|
39
|
+
s.add_dependency 'oauth2', '~> 1.0', '>= 0.8.0'
|
26
40
|
|
27
|
-
s.add_development_dependency '
|
28
|
-
s.add_development_dependency '
|
41
|
+
s.add_development_dependency 'byebug', '~> 10.0.0'
|
42
|
+
s.add_development_dependency 'rspec-rails', '~> 3.7.0'
|
43
|
+
s.add_development_dependency 'rubocop'
|
29
44
|
s.add_development_dependency 'simplecov', '>= 0.3.8'
|
30
|
-
s.add_development_dependency '
|
31
|
-
s.add_development_dependency '
|
32
|
-
s.add_development_dependency '
|
45
|
+
s.add_development_dependency 'test-unit', '~> 3.2.0'
|
46
|
+
s.add_development_dependency 'timecop'
|
47
|
+
s.add_development_dependency 'webmock', '~> 3.3.0'
|
48
|
+
s.add_development_dependency 'yard', '~> 0.9.0', '>= 0.9.12'
|
33
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'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'shared_examples/user_magic_login_shared_examples'
|
3
|
+
|
4
|
+
describe User, 'with magic_login submodule', active_record: true do
|
5
|
+
before(:all) do
|
6
|
+
MigrationHelper.migrate("#{Rails.root}/db/migrate/magic_login")
|
7
|
+
User.reset_column_information
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
MigrationHelper.rollback("#{Rails.root}/db/migrate/magic_login")
|
12
|
+
end
|
13
|
+
|
14
|
+
it_behaves_like 'magic_login_model'
|
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 discord].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,71 @@ 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
|
+
line
|
220
|
+
discord
|
221
|
+
]
|
222
|
+
)
|
205
223
|
|
206
224
|
# 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
|
-
|
225
|
+
sorcery_controller_external_property_set(:facebook, :key, 'eYVNBjBDi33aa9GkA3w')
|
226
|
+
sorcery_controller_external_property_set(:facebook, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
227
|
+
sorcery_controller_external_property_set(:facebook, :callback_url, 'http://blabla.com')
|
228
|
+
sorcery_controller_external_property_set(:github, :key, 'eYVNBjBDi33aa9GkA3w')
|
229
|
+
sorcery_controller_external_property_set(:github, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
230
|
+
sorcery_controller_external_property_set(:github, :callback_url, 'http://blabla.com')
|
231
|
+
sorcery_controller_external_property_set(:google, :key, 'eYVNBjBDi33aa9GkA3w')
|
232
|
+
sorcery_controller_external_property_set(:google, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
233
|
+
sorcery_controller_external_property_set(:google, :callback_url, 'http://blabla.com')
|
234
|
+
sorcery_controller_external_property_set(:liveid, :key, 'eYVNBjBDi33aa9GkA3w')
|
235
|
+
sorcery_controller_external_property_set(:liveid, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
236
|
+
sorcery_controller_external_property_set(:liveid, :callback_url, 'http://blabla.com')
|
237
|
+
sorcery_controller_external_property_set(:vk, :key, 'eYVNBjBDi33aa9GkA3w')
|
238
|
+
sorcery_controller_external_property_set(:vk, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
239
|
+
sorcery_controller_external_property_set(:vk, :callback_url, 'http://blabla.com')
|
240
|
+
sorcery_controller_external_property_set(:salesforce, :key, 'eYVNBjBDi33aa9GkA3w')
|
241
|
+
sorcery_controller_external_property_set(:salesforce, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
242
|
+
sorcery_controller_external_property_set(:salesforce, :callback_url, 'http://blabla.com')
|
243
|
+
sorcery_controller_external_property_set(:paypal, :key, 'eYVNBjBDi33aa9GkA3w')
|
244
|
+
sorcery_controller_external_property_set(:paypal, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
245
|
+
sorcery_controller_external_property_set(:paypal, :callback_url, 'http://blabla.com')
|
246
|
+
sorcery_controller_external_property_set(:slack, :key, 'eYVNBjBDi33aa9GkA3w')
|
247
|
+
sorcery_controller_external_property_set(:slack, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
248
|
+
sorcery_controller_external_property_set(:slack, :callback_url, 'http://blabla.com')
|
249
|
+
sorcery_controller_external_property_set(:wechat, :key, 'eYVNBjBDi33aa9GkA3w')
|
250
|
+
sorcery_controller_external_property_set(:wechat, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
251
|
+
sorcery_controller_external_property_set(:wechat, :callback_url, 'http://blabla.com')
|
252
|
+
sorcery_controller_external_property_set(:microsoft, :key, 'eYVNBjBDi33aa9GkA3w')
|
253
|
+
sorcery_controller_external_property_set(:microsoft, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
254
|
+
sorcery_controller_external_property_set(:microsoft, :callback_url, 'http://blabla.com')
|
255
|
+
sorcery_controller_external_property_set(:instagram, :key, 'eYVNBjBDi33aa9GkA3w')
|
256
|
+
sorcery_controller_external_property_set(:instagram, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
257
|
+
sorcery_controller_external_property_set(:instagram, :callback_url, 'http://blabla.com')
|
258
|
+
sorcery_controller_external_property_set(:auth0, :key, 'eYVNBjBDi33aa9GkA3w')
|
259
|
+
sorcery_controller_external_property_set(:auth0, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
260
|
+
sorcery_controller_external_property_set(:auth0, :callback_url, 'http://blabla.com')
|
261
|
+
sorcery_controller_external_property_set(:auth0, :site, 'https://sorcery-test.auth0.com')
|
262
|
+
sorcery_controller_external_property_set(:line, :key, "eYVNBjBDi33aa9GkA3w")
|
263
|
+
sorcery_controller_external_property_set(:line, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
|
264
|
+
sorcery_controller_external_property_set(:line, :callback_url, "http://blabla.com")
|
265
|
+
sorcery_controller_external_property_set(:discord, :key, 'eYVNBjBDi33aa9GkA3w')
|
266
|
+
sorcery_controller_external_property_set(:discord, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
267
|
+
sorcery_controller_external_property_set(:discord, :callback_url, 'http://blabla.com')
|
244
268
|
end
|
245
269
|
|
246
270
|
after(:each) do
|
@@ -263,7 +287,7 @@ describe SorceryController, active_record: true, type: :controller do
|
|
263
287
|
expect(ActionMailer::Base.deliveries.size).to eq old_size
|
264
288
|
end
|
265
289
|
|
266
|
-
[
|
290
|
+
%i[github google liveid vk salesforce paypal wechat microsoft instagram auth0 discord].each do |provider|
|
267
291
|
it "does not send activation email to external users (#{provider})" do
|
268
292
|
old_size = ActionMailer::Base.deliveries.size
|
269
293
|
create_new_external_user provider
|
@@ -275,6 +299,7 @@ describe SorceryController, active_record: true, type: :controller do
|
|
275
299
|
create_new_external_user provider
|
276
300
|
old_size = ActionMailer::Base.deliveries.size
|
277
301
|
@user.activate!
|
302
|
+
expect(ActionMailer::Base.deliveries.size).to eq old_size
|
278
303
|
end
|
279
304
|
end
|
280
305
|
end
|
@@ -283,17 +308,10 @@ describe SorceryController, active_record: true, type: :controller do
|
|
283
308
|
let(:user) { double('user', id: 42) }
|
284
309
|
|
285
310
|
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
|
311
|
+
sorcery_reload!(%i[activity_logging external])
|
294
312
|
end
|
295
313
|
|
296
|
-
%w
|
314
|
+
%w[facebook github google liveid vk salesforce slack discord].each do |provider|
|
297
315
|
context "when #{provider}" do
|
298
316
|
before(:each) do
|
299
317
|
sorcery_controller_property_set(:register_login_time, true)
|
@@ -327,12 +345,12 @@ describe SorceryController, active_record: true, type: :controller do
|
|
327
345
|
|
328
346
|
describe 'OAuth with session timeout features' do
|
329
347
|
before(:all) do
|
330
|
-
sorcery_reload!([
|
348
|
+
sorcery_reload!(%i[session_timeout external])
|
331
349
|
end
|
332
350
|
|
333
351
|
let(:user) { double('user', id: 42) }
|
334
352
|
|
335
|
-
%w
|
353
|
+
%w[facebook github google liveid vk salesforce slack discord].each do |provider|
|
336
354
|
context "when #{provider}" do
|
337
355
|
before(:each) do
|
338
356
|
sorcery_model_property_set(:authentications_class, Authentication)
|
@@ -369,41 +387,78 @@ describe SorceryController, active_record: true, type: :controller do
|
|
369
387
|
def stub_all_oauth2_requests!
|
370
388
|
access_token = double(OAuth2::AccessToken)
|
371
389
|
allow(access_token).to receive(:token_param=)
|
390
|
+
# Needed for Instagram
|
391
|
+
allow(access_token).to receive(:[]).with(:client_id) { 'eYVNBjBDi33aa9GkA3w' }
|
372
392
|
response = double(OAuth2::Response)
|
373
393
|
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
|
-
|
394
|
+
{
|
395
|
+
'id' => '123',
|
396
|
+
'user_id' => '123', # Needed for Salesforce
|
397
|
+
'sub' => '123', # Needed for Auth0
|
398
|
+
'name' => 'Noam Ben Ari',
|
399
|
+
'first_name' => 'Noam',
|
400
|
+
'last_name' => 'Ben Ari',
|
401
|
+
'link' => 'http://www.facebook.com/nbenari1',
|
402
|
+
'hometown' => {
|
403
|
+
'id' => '110619208966868',
|
404
|
+
'name' => 'Haifa, Israel'
|
405
|
+
},
|
406
|
+
'location' => {
|
407
|
+
'id' => '106906559341067',
|
408
|
+
'name' => 'Pardes Hanah, Hefa, Israel'
|
409
|
+
},
|
410
|
+
'bio' => "I'm a new daddy, and enjoying it!",
|
411
|
+
'gender' => 'male',
|
412
|
+
'email' => 'nbenari@gmail.com',
|
413
|
+
'timezone' => 2,
|
414
|
+
'locale' => 'en_US',
|
415
|
+
'languages' => [
|
416
|
+
{
|
417
|
+
'id' => '108405449189952',
|
418
|
+
'name' => 'Hebrew'
|
419
|
+
},
|
420
|
+
{
|
421
|
+
'id' => '106059522759137',
|
422
|
+
'name' => 'English'
|
423
|
+
},
|
424
|
+
{
|
425
|
+
'id' => '112624162082677',
|
426
|
+
'name' => 'Russian'
|
427
|
+
}
|
428
|
+
],
|
429
|
+
'verified' => true,
|
430
|
+
'updated_time' => '2011-02-16T20:59:38+0000',
|
431
|
+
# response for VK auth
|
432
|
+
'response' => [
|
433
|
+
{
|
434
|
+
'id' => '123',
|
435
|
+
'first_name' => 'Noam',
|
436
|
+
'last_name' => 'Ben Ari'
|
437
|
+
}
|
438
|
+
],
|
439
|
+
'user' => {
|
440
|
+
'name' => 'Sonny Whether',
|
441
|
+
'id' => '123',
|
442
|
+
'email' => 'bobby@example.com'
|
443
|
+
},
|
444
|
+
# response for wechat auth
|
445
|
+
'unionid' => '123',
|
446
|
+
# response for instagram
|
447
|
+
'data' => {
|
448
|
+
'username' => 'pnmahoney',
|
449
|
+
'bio' => 'turn WHAT down?',
|
450
|
+
'website' => '',
|
451
|
+
'profile_picture' => 'http://photos-d.ak.instagram.com/hphotos-ak-xpa1/10454121_417985815007395_867850883_a.jpg',
|
452
|
+
'full_name' => 'Patrick Mahoney',
|
453
|
+
'counts' => {
|
454
|
+
'media' => 2,
|
455
|
+
'followed_by' => 100,
|
456
|
+
'follows' => 71
|
457
|
+
},
|
458
|
+
'id' => '123'
|
459
|
+
}
|
460
|
+
}.to_json
|
461
|
+
}
|
407
462
|
allow(access_token).to receive(:get) { response }
|
408
463
|
allow(access_token).to receive(:token) { '187041a618229fdaf16613e96e1caabc1e86e46bbfad228de41520e63fe45873684c365a14417289599f3' }
|
409
464
|
# access_token params for VK auth
|
@@ -412,37 +467,68 @@ describe SorceryController, active_record: true, type: :controller do
|
|
412
467
|
end
|
413
468
|
|
414
469
|
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
|
-
|
433
|
-
|
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(:
|
470
|
+
sorcery_controller_property_set(
|
471
|
+
:external_providers,
|
472
|
+
%i[
|
473
|
+
facebook
|
474
|
+
github
|
475
|
+
google
|
476
|
+
liveid
|
477
|
+
vk
|
478
|
+
salesforce
|
479
|
+
paypal
|
480
|
+
slack
|
481
|
+
wechat
|
482
|
+
microsoft
|
483
|
+
instagram
|
484
|
+
auth0
|
485
|
+
line
|
486
|
+
discord
|
487
|
+
]
|
488
|
+
)
|
489
|
+
sorcery_controller_external_property_set(:facebook, :key, 'eYVNBjBDi33aa9GkA3w')
|
490
|
+
sorcery_controller_external_property_set(:facebook, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
491
|
+
sorcery_controller_external_property_set(:facebook, :callback_url, 'http://blabla.com')
|
492
|
+
sorcery_controller_external_property_set(:github, :key, 'eYVNBjBDi33aa9GkA3w')
|
493
|
+
sorcery_controller_external_property_set(:github, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
494
|
+
sorcery_controller_external_property_set(:github, :callback_url, 'http://blabla.com')
|
495
|
+
sorcery_controller_external_property_set(:google, :key, 'eYVNBjBDi33aa9GkA3w')
|
496
|
+
sorcery_controller_external_property_set(:google, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
497
|
+
sorcery_controller_external_property_set(:google, :callback_url, 'http://blabla.com')
|
498
|
+
sorcery_controller_external_property_set(:liveid, :key, 'eYVNBjBDi33aa9GkA3w')
|
499
|
+
sorcery_controller_external_property_set(:liveid, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
500
|
+
sorcery_controller_external_property_set(:liveid, :callback_url, 'http://blabla.com')
|
501
|
+
sorcery_controller_external_property_set(:vk, :key, 'eYVNBjBDi33aa9GkA3w')
|
502
|
+
sorcery_controller_external_property_set(:vk, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
503
|
+
sorcery_controller_external_property_set(:vk, :callback_url, 'http://blabla.com')
|
504
|
+
sorcery_controller_external_property_set(:salesforce, :key, 'eYVNBjBDi33aa9GkA3w')
|
505
|
+
sorcery_controller_external_property_set(:salesforce, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
506
|
+
sorcery_controller_external_property_set(:salesforce, :callback_url, 'http://blabla.com')
|
507
|
+
sorcery_controller_external_property_set(:paypal, :key, 'eYVNBjBDi33aa9GkA3w')
|
508
|
+
sorcery_controller_external_property_set(:paypal, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
509
|
+
sorcery_controller_external_property_set(:paypal, :callback_url, 'http://blabla.com')
|
510
|
+
sorcery_controller_external_property_set(:slack, :key, 'eYVNBjBDi33aa9GkA3w')
|
511
|
+
sorcery_controller_external_property_set(:slack, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
512
|
+
sorcery_controller_external_property_set(:slack, :callback_url, 'http://blabla.com')
|
513
|
+
sorcery_controller_external_property_set(:wechat, :key, 'eYVNBjBDi33aa9GkA3w')
|
514
|
+
sorcery_controller_external_property_set(:wechat, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
515
|
+
sorcery_controller_external_property_set(:wechat, :callback_url, 'http://blabla.com')
|
516
|
+
sorcery_controller_external_property_set(:microsoft, :key, 'eYVNBjBDi33aa9GkA3w')
|
517
|
+
sorcery_controller_external_property_set(:microsoft, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
518
|
+
sorcery_controller_external_property_set(:microsoft, :callback_url, 'http://blabla.com')
|
519
|
+
sorcery_controller_external_property_set(:instagram, :key, 'eYVNBjBDi33aa9GkA3w')
|
520
|
+
sorcery_controller_external_property_set(:instagram, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
521
|
+
sorcery_controller_external_property_set(:instagram, :callback_url, 'http://blabla.com')
|
522
|
+
sorcery_controller_external_property_set(:auth0, :key, 'eYVNBjBDi33aa9GkA3w')
|
523
|
+
sorcery_controller_external_property_set(:auth0, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
524
|
+
sorcery_controller_external_property_set(:auth0, :callback_url, 'http://blabla.com')
|
525
|
+
sorcery_controller_external_property_set(:auth0, :site, 'https://sorcery-test.auth0.com')
|
526
|
+
sorcery_controller_external_property_set(:line, :key, "eYVNBjBDi33aa9GkA3w")
|
527
|
+
sorcery_controller_external_property_set(:line, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
|
528
|
+
sorcery_controller_external_property_set(:line, :callback_url, "http://blabla.com")
|
529
|
+
sorcery_controller_external_property_set(:discord, :key, 'eYVNBjBDi33aa9GkA3w')
|
530
|
+
sorcery_controller_external_property_set(:discord, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
|
531
|
+
sorcery_controller_external_property_set(:discord, :callback_url, 'http://blabla.com')
|
446
532
|
end
|
447
533
|
|
448
534
|
def provider_url(provider)
|
@@ -455,7 +541,10 @@ describe SorceryController, active_record: true, type: :controller do
|
|
455
541
|
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
542
|
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
543
|
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"
|
544
|
+
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",
|
545
|
+
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",
|
546
|
+
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",
|
547
|
+
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"
|
459
548
|
}[provider]
|
460
549
|
end
|
461
550
|
end
|