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
@@ -20,7 +20,7 @@ def stub_all_oauth_requests!
20
20
  'in_reply_to_status_id_str' => nil, 'created_at' => 'Sun Mar 06 23:01:12 +0000 2011',
21
21
  'contributors' => nil, 'place' => nil, 'retweeted' => false, 'in_reply_to_status_id' => nil,
22
22
  'in_reply_to_user_id_str' => nil, 'coordinates' => nil, 'retweet_count' => 0,
23
- 'id' => 44533012284706816, 'id_str' => '44533012284706816'
23
+ 'id' => 44_533_012_284_706_816, 'id_str' => '44533012284706816'
24
24
  },
25
25
  'show_all_inline_media' => false, 'geo_enabled' => true,
26
26
  'profile_sidebar_border_color' => 'a8c7f7', 'url' => nil, 'followers_count' => 10,
@@ -32,7 +32,7 @@ def stub_all_oauth_requests!
32
32
  'is_translator' => false, 'contributors_enabled' => false, 'protected' => false,
33
33
  'follow_request_sent' => false, 'time_zone' => 'Greenland', 'profile_text_color' => '333333',
34
34
  'name' => 'Noam Ben Ari', 'friends_count' => 10, 'profile_sidebar_fill_color' => 'C0DFEC',
35
- 'id' => 123, 'id_str' => '91434812', 'profile_background_tile' => false, 'utc_offset' => -10800
35
+ 'id' => 123, 'id_str' => '91434812', 'profile_background_tile' => false, 'utc_offset' => -10_800
36
36
  }.to_json
37
37
 
38
38
  session[:request_token] = req_token.token
@@ -50,7 +50,7 @@ describe SorceryController, type: :controller do
50
50
 
51
51
  before(:all) do
52
52
  sorcery_reload!([:external])
53
- sorcery_controller_property_set(:external_providers, [:twitter, :jira])
53
+ sorcery_controller_property_set(:external_providers, %i[twitter jira])
54
54
  sorcery_controller_external_property_set(:twitter, :key, 'eYVNBjBDi33aa9GkA3w')
55
55
  sorcery_controller_external_property_set(:twitter, :secret, 'XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8')
56
56
  sorcery_controller_external_property_set(:twitter, :callback_url, 'http://blabla.com')
@@ -179,7 +179,7 @@ describe SorceryController, type: :controller do
179
179
 
180
180
  describe SorceryController, 'OAuth with user activation features' do
181
181
  before(:all) do
182
- sorcery_reload!([:activity_logging, :external])
182
+ sorcery_reload!(%i[activity_logging external])
183
183
  end
184
184
 
185
185
  context 'when twitter' do
@@ -215,16 +215,16 @@ describe SorceryController, type: :controller do
215
215
  describe SorceryController, 'OAuth with session timeout features' do
216
216
  before(:all) do
217
217
  if SORCERY_ORM == :active_record
218
- ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/external")
218
+ MigrationHelper.migrate("#{Rails.root}/db/migrate/external")
219
219
  User.reset_column_information
220
220
  end
221
221
 
222
- sorcery_reload!([:session_timeout, :external])
222
+ sorcery_reload!(%i[session_timeout external])
223
223
  end
224
224
 
225
225
  after(:all) do
226
226
  if SORCERY_ORM == :active_record
227
- ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
227
+ MigrationHelper.rollback("#{Rails.root}/db/migrate/external")
228
228
  end
229
229
  end
230
230
 
@@ -6,12 +6,18 @@ describe SorceryController, type: :controller do
6
6
  # ----------------- REMEMBER ME -----------------------
7
7
  context 'with remember me features' do
8
8
  before(:all) do
9
+ if SORCERY_ORM == :active_record
10
+ MigrationHelper.migrate("#{Rails.root}/db/migrate/remember_me")
11
+ User.reset_column_information
12
+ end
13
+
9
14
  sorcery_reload!([:remember_me])
10
15
  end
11
16
 
12
- after(:each) do
13
- session = nil
14
- cookies = nil
17
+ after(:all) do
18
+ if SORCERY_ORM == :active_record
19
+ MigrationHelper.rollback("#{Rails.root}/db/migrate/remember_me")
20
+ end
15
21
  end
