sorcery 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -1
- data/README.md +8 -5
- data/lib/generators/sorcery/helpers.rb +1 -1
- data/lib/generators/sorcery/install_generator.rb +9 -18
- data/lib/generators/sorcery/templates/initializer.rb +24 -10
- data/lib/sorcery/adapters/active_record_adapter.rb +12 -14
- data/lib/sorcery/adapters/mongoid_adapter.rb +6 -8
- data/lib/sorcery/controller/config.rb +27 -29
- data/lib/sorcery/controller/submodules/activity_logging.rb +4 -7
- data/lib/sorcery/controller/submodules/brute_force_protection.rb +4 -1
- data/lib/sorcery/controller/submodules/external.rb +11 -11
- data/lib/sorcery/controller/submodules/http_basic_auth.rb +7 -2
- data/lib/sorcery/controller/submodules/remember_me.rb +2 -1
- data/lib/sorcery/controller/submodules/session_timeout.rb +2 -2
- data/lib/sorcery/controller.rb +36 -18
- data/lib/sorcery/crypto_providers/aes256.rb +4 -2
- data/lib/sorcery/crypto_providers/bcrypt.rb +2 -1
- data/lib/sorcery/crypto_providers/md5.rb +1 -0
- data/lib/sorcery/crypto_providers/sha1.rb +1 -0
- data/lib/sorcery/crypto_providers/sha256.rb +1 -0
- data/lib/sorcery/crypto_providers/sha512.rb +1 -0
- data/lib/sorcery/engine.rb +6 -4
- data/lib/sorcery/errors.rb +10 -0
- data/lib/sorcery/model/config.rb +20 -31
- data/lib/sorcery/model/submodules/activity_logging.rb +8 -6
- data/lib/sorcery/model/submodules/brute_force_protection.rb +16 -14
- data/lib/sorcery/model/submodules/external.rb +8 -10
- data/lib/sorcery/model/submodules/magic_login.rb +8 -4
- data/lib/sorcery/model/submodules/remember_me.rb +3 -3
- data/lib/sorcery/model/submodules/reset_password.rb +21 -13
- data/lib/sorcery/model/submodules/user_activation.rb +19 -17
- data/lib/sorcery/model/temporary_token.rb +5 -5
- data/lib/sorcery/model.rb +21 -25
- data/lib/sorcery/providers/base.rb +1 -1
- data/lib/sorcery/providers/facebook.rb +2 -2
- data/lib/sorcery/providers/github.rb +3 -3
- data/lib/sorcery/providers/heroku.rb +1 -2
- data/lib/sorcery/providers/jira.rb +3 -2
- data/lib/sorcery/providers/line.rb +2 -4
- data/lib/sorcery/providers/microsoft.rb +1 -1
- data/lib/sorcery/providers/twitter.rb +2 -2
- data/lib/sorcery/providers/vk.rb +4 -4
- data/lib/sorcery/providers/xing.rb +3 -2
- data/lib/sorcery/test_helpers/internal/rails.rb +5 -22
- data/lib/sorcery/test_helpers/internal.rb +4 -6
- data/lib/sorcery/test_helpers/rails/integration.rb +1 -1
- data/lib/sorcery/test_helpers/rails/request.rb +1 -1
- data/lib/sorcery/version.rb +1 -1
- data/lib/sorcery.rb +6 -1
- metadata +21 -150
- data/.devcontainer/Dockerfile +0 -10
- data/.devcontainer/devcontainer.json +0 -29
- data/.devcontainer/postcreate.sh +0 -4
- data/.document +0 -5
- data/.github/FUNDING.yml +0 -1
- data/.github/ISSUE_TEMPLATE.md +0 -24
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -7
- data/.github/workflows/ruby.yml +0 -54
- data/.gitignore +0 -60
- data/.rspec +0 -1
- data/.rubocop.yml +0 -55
- data/.rubocop_todo.yml +0 -163
- data/CODE_OF_CONDUCT.md +0 -14
- data/Gemfile +0 -8
- data/MAINTAINING.md +0 -64
- data/Rakefile +0 -8
- data/SECURITY.md +0 -19
- data/gemfiles/rails_61.gemfile +0 -7
- data/gemfiles/rails_70.gemfile +0 -7
- data/gemfiles/rails_71.gemfile +0 -7
- data/sorcery.gemspec +0 -49
- data/spec/active_record/user_activation_spec.rb +0 -17
- data/spec/active_record/user_activity_logging_spec.rb +0 -15
- data/spec/active_record/user_brute_force_protection_spec.rb +0 -15
- data/spec/active_record/user_magic_login_spec.rb +0 -15
- data/spec/active_record/user_oauth_spec.rb +0 -15
- data/spec/active_record/user_remember_me_spec.rb +0 -15
- data/spec/active_record/user_reset_password_spec.rb +0 -15
- data/spec/active_record/user_spec.rb +0 -27
- data/spec/controllers/controller_activity_logging_spec.rb +0 -113
- data/spec/controllers/controller_brute_force_protection_spec.rb +0 -41
- data/spec/controllers/controller_http_basic_auth_spec.rb +0 -67
- data/spec/controllers/controller_oauth2_spec.rb +0 -568
- data/spec/controllers/controller_oauth_spec.rb +0 -266
- data/spec/controllers/controller_remember_me_spec.rb +0 -130
- data/spec/controllers/controller_session_timeout_spec.rb +0 -168
- data/spec/controllers/controller_spec.rb +0 -200
- data/spec/orm/active_record.rb +0 -21
- data/spec/providers/example_provider_spec.rb +0 -17
- data/spec/providers/example_spec.rb +0 -17
- data/spec/providers/examples_spec.rb +0 -17
- data/spec/providers/vk_spec.rb +0 -42
- data/spec/rails_app/app/active_record/authentication.rb +0 -3
- data/spec/rails_app/app/active_record/user.rb +0 -5
- data/spec/rails_app/app/active_record/user_provider.rb +0 -3
- data/spec/rails_app/app/assets/config/manifest.js +0 -1
- data/spec/rails_app/app/controllers/application_controller.rb +0 -2
- data/spec/rails_app/app/controllers/sorcery_controller.rb +0 -489
- data/spec/rails_app/app/helpers/application_helper.rb +0 -2
- data/spec/rails_app/app/mailers/sorcery_mailer.rb +0 -38
- data/spec/rails_app/app/views/application/index.html.erb +0 -17
- data/spec/rails_app/app/views/layouts/application.html.erb +0 -14
- data/spec/rails_app/app/views/sorcery_mailer/activation_email.html.erb +0 -17
- data/spec/rails_app/app/views/sorcery_mailer/activation_email.text.erb +0 -9
- data/spec/rails_app/app/views/sorcery_mailer/activation_needed_email.html.erb +0 -17
- data/spec/rails_app/app/views/sorcery_mailer/activation_success_email.html.erb +0 -17
- data/spec/rails_app/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
- data/spec/rails_app/app/views/sorcery_mailer/magic_login_email.html.erb +0 -13
- data/spec/rails_app/app/views/sorcery_mailer/magic_login_email.text.erb +0 -6
- data/spec/rails_app/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
- data/spec/rails_app/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
- data/spec/rails_app/app/views/sorcery_mailer/send_unlock_token_email.text.erb +0 -1
- data/spec/rails_app/config/application.rb +0 -61
- data/spec/rails_app/config/boot.rb +0 -4
- data/spec/rails_app/config/database.yml +0 -22
- data/spec/rails_app/config/environment.rb +0 -5
- data/spec/rails_app/config/environments/test.rb +0 -37
- data/spec/rails_app/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/rails_app/config/initializers/compatible_legacy_migration.rb +0 -11
- data/spec/rails_app/config/initializers/inflections.rb +0 -10
- data/spec/rails_app/config/initializers/mime_types.rb +0 -5
- data/spec/rails_app/config/initializers/session_store.rb +0 -12
- data/spec/rails_app/config/locales/en.yml +0 -5
- data/spec/rails_app/config/routes.rb +0 -81
- data/spec/rails_app/config/secrets.yml +0 -4
- data/spec/rails_app/config.ru +0 -4
- data/spec/rails_app/db/migrate/activation/20101224223622_add_activation_to_users.rb +0 -17
- data/spec/rails_app/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -19
- data/spec/rails_app/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -13
- data/spec/rails_app/db/migrate/core/20101224223620_create_users.rb +0 -16
- data/spec/rails_app/db/migrate/external/20101224223628_create_authentications_and_user_providers.rb +0 -22
- data/spec/rails_app/db/migrate/invalidate_active_sessions/20180221093235_add_invalidate_active_sessions_before_to_users.rb +0 -9
- data/spec/rails_app/db/migrate/magic_login/20170924151831_add_magic_login_to_users.rb +0 -17
- data/spec/rails_app/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -15
- data/spec/rails_app/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -15
- data/spec/rails_app/db/schema.rb +0 -21
- data/spec/rails_app/db/seeds.rb +0 -7
- data/spec/shared_examples/user_activation_shared_examples.rb +0 -361
- data/spec/shared_examples/user_activity_logging_shared_examples.rb +0 -106
- data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +0 -151
- data/spec/shared_examples/user_magic_login_shared_examples.rb +0 -150
- data/spec/shared_examples/user_oauth_shared_examples.rb +0 -33
- data/spec/shared_examples/user_remember_me_shared_examples.rb +0 -129
- data/spec/shared_examples/user_reset_password_shared_examples.rb +0 -370
- data/spec/shared_examples/user_shared_examples.rb +0 -678
- data/spec/sorcery_crypto_providers_spec.rb +0 -245
- data/spec/sorcery_temporary_token_spec.rb +0 -27
- data/spec/spec.opts +0 -2
- data/spec/spec_helper.rb +0 -50
- data/spec/support/migration_helper.rb +0 -29
- data/spec/support/providers/example.rb +0 -11
- data/spec/support/providers/example_provider.rb +0 -11
- data/spec/support/providers/examples.rb +0 -11
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe SorceryController, type: :controller do
|
|
4
|
-
describe 'plugin configuration' do
|
|
5
|
-
before(:all) do
|
|
6
|
-
sorcery_reload!
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
after(:each) do
|
|
10
|
-
Sorcery::Controller::Config.reset!
|
|
11
|
-
sorcery_reload!
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "enables configuration option 'user_class'" do
|
|
15
|
-
sorcery_controller_property_set(:user_class, 'TestUser')
|
|
16
|
-
|
|
17
|
-
expect(Sorcery::Controller::Config.user_class).to eq 'TestUser'
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it "enables configuration option 'not_authenticated_action'" do
|
|
21
|
-
sorcery_controller_property_set(:not_authenticated_action, :my_action)
|
|
22
|
-
|
|
23
|
-
expect(Sorcery::Controller::Config.not_authenticated_action).to eq :my_action
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# ----------------- PLUGIN ACTIVATED -----------------------
|
|
28
|
-
context 'when activated with sorcery' do
|
|
29
|
-
let(:user) { double('user', id: 42) }
|
|
30
|
-
|
|
31
|
-
before(:all) do
|
|
32
|
-
sorcery_reload!
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
after(:each) do
|
|
36
|
-
Sorcery::Controller::Config.reset!
|
|
37
|
-
sorcery_reload!
|
|
38
|
-
sorcery_controller_property_set(:user_class, User)
|
|
39
|
-
sorcery_model_property_set(:username_attribute_names, [:email])
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
specify { should respond_to(:login) }
|
|
43
|
-
|
|
44
|
-
specify { should respond_to(:logout) }
|
|
45
|
-
|
|
46
|
-
specify { should respond_to(:logged_in?) }
|
|
47
|
-
|
|
48
|
-
specify { should respond_to(:current_user) }
|
|
49
|
-
|
|
50
|
-
specify { should respond_to(:require_login) }
|
|
51
|
-
|
|
52
|
-
describe '#login' do
|
|
53
|
-
context 'when succeeds' do
|
|
54
|
-
before do
|
|
55
|
-
expect(User).to receive(:authenticate).with('bla@bla.com', 'secret') { |&block| block.call(user, nil) }
|
|
56
|
-
get :test_login, params: { email: 'bla@bla.com', password: 'secret' }
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it 'assigns user to @user variable' do
|
|
60
|
-
expect(assigns[:user]).to eq user
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it 'writes user id in session' do
|
|
64
|
-
expect(session[:user_id]).to eq user.id.to_s
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# NOTE: The lack of a CSRF token may mean that sessions will break
|
|
68
|
-
# horribly for Sorcery when using Rails 7.1+. We shall see.
|
|
69
|
-
it 'sets csrf token in session' do
|
|
70
|
-
if Gem::Version.new(Rails.version) >= Gem::Version.new('7.1')
|
|
71
|
-
pending 'Rails 7.1 is not including the csrf token in the session for unknown reasons'
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
expect(session[:_csrf_token]).not_to be_nil
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
context 'when fails' do
|
|
79
|
-
before do
|
|
80
|
-
expect(User).to receive(:authenticate).with('bla@bla.com', 'opensesame!').and_return(nil)
|
|
81
|
-
get :test_login, params: { email: 'bla@bla.com', password: 'opensesame!' }
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it 'sets @user variable to nil' do
|
|
85
|
-
expect(assigns[:user]).to be_nil
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
it 'sets user_id in session to nil' do
|
|
89
|
-
expect(session[:user_id]).to be_nil
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
describe '#logout' do
|
|
95
|
-
it 'clears the session' do
|
|
96
|
-
cookies[:remember_me_token] = nil
|
|
97
|
-
session[:user_id] = user.id.to_s
|
|
98
|
-
expect(User.sorcery_adapter).to receive(:find_by_id).with('42') { user }
|
|
99
|
-
get :test_logout
|
|
100
|
-
|
|
101
|
-
expect(session[:user_id]).to be_nil
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
describe '#logged_in?' do
|
|
106
|
-
it 'returns true when user is logged in' do
|
|
107
|
-
session[:user_id] = user.id.to_s
|
|
108
|
-
expect(User.sorcery_adapter).to receive(:find_by_id).with('42') { user }
|
|
109
|
-
|
|
110
|
-
expect(subject.logged_in?).to be true
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
it 'returns false when user is not logged in' do
|
|
114
|
-
session[:user_id] = nil
|
|
115
|
-
|
|
116
|
-
expect(subject.logged_in?).to be false
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
describe '#current_user' do
|
|
121
|
-
it 'current_user returns the user instance if logged in' do
|
|
122
|
-
session[:user_id] = user.id.to_s
|
|
123
|
-
expect(User.sorcery_adapter).to receive(:find_by_id).once.with('42') { user }
|
|
124
|
-
|
|
125
|
-
2.times { expect(subject.current_user).to eq user } # memoized!
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
it 'current_user returns false if not logged in' do
|
|
129
|
-
session[:user_id] = nil
|
|
130
|
-
expect(User.sorcery_adapter).to_not receive(:find_by_id)
|
|
131
|
-
|
|
132
|
-
2.times { expect(subject.current_user).to be_nil } # memoized!
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
it "calls the configured 'not_authenticated_action' when authenticate before_action fails" do
|
|
137
|
-
session[:user_id] = nil
|
|
138
|
-
sorcery_controller_property_set(:not_authenticated_action, :test_not_authenticated_action)
|
|
139
|
-
get :test_logout
|
|
140
|
-
|
|
141
|
-
expect(response).to be_successful
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
it 'require_login before_action saves the url that the user originally wanted' do
|
|
145
|
-
get :some_action
|
|
146
|
-
|
|
147
|
-
expect(session[:return_to_url]).to eq 'http://test.host/some_action'
|
|
148
|
-
expect(response).to redirect_to('http://test.host/')
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
it 'require_login before_action does not save the url that the user originally wanted upon all non-get http methods' do
|
|
152
|
-
%i[post put delete].each do |m|
|
|
153
|
-
send(m, :some_action)
|
|
154
|
-
|
|
155
|
-
expect(session[:return_to_url]).to be_nil
|
|
156
|
-
end
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
it 'require_login before_action does not save the url for JSON requests' do
|
|
160
|
-
get :some_action, format: :json
|
|
161
|
-
expect(session[:return_to_url]).to be_nil
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
it 'require_login before_action does not save the url for XHR requests' do
|
|
165
|
-
get :some_action, xhr: true
|
|
166
|
-
expect(session[:return_to_url]).to be_nil
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
it 'on successful login the user is redirected to the url he originally wanted' do
|
|
170
|
-
session[:return_to_url] = 'http://test.host/some_action'
|
|
171
|
-
post :test_return_to, params: { email: 'bla@bla.com', password: 'secret' }
|
|
172
|
-
|
|
173
|
-
expect(response).to redirect_to('http://test.host/some_action')
|
|
174
|
-
expect(flash[:notice]).to eq 'haha!'
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
# --- auto_login(user) ---
|
|
178
|
-
specify { should respond_to(:auto_login) }
|
|
179
|
-
|
|
180
|
-
it 'auto_login(user) logs in a user instance' do
|
|
181
|
-
session[:user_id] = nil
|
|
182
|
-
subject.auto_login(user)
|
|
183
|
-
|
|
184
|
-
expect(subject.logged_in?).to be true
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
it 'auto_login(user) works even if current_user was already set to false' do
|
|
188
|
-
get :test_logout
|
|
189
|
-
|
|
190
|
-
expect(session[:user_id]).to be_nil
|
|
191
|
-
expect(subject.current_user).to be_nil
|
|
192
|
-
|
|
193
|
-
expect(User).to receive(:first) { user }
|
|
194
|
-
|
|
195
|
-
get :test_auto_login
|
|
196
|
-
|
|
197
|
-
expect(assigns[:result]).to eq user
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
|
-
end
|
data/spec/orm/active_record.rb
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
require 'sorcery'
|
|
2
|
-
|
|
3
|
-
ActiveRecord::Migration.verbose = false
|
|
4
|
-
# ActiveRecord::Base.logger = Logger.new(nil)
|
|
5
|
-
# ActiveRecord::Base.include_root_in_json = true
|
|
6
|
-
|
|
7
|
-
class TestUser < ActiveRecord::Base
|
|
8
|
-
authenticates_with_sorcery!
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def setup_orm
|
|
12
|
-
MigrationHelper.migrate(migrations_path)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def teardown_orm
|
|
16
|
-
MigrationHelper.rollback(migrations_path)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def migrations_path
|
|
20
|
-
Rails.root.join('db', 'migrate', 'core')
|
|
21
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'spec_helper'
|
|
4
|
-
require 'sorcery/providers/base'
|
|
5
|
-
|
|
6
|
-
describe Sorcery::Providers::ExampleProvider do
|
|
7
|
-
before(:all) do
|
|
8
|
-
sorcery_reload!([:external])
|
|
9
|
-
sorcery_controller_property_set(:external_providers, [:example_provider])
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
context 'fetching a multi-word custom provider' do
|
|
13
|
-
it 'returns the provider' do
|
|
14
|
-
expect(Sorcery::Controller::Config.example_provider).to be_a(Sorcery::Providers::ExampleProvider)
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'spec_helper'
|
|
4
|
-
require 'sorcery/providers/base'
|
|
5
|
-
|
|
6
|
-
describe Sorcery::Providers::Example do
|
|
7
|
-
before(:all) do
|
|
8
|
-
sorcery_reload!([:external])
|
|
9
|
-
sorcery_controller_property_set(:external_providers, [:example])
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
context 'fetching a single-word custom provider' do
|
|
13
|
-
it 'returns the provider' do
|
|
14
|
-
expect(Sorcery::Controller::Config.example).to be_a(Sorcery::Providers::Example)
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'spec_helper'
|
|
4
|
-
require 'sorcery/providers/base'
|
|
5
|
-
|
|
6
|
-
describe Sorcery::Providers::Examples do
|
|
7
|
-
before(:all) do
|
|
8
|
-
sorcery_reload!([:external])
|
|
9
|
-
sorcery_controller_property_set(:external_providers, [:examples])
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
context 'fetching a plural custom provider' do
|
|
13
|
-
it 'returns the provider' do
|
|
14
|
-
expect(Sorcery::Controller::Config.examples).to be_a(Sorcery::Providers::Examples)
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
data/spec/providers/vk_spec.rb
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'sorcery/providers/base'
|
|
3
|
-
require 'sorcery/providers/vk'
|
|
4
|
-
require 'webmock/rspec'
|
|
5
|
-
|
|
6
|
-
describe Sorcery::Providers::Vk do
|
|
7
|
-
include WebMock::API
|
|
8
|
-
|
|
9
|
-
let(:provider) { Sorcery::Controller::Config.vk }
|
|
10
|
-
|
|
11
|
-
before(:all) do
|
|
12
|
-
sorcery_reload!([:external])
|
|
13
|
-
sorcery_controller_property_set(:external_providers, [:vk])
|
|
14
|
-
sorcery_controller_external_property_set(:vk, :key, 'KEY')
|
|
15
|
-
sorcery_controller_external_property_set(:vk, :secret, 'SECRET')
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def stub_vk_authorize
|
|
19
|
-
stub_request(:post, %r{https\:\/\/oauth\.vk\.com\/access_token}).to_return(
|
|
20
|
-
status: 200,
|
|
21
|
-
body: '{"access_token":"TOKEN","expires_in":86329,"user_id":1}',
|
|
22
|
-
headers: { 'content-type' => 'application/json' }
|
|
23
|
-
)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
context 'getting user info hash' do
|
|
27
|
-
it 'should provide VK API version' do
|
|
28
|
-
stub_vk_authorize
|
|
29
|
-
sorcery_controller_external_property_set(:vk, :api_version, '5.71')
|
|
30
|
-
|
|
31
|
-
get_user = stub_request(
|
|
32
|
-
:get,
|
|
33
|
-
'https://api.vk.com/method/getProfiles?access_token=TOKEN&fields=&scope=email&uids=1&v=5.71'
|
|
34
|
-
).to_return(body: '{"response":[{"id":1}]}')
|
|
35
|
-
|
|
36
|
-
token = provider.process_callback({ code: 'CODE' }, nil)
|
|
37
|
-
provider.get_user_hash(token)
|
|
38
|
-
|
|
39
|
-
expect(get_user).to have_been_requested
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{}
|