devise_jwt_auth 0.1.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.
Files changed (179) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +13 -0
  3. data/README.md +99 -0
  4. data/Rakefile +42 -0
  5. data/app/controllers/devise_jwt_auth/application_controller.rb +80 -0
  6. data/app/controllers/devise_jwt_auth/concerns/resource_finder.rb +44 -0
  7. data/app/controllers/devise_jwt_auth/concerns/set_user_by_jwt_token.rb +111 -0
  8. data/app/controllers/devise_jwt_auth/confirmations_controller.rb +88 -0
  9. data/app/controllers/devise_jwt_auth/omniauth_callbacks_controller.rb +291 -0
  10. data/app/controllers/devise_jwt_auth/passwords_controller.rb +217 -0
  11. data/app/controllers/devise_jwt_auth/refresh_token_controller.rb +41 -0
  12. data/app/controllers/devise_jwt_auth/registrations_controller.rb +203 -0
  13. data/app/controllers/devise_jwt_auth/sessions_controller.rb +131 -0
  14. data/app/controllers/devise_jwt_auth/unlocks_controller.rb +99 -0
  15. data/app/models/devise_jwt_auth/concerns/active_record_support.rb +16 -0
  16. data/app/models/devise_jwt_auth/concerns/confirmable_support.rb +27 -0
  17. data/app/models/devise_jwt_auth/concerns/mongoid_support.rb +19 -0
  18. data/app/models/devise_jwt_auth/concerns/tokens_serialization.rb +19 -0
  19. data/app/models/devise_jwt_auth/concerns/user.rb +117 -0
  20. data/app/models/devise_jwt_auth/concerns/user_omniauth_callbacks.rb +28 -0
  21. data/app/validators/devise_jwt_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_jwt_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 +50 -0
  37. data/config/locales/pt-BR.yml +48 -0
  38. data/config/locales/pt.yml +50 -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_jwt_auth.rb +14 -0
  49. data/lib/devise_jwt_auth/blacklist.rb +2 -0
  50. data/lib/devise_jwt_auth/controllers/helpers.rb +161 -0
  51. data/lib/devise_jwt_auth/controllers/url_helpers.rb +10 -0
  52. data/lib/devise_jwt_auth/engine.rb +96 -0
  53. data/lib/devise_jwt_auth/errors.rb +8 -0
  54. data/lib/devise_jwt_auth/rails/routes.rb +118 -0
  55. data/lib/devise_jwt_auth/token_factory.rb +51 -0
  56. data/lib/devise_jwt_auth/url.rb +44 -0
  57. data/lib/devise_jwt_auth/version.rb +5 -0
  58. data/lib/generators/devise_jwt_auth/USAGE +31 -0
  59. data/lib/generators/devise_jwt_auth/install_generator.rb +91 -0
  60. data/lib/generators/devise_jwt_auth/install_generator_helpers.rb +98 -0
  61. data/lib/generators/devise_jwt_auth/install_mongoid_generator.rb +46 -0
  62. data/lib/generators/devise_jwt_auth/install_views_generator.rb +18 -0
  63. data/lib/generators/devise_jwt_auth/templates/devise_jwt_auth.rb +74 -0
  64. data/lib/generators/devise_jwt_auth/templates/devise_jwt_auth_create_users.rb.erb +51 -0
  65. data/lib/generators/devise_jwt_auth/templates/user.rb.erb +9 -0
  66. data/lib/generators/devise_jwt_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_refresh_token_controller_test.rb +36 -0
  72. data/test/controllers/custom/custom_registrations_controller_test.rb +59 -0
  73. data/test/controllers/custom/custom_sessions_controller_test.rb +39 -0
  74. data/test/controllers/demo_group_controller_test.rb +150 -0
  75. data/test/controllers/demo_mang_controller_test.rb +286 -0
  76. data/test/controllers/demo_user_controller_test.rb +650 -0
  77. data/test/controllers/devise_jwt_auth/confirmations_controller_test.rb +194 -0
  78. data/test/controllers/devise_jwt_auth/omniauth_callbacks_controller_test.rb +462 -0
  79. data/test/controllers/devise_jwt_auth/passwords_controller_test.rb +881 -0
  80. data/test/controllers/devise_jwt_auth/refresh_token_controller_test.rb +84 -0
  81. data/test/controllers/devise_jwt_auth/registrations_controller_test.rb +944 -0
  82. data/test/controllers/devise_jwt_auth/sessions_controller_test.rb +510 -0
  83. data/test/controllers/devise_jwt_auth/unlocks_controller_test.rb +197 -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 +65 -0
  87. data/test/controllers/overrides/refresh_token_controller_test.rb +37 -0
  88. data/test/controllers/overrides/registrations_controller_test.rb +47 -0
  89. data/test/controllers/overrides/sessions_controller_test.rb +35 -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/refresh_token_controller.rb +20 -0
  105. data/test/dummy/app/controllers/custom/registrations_controller.rb +39 -0
  106. data/test/dummy/app/controllers/custom/sessions_controller.rb +29 -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 +37 -0
  111. data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +16 -0
  112. data/test/dummy/app/controllers/overrides/passwords_controller.rb +45 -0
  113. data/test/dummy/app/controllers/overrides/refresh_token_controller.rb +22 -0
  114. data/test/dummy/app/controllers/overrides/registrations_controller.rb +29 -0
  115. data/test/dummy/app/controllers/overrides/sessions_controller.rb +36 -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.ru +18 -0
  128. data/test/dummy/config/application.rb +48 -0
  129. data/test/dummy/config/application.yml.bk +0 -0
  130. data/test/dummy/config/boot.rb +11 -0
  131. data/test/dummy/config/environment.rb +7 -0
  132. data/test/dummy/config/environments/development.rb +46 -0
  133. data/test/dummy/config/environments/production.rb +84 -0
  134. data/test/dummy/config/environments/test.rb +50 -0
  135. data/test/dummy/config/initializers/assets.rb +10 -0
  136. data/test/dummy/config/initializers/backtrace_silencers.rb +9 -0
  137. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  138. data/test/dummy/config/initializers/devise.rb +290 -0
  139. data/test/dummy/config/initializers/devise_jwt_auth.rb +55 -0
  140. data/test/dummy/config/initializers/figaro.rb +3 -0
  141. data/test/dummy/config/initializers/filter_parameter_logging.rb +6 -0
  142. data/test/dummy/config/initializers/inflections.rb +18 -0
  143. data/test/dummy/config/initializers/mime_types.rb +6 -0
  144. data/test/dummy/config/initializers/omniauth.rb +11 -0
  145. data/test/dummy/config/initializers/session_store.rb +5 -0
  146. data/test/dummy/config/initializers/wrap_parameters.rb +16 -0
  147. data/test/dummy/config/routes.rb +57 -0
  148. data/test/dummy/config/spring.rb +3 -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/dummy/tmp/generators/app/models/user.rb +9 -0
  162. data/test/dummy/tmp/generators/config/initializers/devise_jwt_auth.rb +74 -0
  163. data/test/dummy/tmp/generators/config/routes.rb +4 -0
  164. data/test/dummy/tmp/generators/db/migrate/20200206224309_devise_jwt_auth_create_users.rb +51 -0
  165. data/test/factories/users.rb +41 -0
  166. data/test/lib/devise_jwt_auth/blacklist_test.rb +11 -0
  167. data/test/lib/devise_jwt_auth/token_factory_test.rb +115 -0
  168. data/test/lib/devise_jwt_auth/url_test.rb +26 -0
  169. data/test/lib/generators/devise_jwt_auth/install_generator_test.rb +219 -0
  170. data/test/lib/generators/devise_jwt_auth/install_generator_with_namespace_test.rb +224 -0
  171. data/test/lib/generators/devise_jwt_auth/install_views_generator_test.rb +25 -0
  172. data/test/models/concerns/mongoid_support_test.rb +31 -0
  173. data/test/models/concerns/tokens_serialization_test.rb +72 -0
  174. data/test/models/confirmable_user_test.rb +35 -0
  175. data/test/models/only_email_user_test.rb +29 -0
  176. data/test/models/user_test.rb +110 -0
  177. data/test/support/controllers/routes.rb +43 -0
  178. data/test/test_helper.rb +91 -0
  179. metadata +503 -0