16
22
 
17
23
  before(:each) do
@@ -31,17 +37,17 @@ describe SorceryController, type: :controller do
31
37
  end
32
38
 
33
39
  it 'clears cookie on forget_me!' do
34
- cookies['remember_me_token'] == { value: 'asd54234dsfsd43534', expires: 3600 }
35
- get :test_logout
40
+ request.cookies[:remember_me_token] = { value: 'asd54234dsfsd43534', expires: 3600 }
41
+ get :test_logout_with_forget_me
36
42
 
37
- expect(cookies['remember_me_token']).to be_nil
43
+ expect(response.cookies[:remember_me_token]).to be_nil
38
44
  end
39
45
 
40
46
  it 'clears cookie on force_forget_me!' do
41
- cookies['remember_me_token'] == { value: 'asd54234dsfsd43534', expires: 3600 }
47
+ request.cookies[:remember_me_token] = { value: 'asd54234dsfsd43534', expires: 3600 }
42
48
  get :test_logout_with_force_forget_me
43
49
 
44
- expect(cookies['remember_me_token']).to be_nil
50
+ expect(response.cookies[:remember_me_token]).to be_nil
45
51
  end
46
52
 
47
53
  it 'login(email,password,remember_me) logs user in and remembers' do
@@ -80,6 +86,8 @@ describe SorceryController, type: :controller do
80
86
 
81
87
  expect(User.sorcery_adapter).to receive(:find_by_remember_me_token).with('token').and_return(user)
82
88
 
89
+ expect(subject).to receive(:after_remember_me!).with(user)
90
+
83
91
  get :test_login_from_cookie
84
92
 
85
93
  expect(assigns[:current_user]).to eq user
@@ -24,7 +24,7 @@ describe SorceryController, type: :controller do
24
24
  get :test_should_be_logged_in
25
25
 
26
26
  expect(session[:user_id]).not_to be_nil
27
- expect(response).to be_a_success
27
+ expect(response).to be_successful
28
28
  end
29
29
 
30
30
  it 'resets session after session timeout' do
@@ -36,6 +36,87 @@ describe SorceryController, type: :controller do
36
36
  expect(response).to be_a_redirect
37
37
  end
38
38
 
