devise_token_auth_multitenancy 1.1.3.alpha1

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 (175) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +13 -0
  3. data/README.md +103 -0
  4. data/Rakefile +42 -0
  5. data/app/controllers/devise_token_auth/application_controller.rb +79 -0
  6. data/app/controllers/devise_token_auth/concerns/resource_finder.rb +44 -0
  7. data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +162 -0
  8. data/app/controllers/devise_token_auth/confirmations_controller.rb +82 -0
  9. data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +287 -0
  10. data/app/controllers/devise_token_auth/passwords_controller.rb +206 -0
  11. data/app/controllers/devise_token_auth/registrations_controller.rb +205 -0
  12. data/app/controllers/devise_token_auth/sessions_controller.rb +131 -0
  13. data/app/controllers/devise_token_auth/token_validations_controller.rb +31 -0
  14. data/app/controllers/devise_token_auth/unlocks_controller.rb +89 -0
  15. data/app/models/devise_token_auth/concerns/active_record_support.rb +16 -0
  16. data/app/models/devise_token_auth/concerns/confirmable_support.rb +27 -0
  17. data/app/models/devise_token_auth/concerns/mongoid_support.rb +19 -0
  18. data/app/models/devise_token_auth/concerns/tokens_serialization.rb +19 -0
  19. data/app/models/devise_token_auth/concerns/user.rb +257 -0
  20. data/app/models/devise_token_auth/concerns/user_omniauth_callbacks.rb +28 -0
  21. data/app/validators/devise_token_auth_email_validator.rb +23 -0
  22. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  23. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  24. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  25. data/app/views/devise_token_auth/omniauth_external_window.html.erb +38 -0
  26. data/config/locales/da-DK.yml +52 -0
  27. data/config/locales/de.yml +51 -0
  28. data/config/locales/en.yml +57 -0
  29. data/config/locales/es.yml +51 -0
  30. data/config/locales/fr.yml +51 -0
  31. data/config/locales/he.yml +52 -0
  32. data/config/locales/it.yml +48 -0
  33. data/config/locales/ja.yml +48 -0
  34. data/config/locales/ko.yml +51 -0
  35. data/config/locales/nl.yml +32 -0
  36. data/config/locales/pl.yml +51 -0
  37. data/config/locales/pt-BR.yml +48 -0
  38. data/config/locales/pt.yml +51 -0
  39. data/config/locales/ro.yml +48 -0
  40. data/config/locales/ru.yml +52 -0
  41. data/config/locales/sq.yml +48 -0
  42. data/config/locales/sv.yml +52 -0
  43. data/config/locales/uk.yml +61 -0
  44. data/config/locales/vi.yml +52 -0
  45. data/config/locales/zh-CN.yml +48 -0
  46. data/config/locales/zh-HK.yml +50 -0
  47. data/config/locales/zh-TW.yml +50 -0
  48. data/lib/devise_token_auth/blacklist.rb +2 -0
  49. data/lib/devise_token_auth/controllers/helpers.rb +161 -0
  50. data/lib/devise_token_auth/controllers/url_helpers.rb +10 -0
  51. data/lib/devise_token_auth/engine.rb +96 -0
  52. data/lib/devise_token_auth/errors.rb +8 -0
  53. data/lib/devise_token_auth/rails/routes.rb +116 -0
  54. data/lib/devise_token_auth/token_factory.rb +126 -0
  55. data/lib/devise_token_auth/url.rb +44 -0
  56. data/lib/devise_token_auth/version.rb +5 -0
  57. data/lib/devise_token_auth.rb +14 -0
  58. data/lib/generators/devise_token_auth/USAGE +31 -0
  59. data/lib/generators/devise_token_auth/install_generator.rb +91 -0
  60. data/lib/generators/devise_token_auth/install_generator_helpers.rb +98 -0
  61. data/lib/generators/devise_token_auth/install_mongoid_generator.rb +46 -0
  62. data/lib/generators/devise_token_auth/install_views_generator.rb +18 -0
  63. data/lib/generators/devise_token_auth/templates/devise_token_auth.rb +60 -0
  64. data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +49 -0
  65. data/lib/generators/devise_token_auth/templates/user.rb.erb +9 -0
  66. data/lib/generators/devise_token_auth/templates/user_mongoid.rb.erb +56 -0
  67. data/lib/tasks/devise_token_auth_tasks.rake +6 -0
  68. data/test/controllers/custom/custom_confirmations_controller_test.rb +25 -0
  69. data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +33 -0
  70. data/test/controllers/custom/custom_passwords_controller_test.rb +79 -0
  71. data/test/controllers/custom/custom_registrations_controller_test.rb +63 -0
  72. data/test/controllers/custom/custom_sessions_controller_test.rb +39 -0
  73. data/test/controllers/custom/custom_token_validations_controller_test.rb +42 -0
  74. data/test/controllers/demo_group_controller_test.rb +151 -0
  75. data/test/controllers/demo_mang_controller_test.rb +284 -0
  76. data/test/controllers/demo_user_controller_test.rb +629 -0
  77. data/test/controllers/devise_token_auth/confirmations_controller_test.rb +191 -0
  78. data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +441 -0
  79. data/test/controllers/devise_token_auth/passwords_controller_test.rb +780 -0
  80. data/test/controllers/devise_token_auth/registrations_controller_test.rb +907 -0
  81. data/test/controllers/devise_token_auth/sessions_controller_test.rb +503 -0
  82. data/test/controllers/devise_token_auth/token_validations_controller_test.rb +102 -0
  83. data/test/controllers/devise_token_auth/unlocks_controller_test.rb +196 -0
  84. data/test/controllers/overrides/confirmations_controller_test.rb +47 -0
  85. data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +53 -0
  86. data/test/controllers/overrides/passwords_controller_test.rb +64 -0
  87. data/test/controllers/overrides/registrations_controller_test.rb +46 -0
  88. data/test/controllers/overrides/sessions_controller_test.rb +35 -0
  89. data/test/controllers/overrides/token_validations_controller_test.rb +43 -0
  90. data/test/dummy/README.rdoc +28 -0
  91. data/test/dummy/app/active_record/confirmable_user.rb +11 -0
  92. data/test/dummy/app/active_record/lockable_user.rb +7 -0
  93. data/test/dummy/app/active_record/mang.rb +5 -0
  94. data/test/dummy/app/active_record/only_email_user.rb +7 -0
  95. data/test/dummy/app/active_record/scoped_user.rb +9 -0
  96. data/test/dummy/app/active_record/unconfirmable_user.rb +9 -0
  97. data/test/dummy/app/active_record/unregisterable_user.rb +9 -0
  98. data/test/dummy/app/active_record/user.rb +6 -0
  99. data/test/dummy/app/controllers/application_controller.rb +18 -0
  100. data/test/dummy/app/controllers/auth_origin_controller.rb +7 -0
  101. data/test/dummy/app/controllers/custom/confirmations_controller.rb +13 -0
  102. data/test/dummy/app/controllers/custom/omniauth_callbacks_controller.rb +13 -0
  103. data/test/dummy/app/controllers/custom/passwords_controller.rb +39 -0
  104. data/test/dummy/app/controllers/custom/registrations_controller.rb +39 -0
  105. data/test/dummy/app/controllers/custom/sessions_controller.rb +29 -0
  106. data/test/dummy/app/controllers/custom/token_validations_controller.rb +19 -0
  107. data/test/dummy/app/controllers/demo_group_controller.rb +15 -0
  108. data/test/dummy/app/controllers/demo_mang_controller.rb +14 -0
  109. data/test/dummy/app/controllers/demo_user_controller.rb +27 -0
  110. data/test/dummy/app/controllers/overrides/confirmations_controller.rb +28 -0
  111. data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +16 -0
  112. data/test/dummy/app/controllers/overrides/passwords_controller.rb +35 -0
  113. data/test/dummy/app/controllers/overrides/registrations_controller.rb +29 -0
  114. data/test/dummy/app/controllers/overrides/sessions_controller.rb +36 -0
  115. data/test/dummy/app/controllers/overrides/token_validations_controller.rb +23 -0
  116. data/test/dummy/app/helpers/application_helper.rb +1058 -0
  117. data/test/dummy/app/models/concerns/favorite_color.rb +19 -0
  118. data/test/dummy/app/mongoid/confirmable_user.rb +52 -0
  119. data/test/dummy/app/mongoid/lockable_user.rb +38 -0
  120. data/test/dummy/app/mongoid/mang.rb +46 -0
  121. data/test/dummy/app/mongoid/only_email_user.rb +33 -0
  122. data/test/dummy/app/mongoid/scoped_user.rb +50 -0
  123. data/test/dummy/app/mongoid/unconfirmable_user.rb +44 -0
  124. data/test/dummy/app/mongoid/unregisterable_user.rb +47 -0
  125. data/test/dummy/app/mongoid/user.rb +49 -0
  126. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  127. data/test/dummy/config/application.rb +48 -0
  128. data/test/dummy/config/application.yml.bk +0 -0
  129. data/test/dummy/config/boot.rb +11 -0
  130. data/test/dummy/config/environment.rb +7 -0
  131. data/test/dummy/config/environments/development.rb +46 -0
  132. data/test/dummy/config/environments/production.rb +84 -0
  133. data/test/dummy/config/environments/test.rb +50 -0
  134. data/test/dummy/config/initializers/assets.rb +10 -0
  135. data/test/dummy/config/initializers/backtrace_silencers.rb +9 -0
  136. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  137. data/test/dummy/config/initializers/devise.rb +290 -0
  138. data/test/dummy/config/initializers/devise_token_auth.rb +55 -0
  139. data/test/dummy/config/initializers/figaro.rb +3 -0
  140. data/test/dummy/config/initializers/filter_parameter_logging.rb +6 -0
  141. data/test/dummy/config/initializers/inflections.rb +18 -0
  142. data/test/dummy/config/initializers/mime_types.rb +6 -0
  143. data/test/dummy/config/initializers/omniauth.rb +11 -0
  144. data/test/dummy/config/initializers/session_store.rb +5 -0
  145. data/test/dummy/config/initializers/wrap_parameters.rb +16 -0
  146. data/test/dummy/config/routes.rb +57 -0
  147. data/test/dummy/config/spring.rb +3 -0
  148. data/test/dummy/config.ru +18 -0
  149. data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +58 -0
  150. data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +57 -0
  151. data/test/dummy/db/migrate/20140829044006_add_operating_thetan_to_user.rb +8 -0
  152. data/test/dummy/db/migrate/20140916224624_add_favorite_color_to_mangs.rb +7 -0
  153. data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +55 -0
  154. data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +56 -0
  155. data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +56 -0
  156. data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +56 -0
  157. data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +56 -0
  158. data/test/dummy/db/migrate/20190924101113_devise_token_auth_create_confirmable_users.rb +49 -0
  159. data/test/dummy/db/schema.rb +198 -0
  160. data/test/dummy/lib/migration_database_helper.rb +43 -0
  161. data/test/factories/users.rb +41 -0
  162. data/test/lib/devise_token_auth/blacklist_test.rb +11 -0
  163. data/test/lib/devise_token_auth/token_factory_test.rb +191 -0
  164. data/test/lib/devise_token_auth/url_test.rb +26 -0
  165. data/test/lib/generators/devise_token_auth/install_generator_test.rb +217 -0
  166. data/test/lib/generators/devise_token_auth/install_generator_with_namespace_test.rb +222 -0
  167. data/test/lib/generators/devise_token_auth/install_views_generator_test.rb +25 -0
  168. data/test/models/concerns/mongoid_support_test.rb +31 -0
  169. data/test/models/concerns/tokens_serialization_test.rb +70 -0
  170. data/test/models/confirmable_user_test.rb +35 -0
  171. data/test/models/only_email_user_test.rb +29 -0
  172. data/test/models/user_test.rb +108 -0
  173. data/test/support/controllers/routes.rb +43 -0
  174. data/test/test_helper.rb +103 -0
  175. metadata +483 -0
