sorcery 0.11.0 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +5 -5
  2. data/.github/ISSUE_TEMPLATE.md +20 -0
  3. data/.github/PULL_REQUEST_TEMPLATE.md +5 -0
  4. data/.github/workflows/ruby.yml +23 -0
  5. data/.rubocop.yml +55 -0
  6. data/.rubocop_todo.yml +155 -0
  7. data/.travis.yml +11 -51
  8. data/CHANGELOG.md +75 -0
  9. data/CODE_OF_CONDUCT.md +14 -0
  10. data/Gemfile +2 -2
  11. data/{LICENSE.txt → LICENSE.md} +1 -1
  12. data/README.md +34 -7
  13. data/SECURITY.md +18 -0
  14. data/gemfiles/rails_52.gemfile +7 -0
  15. data/gemfiles/rails_60.gemfile +7 -0
  16. data/lib/generators/sorcery/USAGE +1 -1
  17. data/lib/generators/sorcery/helpers.rb +4 -0
  18. data/lib/generators/sorcery/install_generator.rb +21 -21
  19. data/lib/generators/sorcery/templates/initializer.rb +176 -69
  20. data/lib/generators/sorcery/templates/migration/activity_logging.rb +5 -5
  21. data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +4 -4
  22. data/lib/generators/sorcery/templates/migration/core.rb +4 -4
  23. data/lib/generators/sorcery/templates/migration/external.rb +3 -3
  24. data/lib/generators/sorcery/templates/migration/magic_login.rb +9 -0
  25. data/lib/generators/sorcery/templates/migration/remember_me.rb +3 -3
  26. data/lib/generators/sorcery/templates/migration/reset_password.rb +5 -4
  27. data/lib/generators/sorcery/templates/migration/user_activation.rb +4 -4
  28. data/lib/sorcery.rb +2 -0
  29. data/lib/sorcery/adapters/active_record_adapter.rb +4 -3
  30. data/lib/sorcery/adapters/mongoid_adapter.rb +23 -11
  31. data/lib/sorcery/controller.rb +26 -15
  32. data/lib/sorcery/controller/config.rb +7 -5
  33. data/lib/sorcery/controller/submodules/activity_logging.rb +9 -3
  34. data/lib/sorcery/controller/submodules/external.rb +52 -33
  35. data/lib/sorcery/controller/submodules/http_basic_auth.rb +2 -0
  36. data/lib/sorcery/controller/submodules/remember_me.rb +3 -8
  37. data/lib/sorcery/controller/submodules/session_timeout.rb +28 -5
  38. data/lib/sorcery/crypto_providers/aes256.rb +2 -1
  39. data/lib/sorcery/crypto_providers/bcrypt.rb +8 -2
  40. data/lib/sorcery/engine.rb +16 -3
  41. data/lib/sorcery/model.rb +14 -10
  42. data/lib/sorcery/model/config.rb +12 -4
  43. data/lib/sorcery/model/submodules/brute_force_protection.rb +6 -7
  44. data/lib/sorcery/model/submodules/external.rb +19 -3
  45. data/lib/sorcery/model/submodules/magic_login.rb +130 -0
  46. data/lib/sorcery/model/submodules/reset_password.rb +25 -2
  47. data/lib/sorcery/model/submodules/user_activation.rb +1 -1
  48. data/lib/sorcery/model/temporary_token.rb +3 -1
  49. data/lib/sorcery/protocols/oauth.rb +1 -0
  50. data/lib/sorcery/providers/auth0.rb +46 -0
  51. data/lib/sorcery/providers/battlenet.rb +51 -0
  52. data/lib/sorcery/providers/discord.rb +52 -0
  53. data/lib/sorcery/providers/heroku.rb +1 -0
  54. data/lib/sorcery/providers/instagram.rb +73 -0
  55. data/lib/sorcery/providers/line.rb +63 -0
  56. data/lib/sorcery/providers/linkedin.rb +45 -36
  57. data/lib/sorcery/providers/vk.rb +5 -4
  58. data/lib/sorcery/providers/wechat.rb +8 -6
  59. data/lib/sorcery/test_helpers/internal.rb +5 -4
  60. data/lib/sorcery/test_helpers/internal/rails.rb +11 -11
  61. data/lib/sorcery/test_helpers/rails/request.rb +20 -0
  62. data/lib/sorcery/version.rb +1 -1
  63. data/sorcery.gemspec +26 -10
  64. data/spec/active_record/user_activation_spec.rb +2 -2
  65. data/spec/active_record/user_activity_logging_spec.rb +2 -2
  66. data/spec/active_record/user_brute_force_protection_spec.rb +2 -2
  67. data/spec/active_record/user_magic_login_spec.rb +15 -0
  68. data/spec/active_record/user_oauth_spec.rb +2 -2
  69. data/spec/active_record/user_remember_me_spec.rb +2 -2
  70. data/spec/active_record/user_reset_password_spec.rb +2 -2
  71. data/spec/active_record/user_spec.rb +0 -10
  72. data/spec/controllers/controller_http_basic_auth_spec.rb +1 -1
  73. data/spec/controllers/controller_oauth2_spec.rb +230 -123
  74. data/spec/controllers/controller_oauth_spec.rb +13 -7
  75. data/spec/controllers/controller_remember_me_spec.rb +16 -8
  76. data/spec/controllers/controller_session_timeout_spec.rb +90 -3
  77. data/spec/controllers/controller_spec.rb +13 -3
  78. data/spec/orm/active_record.rb +2 -2
  79. data/spec/providers/example_provider_spec.rb +17 -0
  80. data/spec/providers/example_spec.rb +17 -0
  81. data/spec/providers/vk_spec.rb +42 -0
  82. data/spec/rails_app/app/assets/config/manifest.js +1 -0
  83. data/spec/rails_app/app/controllers/application_controller.rb +2 -0
  84. data/spec/rails_app/app/controllers/sorcery_controller.rb +152 -33
  85. data/spec/rails_app/app/mailers/sorcery_mailer.rb +7 -0
  86. data/spec/rails_app/app/views/sorcery_mailer/magic_login_email.html.erb +13 -0
  87. data/spec/rails_app/app/views/sorcery_mailer/magic_login_email.text.erb +6 -0
  88. data/spec/rails_app/config/application.rb +8 -3
  89. data/spec/rails_app/config/boot.rb +1 -1
  90. data/spec/rails_app/config/environment.rb +1 -1
  91. data/spec/rails_app/config/routes.rb +17 -0
  92. data/spec/rails_app/config/secrets.yml +4 -0
  93. data/spec/rails_app/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +2 -2
  94. data/spec/rails_app/db/migrate/invalidate_active_sessions/20180221093235_add_invalidate_active_sessions_before_to_users.rb +9 -0
  95. data/spec/rails_app/db/migrate/magic_login/20170924151831_add_magic_login_to_users.rb +17 -0
  96. data/spec/rails_app/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +2 -0
  97. data/spec/rails_app/db/schema.rb +7 -9
  98. data/spec/shared_examples/user_magic_login_shared_examples.rb +150 -0
  99. data/spec/shared_examples/user_oauth_shared_examples.rb +1 -1
  100. data/spec/shared_examples/user_remember_me_shared_examples.rb +1 -1
  101. data/spec/shared_examples/user_reset_password_shared_examples.rb +37 -5
  102. data/spec/shared_examples/user_shared_examples.rb +104 -43
  103. data/spec/sorcery_crypto_providers_spec.rb +61 -1
  104. data/spec/sorcery_temporary_token_spec.rb +27 -0
  105. data/spec/spec.opts +1 -1
  106. data/spec/spec_helper.rb +2 -2
  107. data/spec/support/migration_helper.rb +29 -0
  108. data/spec/support/providers/example.rb +11 -0
  109. data/spec/support/providers/example_provider.rb +11 -0
  110. metadata +92 -29
  111. data/gemfiles/active_record-rails40.gemfile +0 -7
  112. data/gemfiles/active_record-rails41.gemfile +0 -7
  113. data/gemfiles/active_record-rails42.gemfile +0 -7
  114. data/spec/rails_app/config/initializers/secret_token.rb +0 -7