39
+ context "with 'invalidate_active_sessions_enabled'" do
40
+ it 'does not reset the session if invalidate_sessions_before is nil' do
41
+ sorcery_controller_property_set(:session_timeout_invalidate_active_sessions_enabled, true)
42
+ login_user user
43
+ allow(user).to receive(:invalidate_sessions_before) { nil }
44
+
45
+ get :test_should_be_logged_in
46
+
47
+ expect(session[:user_id]).not_to be_nil
48
+ expect(response).to be_successful
49
+ end
50
+
51
+ it 'does not reset the session if it was not created before invalidate_sessions_before' do
52
+ sorcery_controller_property_set(:session_timeout_invalidate_active_sessions_enabled, true)
53
+ login_user user
54
+ allow(user).to receive(:invalidate_sessions_before) { Time.now.in_time_zone - 10.minutes }
55
+
56
+ get :test_should_be_logged_in
57
+
58
+ expect(session[:user_id]).not_to be_nil
59
+ expect(response).to be_successful
60
+ end
61
+
62
+ it 'resets the session if the session was created before invalidate_sessions_before' do
63
+ sorcery_controller_property_set(:session_timeout_invalidate_active_sessions_enabled, true)
64
+ login_user user
65
+ allow(user).to receive(:invalidate_sessions_before) { Time.now.in_time_zone }
66
+ get :test_should_be_logged_in
67
+
68
+ expect(session[:user_id]).to be_nil
69
+ expect(response).to be_a_redirect
70
+ end
71
+
72
+ it 'resets active sessions on next action if invalidate_active_sessions! is called' do
73
+ sorcery_controller_property_set(:session_timeout_invalidate_active_sessions_enabled, true)
74
+ # precondition that the user is logged in
75
+ login_user user
76
+ get :test_should_be_logged_in
77
+ expect(response).to be_successful
78
+
79
+ allow(user).to receive(:send) { |_method, value| allow(user).to receive(:invalidate_sessions_before) { value } }
80
+ allow(user).to receive(:save)
81
+ get :test_invalidate_active_session
82
+ expect(response).to be_successful
83
+
84
+ get :test_should_be_logged_in
85
+ expect(session[:user_id]).to be_nil
86
+ expect(response).to be_a_redirect
87
+ end
88
+
89
+ it 'allows login after invalidate_active_sessions! is called' do
90
+ sorcery_controller_property_set(:session_timeout_invalidate_active_sessions_enabled, true)
91
+ # precondition that the user is logged in
92
+ login_user user
93
+ get :test_should_be_logged_in
94
+ expect(response).to be_successful
95
+
96
+ allow(user).to receive(:send) { |_method, value| allow(user).to receive(:invalidate_sessions_before) { value } }
97
+ allow(user).to receive(:save)
98
+ # Call to invalidate
99
+ get :test_invalidate_active_session
100
+ expect(response).to be_successful
101
+
102
+ # Check that existing sessions were logged out
103
+ get :test_should_be_logged_in
104
+ expect(session[:user_id]).to be_nil
105
+ expect(response).to be_a_redirect
106
+
107
+ # Check that new session is allowed to login
108
+ login_user user
109
+ get :test_should_be_logged_in
110
+ expect(response).to be_successful
111
+ expect(session[:user_id]).not_to be_nil
112
+
113
+ # Check an additional request to make sure not logged out on next request
114
+ get :test_should_be_logged_in
115
+ expect(response).to be_successful
116
+ expect(session[:user_id]).not_to be_nil
117
+ end
118
+ end
119
+
39
120
  it 'works if the session is stored as a string or a Time' do
40
121
  session[:login_time] = Time.now.to_s
41
122
  # TODO: ???
@@ -44,7 +125,7 @@ describe SorceryController, type: :controller do
44
125
  get :test_login, params: { email: 'bla@bla.com', password: 'secret' }
45
126
 
46
127
  expect(session[:user_id]).not_to be_nil
47
- expect(response).to be_a_success
128
+ expect(response).to be_successful
48
129
  end
49
130
 
50
131
  context "with 'session_timeout_from_last_action'" do
@@ -62,7 +143,7 @@ describe SorceryController, type: :controller do
62
143
  get :test_should_be_logged_in
63
144
 
64
145
  expect(session[:user_id]).not_to be_nil
65
- expect(response).to be_a_success
146
+ expect(response).to be_successful
66
147
  end
67
148
 
68
149
  it "with 'session_timeout_from_last_action' logs out if there was no activity" do
@@ -75,5 +156,11 @@ describe SorceryController, type: :controller do
75
156
  expect(response).to be_a_redirect
76
157
  end
77
158
  end
159
+
160
+ it 'registers login time on remember_me callback' do
161
+ expect(subject).to receive(:register_login_time).with(user)
162
+
163
+ subject.send(:after_remember_me!, user)
164
+ end
78
165
  end
79
166
  end
@@ -132,7 +132,7 @@ describe SorceryController, type: :controller do
132
132
  sorcery_controller_property_set(:not_authenticated_action, :test_not_authenticated_action)
133
133
  get :test_logout
134
134
 
135
- expect(response).to be_a_success
135
+ expect(response).to be_successful
136
136
  end
137
137
 
138
138
  it 'require_login before_action saves the url that the user originally wanted' do
@@ -143,13 +143,23 @@ describe SorceryController, type: :controller do
143
143
  end
144
144
 
145
145
  it 'require_login before_action does not save the url that the user originally wanted upon all non-get http methods' do
146
- [:post, :put, :delete].each do |m|
146
+ %i[post put delete].each do |m|
147
147
  send(m, :some_action)
148
148
 
149
149
  expect(session[:return_to_url]).to be_nil
150
150
  end
151
151
  end
152
152
 
