devise_token_auth 0.1.42 → 0.1.43.beta1
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.
Potentially problematic release.
This version of devise_token_auth might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +39 -38
- data/app/controllers/devise_token_auth/application_controller.rb +15 -0
- data/app/controllers/devise_token_auth/concerns/resource_finder.rb +38 -0
- data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +21 -19
- data/app/controllers/devise_token_auth/confirmations_controller.rb +12 -7
- data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +3 -7
- data/app/controllers/devise_token_auth/passwords_controller.rb +16 -26
- data/app/controllers/devise_token_auth/registrations_controller.rb +6 -2
- data/app/controllers/devise_token_auth/sessions_controller.rb +3 -14
- data/app/controllers/devise_token_auth/unlocks_controller.rb +105 -0
- data/app/models/devise_token_auth/concerns/user.rb +29 -12
- data/app/models/devise_token_auth/concerns/user_omniauth_callbacks.rb +5 -8
- data/app/views/devise/mailer/unlock_instructions.html.erb +1 -1
- data/app/views/devise_token_auth/omniauth_external_window.html.erb +1 -1
- data/config/initializers/devise.rb +1 -1
- data/config/locales/da-DK.yml +50 -0
- data/config/locales/en.yml +4 -0
- data/lib/devise_token_auth/controllers/helpers.rb +30 -20
- data/lib/devise_token_auth/rails/routes.rb +1 -1
- data/lib/devise_token_auth/url.rb +1 -1
- data/lib/devise_token_auth/version.rb +1 -1
- data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +2 -1
- data/lib/generators/devise_token_auth/templates/user.rb +1 -1
- data/test/controllers/custom/custom_confirmations_controller_test.rb +5 -10
- data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +15 -16
- data/test/controllers/custom/custom_passwords_controller_test.rb +28 -34
- data/test/controllers/custom/custom_registrations_controller_test.rb +23 -21
- data/test/controllers/custom/custom_sessions_controller_test.rb +16 -18
- data/test/controllers/custom/custom_token_validations_controller_test.rb +13 -11
- data/test/controllers/demo_group_controller_test.rb +19 -5
- data/test/controllers/demo_mang_controller_test.rb +37 -16
- data/test/controllers/demo_user_controller_test.rb +70 -38
- data/test/controllers/devise_token_auth/confirmations_controller_test.rb +40 -22
- data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +108 -82
- data/test/controllers/devise_token_auth/passwords_controller_test.rb +127 -145
- data/test/controllers/devise_token_auth/registrations_controller_test.rb +258 -274
- data/test/controllers/devise_token_auth/sessions_controller_test.rb +112 -117
- data/test/controllers/devise_token_auth/token_validations_controller_test.rb +14 -15
- data/test/controllers/devise_token_auth/unlocks_controller_test.rb +194 -0
- data/test/controllers/overrides/confirmations_controller_test.rb +8 -9
- data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +16 -12
- data/test/controllers/overrides/passwords_controller_test.rb +19 -15
- data/test/controllers/overrides/registrations_controller_test.rb +7 -7
- data/test/controllers/overrides/sessions_controller_test.rb +6 -6
- data/test/controllers/overrides/token_validations_controller_test.rb +7 -4
- data/test/dummy/app/controllers/auth_origin_controller.rb +2 -2
- data/test/dummy/app/controllers/custom/omniauth_callbacks_controller.rb +0 -2
- data/test/dummy/app/controllers/overrides/confirmations_controller.rb +11 -7
- data/test/dummy/app/controllers/overrides/passwords_controller.rb +10 -8
- data/test/dummy/app/controllers/overrides/sessions_controller.rb +1 -1
- data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +2 -2
- data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +2 -2
- data/test/dummy/db/migrate/20140829044006_add_operating_thetan_to_user.rb +1 -1
- data/test/dummy/db/migrate/20140916224624_add_favorite_color_to_mangs.rb +1 -1
- data/test/dummy/db/migrate/20140928231203_devise_token_auth_create_evil_users.rb +2 -1
- data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +1 -1
- data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +2 -1
- data/test/dummy/db/migrate/20150409095712_devise_token_auth_create_nice_users.rb +2 -1
- data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +2 -1
- data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +2 -1
- data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +2 -1
- data/test/dummy/db/schema.rb +157 -162
- data/test/dummy/tmp/generators/app/models/user.rb +1 -1
- data/test/dummy/tmp/generators/db/migrate/{20170517171822_devise_token_auth_create_users.rb → 20171014052631_devise_token_auth_create_users.rb} +2 -1
- data/test/lib/generators/devise_token_auth/install_generator_test.rb +5 -1
- data/test/models/user_test.rb +35 -1
- data/test/test_helper.rb +17 -11
- metadata +85 -80
@@ -13,24 +13,30 @@ class OmniauthTest < ActionDispatch::IntegrationTest
|
|
13
13
|
end
|
14
14
|
|
15
15
|
before do
|
16
|
-
@redirect_url =
|
16
|
+
@redirect_url = 'http://ng-token-auth.dev/'
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_parsed_data_json
|
20
|
+
encoded_json_data = @response.body.match(/var data \= JSON.parse\(decodeURIComponent\(\'(.+)\'\)\)\;/)[1]
|
21
|
+
JSON.parse(URI.unescape(encoded_json_data))
|
17
22
|
end
|
18
23
|
|
19
24
|
describe 'success callback' do
|
20
25
|
setup do
|
21
|
-
OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(
|
22
|
-
:
|
23
|
-
:
|
24
|
-
:
|
26
|
+
OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(
|
27
|
+
provider: 'facebook',
|
28
|
+
uid: '123545',
|
29
|
+
info: {
|
25
30
|
name: 'chong',
|
26
31
|
email: 'chongbong@aol.com'
|
27
32
|
}
|
28
|
-
|
33
|
+
)
|
29
34
|
end
|
30
35
|
|
31
36
|
test 'request should pass correct redirect_url' do
|
32
37
|
get_success
|
33
|
-
assert_equal @redirect_url,
|
38
|
+
assert_equal @redirect_url,
|
39
|
+
controller.send(:omniauth_params)['auth_origin_url']
|
34
40
|
end
|
35
41
|
|
36
42
|
test 'user should have been created' do
|
@@ -45,12 +51,14 @@ class OmniauthTest < ActionDispatch::IntegrationTest
|
|
45
51
|
|
46
52
|
test 'user should be assigned token' do
|
47
53
|
get_success
|
54
|
+
|
48
55
|
client_id = controller.auth_params[:client_id]
|
49
56
|
token = controller.auth_params[:auth_token]
|
50
57
|
expiry = controller.auth_params[:expiry]
|
51
58
|
|
52
59
|
# the expiry should have been set
|
53
|
-
assert_equal expiry, @resource.tokens[client_id][
|
60
|
+
assert_equal expiry, @resource.tokens[client_id]['expiry']
|
61
|
+
|
54
62
|
# the token sent down to the client should now be valid
|
55
63
|
assert @resource.valid_token?(token, client_id)
|
56
64
|
end
|
@@ -68,7 +76,8 @@ class OmniauthTest < ActionDispatch::IntegrationTest
|
|
68
76
|
|
69
77
|
test 'should be redirected via valid url' do
|
70
78
|
get_success
|
71
|
-
assert_equal 'http://www.example.com/auth/facebook/callback',
|
79
|
+
assert_equal 'http://www.example.com/auth/facebook/callback',
|
80
|
+
request.original_url
|
72
81
|
end
|
73
82
|
|
74
83
|
describe 'with default user model' do
|
@@ -86,17 +95,23 @@ class OmniauthTest < ActionDispatch::IntegrationTest
|
|
86
95
|
|
87
96
|
describe 'with alternate user model' do
|
88
97
|
before do
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
98
|
+
get '/mangs/facebook',
|
99
|
+
params: {
|
100
|
+
auth_origin_url: @redirect_url,
|
101
|
+
omniauth_window_type: 'newWindow'
|
102
|
+
}
|
103
|
+
|
104
|
+
follow_all_redirects!
|
105
|
+
|
93
106
|
assert_equal 200, response.status
|
94
107
|
@resource = assigns(:resource)
|
95
108
|
end
|
109
|
+
|
96
110
|
test 'request should determine the correct resource_class' do
|
97
111
|
assert_equal 'Mang', controller.send(:omniauth_params)['resource_class']
|
98
112
|
end
|
99
|
-
|
113
|
+
|
114
|
+
test 'user should be of the correct class' do
|
100
115
|
assert_equal Mang, @resource.class
|
101
116
|
end
|
102
117
|
end
|
@@ -104,13 +119,14 @@ class OmniauthTest < ActionDispatch::IntegrationTest
|
|
104
119
|
describe 'pass additional params' do
|
105
120
|
before do
|
106
121
|
@fav_color = 'alizarin crimson'
|
107
|
-
@unpermitted_param =
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
122
|
+
@unpermitted_param = 'M. Bison'
|
123
|
+
get '/auth/facebook',
|
124
|
+
params: { auth_origin_url: @redirect_url,
|
125
|
+
favorite_color: @fav_color,
|
126
|
+
name: @unpermitted_param,
|
127
|
+
omniauth_window_type: 'newWindow' }
|
128
|
+
|
129
|
+
follow_all_redirects!
|
114
130
|
|
115
131
|
@resource = assigns(:resource)
|
116
132
|
end
|
@@ -128,7 +144,7 @@ class OmniauthTest < ActionDispatch::IntegrationTest
|
|
128
144
|
end
|
129
145
|
end
|
130
146
|
|
131
|
-
describe
|
147
|
+
describe 'oauth registration attr' do
|
132
148
|
after do
|
133
149
|
User.any_instance.unstub(:new_record?)
|
134
150
|
end
|
@@ -139,11 +155,11 @@ class OmniauthTest < ActionDispatch::IntegrationTest
|
|
139
155
|
end
|
140
156
|
|
141
157
|
test 'response contains oauth_registration attr' do
|
158
|
+
get '/auth/facebook',
|
159
|
+
params: { auth_origin_url: @redirect_url,
|
160
|
+
omniauth_window_type: 'newWindow' }
|
142
161
|
|
143
|
-
|
144
|
-
auth_origin_url: @redirect_url,
|
145
|
-
omniauth_window_type: 'newWindow'
|
146
|
-
}
|
162
|
+
follow_all_redirects!
|
147
163
|
|
148
164
|
assert_equal true, controller.auth_params[:oauth_registration]
|
149
165
|
end
|
@@ -155,25 +171,24 @@ class OmniauthTest < ActionDispatch::IntegrationTest
|
|
155
171
|
end
|
156
172
|
|
157
173
|
test 'response does not contain oauth_registration attr' do
|
174
|
+
get '/auth/facebook',
|
175
|
+
params: { auth_origin_url: @redirect_url,
|
176
|
+
omniauth_window_type: 'newWindow' }
|
158
177
|
|
159
|
-
|
160
|
-
auth_origin_url: @redirect_url,
|
161
|
-
omniauth_window_type: 'newWindow'
|
162
|
-
}
|
178
|
+
follow_all_redirects!
|
163
179
|
|
164
180
|
assert_equal false, controller.auth_params.key?(:oauth_registration)
|
165
181
|
end
|
166
|
-
|
167
182
|
end
|
168
|
-
|
169
183
|
end
|
170
184
|
|
171
185
|
describe 'using namespaces' do
|
172
186
|
before do
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
187
|
+
get '/api/v1/auth/facebook',
|
188
|
+
params: { auth_origin_url: @redirect_url,
|
189
|
+
omniauth_window_type: 'newWindow' }
|
190
|
+
|
191
|
+
follow_all_redirects!
|
177
192
|
|
178
193
|
@resource = assigns(:resource)
|
179
194
|
end
|
@@ -196,7 +211,6 @@ class OmniauthTest < ActionDispatch::IntegrationTest
|
|
196
211
|
get_success(omniauth_window_type: 'inAppBrowser')
|
197
212
|
assert_expected_data_in_new_window
|
198
213
|
end
|
199
|
-
|
200
214
|
end
|
201
215
|
|
202
216
|
describe 'with omniauth_window_type=newWindow' do
|
@@ -207,19 +221,20 @@ class OmniauthTest < ActionDispatch::IntegrationTest
|
|
207
221
|
end
|
208
222
|
|
209
223
|
def assert_expected_data_in_new_window
|
210
|
-
|
211
|
-
data = ActiveSupport::JSON.decode(data_json)
|
224
|
+
data = get_parsed_data_json
|
212
225
|
expected_data = @resource.as_json.merge(controller.auth_params.as_json)
|
213
226
|
expected_data = ActiveSupport::JSON.decode(expected_data.to_json)
|
214
|
-
assert_equal(expected_data.merge(
|
227
|
+
assert_equal(expected_data.merge('message' => 'deliverCredentials'), data)
|
215
228
|
end
|
216
229
|
|
217
230
|
describe 'with omniauth_window_type=sameWindow' do
|
218
231
|
test 'redirects to auth_origin_url with all expected query params' do
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
232
|
+
get '/auth/facebook',
|
233
|
+
params: { auth_origin_url: '/auth_origin',
|
234
|
+
omniauth_window_type: 'sameWindow' }
|
235
|
+
|
236
|
+
follow_all_redirects!
|
237
|
+
|
223
238
|
assert_equal 200, response.status
|
224
239
|
|
225
240
|
# We have been forwarded to a url with all the expected
|
@@ -228,21 +243,26 @@ class OmniauthTest < ActionDispatch::IntegrationTest
|
|
228
243
|
# Assert that a uid was passed along. We have to assume
|
229
244
|
# that the rest of the values were as well, as we don't
|
230
245
|
# have access to @resource in this test anymore
|
231
|
-
assert(
|
246
|
+
assert(controller.params['uid'], 'No uid found')
|
232
247
|
|
233
248
|
# check that all the auth stuff is there
|
234
|
-
[
|
249
|
+
%i[auth_token client_id uid expiry config].each do |key|
|
235
250
|
assert(controller.params.key?(key), "No value for #{key.inspect}")
|
236
251
|
end
|
237
252
|
end
|
238
253
|
end
|
239
254
|
|
240
255
|
def get_success(params = {})
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
256
|
+
get '/auth/facebook',
|
257
|
+
params: {
|
258
|
+
auth_origin_url: @redirect_url,
|
259
|
+
omniauth_window_type: 'newWindow'
|
260
|
+
}.merge(params)
|
261
|
+
|
262
|
+
follow_all_redirects!
|
263
|
+
|
245
264
|
assert_equal 200, response.status
|
265
|
+
|
246
266
|
@resource = assigns(:resource)
|
247
267
|
end
|
248
268
|
end
|
@@ -250,38 +270,40 @@ class OmniauthTest < ActionDispatch::IntegrationTest
|
|
250
270
|
describe 'failure callback' do
|
251
271
|
setup do
|
252
272
|
OmniAuth.config.mock_auth[:facebook] = :invalid_credentials
|
253
|
-
OmniAuth.config.on_failure =
|
273
|
+
OmniAuth.config.on_failure = proc { |env|
|
254
274
|
OmniAuth::FailureEndpoint.new(env).redirect_to_failure
|
255
275
|
}
|
256
276
|
end
|
257
277
|
|
258
278
|
test 'renders expected data' do
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
279
|
+
get '/auth/facebook',
|
280
|
+
params: { auth_origin_url: @redirect_url,
|
281
|
+
omniauth_window_type: 'newWindow' }
|
282
|
+
|
283
|
+
follow_all_redirects!
|
284
|
+
|
263
285
|
assert_equal 200, response.status
|
264
286
|
|
265
|
-
|
266
|
-
data = ActiveSupport::JSON.decode(data_json)
|
287
|
+
data = get_parsed_data_json
|
267
288
|
|
268
|
-
assert_equal({
|
289
|
+
assert_equal({ 'error' => 'invalid_credentials', 'message' => 'authFailure' }, data)
|
269
290
|
end
|
270
291
|
|
271
292
|
test 'renders something with no auth_origin_url' do
|
272
|
-
|
293
|
+
get '/auth/facebook'
|
294
|
+
follow_all_redirects!
|
273
295
|
assert_equal 200, response.status
|
274
|
-
assert_select
|
296
|
+
assert_select 'body', 'invalid_credentials'
|
275
297
|
end
|
276
298
|
end
|
277
299
|
|
278
300
|
describe 'User with only :database_authenticatable and :registerable included' do
|
279
301
|
test 'OnlyEmailUser should not be able to use OAuth' do
|
280
|
-
assert_raises(ActionController::RoutingError)
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
302
|
+
assert_raises(ActionController::RoutingError) do
|
303
|
+
get '/only_email_auth/facebook',
|
304
|
+
params: { auth_origin_url: @redirect_url }
|
305
|
+
follow_all_redirects!
|
306
|
+
end
|
285
307
|
end
|
286
308
|
end
|
287
309
|
|
@@ -306,36 +328,40 @@ class OmniauthTest < ActionDispatch::IntegrationTest
|
|
306
328
|
end
|
307
329
|
|
308
330
|
test 'request using non-whitelisted redirect fail' do
|
309
|
-
|
310
|
-
|
311
|
-
|
331
|
+
get '/auth/facebook',
|
332
|
+
params: { auth_origin_url: @bad_redirect_url,
|
333
|
+
omniauth_window_type: 'newWindow' }
|
312
334
|
|
313
|
-
|
314
|
-
|
315
|
-
|
335
|
+
follow_all_redirects!
|
336
|
+
|
337
|
+
data = get_parsed_data_json
|
338
|
+
assert_equal "Redirect to '#{@bad_redirect_url}' not allowed.",
|
316
339
|
data['error']
|
317
340
|
end
|
318
341
|
|
319
342
|
test 'request to whitelisted redirect should succeed' do
|
320
|
-
|
321
|
-
|
322
|
-
|
343
|
+
get '/auth/facebook',
|
344
|
+
params: {
|
345
|
+
auth_origin_url: @good_redirect_url,
|
346
|
+
omniauth_window_type: 'newWindow'
|
347
|
+
}
|
323
348
|
|
324
|
-
|
325
|
-
|
349
|
+
follow_all_redirects!
|
350
|
+
|
351
|
+
data = get_parsed_data_json
|
326
352
|
assert_equal @user_email, data['email']
|
327
353
|
end
|
328
354
|
|
329
355
|
test 'should support wildcards' do
|
330
356
|
DeviseTokenAuth.redirect_whitelist = ["#{@good_redirect_url[0..8]}*"]
|
331
|
-
|
332
|
-
|
333
|
-
|
357
|
+
get '/auth/facebook',
|
358
|
+
params: { auth_origin_url: @good_redirect_url,
|
359
|
+
omniauth_window_type: 'newWindow' }
|
360
|
+
|
361
|
+
follow_all_redirects!
|
334
362
|
|
335
|
-
|
336
|
-
data = ActiveSupport::JSON.decode(data_json)
|
363
|
+
data = get_parsed_data_json
|
337
364
|
assert_equal @user_email, data['email']
|
338
365
|
end
|
339
|
-
|
340
366
|
end
|
341
367
|
end
|
@@ -8,7 +8,7 @@ require 'test_helper'
|
|
8
8
|
|
9
9
|
class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
10
10
|
describe DeviseTokenAuth::PasswordsController do
|
11
|
-
describe
|
11
|
+
describe 'Password reset' do
|
12
12
|
before do
|
13
13
|
@resource = users(:confirmed_email_user)
|
14
14
|
@redirect_url = 'http://ng-token-auth.dev'
|
@@ -19,18 +19,19 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
19
19
|
@auth_headers = @resource.create_new_auth_token
|
20
20
|
@new_password = Faker::Internet.password
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
}
|
22
|
+
post :create,
|
23
|
+
params: { redirect_url: @redirect_url }
|
25
24
|
@data = JSON.parse(response.body)
|
26
25
|
end
|
27
26
|
|
28
27
|
test 'response should fail' do
|
29
28
|
assert_equal 401, response.status
|
30
29
|
end
|
30
|
+
|
31
31
|
test 'error message should be returned' do
|
32
|
-
assert @data[
|
33
|
-
assert_equal @data[
|
32
|
+
assert @data['errors']
|
33
|
+
assert_equal @data['errors'],
|
34
|
+
[I18n.t('devise_token_auth.passwords.missing_email')]
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
@@ -39,62 +40,62 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
39
40
|
@auth_headers = @resource.create_new_auth_token
|
40
41
|
@new_password = Faker::Internet.password
|
41
42
|
|
42
|
-
|
43
|
-
|
44
|
-
}
|
43
|
+
post :create,
|
44
|
+
params: { email: 'chester@cheet.ah' }
|
45
45
|
@data = JSON.parse(response.body)
|
46
46
|
end
|
47
47
|
|
48
48
|
test 'response should fail' do
|
49
49
|
assert_equal 401, response.status
|
50
50
|
end
|
51
|
+
|
51
52
|
test 'error message should be returned' do
|
52
|
-
assert @data[
|
53
|
-
assert_equal @data[
|
53
|
+
assert @data['errors']
|
54
|
+
assert_equal @data['errors'],
|
55
|
+
[I18n.t('devise_token_auth.passwords.missing_redirect_url')]
|
54
56
|
end
|
55
57
|
end
|
56
58
|
|
57
59
|
describe 'request password reset' do
|
58
60
|
describe 'unknown user should return 404' do
|
59
61
|
before do
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
}
|
62
|
+
post :create,
|
63
|
+
params: { email: 'chester@cheet.ah',
|
64
|
+
redirect_url: @redirect_url }
|
64
65
|
@data = JSON.parse(response.body)
|
65
66
|
end
|
67
|
+
|
66
68
|
test 'unknown user should return 404' do
|
67
69
|
assert_equal 404, response.status
|
68
70
|
end
|
69
71
|
|
70
72
|
test 'errors should be returned' do
|
71
|
-
assert @data[
|
72
|
-
assert_equal @data[
|
73
|
+
assert @data['errors']
|
74
|
+
assert_equal @data['errors'],
|
75
|
+
[I18n.t('devise_token_auth.passwords.user_not_found',
|
76
|
+
email: 'chester@cheet.ah')]
|
73
77
|
end
|
74
78
|
end
|
75
79
|
|
76
80
|
describe 'successfully requested password reset' do
|
77
81
|
before do
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
}
|
82
|
+
post :create,
|
83
|
+
params: { email: @resource.email,
|
84
|
+
redirect_url: @redirect_url }
|
82
85
|
|
83
86
|
@data = JSON.parse(response.body)
|
84
87
|
end
|
85
88
|
|
86
89
|
test 'response should not contain extra data' do
|
87
|
-
assert_nil @data[
|
90
|
+
assert_nil @data['data']
|
88
91
|
end
|
89
92
|
end
|
90
93
|
|
91
|
-
|
92
94
|
describe 'case-sensitive email' do
|
93
95
|
before do
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
}
|
96
|
+
post :create,
|
97
|
+
params: { email: @resource.email,
|
98
|
+
redirect_url: @redirect_url }
|
98
99
|
|
99
100
|
@mail = ActionMailer::Base.deliveries.last
|
100
101
|
@resource.reload
|
@@ -110,7 +111,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
110
111
|
end
|
111
112
|
|
112
113
|
test 'response should contains message' do
|
113
|
-
assert_equal @data[
|
114
|
+
assert_equal @data['message'], I18n.t('devise_token_auth.passwords.sended', email: @resource.email)
|
114
115
|
end
|
115
116
|
|
116
117
|
test 'action should send an email' do
|
@@ -130,41 +131,39 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
130
131
|
end
|
131
132
|
|
132
133
|
test 'the email body should contain a link with reset token as a query param' do
|
133
|
-
user = User.reset_password_by_token(
|
134
|
-
reset_password_token: @mail_reset_token
|
135
|
-
})
|
134
|
+
user = User.reset_password_by_token(reset_password_token: @mail_reset_token)
|
136
135
|
|
137
136
|
assert_equal user.id, @resource.id
|
138
137
|
end
|
139
138
|
|
140
139
|
describe 'password reset link failure' do
|
141
140
|
test 'response should return 404' do
|
142
|
-
assert_raises(ActionController::RoutingError)
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
}
|
141
|
+
assert_raises(ActionController::RoutingError) do
|
142
|
+
get :edit,
|
143
|
+
params: { reset_password_token: 'bogus',
|
144
|
+
redirect_url: @mail_redirect_url }
|
145
|
+
end
|
148
146
|
end
|
149
147
|
end
|
150
148
|
|
151
149
|
describe 'password reset link success' do
|
152
150
|
before do
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
}
|
151
|
+
get :edit,
|
152
|
+
params: { reset_password_token: @mail_reset_token,
|
153
|
+
redirect_url: @mail_redirect_url }
|
157
154
|
|
158
155
|
@resource.reload
|
159
156
|
|
160
157
|
raw_qs = response.location.split('?')[1]
|
161
158
|
@qs = Rack::Utils.parse_nested_query(raw_qs)
|
162
159
|
|
163
|
-
@
|
164
|
-
@
|
165
|
-
@
|
166
|
-
@
|
167
|
-
@
|
160
|
+
@access_token = @qs['access-token']
|
161
|
+
@client_id = @qs['client_id']
|
162
|
+
@client = @qs['client']
|
163
|
+
@expiry = @qs['expiry']
|
164
|
+
@reset_password = @qs['reset_password']
|
165
|
+
@token = @qs['token']
|
166
|
+
@uid = @qs['uid']
|
168
167
|
end
|
169
168
|
|
170
169
|
test 'respones should have success redirect status' do
|
@@ -172,6 +171,8 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
172
171
|
end
|
173
172
|
|
174
173
|
test 'response should contain auth params' do
|
174
|
+
assert @access_token
|
175
|
+
assert @client
|
175
176
|
assert @client_id
|
176
177
|
assert @expiry
|
177
178
|
assert @reset_password
|
@@ -181,9 +182,9 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
181
182
|
|
182
183
|
test 'response auth params should be valid' do
|
183
184
|
assert @resource.valid_token?(@token, @client_id)
|
185
|
+
assert @resource.valid_token?(@access_token, @client)
|
184
186
|
end
|
185
187
|
end
|
186
|
-
|
187
188
|
end
|
188
189
|
|
189
190
|
describe 'case-insensitive email' do
|
@@ -197,13 +198,13 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
197
198
|
|
198
199
|
test 'response should return success status if configured' do
|
199
200
|
@resource_class.case_insensitive_keys = [:email]
|
200
|
-
|
201
|
+
post :create, params: @request_params
|
201
202
|
assert_equal 200, response.status
|
202
203
|
end
|
203
204
|
|
204
205
|
test 'response should return failure status if not configured' do
|
205
206
|
@resource_class.case_insensitive_keys = []
|
206
|
-
|
207
|
+
post :create, params: @request_params
|
207
208
|
assert_equal 404, response.status
|
208
209
|
end
|
209
210
|
end
|
@@ -216,10 +217,9 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
216
217
|
|
217
218
|
DeviseTokenAuth.default_password_reset_url = @redirect_url
|
218
219
|
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
}
|
220
|
+
post :create,
|
221
|
+
params: { email: @resource.email,
|
222
|
+
redirect_url: @redirect_url }
|
223
223
|
|
224
224
|
@mail = ActionMailer::Base.deliveries.last
|
225
225
|
@resource.reload
|
@@ -256,36 +256,35 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
256
256
|
DeviseTokenAuth.redirect_whitelist = nil
|
257
257
|
end
|
258
258
|
|
259
|
-
test
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
}
|
259
|
+
test 'request to whitelisted redirect should be successful' do
|
260
|
+
post :create,
|
261
|
+
params: { email: @resource.email,
|
262
|
+
redirect_url: @good_redirect_url }
|
264
263
|
|
265
264
|
assert_equal 200, response.status
|
266
265
|
end
|
267
266
|
|
268
|
-
test
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
}
|
267
|
+
test 'request to non-whitelisted redirect should fail' do
|
268
|
+
post :create,
|
269
|
+
params: { email: @resource.email,
|
270
|
+
redirect_url: @bad_redirect_url }
|
273
271
|
|
274
272
|
assert_equal 422, response.status
|
275
273
|
end
|
276
|
-
test
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
}
|
274
|
+
test 'request to non-whitelisted redirect should return error message' do
|
275
|
+
post :create,
|
276
|
+
params: { email: @resource.email,
|
277
|
+
redirect_url: @bad_redirect_url }
|
281
278
|
|
282
279
|
@data = JSON.parse(response.body)
|
283
|
-
assert @data[
|
284
|
-
assert_equal @data[
|
280
|
+
assert @data['errors']
|
281
|
+
assert_equal @data['errors'],
|
282
|
+
[I18n.t('devise_token_auth.passwords.not_allowed_redirect_url',
|
283
|
+
redirect_url: @bad_redirect_url)]
|
285
284
|
end
|
286
285
|
end
|
287
286
|
|
288
|
-
describe
|
287
|
+
describe 'change password with current password required' do
|
289
288
|
before do
|
290
289
|
DeviseTokenAuth.check_current_password_before_update = :password
|
291
290
|
end
|
@@ -301,56 +300,59 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
301
300
|
@new_password = Faker::Internet.password
|
302
301
|
@resource.update password: 'secret123', password_confirmation: 'secret123'
|
303
302
|
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
}
|
303
|
+
put :update,
|
304
|
+
params: { password: @new_password,
|
305
|
+
password_confirmation: @new_password,
|
306
|
+
current_password: 'secret123' }
|
309
307
|
|
310
308
|
@data = JSON.parse(response.body)
|
311
309
|
@resource.reload
|
312
310
|
end
|
313
311
|
|
314
|
-
test
|
312
|
+
test 'request should be successful' do
|
315
313
|
assert_equal 200, response.status
|
316
314
|
end
|
317
315
|
end
|
318
316
|
|
319
317
|
describe 'success with after password reset' do
|
320
318
|
before do
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
}
|
319
|
+
# create a new password reset request
|
320
|
+
post :create, params: { email: @resource.email,
|
321
|
+
redirect_url: @redirect_url }
|
325
322
|
|
326
323
|
@mail = ActionMailer::Base.deliveries.last
|
327
324
|
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
328
325
|
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
329
326
|
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
327
|
+
# confirm via password reset email link
|
328
|
+
get :edit, params: { reset_password_token: @mail_reset_token,
|
329
|
+
redirect_url: @mail_redirect_url }
|
330
|
+
|
331
|
+
@resource.reload
|
332
|
+
@allow_password_change_after_reset = @resource.allow_password_change
|
334
333
|
|
335
334
|
@auth_headers = @resource.create_new_auth_token
|
336
335
|
request.headers.merge!(@auth_headers)
|
337
336
|
@new_password = Faker::Internet.password
|
338
337
|
|
339
|
-
|
340
|
-
|
341
|
-
password_confirmation: @new_password
|
342
|
-
}
|
338
|
+
put :update, params: { password: @new_password,
|
339
|
+
password_confirmation: @new_password }
|
343
340
|
|
344
341
|
@data = JSON.parse(response.body)
|
342
|
+
@resource.reload
|
345
343
|
@allow_password_change = @resource.allow_password_change
|
346
344
|
@resource.reload
|
347
345
|
end
|
348
346
|
|
349
|
-
test
|
347
|
+
test 'request should be successful' do
|
350
348
|
assert_equal 200, response.status
|
351
349
|
end
|
352
350
|
|
353
|
-
test
|
351
|
+
test 'changes allow_password_change to true on reset' do
|
352
|
+
assert_equal true, @allow_password_change_after_reset
|
353
|
+
end
|
354
|
+
|
355
|
+
test 'sets allow_password_change false' do
|
354
356
|
assert_equal false, @allow_password_change
|
355
357
|
end
|
356
358
|
end
|
@@ -361,11 +363,9 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
361
363
|
request.headers.merge!(@auth_headers)
|
362
364
|
@new_password = Faker::Internet.password
|
363
365
|
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
current_password: 'not_very_secret321'
|
368
|
-
}
|
366
|
+
put :update, params: { password: @new_password,
|
367
|
+
password_confirmation: @new_password,
|
368
|
+
current_password: 'not_very_secret321' }
|
369
369
|
end
|
370
370
|
|
371
371
|
test 'response should fail unauthorized' do
|
@@ -374,32 +374,31 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
374
374
|
end
|
375
375
|
end
|
376
376
|
|
377
|
-
describe
|
377
|
+
describe 'change password' do
|
378
378
|
describe 'success' do
|
379
379
|
before do
|
380
380
|
@auth_headers = @resource.create_new_auth_token
|
381
381
|
request.headers.merge!(@auth_headers)
|
382
382
|
@new_password = Faker::Internet.password
|
383
383
|
|
384
|
-
|
385
|
-
|
386
|
-
password_confirmation: @new_password
|
387
|
-
}
|
384
|
+
put :update, params: { password: @new_password,
|
385
|
+
password_confirmation: @new_password }
|
388
386
|
|
389
387
|
@data = JSON.parse(response.body)
|
390
388
|
@resource.reload
|
391
389
|
end
|
392
390
|
|
393
|
-
test
|
391
|
+
test 'request should be successful' do
|
394
392
|
assert_equal 200, response.status
|
395
393
|
end
|
396
394
|
|
397
|
-
test
|
398
|
-
assert @data[
|
399
|
-
assert_equal @data[
|
395
|
+
test 'request should return success message' do
|
396
|
+
assert @data['message']
|
397
|
+
assert_equal @data['message'],
|
398
|
+
I18n.t('devise_token_auth.passwords.successfully_updated')
|
400
399
|
end
|
401
400
|
|
402
|
-
test
|
401
|
+
test 'new password should authenticate user' do
|
403
402
|
assert @resource.valid_password?(@new_password)
|
404
403
|
end
|
405
404
|
end
|
@@ -410,10 +409,8 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
410
409
|
request.headers.merge!(@auth_headers)
|
411
410
|
@new_password = Faker::Internet.password
|
412
411
|
|
413
|
-
|
414
|
-
|
415
|
-
password_confirmation: 'bong'
|
416
|
-
}
|
412
|
+
put :update, params: { password: 'chong',
|
413
|
+
password_confirmation: 'bong' }
|
417
414
|
end
|
418
415
|
|
419
416
|
test 'response should fail' do
|
@@ -426,10 +423,8 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
426
423
|
@auth_headers = @resource.create_new_auth_token
|
427
424
|
@new_password = Faker::Internet.password
|
428
425
|
|
429
|
-
|
430
|
-
|
431
|
-
password_confirmation: @new_password
|
432
|
-
}
|
426
|
+
put :update, params: { password: @new_password,
|
427
|
+
password_confirmation: @new_password }
|
433
428
|
end
|
434
429
|
|
435
430
|
test 'response should fail' do
|
@@ -439,7 +434,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
439
434
|
end
|
440
435
|
end
|
441
436
|
|
442
|
-
describe
|
437
|
+
describe 'Alternate user class' do
|
443
438
|
setup do
|
444
439
|
@request.env['devise.mapping'] = Devise.mappings[:mang]
|
445
440
|
end
|
@@ -452,10 +447,8 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
452
447
|
@resource = mangs(:confirmed_email_user)
|
453
448
|
@redirect_url = 'http://ng-token-auth.dev'
|
454
449
|
|
455
|
-
|
456
|
-
|
457
|
-
redirect_url: @redirect_url
|
458
|
-
}
|
450
|
+
post :create, params: { email: @resource.email,
|
451
|
+
redirect_url: @redirect_url }
|
459
452
|
|
460
453
|
@mail = ActionMailer::Base.deliveries.last
|
461
454
|
@resource.reload
|
@@ -470,9 +463,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
470
463
|
end
|
471
464
|
|
472
465
|
test 'the email body should contain a link with reset token as a query param' do
|
473
|
-
user = Mang.reset_password_by_token(
|
474
|
-
reset_password_token: @mail_reset_token
|
475
|
-
})
|
466
|
+
user = Mang.reset_password_by_token(reset_password_token: @mail_reset_token)
|
476
467
|
|
477
468
|
assert_equal user.id, @resource.id
|
478
469
|
end
|
@@ -483,10 +474,8 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
483
474
|
@resource = users(:unconfirmed_email_user)
|
484
475
|
@redirect_url = 'http://ng-token-auth.dev'
|
485
476
|
|
486
|
-
|
487
|
-
|
488
|
-
redirect_url: @redirect_url
|
489
|
-
}
|
477
|
+
post :create, params: { email: @resource.email,
|
478
|
+
redirect_url: @redirect_url }
|
490
479
|
|
491
480
|
@mail = ActionMailer::Base.deliveries.last
|
492
481
|
@resource.reload
|
@@ -495,14 +484,13 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
495
484
|
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
496
485
|
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
497
486
|
|
498
|
-
|
499
|
-
|
500
|
-
redirect_url: @mail_redirect_url
|
501
|
-
}
|
487
|
+
get :edit, params: { reset_password_token: @mail_reset_token,
|
488
|
+
redirect_url: @mail_redirect_url }
|
502
489
|
|
503
490
|
@resource.reload
|
504
491
|
end
|
505
492
|
end
|
493
|
+
|
506
494
|
describe 'unconfirmable user' do
|
507
495
|
setup do
|
508
496
|
@request.env['devise.mapping'] = Devise.mappings[:unconfirmable_user]
|
@@ -516,10 +504,8 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
516
504
|
@resource = unconfirmable_users(:user)
|
517
505
|
@redirect_url = 'http://ng-token-auth.dev'
|
518
506
|
|
519
|
-
|
520
|
-
|
521
|
-
redirect_url: @redirect_url
|
522
|
-
}
|
507
|
+
post :create, params: { email: @resource.email,
|
508
|
+
redirect_url: @redirect_url }
|
523
509
|
|
524
510
|
@mail = ActionMailer::Base.deliveries.last
|
525
511
|
@resource.reload
|
@@ -528,10 +514,8 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
528
514
|
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
529
515
|
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
530
516
|
|
531
|
-
|
532
|
-
|
533
|
-
redirect_url: @mail_redirect_url
|
534
|
-
}
|
517
|
+
get :edit, params: { reset_password_token: @mail_reset_token,
|
518
|
+
redirect_url: @mail_redirect_url }
|
535
519
|
|
536
520
|
@resource.reload
|
537
521
|
end
|
@@ -539,15 +523,13 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
539
523
|
|
540
524
|
describe 'alternate user type' do
|
541
525
|
before do
|
542
|
-
@resource
|
526
|
+
@resource = users(:confirmed_email_user)
|
543
527
|
@redirect_url = 'http://ng-token-auth.dev'
|
544
|
-
@config_name =
|
528
|
+
@config_name = 'altUser'
|
545
529
|
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
config_name: @config_name
|
550
|
-
}
|
530
|
+
post :create, params: { email: @resource.email,
|
531
|
+
redirect_url: @redirect_url,
|
532
|
+
config_name: @config_name }
|
551
533
|
|
552
534
|
@mail = ActionMailer::Base.deliveries.last
|
553
535
|
@resource.reload
|