@@ -9,7 +9,7 @@ module Sorcery
9
9
  class Vk < Base
10
10
  include Protocols::Oauth2
11
11
 
12
- attr_accessor :auth_path, :token_path, :user_info_url, :scope
12
+ attr_accessor :auth_path, :token_path, :user_info_url, :scope, :api_version
13
13
 
14
14
  def initialize
15
15
  super
@@ -28,15 +28,16 @@ module Sorcery
28
28
  access_token: access_token.token,
29
29
  uids: access_token.params['user_id'],
30
30
  fields: user_info_mapping.values.join(','),
31
- scope: scope
31
+ scope: scope,
32
+ v: api_version.to_s
32
33
  }
33
34
 
34
35
  response = access_token.get(user_info_url, params: params)
35
- if user_hash[:user_info] = JSON.parse(response.body)
36
+ if (user_hash[:user_info] = JSON.parse(response.body))
36
37
  user_hash[:user_info] = user_hash[:user_info]['response'][0]
37
38
  user_hash[:user_info]['full_name'] = [user_hash[:user_info]['first_name'], user_hash[:user_info]['last_name']].join(' ')
38
39
 
39
- user_hash[:uid] = user_hash[:user_info]['uid']
40
+ user_hash[:uid] = user_hash[:user_info]['id']
40
41
  user_hash[:user_info]['email'] = access_token.params['email']