153
+ it 'require_login before_action does not save the url for JSON requests' do
154
+ get :some_action, format: :json
155
+ expect(session[:return_to_url]).to be_nil
156
+ end
157
+
158
+ it 'require_login before_action does not save the url for XHR requests' do
159
+ get :some_action, xhr: true
160
+ expect(session[:return_to_url]).to be_nil
161
+ end
162
+
153
163
  it 'on successful login the user is redirected to the url he originally wanted' do
154
164
  session[:return_to_url] = 'http://test.host/some_action'
155
165
  post :test_return_to, params: { email: 'bla@bla.com', password: 'secret' }
@@ -161,7 +171,7 @@ describe SorceryController, type: :controller do
161
171
  # --- auto_login(user) ---
162
172
  specify { should respond_to(:auto_login) }
163
173
 
164
- it 'auto_login(user) los in a user instance' do
174
+ it 'auto_login(user) logs in a user instance' do
165
175
  session[:user_id] = nil
166
176
  subject.auto_login(user)
167
177
 
@@ -9,11 +9,11 @@ class TestUser < ActiveRecord::Base
9
9
  end
10
10
 
11
11
  def setup_orm
12
- ActiveRecord::Migrator.migrate(migrations_path)
12
+ MigrationHelper.migrate(migrations_path)
13
13
  end
14
14
 
15
15
  def teardown_orm
16
- ActiveRecord::Migrator.rollback(migrations_path)
16
+ MigrationHelper.rollback(migrations_path)
17
17
  end
18
18
 
19
19
  def migrations_path
@@ -0,0 +1,17 @@
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
@@ -0,0 +1,17 @@
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
@@ -0,0 +1,42 @@
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
@@ -4,7 +4,13 @@ class SorceryController < ActionController::Base
4
4
  protect_from_forgery
5
5
 
6
6
  before_action :require_login_from_http_basic, only: [:test_http_basic_auth]
7
- before_action :require_login, only: [:test_logout, :test_logout_with_force_forget_me, :test_should_be_logged_in, :some_action]
7
+ before_action :require_login, only: %i[
8
+ test_logout
9
+ test_logout_with_forget_me
10
+ test_logout_with_force_forget_me
11
+ test_should_be_logged_in
12
+ some_action
13
+ ]
8
14
 
9
15
  def index; end
10
16
 
@@ -45,6 +51,13 @@ class SorceryController < ActionController::Base
45
51
  head :ok
46
52
  end
47
53
 
54
+ def test_logout_with_forget_me
55
+ remember_me!
56
+ forget_me!
57
+ logout
58
+ head :ok
59
+ end
60
+
48
61
  def test_logout_with_force_forget_me
49
62
  remember_me!
50
63
  force_forget_me!
@@ -52,6 +65,11 @@ class SorceryController < ActionController::Base
52
65
  head :ok
53
66
  end
54
67
 
68
+ def test_invalidate_active_session
69
+ invalidate_active_sessions!
70
+ head :ok
71
+ end
72
+
55
73
  def test_login_with_remember
56
74
  @user = login(params[:email], params[:password])
57
75
  remember_me!
@@ -132,12 +150,28 @@ class SorceryController < ActionController::Base
132
150
  login_at(:slack)
133
151
  end
134
152
 
153
+ def login_at_test_line
154
+ login_at(:line)
155
+ end
156
+
135
157
  def login_at_test_with_state
136
158
  login_at(:facebook, state: 'bla')
137
159
  end
138
160
 
161
+ def login_at_test_instagram
162
+ login_at(:instagram)
163
+ end
164
+
165
+ def login_at_test_auth0
166
+ login_at(:auth0)
167
+ end
168
+
169
+ def login_at_test_discord
170
+ login_at(:discord)
171
+ end
172
+
139
173
  def test_login_from_twitter
140
- if @user = login_from(:twitter)
174
+ if (@user = login_from(:twitter))
141
175
  redirect_to 'bla', notice: 'Success!'
142
176
  else
143
177
  redirect_to 'blu', alert: 'Failed!'
@@ -147,7 +181,7 @@ class SorceryController < ActionController::Base
147
181
  alias test_login_from test_login_from_twitter
148
182
 
