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.
Files changed (106) hide show
  1. checksums.yaml +5 -5
  2. data/.github/ISSUE_TEMPLATE.md +20 -0
  3. data/.rubocop.yml +55 -0
  4. data/.rubocop_todo.yml +145 -0
  5. data/.travis.yml +3 -52
  6. data/CHANGELOG.md +69 -0
  7. data/Gemfile +3 -3
  8. data/{LICENSE.txt → LICENSE.md} +1 -1
  9. data/README.md +34 -7
  10. data/lib/generators/sorcery/USAGE +1 -1
  11. data/lib/generators/sorcery/install_generator.rb +21 -21
  12. data/lib/generators/sorcery/templates/initializer.rb +164 -69
  13. data/lib/generators/sorcery/templates/migration/activity_logging.rb +4 -4
  14. data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +3 -3
  15. data/lib/generators/sorcery/templates/migration/core.rb +2 -2
  16. data/lib/generators/sorcery/templates/migration/external.rb +3 -3
  17. data/lib/generators/sorcery/templates/migration/magic_login.rb +9 -0
  18. data/lib/generators/sorcery/templates/migration/remember_me.rb +2 -2
  19. data/lib/generators/sorcery/templates/migration/reset_password.rb +4 -3
  20. data/lib/generators/sorcery/templates/migration/user_activation.rb +3 -3
  21. data/lib/sorcery.rb +2 -0
  22. data/lib/sorcery/adapters/active_record_adapter.rb +3 -2
  23. data/lib/sorcery/adapters/mongoid_adapter.rb +23 -11
  24. data/lib/sorcery/controller.rb +26 -15
  25. data/lib/sorcery/controller/config.rb +2 -0
  26. data/lib/sorcery/controller/submodules/activity_logging.rb +14 -3
  27. data/lib/sorcery/controller/submodules/brute_force_protection.rb +7 -3
  28. data/lib/sorcery/controller/submodules/external.rb +48 -33
  29. data/lib/sorcery/controller/submodules/http_basic_auth.rb +5 -1
  30. data/lib/sorcery/controller/submodules/remember_me.rb +9 -10
  31. data/lib/sorcery/controller/submodules/session_timeout.rb +32 -6
  32. data/lib/sorcery/crypto_providers/aes256.rb +2 -1
  33. data/lib/sorcery/crypto_providers/bcrypt.rb +8 -2
  34. data/lib/sorcery/engine.rb +16 -3
  35. data/lib/sorcery/model.rb +14 -10
  36. data/lib/sorcery/model/config.rb +12 -4
  37. data/lib/sorcery/model/submodules/brute_force_protection.rb +6 -7
  38. data/lib/sorcery/model/submodules/external.rb +19 -3
  39. data/lib/sorcery/model/submodules/magic_login.rb +130 -0
  40. data/lib/sorcery/model/submodules/reset_password.rb +25 -2
  41. data/lib/sorcery/model/submodules/user_activation.rb +1 -1
  42. data/lib/sorcery/model/temporary_token.rb +3 -1
  43. data/lib/sorcery/protocols/oauth.rb +1 -0
  44. data/lib/sorcery/providers/auth0.rb +46 -0
  45. data/lib/sorcery/providers/discord.rb +52 -0
  46. data/lib/sorcery/providers/heroku.rb +1 -0
  47. data/lib/sorcery/providers/instagram.rb +73 -0
  48. data/lib/sorcery/providers/line.rb +47 -0
  49. data/lib/sorcery/providers/linkedin.rb +45 -36
  50. data/lib/sorcery/providers/vk.rb +5 -4
  51. data/lib/sorcery/providers/wechat.rb +8 -6
  52. data/lib/sorcery/test_helpers/internal.rb +5 -4
  53. data/lib/sorcery/test_helpers/internal/rails.rb +11 -11
  54. data/lib/sorcery/test_helpers/rails/request.rb +20 -0
  55. data/lib/sorcery/version.rb +1 -1
  56. data/sorcery.gemspec +28 -11
  57. data/spec/active_record/user_activation_spec.rb +2 -2
  58. data/spec/active_record/user_activity_logging_spec.rb +2 -2
  59. data/spec/active_record/user_brute_force_protection_spec.rb +2 -2
  60. data/spec/active_record/user_magic_login_spec.rb +15 -0
  61. data/spec/active_record/user_oauth_spec.rb +2 -2
  62. data/spec/active_record/user_remember_me_spec.rb +2 -2
  63. data/spec/active_record/user_reset_password_spec.rb +2 -2
  64. data/spec/active_record/user_spec.rb +0 -10
  65. data/spec/controllers/controller_http_basic_auth_spec.rb +1 -1
  66. data/spec/controllers/controller_oauth2_spec.rb +212 -123
  67. data/spec/controllers/controller_oauth_spec.rb +7 -7
  68. data/spec/controllers/controller_remember_me_spec.rb +16 -8
  69. data/spec/controllers/controller_session_timeout_spec.rb +90 -3
  70. data/spec/controllers/controller_spec.rb +13 -3
  71. data/spec/orm/active_record.rb +2 -2
  72. data/spec/providers/example_provider_spec.rb +17 -0
  73. data/spec/providers/example_spec.rb +17 -0
  74. data/spec/providers/vk_spec.rb +42 -0
  75. data/spec/rails_app/app/assets/config/manifest.js +1 -0
  76. data/spec/rails_app/app/controllers/sorcery_controller.rb +131 -32
  77. data/spec/rails_app/app/mailers/sorcery_mailer.rb +7 -0
  78. data/spec/rails_app/app/views/sorcery_mailer/magic_login_email.html.erb +13 -0
  79. data/spec/rails_app/app/views/sorcery_mailer/magic_login_email.text.erb +6 -0
  80. data/spec/rails_app/config/application.rb +8 -3
  81. data/spec/rails_app/config/boot.rb +1 -1
  82. data/spec/rails_app/config/environment.rb +1 -1
  83. data/spec/rails_app/config/routes.rb +14 -0
  84. data/spec/rails_app/config/secrets.yml +4 -0
  85. data/spec/rails_app/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +2 -2
  86. data/spec/rails_app/db/migrate/invalidate_active_sessions/20180221093235_add_invalidate_active_sessions_before_to_users.rb +9 -0
  87. data/spec/rails_app/db/migrate/magic_login/20170924151831_add_magic_login_to_users.rb +17 -0
  88. data/spec/rails_app/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +2 -0
  89. data/spec/rails_app/db/schema.rb +7 -9
  90. data/spec/shared_examples/user_magic_login_shared_examples.rb +150 -0
  91. data/spec/shared_examples/user_oauth_shared_examples.rb +1 -1
  92. data/spec/shared_examples/user_remember_me_shared_examples.rb +1 -1
  93. data/spec/shared_examples/user_reset_password_shared_examples.rb +37 -5
  94. data/spec/shared_examples/user_shared_examples.rb +104 -43
  95. data/spec/sorcery_crypto_providers_spec.rb +61 -1
  96. data/spec/sorcery_temporary_token_spec.rb +27 -0
  97. data/spec/spec.opts +1 -1
  98. data/spec/spec_helper.rb +2 -2
  99. data/spec/support/migration_helper.rb +19 -0
  100. data/spec/support/providers/example.rb +11 -0
  101. data/spec/support/providers/example_provider.rb +11 -0
  102. metadata +89 -33
  103. data/gemfiles/active_record-rails40.gemfile +0 -7
  104. data/gemfiles/active_record-rails41.gemfile +0 -7
  105. data/gemfiles/active_record-rails42.gemfile +0 -7
  106. 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(user_info_path, params: {
41
- access_token: access_token.token,
42
- openid: access_token.params['openid'],
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
- if User.respond_to?(:reset_column_information)
73
- User.reset_column_information
74
- end
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
- :register_last_activity_time_to_db,
9
- :deny_banned_user,
10
- :validate_session
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
- if defined?(DataMapper) && User.ancestors.include?(DataMapper::Resource)
44
- DataMapper.auto_migrate!
45
- User.finalize
46
- Authentication.finalize
47
- end
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(get post put).each do |method|
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
@@ -1,3 +1,3 @@
1
1
  module Sorcery
2
- VERSION = '0.11.0'
2
+ VERSION = '0.15.1'.freeze
3
3
  end
data/sorcery.gemspec CHANGED
@@ -1,33 +1,50 @@
1
- lib = File.expand_path('../lib', __FILE__)
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 = ['Noam Ben Ari', 'Kir Shatrov', 'Grzegorz Witek', 'Chase Gilliam']
9
- s.email = 'chase.gilliam@gmail.com'
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.0.0'
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 'yard', '~> 0.6.0'
28
- s.add_development_dependency 'timecop'
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 'rspec-rails', '~> 3.5.0'
31
- s.add_development_dependency 'test-unit', '~> 3.1.0'
32
- s.add_development_dependency 'byebug', '~> 9.0.0'
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
- ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/activation")
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
- ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/activation")
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
- ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/activity_logging")
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
- ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/activity_logging")
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
- ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/brute_force_protection")
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
- ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/brute_force_protection")
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
- ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/external")
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
- ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
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
- ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/remember_me")
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
- ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/remember_me")
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
- ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/reset_password")
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
- ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/reset_password")
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 be_a_success
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
- ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/external")
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
- ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
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
- [:github, :google, :liveid, :vk, :salesforce, :paypal, :slack, :wechat, :microsoft].each do |provider|
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
- if SORCERY_ORM == :active_record
200
- ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/activation")
201
- end
202
-
203
- sorcery_reload!([:user_activation,:external], :user_activation_mailer => ::SorceryMailer)
204
- sorcery_controller_property_set(:external_providers, [:facebook, :github, :google, :liveid, :vk, :salesforce, :paypal, :slack, :wechat, :microsoft])
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, "eYVNBjBDi33aa9GkA3w")
208
- sorcery_controller_external_property_set(:facebook, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
209
- sorcery_controller_external_property_set(:facebook, :callback_url, "http://blabla.com")
210
- sorcery_controller_external_property_set(:github, :key, "eYVNBjBDi33aa9GkA3w")
211
- sorcery_controller_external_property_set(:github, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
212
- sorcery_controller_external_property_set(:github, :callback_url, "http://blabla.com")
213
- sorcery_controller_external_property_set(:google, :key, "eYVNBjBDi33aa9GkA3w")
214
- sorcery_controller_external_property_set(:google, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
215
- sorcery_controller_external_property_set(:google, :callback_url, "http://blabla.com")
216
- sorcery_controller_external_property_set(:liveid, :key, "eYVNBjBDi33aa9GkA3w")
217
- sorcery_controller_external_property_set(:liveid, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
218
- sorcery_controller_external_property_set(:liveid, :callback_url, "http://blabla.com")
219
- sorcery_controller_external_property_set(:vk, :key, "eYVNBjBDi33aa9GkA3w")
220
- sorcery_controller_external_property_set(:vk, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
221
- sorcery_controller_external_property_set(:vk, :callback_url, "http://blabla.com")
222
- sorcery_controller_external_property_set(:salesforce, :key, "eYVNBjBDi33aa9GkA3w")
223
- sorcery_controller_external_property_set(:salesforce, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
224
- sorcery_controller_external_property_set(:salesforce, :callback_url, "http://blabla.com")
225
- sorcery_controller_external_property_set(:paypal, :key, "eYVNBjBDi33aa9GkA3w")
226
- sorcery_controller_external_property_set(:paypal, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
227
- sorcery_controller_external_property_set(:paypal, :callback_url, "http://blabla.com")
228
- sorcery_controller_external_property_set(:slack, :key, "eYVNBjBDi33aa9GkA3w")
229
- sorcery_controller_external_property_set(:slack, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
230
- sorcery_controller_external_property_set(:slack, :callback_url, "http://blabla.com")
231
- sorcery_controller_external_property_set(:wechat, :key, "eYVNBjBDi33aa9GkA3w")
232
- sorcery_controller_external_property_set(:wechat, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
233
- sorcery_controller_external_property_set(:wechat, :callback_url, "http://blabla.com")
234
- sorcery_controller_external_property_set(:microsoft, :key, "eYVNBjBDi33aa9GkA3w")
235
- sorcery_controller_external_property_set(:microsoft, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
236
- sorcery_controller_external_property_set(:microsoft, :callback_url, "http://blabla.com")
237
- end
238
-
239
- after(:all) do
240
- if SORCERY_ORM == :active_record
241
- ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
242
- ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/activation")
243
- end
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
- [:github, :google, :liveid, :vk, :salesforce, :paypal, :wechat, :microsoft].each do |provider|
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!([:activity_logging, :external])
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(facebook github google liveid vk salesforce slack).each do |provider|
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!([:session_timeout, :external])
348
+ sorcery_reload!(%i[session_timeout external])
331
349
  end
332
350
 
333
351
  let(:user) { double('user', id: 42) }
334
352
 
335
- %w(facebook github google liveid vk salesforce slack).each do |provider|
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
- 'id' => '123',
376
- 'user_id' => '123', # Needed for Salesforce
377
- 'name' => 'Noam Ben Ari',
378
- 'first_name' => 'Noam',
379
- 'last_name' => 'Ben Ari',
380
- 'link' => 'http://www.facebook.com/nbenari1',
381
- 'hometown' => { 'id' => '110619208966868', 'name' => 'Haifa, Israel' },
382
- 'location' => { 'id' => '106906559341067', 'name' => 'Pardes Hanah, Hefa, Israel' },
383
- 'bio' => "I'm a new daddy, and enjoying it!",
384
- 'gender' => 'male',
385
- 'email' => 'nbenari@gmail.com',
386
- 'timezone' => 2,
387
- 'locale' => 'en_US',
388
- 'languages' => [{ 'id' => '108405449189952', 'name' => 'Hebrew' }, { 'id' => '106059522759137', 'name' => 'English' }, { 'id' => '112624162082677', 'name' => 'Russian' }],
389
- 'verified' => true,
390
- 'updated_time' => '2011-02-16T20:59:38+0000',
391
- # response for VK auth
392
- 'response' => [
393
- {
394
- 'uid' => '123',
395
- 'first_name' => 'Noam',
396
- 'last_name' => 'Ben Ari'
397
- }
398
- ],
399
- 'user' => {
400
- 'name' => 'Sonny Whether',
401
- 'id' => '123',
402
- 'email' => 'bobby@example.com'
403
- },
404
- # response for wechat auth
405
- 'unionid' => '123',
406
- }.to_json }
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(:external_providers, [:facebook, :github, :google, :liveid, :vk, :salesforce, :paypal, :slack, :wechat, :microsoft])
416
- sorcery_controller_external_property_set(:facebook, :key, "eYVNBjBDi33aa9GkA3w")
417
- sorcery_controller_external_property_set(:facebook, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
418
- sorcery_controller_external_property_set(:facebook, :callback_url, "http://blabla.com")
419
- sorcery_controller_external_property_set(:github, :key, "eYVNBjBDi33aa9GkA3w")
420
- sorcery_controller_external_property_set(:github, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
421
- sorcery_controller_external_property_set(:github, :callback_url, "http://blabla.com")
422
- sorcery_controller_external_property_set(:google, :key, "eYVNBjBDi33aa9GkA3w")
423
- sorcery_controller_external_property_set(:google, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
424
- sorcery_controller_external_property_set(:google, :callback_url, "http://blabla.com")
425
- sorcery_controller_external_property_set(:liveid, :key, "eYVNBjBDi33aa9GkA3w")
426
- sorcery_controller_external_property_set(:liveid, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
427
- sorcery_controller_external_property_set(:liveid, :callback_url, "http://blabla.com")
428
- sorcery_controller_external_property_set(:vk, :key, "eYVNBjBDi33aa9GkA3w")
429
- sorcery_controller_external_property_set(:vk, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
430
- sorcery_controller_external_property_set(:vk, :callback_url, "http://blabla.com")
431
- sorcery_controller_external_property_set(:salesforce, :key, "eYVNBjBDi33aa9GkA3w")
432
- sorcery_controller_external_property_set(:salesforce, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
433
- sorcery_controller_external_property_set(:salesforce, :callback_url, "http://blabla.com")
434
- sorcery_controller_external_property_set(:paypal, :key, "eYVNBjBDi33aa9GkA3w")
435
- sorcery_controller_external_property_set(:paypal, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
436
- sorcery_controller_external_property_set(:paypal, :callback_url, "http://blabla.com")
437
- sorcery_controller_external_property_set(:slack, :key, "eYVNBjBDi33aa9GkA3w")
438
- sorcery_controller_external_property_set(:slack, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
439
- sorcery_controller_external_property_set(:slack, :callback_url, "http://blabla.com")
440
- sorcery_controller_external_property_set(:wechat, :key, "eYVNBjBDi33aa9GkA3w")
441
- sorcery_controller_external_property_set(:wechat, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
442
- sorcery_controller_external_property_set(:wechat, :callback_url, "http://blabla.com")
443
- sorcery_controller_external_property_set(:microsoft, :key, "eYVNBjBDi33aa9GkA3w")
444
- sorcery_controller_external_property_set(:microsoft, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
445
- sorcery_controller_external_property_set(:microsoft, :callback_url, "http://blabla.com")
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