41
42
  end
42
43
  user_hash
@@ -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.16.0'.freeze
3
3
  end
data/sorcery.gemspec CHANGED
@@ -1,33 +1,49 @@
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
+ 'crypto@joshbuker.com'
18
+ ]
19
+
20
+ # TODO: Cleanup formatting.
21
+ # rubocop:disable Layout/LineLength
10
22
  s.description = 'Provides common authentication needs such as signing in/out, activating by email and resetting password.'
11
23
  s.summary = 'Magical authentication for Rails applications'
12
24
  s.homepage = 'https://github.com/Sorcery/sorcery'
13
25
  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
26
  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'
27
+ # rubocop:enable Layout/LineLength
15
28
 
16
29
  s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
17
30
  s.require_paths = ['lib']
18
31
 
19
32
  s.licenses = ['MIT']
20
33
 
21
- s.required_ruby_version = '>= 2.0.0'
34
+ s.required_ruby_version = '>= 2.4.9'
22
35
 
36
+ s.add_dependency 'bcrypt', '~> 3.1'
23
37
  s.add_dependency 'oauth', '~> 0.4', '>= 0.4.4'
24
38
  s.add_dependency 'oauth2', '~> 1.0', '>= 0.8.0'
25
- s.add_dependency 'bcrypt', '~> 3.1'
26
39
 
27
- s.add_development_dependency 'yard', '~> 0.6.0'
28
- s.add_development_dependency 'timecop'
40
+ s.add_development_dependency 'byebug', '~> 10.0.0'
41
+ s.add_development_dependency 'rspec-rails', '~> 3.7.0'
42
+ s.add_development_dependency 'rubocop'
29
43
  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'
44
+ s.add_development_dependency 'test-unit', '~> 3.2.0'
45
+ s.add_development_dependency 'timecop'
46
+ s.add_development_dependency 'webmock', '~> 3.3.0'
47
+ s.add_development_dependency 'yard', '~> 0.9.0', '>= 0.9.12'
33
48
  end
49
+ # 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
 
@@ -112,12 +116,21 @@ describe SorceryController, active_record: true, type: :controller do
112
116
  end
113
117
 
114
118
  context 'when callback_url begin with http://' do
119
+ before do
120
+ sorcery_controller_external_property_set(:facebook, :callback_url, '/oauth/twitter/callback')
121
+ sorcery_controller_external_property_set(:facebook, :api_version, 'v2.2')
122
+ end
123
+
115
124
  it 'login_at redirects correctly' do
116
125
  create_new_user
117
126
  get :login_at_test_facebook
118
127
  expect(response).to be_a_redirect
119
128
  expect(response).to redirect_to("https://www.facebook.com/v2.2/dialog/oauth?client_id=#{::Sorcery::Controller::Config.facebook.key}&display=page&redirect_uri=http%3A%2F%2Ftest.host%2Foauth%2Ftwitter%2Fcallback&response_type=code&scope=email&state")
120
129
  end
130
+
131
+ after do
132
+ sorcery_controller_external_property_set(:facebook, :callback_url, 'http://blabla.com')
133
+ end
121
134
  end
122
135
 
123
136
  it "'login_from' logins if user exists" do
@@ -151,7 +164,7 @@ describe SorceryController, active_record: true, type: :controller do
151
164
  expect(flash[:notice]).to eq 'Success!'
152
165
  end
153
166
 
154
- [:github, :google, :liveid, :vk, :salesforce, :paypal, :slack, :wechat, :microsoft].each do |provider|
167
+ %i[github google liveid vk salesforce paypal slack wechat microsoft instagram auth0 discord battlenet].each do |provider|
155
168
  describe "with #{provider}" do