149
183
  def test_login_from_facebook
150
- if @user = login_from(:facebook)
184
+ if (@user = login_from(:facebook))
151
185
  redirect_to 'bla', notice: 'Success!'
152
186
  else
153
187
  redirect_to 'blu', alert: 'Failed!'
@@ -155,7 +189,7 @@ class SorceryController < ActionController::Base
155
189
  end
156
190
 
157
191
  def test_login_from_github
158
- if @user = login_from(:github)
192
+ if (@user = login_from(:github))
159
193
  redirect_to 'bla', notice: 'Success!'
160
194
  else
161
195
  redirect_to 'blu', alert: 'Failed!'
@@ -163,7 +197,7 @@ class SorceryController < ActionController::Base
163
197
  end
164
198
 
165
199
  def test_login_from_paypal
166
- if @user = login_from(:paypal)
200
+ if (@user = login_from(:paypal))
167
201
  redirect_to 'bla', notice: 'Success!'
168
202
  else
169
203
  redirect_to 'blu', alert: 'Failed!'
@@ -171,7 +205,7 @@ class SorceryController < ActionController::Base
171
205
  end
172
206
 
173
207
  def test_login_from_wechat
174
- if @user = login_from(:wechat)
208
+ if (@user = login_from(:wechat))
175
209
  redirect_to 'bla', notice: 'Success!'
176
210
  else
177
211
  redirect_to 'blu', alert: 'Failed!'
@@ -179,7 +213,7 @@ class SorceryController < ActionController::Base
179
213
  end
180
214
 
181
215
  def test_login_from_microsoft
182
- if @user = login_from(:microsoft)
216
+ if (@user = login_from(:microsoft))
183
217
  redirect_to 'bla', notice: 'Success!'
184
218
  else
185
219
  redirect_to 'blu', alert: 'Failed!'
@@ -187,7 +221,7 @@ class SorceryController < ActionController::Base
187
221
  end
188
222
 
189
223
  def test_login_from_google
190
- if @user = login_from(:google)
224
+ if (@user = login_from(:google))
191
225
  redirect_to 'bla', notice: 'Success!'
192
226
  else
193
227
  redirect_to 'blu', alert: 'Failed!'
@@ -195,7 +229,7 @@ class SorceryController < ActionController::Base
195
229
  end
196
230
 
197
231
  def test_login_from_liveid
198
- if @user = login_from(:liveid)
232
+ if (@user = login_from(:liveid))
199
233
  redirect_to 'bla', notice: 'Success!'
200
234
  else
201
235
  redirect_to 'blu', alert: 'Failed!'
@@ -203,7 +237,7 @@ class SorceryController < ActionController::Base
203
237
  end
204
238
 
205
239
  def test_login_from_vk
206
- if @user = login_from(:vk)
240
+ if (@user = login_from(:vk))
207
241
  redirect_to 'bla', notice: 'Success!'
208
242
  else
209
243
  redirect_to 'blu', alert: 'Failed!'
@@ -211,7 +245,7 @@ class SorceryController < ActionController::Base
211
245
  end
212
246
 
213
247
  def test_login_from_jira
214
- if @user = login_from(:jira)
248
+ if (@user = login_from(:jira))
215
249
  redirect_to 'bla', notice: 'Success!'
216
250
  else
217
251
  redirect_to 'blu', alert: 'Failed!'
@@ -219,7 +253,7 @@ class SorceryController < ActionController::Base
219
253
  end
220
254
 
221
255
  def test_login_from_salesforce
222
- if @user = login_from(:salesforce)
256
+ if (@user = login_from(:salesforce))
223
257
  redirect_to 'bla', notice: 'Success!'
224
258
  else
225
259
  redirect_to 'blu', alert: 'Failed!'
@@ -227,7 +261,39 @@ class SorceryController < ActionController::Base
227
261
  end
228
262
 
229
263
  def test_login_from_slack