@@ -0,0 +1,197 @@
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 DeviseJwtAuth::UnlocksControllerTest < ActionController::TestCase
12
+ describe DeviseJwtAuth::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_named_token_pair
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_jwt_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_jwt_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_jwt_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
+ =begin
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
+ end
173
+
174
+ describe 'case-insensitive email' do
175
+ before do
176
+ @resource_class = LockableUser
177
+ @request_params = {
178
+ email: @resource.email.upcase
179
+ }
180
+ end
181
+
182
+ test 'response should return success status if configured' do
183
+ @resource_class.case_insensitive_keys = [:email]
184
+ post :create, params: @request_params
185
+ assert_equal 200, response.status
186
+ end
187
+
188
+ test 'response should return failure status if not configured' do
189
+ @resource_class.case_insensitive_keys = []
190
+ post :create, params: @request_params
191
+ assert_equal 404, response.status
192
+ end
193
+ end
194
+ end
195
+ end
196
+ end
197
+ 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,65 @@
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
+ # TODO: remove access-token and keep uid?
48
+ assert @query_string['access-token']
49
+ # assert @query_string['client']
50
+ # assert @query_string['client_id']
51
+ # assert @query_string['expiry']
52
+ assert @query_string['override_proof']
53
+ assert @query_string['reset_password']
54
+ # assert @query_string['token']
55
+ # assert @query_string['uid']
56
+ end
57
+
58
+ test 'override proof is correct' do
59
+ assert_equal(
60
+ @query_string['override_proof'],
61
+ Overrides::PasswordsController::OVERRIDE_PROOF
62
+ )
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,37 @@
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::RefreshTokenControllerTest < ActionDispatch::IntegrationTest
12
+ include OverridesControllersRoutes
13
+
14
+ describe Overrides::RefreshTokenController do
15
+ before do
16
+ @resource = create(:user, :confirmed)
17
+ @auth_headers = get_cookie_header(DeviseJwtAuth.refresh_token_name,
18
+ @resource.create_refresh_token
19
+ )
20
+
21
+ get '/evil_user_auth/refresh_token',
22
+ params: {},
23
+ headers: @auth_headers
24
+
25
+ @resp = JSON.parse(response.body)
26
+ end
27
+
28
+ test 'response valid' do
29
+ assert_equal 200, response.status
30
+ end
31
+
32
+ test 'controller was overridden' do
33
+ assert_equal Overrides::RefreshTokenController::OVERRIDE_PROOF,
34
+ @resp['override_proof']
35
+ end
36
+ end
37
+ 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::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_named_token_pair
19
+
20
+ # @client_id = @auth_headers['client']
21
+ @favorite_color = 'pink'
22
+
23
+ # ensure request is not treated as batch request
24
+ # age_token(@existing_user, @client_id)
25
+
26
+ # test valid update param
27
+ @new_operating_thetan = 1_000_000
28
+
29
+ put '/evil_user_auth',
30
+ params: { favorite_color: @favorite_color },
31
+ headers: @auth_headers
32
+
33
+ @data = JSON.parse(response.body)
34
+ @existing_user.reload
35
+ end
36
+
37
+ test 'user was updated' do
38
+ assert_equal @favorite_color, @existing_user.favorite_color
39
+ end
40
+
41
+ test 'controller was overridden' do
42
+ assert_equal Overrides::RegistrationsController::OVERRIDE_PROOF,
43
+ @data['override_proof']
44
+ end
45
+ end
46
+ end
47
+ end