156
169
  it 'login_at redirects correctly' do
157
170
  get :"login_at_test_#{provider}"
@@ -196,51 +209,75 @@ describe SorceryController, active_record: true, type: :controller do
196
209
 
197
210
  describe 'OAuth with User Activation features' do
198
211
  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])
212
+ sorcery_reload!(%i[user_activation external], user_activation_mailer: ::SorceryMailer)
213
+ sorcery_controller_property_set(
214
+ :external_providers,
215
+ %i[
216
+ facebook
217
+ github
218
+ google
219
+ liveid
220
+ vk
221
+ salesforce
222
+ paypal
223
+ slack
224
+ wechat
225
+ microsoft
226
+ instagram
227
+ auth0
228
+ line
229
+ discord
230
+ battlenet
231
+ ]
232
+ )
205
233
 
206
234
  # 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
235
+ sorcery_controller_external_property_set(:facebook, :key, 'eYVNBjBDi33aa9GkA3w')
236
+ sorcery_controller_external_property_set(:facebook, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
237
+ sorcery_controller_external_property_set(:facebook, :callback_url, 'http://blabla.com')
238
+ sorcery_controller_external_property_set(:github, :key, 'eYVNBjBDi33aa9GkA3w')
239
+ sorcery_controller_external_property_set(:github, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
240
+ sorcery_controller_external_property_set(:github, :callback_url, 'http://blabla.com')
241
+ sorcery_controller_external_property_set(:google, :key, 'eYVNBjBDi33aa9GkA3w')
242
+ sorcery_controller_external_property_set(:google, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
243
+ sorcery_controller_external_property_set(:google, :callback_url, 'http://blabla.com')
244
+ sorcery_controller_external_property_set(:liveid, :key, 'eYVNBjBDi33aa9GkA3w')
245
+ sorcery_controller_external_property_set(:liveid, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
246
+ sorcery_controller_external_property_set(:liveid, :callback_url, 'http://blabla.com')
247
+ sorcery_controller_external_property_set(:vk, :key, 'eYVNBjBDi33aa9GkA3w')
248
+ sorcery_controller_external_property_set(:vk, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
249
+ sorcery_controller_external_property_set(:vk, :callback_url, 'http://blabla.com')
250
+ sorcery_controller_external_property_set(:salesforce, :key, 'eYVNBjBDi33aa9GkA3w')
251
+ sorcery_controller_external_property_set(:salesforce, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
252
+ sorcery_controller_external_property_set(:salesforce, :callback_url, 'http://blabla.com')
253
+ sorcery_controller_external_property_set(:paypal, :key, 'eYVNBjBDi33aa9GkA3w')
254
+ sorcery_controller_external_property_set(:paypal, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
255
+ sorcery_controller_external_property_set(:paypal, :callback_url, 'http://blabla.com')
256
+ sorcery_controller_external_property_set(:slack, :key, 'eYVNBjBDi33aa9GkA3w')
257
+ sorcery_controller_external_property_set(:slack, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
258
+ sorcery_controller_external_property_set(:slack, :callback_url, 'http://blabla.com')
259
+ sorcery_controller_external_property_set(:wechat, :key, 'eYVNBjBDi33aa9GkA3w')
260
+ sorcery_controller_external_property_set(:wechat, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
261
+ sorcery_controller_external_property_set(:wechat, :callback_url, 'http://blabla.com')
262
+ sorcery_controller_external_property_set(:microsoft, :key, 'eYVNBjBDi33aa9GkA3w')
263
+ sorcery_controller_external_property_set(:microsoft, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
264
+ sorcery_controller_external_property_set(:microsoft, :callback_url, 'http://blabla.com')
265
+ sorcery_controller_external_property_set(:instagram, :key, 'eYVNBjBDi33aa9GkA3w')
266
+ sorcery_controller_external_property_set(:instagram, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
267
+ sorcery_controller_external_property_set(:instagram, :callback_url, 'http://blabla.com')
268
+ sorcery_controller_external_property_set(:auth0, :key, 'eYVNBjBDi33aa9GkA3w')
269
+ sorcery_controller_external_property_set(:auth0, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
270
+ sorcery_controller_external_property_set(:auth0, :callback_url, 'http://blabla.com')
271
+ sorcery_controller_external_property_set(:auth0, :site, 'https://sorcery-test.auth0.com')
272
+ sorcery_controller_external_property_set(:line, :key, "eYVNBjBDi33aa9GkA3w")
273
+ sorcery_controller_external_property_set(:line, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
274
+ sorcery_controller_external_property_set(:line, :callback_url, "http://blabla.com")
275
+ sorcery_controller_external_property_set(:discord, :key, 'eYVNBjBDi33aa9GkA3w')
276
+ sorcery_controller_external_property_set(:discord, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
277
+ sorcery_controller_external_property_set(:discord, :callback_url, 'http://blabla.com')
278
+ sorcery_controller_external_property_set(:battlenet, :key, '4c43d4862c774ca5bbde89873bf0d338')
279
+ sorcery_controller_external_property_set(:battlenet, :secret, 'TxY7IwKOykACd8kUxPyVGTqBs44UBDdX')
280
+ sorcery_controller_external_property_set(:battlenet, :callback_url, 'http://blabla.com')
244
281
  end
245
282
 
246
283
  after(:each) do
@@ -263,7 +300,7 @@ describe SorceryController, active_record: true, type: :controller do
263
300
  expect(ActionMailer::Base.deliveries.size).to eq old_size
264
301
  end
265
302
 
266
- [:github, :google, :liveid, :vk, :salesforce, :paypal, :wechat, :microsoft].each do |provider|
303
+ %i[github google liveid vk salesforce paypal wechat microsoft instagram auth0 discord battlenet].each do |provider|
267
304
  it "does not send activation email to external users (#{provider})" do
268
305
  old_size = ActionMailer::Base.deliveries.size
269
306
  create_new_external_user provider
@@ -275,6 +312,7 @@ describe SorceryController, active_record: true, type: :controller do
275
312
  create_new_external_user provider
276
313
  old_size = ActionMailer::Base.deliveries.size
277
314
  @user.activate!
315
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
278
316
  end
279
317
  end
280
318
  end
@@ -283,17 +321,10 @@ describe SorceryController, active_record: true, type: :controller do
283
321
  let(:user) { double('user', id: 42) }
284
322
 
285
323
  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
324
+ sorcery_reload!(%i[activity_logging external])
294
325
  end
295
326
 
296
- %w(facebook github google liveid vk salesforce slack).each do |provider|
327
+ %w[facebook github google liveid vk salesforce slack discord battlenet].each do |provider|
297
328
  context "when #{provider}" do
298
329
  before(:each) do
299
330
  sorcery_controller_property_set(:register_login_time, true)
@@ -327,12 +358,12 @@ describe SorceryController, active_record: true, type: :controller do
327
358
 
328
359
  describe 'OAuth with session timeout features' do
329
360
  before(:all) do
330
- sorcery_reload!([:session_timeout, :external])
361
+ sorcery_reload!(%i[session_timeout external])
331
362
  end
332
363
 
333
364
  let(:user) { double('user', id: 42) }
334
365
 
335
- %w(facebook github google liveid vk salesforce slack).each do |provider|
366
+ %w[facebook github google liveid vk salesforce slack discord battlenet].each do |provider|
336
367
  context "when #{provider}" do
337
368
  before(:each) do
338
369
  sorcery_model_property_set(:authentications_class, Authentication)
@@ -369,41 +400,78 @@ describe SorceryController, active_record: true, type: :controller do
369
400
  def stub_all_oauth2_requests!
370
401
  access_token = double(OAuth2::AccessToken)
371
402
  allow(access_token).to receive(:token_param=)
403
+ # Needed for Instagram
404
+ allow(access_token).to receive(:[]).with(:client_id) { 'eYVNBjBDi33aa9GkA3w' }
372
405
  response = double(OAuth2::Response)
373
406
  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 }
407
+ {
408
+ 'id' => '123',
409
+ 'user_id' => '123', # Needed for Salesforce
410
+ 'sub' => '123', # Needed for Auth0
411
+ 'name' => 'Noam Ben Ari',
412
+ 'first_name' => 'Noam',
413
+ 'last_name' => 'Ben Ari',
414
+ 'link' => 'http://www.facebook.com/nbenari1',
415
+ 'hometown' => {
416
+ 'id' => '110619208966868',
417
+ 'name' => 'Haifa, Israel'
418
+ },
419
+ 'location' => {
420
+ 'id' => '106906559341067',
421
+ 'name' => 'Pardes Hanah, Hefa, Israel'
422
+ },
423
+ 'bio' => "I'm a new daddy, and enjoying it!",
424
+ 'gender' => 'male',
425
+ 'email' => 'nbenari@gmail.com',
426
+ 'timezone' => 2,
427
+ 'locale' => 'en_US',
428
+ 'languages' => [
429
+ {
430
+ 'id' => '108405449189952',
431
+ 'name' => 'Hebrew'
432
+ },
433
+ {
434
+ 'id' => '106059522759137',
435
+ 'name' => 'English'
436
+ },
437
+ {
438
+ 'id' => '112624162082677',
439
+ 'name' => 'Russian'
440
+ }
441
+ ],
442
+ 'verified' => true,
443
+ 'updated_time' => '2011-02-16T20:59:38+0000',
444
+ # response for VK auth
445
+ 'response' => [
446
+ {
447
+ 'id' => '123',
448
+ 'first_name' => 'Noam',
449
+ 'last_name' => 'Ben Ari'
450
+ }
451
+ ],
452
+ 'user' => {
453
+ 'name' => 'Sonny Whether',
454
+ 'id' => '123',
455
+ 'email' => 'bobby@example.com'
456
+ },
457
+ # response for wechat auth
458
+ 'unionid' => '123',
459
+ # response for instagram
460
+ 'data' => {
461
+ 'username' => 'pnmahoney',
462
+ 'bio' => 'turn WHAT down?',
463
+ 'website' => '',
464
+ 'profile_picture' => 'http://photos-d.ak.instagram.com/hphotos-ak-xpa1/10454121_417985815007395_867850883_a.jpg',
465
+ 'full_name' => 'Patrick Mahoney',
466
+ 'counts' => {
467
+ 'media' => 2,
468
+ 'followed_by' => 100,
469
+ 'follows' => 71
470
+ },
471
+ 'id' => '123'
472
+ }
473
+ }.to_json
474
+ }
407
475
  allow(access_token).to receive(:get) { response }
408
476
  allow(access_token).to receive(:token) { '187041a618229fdaf16613e96e1caabc1e86e46bbfad228de41520e63fe45873684c365a14417289599f3' }
409
477
  # access_token params for VK auth
@@ -412,37 +480,72 @@ describe SorceryController, active_record: true, type: :controller do
412
480
  end
413
481
 
414
482
  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")
483
+ sorcery_controller_property_set(
484
+ :external_providers,
485
+ %i[
486
+ facebook
487
+ github
488
+ google
489
+ liveid
490
+ vk
491
+ salesforce
492
+ paypal
493
+ slack
494
+ wechat
495
+ microsoft
496
+ instagram
497
+ auth0
498
+ line
499
+ discord
500
+ battlenet
501
+ ]
502
+ )
503
+ sorcery_controller_external_property_set(:facebook, :key, 'eYVNBjBDi33aa9GkA3w')
504
+ sorcery_controller_external_property_set(:facebook, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
505
+ sorcery_controller_external_property_set(:facebook, :callback_url, 'http://blabla.com')
506
+ sorcery_controller_external_property_set(:github, :key, 'eYVNBjBDi33aa9GkA3w')
507
+ sorcery_controller_external_property_set(:github, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
508
+ sorcery_controller_external_property_set(:github, :callback_url, 'http://blabla.com')
509
+ sorcery_controller_external_property_set(:google, :key, 'eYVNBjBDi33aa9GkA3w')
510
+ sorcery_controller_external_property_set(:google, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
511
+ sorcery_controller_external_property_set(:google, :callback_url, 'http://blabla.com')
512
+ sorcery_controller_external_property_set(:liveid, :key, 'eYVNBjBDi33aa9GkA3w')
513
+ sorcery_controller_external_property_set(:liveid, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
514
+ sorcery_controller_external_property_set(:liveid, :callback_url, 'http://blabla.com')
515
+ sorcery_controller_external_property_set(:vk, :key, 'eYVNBjBDi33aa9GkA3w')
516
+ sorcery_controller_external_property_set(:vk, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
517
+ sorcery_controller_external_property_set(:vk, :callback_url, 'http://blabla.com')
518
+ sorcery_controller_external_property_set(:salesforce, :key, 'eYVNBjBDi33aa9GkA3w')
519
+ sorcery_controller_external_property_set(:salesforce, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
520
+ sorcery_controller_external_property_set(:salesforce, :callback_url, 'http://blabla.com')
521
+ sorcery_controller_external_property_set(:paypal, :key, 'eYVNBjBDi33aa9GkA3w')
522
+ sorcery_controller_external_property_set(:paypal, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
523
+ sorcery_controller_external_property_set(:paypal, :callback_url, 'http://blabla.com')
524
+ sorcery_controller_external_property_set(:slack, :key, 'eYVNBjBDi33aa9GkA3w')
525
+ sorcery_controller_external_property_set(:slack, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
526
+ sorcery_controller_external_property_set(:slack, :callback_url, 'http://blabla.com')
527
+ sorcery_controller_external_property_set(:wechat, :key, 'eYVNBjBDi33aa9GkA3w')
528
+ sorcery_controller_external_property_set(:wechat, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
529
+ sorcery_controller_external_property_set(:wechat, :callback_url, 'http://blabla.com')
530
+ sorcery_controller_external_property_set(:microsoft, :key, 'eYVNBjBDi33aa9GkA3w')
531
+ sorcery_controller_external_property_set(:microsoft, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
532
+ sorcery_controller_external_property_set(:microsoft, :callback_url, 'http://blabla.com')
533
+ sorcery_controller_external_property_set(:instagram, :key, 'eYVNBjBDi33aa9GkA3w')
534
+ sorcery_controller_external_property_set(:instagram, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
535
+ sorcery_controller_external_property_set(:instagram, :callback_url, 'http://blabla.com')
536
+ sorcery_controller_external_property_set(:auth0, :key, 'eYVNBjBDi33aa9GkA3w')
537
+ sorcery_controller_external_property_set(:auth0, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
538
+ sorcery_controller_external_property_set(:auth0, :callback_url, 'http://blabla.com')
539
+ sorcery_controller_external_property_set(:auth0, :site, 'https://sorcery-test.auth0.com')
540
+ sorcery_controller_external_property_set(:line, :key, "eYVNBjBDi33aa9GkA3w")
541
+ sorcery_controller_external_property_set(:line, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
542
+ sorcery_controller_external_property_set(:line, :callback_url, "http://blabla.com")
543
+ sorcery_controller_external_property_set(:discord, :key, 'eYVNBjBDi33aa9GkA3w')
544
+ sorcery_controller_external_property_set(:discord, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
545
+ sorcery_controller_external_property_set(:discord, :callback_url, 'http://blabla.com')
546
+ sorcery_controller_external_property_set(:battlenet, :key, '4c43d4862c774ca5bbde89873bf0d338')
547
+ sorcery_controller_external_property_set(:battlenet, :secret, 'TxY7IwKOykACd8kUxPyVGTqBs44UBDdX')
548
+ sorcery_controller_external_property_set(:battlenet, :callback_url, 'http://blabla.com')
446
549
  end
447
550
 
448
551
  def provider_url(provider)
@@ -455,7 +558,11 @@ describe SorceryController, active_record: true, type: :controller do
455
558
  salesforce: "https://login.salesforce.com/services/oauth2/authorize?client_id=#{::Sorcery::Controller::Config.salesforce.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope#{'=' + ::Sorcery::Controller::Config.salesforce.scope unless ::Sorcery::Controller::Config.salesforce.scope.nil?}&state",
456
559
  slack: "https://slack.com/oauth/authorize?client_id=#{::Sorcery::Controller::Config.slack.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=identity.basic%2C+identity.email&state",
457
560
  wechat: "https://open.weixin.qq.com/connect/qrconnect?appid=#{::Sorcery::Controller::Config.wechat.key}&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=snsapi_login&state=#wechat_redirect",
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"
561
+ microsoft: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=#{::Sorcery::Controller::Config.microsoft.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=openid+email+https%3A%2F%2Fgraph.microsoft.com%2FUser.Read&state",
562
+ instagram: "https://api.instagram.com/oauth/authorize?client_id=#{::Sorcery::Controller::Config.instagram.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=#{::Sorcery::Controller::Config.instagram.scope}&state",
563
+ auth0: "https://sorcery-test.auth0.com/authorize?client_id=#{::Sorcery::Controller::Config.auth0.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=openid+profile+email&state",
564
+ discord: "https://discordapp.com/api/oauth2/authorize?client_id=#{::Sorcery::Controller::Config.discord.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=identify&state",
565
+ battlenet: "https://eu.battle.net/oauth/authorize?client_id=#{::Sorcery::Controller::Config.battlenet.key}&display&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=openid&state"
459
566
  }[provider]
460
567
  end
461
568
  end