230
- if @user = login_from(:slack)
264
+ if (@user = login_from(:slack))
265
+ redirect_to 'bla', notice: 'Success!'
266
+ else
267
+ redirect_to 'blu', alert: 'Failed!'
268
+ end
269
+ end
270
+
271
+ def test_login_from_instagram
272
+ if (@user = login_from(:instagram))
273
+ redirect_to 'bla', notice: 'Success!'
274
+ else
275
+ redirect_to 'blu', alert: 'Failed!'
276
+ end
277
+ end
278
+
279
+ def test_login_from_auth0
280
+ if (@user = login_from(:auth0))
281
+ redirect_to 'bla', notice: 'Success!'
282
+ else
283
+ redirect_to 'blu', alert: 'Failed!'
284
+ end
285
+ end
286
+
287
+ def test_login_from_line
288
+ if @user = login_from(:line)
289
+ redirect_to 'bla', notice: 'Success!'
290
+ else
291
+ redirect_to 'blu', alert: 'Failed!'
292
+ end
293
+ end
294
+
295
+ def test_login_from_discord
296
+ if (@user = login_from(:discord))
231
297
  redirect_to 'bla', notice: 'Success!'
232
298
  else
233
299
  redirect_to 'blu', alert: 'Failed!'
@@ -235,7 +301,7 @@ class SorceryController < ActionController::Base
235
301
  end
236
302
 
237
303
  def test_return_to_with_external_twitter
238
- if @user = login_from(:twitter)
304
+ if (@user = login_from(:twitter))
239
305
  redirect_back_or_to 'bla', notice: 'Success!'
240
306
  else
241
307
  redirect_to 'blu', alert: 'Failed!'
@@ -243,7 +309,7 @@ class SorceryController < ActionController::Base
243
309
  end
244
310
 
245
311
  def test_return_to_with_external_jira
246
- if @user = login_from(:jira)
312
+ if (@user = login_from(:jira))
247
313
  redirect_back_or_to 'bla', notice: 'Success!'
248
314
  else
249
315
  redirect_to 'blu', alert: 'Failed!'
@@ -253,7 +319,7 @@ class SorceryController < ActionController::Base
253
319
  alias test_return_to_with_external test_return_to_with_external_twitter
254
320
 
255
321
  def test_return_to_with_external_facebook
256
- if @user = login_from(:facebook)
322
+ if (@user = login_from(:facebook))
257
323
  redirect_back_or_to 'bla', notice: 'Success!'
258
324
  else
259
325
  redirect_to 'blu', alert: 'Failed!'
@@ -261,7 +327,7 @@ class SorceryController < ActionController::Base
261
327
  end
262
328
 
263
329
  def test_return_to_with_external_github
264
- if @user = login_from(:github)
330
+ if (@user = login_from(:github))
265
331
  redirect_back_or_to 'bla', notice: 'Success!'
266
332
  else
267
333
  redirect_to 'blu', alert: 'Failed!'
@@ -269,7 +335,7 @@ class SorceryController < ActionController::Base
269
335
  end
270
336
 
271
337
  def test_return_to_with_external_paypal
272
- if @user = login_from(:paypal)
338
+ if (@user = login_from(:paypal))
273
339
  redirect_back_or_to 'bla', notice: 'Success!'
274
340
  else
275
341
  redirect_to 'blu', alert: 'Failed!'
@@ -277,7 +343,7 @@ class SorceryController < ActionController::Base
277
343
  end
278
344
 
279
345
  def test_return_to_with_external_wechat
280
- if @user = login_from(:wechat)
346
+ if (@user = login_from(:wechat))
281
347
  redirect_back_or_to 'bla', notice: 'Success!'
282
348
  else
283
349
  redirect_to 'blu', alert: 'Failed!'
@@ -285,7 +351,7 @@ class SorceryController < ActionController::Base
285
351
  end
286
352
 
287
353
  def test_return_to_with_external_microsoft
288
- if @user = login_from(:microsoft)
354
+ if (@user = login_from(:microsoft))
289
355
  redirect_back_or_to 'bla', notice: 'Success!'
290
356
  else
291
357
  redirect_to 'blu', alert: 'Failed!'
@@ -293,7 +359,7 @@ class SorceryController < ActionController::Base
293
359
  end
294
360
 