@@ -0,0 +1,196 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ # was the web request successful?
6
+ # was the user redirected to the right page?
7
+ # was the user successfully authenticated?
8
+ # was the correct object stored in the response?
9
+ # was the appropriate message delivered in the json payload?
10
+
11
+ class DeviseTokenAuth::UnlocksControllerTest < ActionController::TestCase
12
+ describe DeviseTokenAuth::UnlocksController do
13
+ setup do
14
+ @request.env['devise.mapping'] = Devise.mappings[:lockable_user]
15
+ end
16
+
17
+ teardown do
18
+ @request.env['devise.mapping'] = Devise.mappings[:user]
19
+ end
20
+
21
+ before do
22
+ @original_lock_strategy = Devise.lock_strategy
23
+ @original_unlock_strategy = Devise.unlock_strategy
24
+ @original_maximum_attempts = Devise.maximum_attempts
25
+ Devise.lock_strategy = :failed_attempts
26
+ Devise.unlock_strategy = :email
27
+ Devise.maximum_attempts = 5
28
+ end
29
+
30
+ after do
31
+ Devise.lock_strategy = @original_lock_strategy
32
+ Devise.maximum_attempts = @original_maximum_attempts
33
+ Devise.unlock_strategy = @original_unlock_strategy
34
+ end
35
+
36
+ describe 'Unlocking user' do
37
+ before do
38
+ @resource = create(:lockable_user)
39
+ end
40
+
41
+ describe 'request unlock without email' do
42
+ before do
43
+ @auth_headers = @resource.create_new_auth_token
44
+ @new_password = Faker::Internet.password
45
+
46
+ post :create
47
+ @data = JSON.parse(response.body)
48
+ end
49
+
50
+ test 'response should fail' do
51
+ assert_equal 401, response.status
52
+ end
53
+ test 'error message should be returned' do
54
+ assert @data['errors']
55
+ assert_equal @data['errors'], [I18n.t('devise_token_auth.passwords.missing_email')]
56
+ end
57
+ end
58
+
59
+ describe 'request unlock' do
60
+ describe 'unknown user should return 404' do
61
+ before do
62
+ post :create, params: { email: 'chester@cheet.ah' }
63
+ @data = JSON.parse(response.body)
64
+ end
65
+ test 'unknown user should return 404' do
66
+ assert_equal 404, response.status
67
+ end
68
+
69
+ test 'errors should be returned' do
70
+ assert @data['errors']
71
+ assert_equal @data['errors'],
72
+ [I18n.t('devise_token_auth.passwords.user_not_found',
73
+ email: 'chester@cheet.ah')]
74
+ end
75
+ end
76
+
77
+ describe 'successfully requested unlock' do
78
+ before do
79
+ post :create, params: { email: @resource.email }
80
+
81
+ @data = JSON.parse(response.body)
82
+ end
83
+
84
+ test 'response should not contain extra data' do
85
+ assert_nil @data['data']
86
+ end
87
+ end
88
+
89
+ describe 'case-sensitive email' do
90
+ before do
91
+ post :create, params: { email: @resource.email }
92
+
93
+ @mail = ActionMailer::Base.deliveries.last
94
+ @resource.reload
95
+ @data = JSON.parse(response.body)
96
+
97
+ @mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
98
+ @mail_reset_token = @mail.body.match(/unlock_token=(.*)\"/)[1]
99
+ end
100
+
101
+ test 'response should return success status' do
102
+ assert_equal 200, response.status
103
+ end
104
+
105
+ test 'response should contains message' do
106
+ assert_equal @data['message'], I18n.t('devise_token_auth.unlocks.sended', email: @resource.email)
107
+ end
108
+
109
+ test 'action should send an email' do
110
+ assert @mail
111
+ end
112
+
113
+ test 'the email should be addressed to the user' do
114
+ assert_equal @mail.to.first, @resource.email
115
+ end
116
+
117
+ test 'the client config name should fall back to "default"' do
118
+ assert_equal 'default', @mail_config_name
119
+ end
120
+
121
+ test 'the email body should contain a link with reset token as a query param' do
122
+ user = LockableUser.unlock_access_by_token(@mail_reset_token)
123
+ assert_equal user.id, @resource.id
124
+ end
125
+
126
+ describe 'unlock link failure' do
127
+ test 'response should return 404' do
128
+ assert_raises(ActionController::RoutingError) do
129
+ get :show, params: { unlock_token: 'bogus' }
130
+ end
131
+ end
132
+ end
133
+
134
+ describe 'password reset link success' do
135
+ before do
136
+ get :show, params: { unlock_token: @mail_reset_token }
137
+
138
+ @resource.reload
139
+
140
+ raw_qs = response.location.split('?')[1]
141
+ @qs = Rack::Utils.parse_nested_query(raw_qs)
142
+
143
+ @access_token = @qs['access-token']
144
+ @client = @qs['client']
145
+ @client_id = @qs['client_id']
146
+ @expiry = @qs['expiry']
147
+ @token = @qs['token']
148
+ @uid = @qs['uid']
149
+ @unlock = @qs['unlock']
150
+ end
151
+
152
+ test 'respones should have success redirect status' do
153
+ assert_equal 302, response.status
154
+ end
155
+
156
+ test 'response should contain auth params' do
157
+ assert @access_token
158
+ assert @client
159
+ assert @client_id
160
+ assert @expiry
161
+ assert @token
162
+ assert @uid
163
+ assert @unlock
164
+ end
165
+
166
+ test 'response auth params should be valid' do
167
+ assert @resource.valid_token?(@token, @client_id)
168
+ assert @resource.valid_token?(@access_token, @client)
169
+ end
170
+ end
171
+ end
172
+
173
+ describe 'case-insensitive email' do
174
+ before do
175
+ @resource_class = LockableUser
176
+ @request_params = {
177
+ email: @resource.email.upcase
178
+ }
179
+ end
180
+
181
+ test 'response should return success status if configured' do
182
+ @resource_class.case_insensitive_keys = [:email]
183
+ post :create, params: @request_params
184
+ assert_equal 200, response.status
185
+ end
186
+
187
+ test 'response should return failure status if not configured' do
188
+ @resource_class.case_insensitive_keys = []
189
+ post :create, params: @request_params
190
+ assert_equal 404, response.status
191
+ end
192
+ end
193
+ end
194
+ end
195
+ end
196
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ # was the web request successful?
6
+ # was the user redirected to the right page?
7
+ # was the user successfully authenticated?
8
+ # was the correct object stored in the response?
9
+ # was the appropriate message delivered in the json payload?
10
+
11
+ class Overrides::ConfirmationsControllerTest < ActionDispatch::IntegrationTest
12
+ include OverridesControllersRoutes
13
+
14
+ describe Overrides::ConfirmationsController do
15
+ before do
16
+ @redirect_url = Faker::Internet.url
17
+ @new_user = create(:user)
18
+
19
+ # generate + send email
20
+ @new_user.send_confirmation_instructions(redirect_url: @redirect_url)
21
+
22
+ @mail = ActionMailer::Base.deliveries.last
23
+ @confirmation_path = @mail.body.match(/localhost([^\"]*)\"/)[1]
24
+
25
+ # visit confirmation link
26
+ get @confirmation_path
27
+
28
+ # reload user from db
29
+ @new_user.reload
30
+ end
31
+
32
+ test 'user is confirmed' do
33
+ assert @new_user.confirmed?
34
+ end
35
+
36
+ test 'user can be authenticated via confirmation link' do
37
+ # hard coded in override controller
38
+ override_proof_str = '(^^,)'
39
+
40
+ # ensure present in redirect URL
41
+ override_proof_param = URI.unescape(response.headers['Location']
42
+ .match(/override_proof=([^&]*)&/)[1])
43
+
44
+ assert_equal override_proof_str, override_proof_param
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ # was the web request successful?
6
+ # was the user redirected to the right page?
7
+ # was the user successfully authenticated?
8
+ # was the correct object stored in the response?
9
+ # was the appropriate message delivered in the json payload?
10
+
11
+ class Overrides::OmniauthCallbacksControllerTest < ActionDispatch::IntegrationTest
12
+ include OverridesControllersRoutes
13
+
14
+ describe Overrides::OmniauthCallbacksController do
15
+ before do
16
+ OmniAuth.config.test_mode = true
17
+ OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(
18
+ provider: 'facebook',
19
+ uid: '123545',
20
+ info: {
21
+ name: 'chong',
22
+ email: 'chongbong@aol.com'
23
+ }
24
+ )
25
+
26
+ @favorite_color = 'gray'
27
+
28
+ get '/evil_user_auth/facebook',
29
+ params: {
30
+ auth_origin_url: Faker::Internet.url,
31
+ favorite_color: @favorite_color,
32
+ omniauth_window_type: 'newWindow'
33
+ }
34
+
35
+ follow_all_redirects!
36
+
37
+ @resource = assigns(:resource)
38
+ end
39
+
40
+ test 'request is successful' do
41
+ assert_equal 200, response.status
42
+ end
43
+
44
+ test 'controller was overridden' do
45
+ assert_equal @resource.nickname,
46
+ Overrides::OmniauthCallbacksController::DEFAULT_NICKNAME
47
+ end
48
+
49
+ test 'whitelisted param was allowed' do
50
+ assert_equal @favorite_color, @resource.favorite_color
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ # was the web request successful?
6
+ # was the user redirected to the right page?
7
+ # was the user successfully authenticated?
8
+ # was the correct object stored in the response?
9
+ # was the appropriate message delivered in the json payload?
10
+
11
+ class Overrides::PasswordsControllerTest < ActionDispatch::IntegrationTest
12
+ include OverridesControllersRoutes
13
+
14
+ describe Overrides::PasswordsController do
15
+ before do
16
+ @resource = create(:user, :confirmed)
17
+
18
+ post '/evil_user_auth/password',
19
+ params: {
20
+ email: @resource.email,
21
+ redirect_url: Faker::Internet.url
22
+ }
23
+
24
+ mail = ActionMailer::Base.deliveries.last
25
+ @resource.reload
26
+
27
+ mail_reset_token = mail.body.match(/reset_password_token=(.*)\"/)[1]
28
+ mail_redirect_url = CGI.unescape(mail.body.match(/redirect_url=([^&]*)&/)[1])
29
+
30
+ get '/evil_user_auth/password/edit',
31
+ params: {
32
+ reset_password_token: mail_reset_token,
33
+ redirect_url: mail_redirect_url
34
+ }
35
+
36
+ @resource.reload
37
+
38
+ _, raw_query_string = response.location.split('?')
39
+ @query_string = Rack::Utils.parse_nested_query(raw_query_string)
40
+ end
41
+
42
+ test 'response should have success redirect status' do
43
+ assert_equal 302, response.status
44
+ end
45
+
46
+ test 'response should contain auth params + override proof' do
47
+ assert @query_string['access-token']
48
+ assert @query_string['client']
49
+ assert @query_string['client_id']
50
+ assert @query_string['expiry']
51
+ assert @query_string['override_proof']
52
+ assert @query_string['reset_password']
53
+ assert @query_string['token']
54
+ assert @query_string['uid']
55
+ end
56
+
57
+ test 'override proof is correct' do
58
+ assert_equal(
59
+ @query_string['override_proof'],
60
+ Overrides::PasswordsController::OVERRIDE_PROOF
61
+ )
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ # was the web request successful?
6
+ # was the user redirected to the right page?
7
+ # was the user successfully authenticated?
8
+ # was the correct object stored in the response?
9
+ # was the appropriate message delivered in the json payload?
10
+
11
+ class Overrides::RegistrationsControllerTest < ActionDispatch::IntegrationTest
12
+ include OverridesControllersRoutes
13
+
14
+ describe Overrides::RegistrationsController do
15
+ describe 'Succesful Registration update' do
16
+ before do
17
+ @existing_user = create(:user, :confirmed)
18
+ @auth_headers = @existing_user.create_new_auth_token
19
+ @client_id = @auth_headers['client']
20
+ @favorite_color = 'pink'
21
+
22
+ # ensure request is not treated as batch request
23
+ age_token(@existing_user, @client_id)
24
+
25
+ # test valid update param
26
+ @new_operating_thetan = 1_000_000
27
+
28
+ put '/evil_user_auth',
29
+ params: { favorite_color: @favorite_color },
30
+ headers: @auth_headers
31
+
32
+ @data = JSON.parse(response.body)
33
+ @existing_user.reload
34
+ end
35
+
36
+ test 'user was updated' do
37
+ assert_equal @favorite_color, @existing_user.favorite_color
38
+ end
39
+
40
+ test 'controller was overridden' do
41
+ assert_equal Overrides::RegistrationsController::OVERRIDE_PROOF,
42
+ @data['override_proof']
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ # was the web request successful?
6
+ # was the user redirected to the right page?
7
+ # was the user successfully authenticated?
8
+ # was the correct object stored in the response?
9
+ # was the appropriate message delivered in the json payload?
10
+
11
+ class Overrides::RegistrationsControllerTest < ActionDispatch::IntegrationTest
12
+ include OverridesControllersRoutes
13
+
14
+ describe Overrides::RegistrationsController do
15
+ before do
16
+ @existing_user = create(:user, :confirmed)
17
+
18
+ post '/evil_user_auth/sign_in',
19
+ params: { email: @existing_user.email,
20
+ password: @existing_user.password }
21
+
22
+ @resource = assigns(:resource)
23
+ @data = JSON.parse(response.body)
24
+ end
25
+
26
+ test 'request should succeed' do
27
+ assert_equal 200, response.status
28
+ end
29
+
30
+ test 'controller was overridden' do
31
+ assert_equal Overrides::RegistrationsController::OVERRIDE_PROOF,
32
+ @data['override_proof']
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ # was the web request successful?
6
+ # was the user redirected to the right page?
7
+ # was the user successfully authenticated?
8
+ # was the correct object stored in the response?
9
+ # was the appropriate message delivered in the json payload?
10
+
11
+ class Overrides::TokenValidationsControllerTest < ActionDispatch::IntegrationTest
12
+ include OverridesControllersRoutes
13
+
14
+ describe Overrides::TokenValidationsController do
15
+ before do
16
+ @resource = create(:user, :confirmed)
17
+
18
+ @auth_headers = @resource.create_new_auth_token
19
+
20
+ @token = @auth_headers['access-token']
21
+ @client_id = @auth_headers['client']
22
+ @expiry = @auth_headers['expiry']
23
+
24
+ # ensure that request is not treated as batch request
25
+ age_token(@resource, @client_id)
26
+
27
+ get '/evil_user_auth/validate_token',
28
+ params: {},
29
+ headers: @auth_headers
30
+
31
+ @resp = JSON.parse(response.body)
32
+ end
33
+
34
+ test 'token valid' do
35
+ assert_equal 200, response.status
36
+ end
37
+
38
+ test 'controller was overridden' do
39
+ assert_equal Overrides::TokenValidationsController::OVERRIDE_PROOF,
40
+ @resp['override_proof']
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,28 @@
1
+ == README
2
+
3
+ This README would normally document whatever steps are necessary to get the
4
+ application up and running.
5
+
6
+ Things you may want to cover:
7
+
8
+ * Ruby version
9
+
10
+ * System dependencies
11
+
12
+ * Configuration
13
+
14
+ * Database creation
15
+
16
+ * Database initialization
17
+
18
+ * How to run the test suite
19
+
20
+ * Services (job queues, cache servers, search engines, etc.)
21
+
22
+ * Deployment instructions
23
+
24
+ * ...
25
+
26
+
27
+ Please feel free to use a different markup language if you do not plan to run
28
+ <tt>rake doc:app</tt>.
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ConfirmableUser < ActiveRecord::Base
4
+ # Include default devise modules.
5
+ devise :database_authenticatable, :registerable,
6
+ :recoverable, :rememberable,
7
+ :validatable, :confirmable
8
+ DeviseTokenAuth.send_confirmation_email = true
9
+ include DeviseTokenAuth::Concerns::User
10
+ DeviseTokenAuth.send_confirmation_email = false
11
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class LockableUser < ActiveRecord::Base
4
+ # Include default devise modules.
5
+ devise :database_authenticatable, :registerable, :lockable
6
+ include DeviseTokenAuth::Concerns::User
7
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Mang < ActiveRecord::Base
4
+ include DeviseTokenAuth::Concerns::User
5
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class OnlyEmailUser < ActiveRecord::Base
4
+ # Include default devise modules.
5
+ devise :database_authenticatable, :registerable
6
+ include DeviseTokenAuth::Concerns::User
7
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ScopedUser < ActiveRecord::Base
4
+ # Include default devise modules.
5
+ devise :database_authenticatable, :registerable,
6
+ :recoverable, :rememberable,
7
+ :validatable, :confirmable, :omniauthable
8
+ include DeviseTokenAuth::Concerns::User
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UnconfirmableUser < ActiveRecord::Base
4
+ # Include default devise modules.
5
+ devise :database_authenticatable, :registerable,
6
+ :recoverable, :rememberable,
7
+ :validatable, :omniauthable
8
+ include DeviseTokenAuth::Concerns::User
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UnregisterableUser < ActiveRecord::Base
4
+ # Include default devise modules.
5
+ devise :database_authenticatable, :recoverable,
6
+ :validatable, :confirmable,
7
+ :omniauthable
8
+ include DeviseTokenAuth::Concerns::User
9
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ class User < ActiveRecord::Base
4
+ include DeviseTokenAuth::Concerns::User
5
+ include FavoriteColor
6
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationController < ActionController::Base
4
+ include DeviseTokenAuth::Concerns::SetUserByToken
5
+
6
+ before_action :configure_permitted_parameters, if: :devise_controller?
7
+
8
+ protected
9
+
10
+ def configure_permitted_parameters
11
+ permitted_parameters = devise_parameter_sanitizer.instance_values['permitted']
12
+ permitted_parameters[:sign_up] << :operating_thetan
13
+ permitted_parameters[:sign_up] << :favorite_color
14
+ permitted_parameters[:account_update] << :operating_thetan
15
+ permitted_parameters[:account_update] << :favorite_color
16
+ permitted_parameters[:account_update] << :current_password
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AuthOriginController < ApplicationController
4
+ def redirected
5
+ head :ok
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Custom::ConfirmationsController < DeviseTokenAuth::ConfirmationsController
4
+ def show
5
+ super do |resource|
6
+ @show_block_called = true unless resource.nil?
7
+ end
8
+ end
9
+
10
+ def show_block_called?
11
+ @show_block_called == true
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Custom::OmniauthCallbacksController < DeviseTokenAuth::OmniauthCallbacksController
4
+ def omniauth_success
5
+ super do |resource|
6
+ @omniauth_success_block_called = true unless resource.nil?
7
+ end
8
+ end
9
+
10
+ def omniauth_success_block_called?
11
+ @omniauth_success_block_called == true
12
+ end
13
+ end