295
361
  def test_return_to_with_external_google
296
- if @user = login_from(:google)
362
+ if (@user = login_from(:google))
297
363
  redirect_back_or_to 'bla', notice: 'Success!'
298
364
  else
299
365
  redirect_to 'blu', alert: 'Failed!'
@@ -301,7 +367,7 @@ class SorceryController < ActionController::Base
301
367
  end
302
368
 
303
369
  def test_return_to_with_external_liveid
304
- if @user = login_from(:liveid)
370
+ if (@user = login_from(:liveid))
305
371
  redirect_back_or_to 'bla', notice: 'Success!'
306
372
  else
307
373
  redirect_to 'blu', alert: 'Failed!'
@@ -309,7 +375,7 @@ class SorceryController < ActionController::Base
309
375
  end
310
376
 
311
377
  def test_return_to_with_external_vk
312
- if @user = login_from(:vk)
378
+ if (@user = login_from(:vk))
313
379
  redirect_back_or_to 'bla', notice: 'Success!'
314
380
  else
315
381
  redirect_to 'blu', alert: 'Failed!'
@@ -317,7 +383,7 @@ class SorceryController < ActionController::Base
317
383
  end
318
384
 
319
385
  def test_return_to_with_external_salesforce
320
- if @user = login_from(:salesforce)
386
+ if (@user = login_from(:salesforce))
321
387
  redirect_back_or_to 'bla', notice: 'Success!'
322
388
  else
323
389
  redirect_to 'blu', alert: 'Failed!'
@@ -325,7 +391,39 @@ class SorceryController < ActionController::Base
325
391
  end
326
392
 
327
393
  def test_return_to_with_external_slack
328
- if @user = login_from(:slack)
394
+ if (@user = login_from(:slack))
395
+ redirect_back_or_to 'bla', notice: 'Success!'
396
+ else
397
+ redirect_to 'blu', alert: 'Failed!'
398
+ end
399
+ end
400
+
401
+ def test_return_to_with_external_instagram
402
+ if (@user = login_from(:instagram))
403
+ redirect_back_or_to 'bla', notice: 'Success!'
404
+ else
405
+ redirect_to 'blu', alert: 'Failed!'
406
+ end
407
+ end
408
+
409
+ def test_return_to_with_external_auth0
410
+ if (@user = login_from(:auth0))
411
+ redirect_back_or_to 'bla', notice: 'Success!'
412
+ else
413
+ redirect_to 'blu', alert: 'Failed!'
414
+ end
415
+ end
416
+
417
+ def test_return_to_with_external_line
418
+ if @user = login_from(:line)
419
+ redirect_back_or_to 'bla', notice: 'Success!'
420
+ else
421
+ redirect_to 'blu', alert: 'Failed!'
422
+ end
423
+ end
424
+
425
+ def test_return_to_with_external_discord
426
+ if (@user = login_from(:discord))
329
427
  redirect_back_or_to 'bla', notice: 'Success!'
330
428
  else
331
429
  redirect_to 'blu', alert: 'Failed!'
@@ -335,7 +433,7 @@ class SorceryController < ActionController::Base
335
433
  def test_create_from_provider
336
434
  provider = params[:provider]
337
435
  login_from(provider)
338
- if @user = create_from(provider)
436
+ if (@user = create_from(provider))
339
437
  redirect_to 'bla', notice: 'Success!'
340
438
  else
341
439
  redirect_to 'blu', alert: 'Failed!'
@@ -344,12 +442,13 @@ class SorceryController < ActionController::Base
344
442
 
345
443
  def test_add_second_provider
346
444
  provider = params[:provider]
347
- if logged_in?
348
- if @user = add_provider_to_user(provider)
349
- redirect_to 'bla', notice: 'Success!'
350
- else
351
- redirect_to 'blu', alert: 'Failed!'
352
- end
445
+
446
+ return unless logged_in?
447
+
448
+ if (@user = add_provider_to_user(provider))
449
+ redirect_to 'bla', notice: 'Success!'
450
+ else
451
+ redirect_to 'blu', alert: 'Failed!'
353
452
  end
354
453
  end
355
454