devise_token_auth 0.1.43 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +42 -895
- data/Rakefile +11 -4
- data/app/controllers/devise_token_auth/application_controller.rb +19 -8
- data/app/controllers/devise_token_auth/concerns/resource_finder.rb +26 -12
- data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +106 -85
- data/app/controllers/devise_token_auth/confirmations_controller.rb +73 -17
- data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +95 -51
- data/app/controllers/devise_token_auth/passwords_controller.rb +65 -57
- data/app/controllers/devise_token_auth/registrations_controller.rb +61 -61
- data/app/controllers/devise_token_auth/sessions_controller.rb +22 -18
- data/app/controllers/devise_token_auth/token_validations_controller.rb +5 -3
- data/app/controllers/devise_token_auth/unlocks_controller.rb +20 -16
- data/app/models/devise_token_auth/concerns/active_record_support.rb +14 -0
- data/app/models/devise_token_auth/concerns/confirmable_support.rb +28 -0
- data/app/models/devise_token_auth/concerns/mongoid_support.rb +19 -0
- data/app/models/devise_token_auth/concerns/tokens_serialization.rb +31 -0
- data/app/models/devise_token_auth/concerns/user.rb +92 -100
- data/app/models/devise_token_auth/concerns/user_omniauth_callbacks.rb +8 -3
- data/app/validators/{email_validator.rb → devise_token_auth_email_validator.rb} +5 -3
- data/app/views/devise_token_auth/omniauth_external_window.html.erb +1 -1
- data/config/locales/da-DK.yml +11 -9
- data/config/locales/de.yml +2 -0
- data/config/locales/en.yml +10 -0
- data/config/locales/es.yml +2 -0
- data/config/locales/fr.yml +2 -0
- data/config/locales/he.yml +52 -0
- data/config/locales/it.yml +2 -0
- data/config/locales/ja.yml +4 -2
- data/config/locales/ko.yml +51 -0
- data/config/locales/nl.yml +2 -0
- data/config/locales/pl.yml +6 -3
- data/config/locales/pt-BR.yml +2 -0
- data/config/locales/pt.yml +6 -3
- data/config/locales/ro.yml +2 -0
- data/config/locales/ru.yml +2 -0
- data/config/locales/sq.yml +2 -0
- data/config/locales/sv.yml +52 -0
- data/config/locales/uk.yml +2 -0
- data/config/locales/vi.yml +2 -0
- data/config/locales/zh-CN.yml +2 -0
- data/config/locales/zh-HK.yml +2 -0
- data/config/locales/zh-TW.yml +2 -0
- data/lib/devise_token_auth/blacklist.rb +6 -0
- data/lib/devise_token_auth/controllers/helpers.rb +21 -13
- data/lib/devise_token_auth/controllers/url_helpers.rb +2 -0
- data/lib/devise_token_auth/engine.rb +26 -14
- data/lib/devise_token_auth/errors.rb +8 -0
- data/lib/devise_token_auth/rails/routes.rb +37 -30
- data/lib/devise_token_auth/token_factory.rb +126 -0
- data/lib/devise_token_auth/url.rb +11 -4
- data/lib/devise_token_auth/version.rb +3 -1
- data/lib/devise_token_auth.rb +11 -5
- data/lib/generators/devise_token_auth/USAGE +2 -2
- data/lib/generators/devise_token_auth/install_generator.rb +36 -105
- data/lib/generators/devise_token_auth/install_generator_helpers.rb +98 -0
- data/lib/generators/devise_token_auth/install_mongoid_generator.rb +46 -0
- data/lib/generators/devise_token_auth/install_views_generator.rb +7 -5
- data/lib/generators/devise_token_auth/templates/devise_token_auth.rb +12 -0
- data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +8 -14
- data/lib/generators/devise_token_auth/templates/user.rb.erb +9 -0
- data/lib/generators/devise_token_auth/templates/user_mongoid.rb.erb +56 -0
- data/lib/tasks/devise_token_auth_tasks.rake +2 -0
- data/test/controllers/custom/custom_confirmations_controller_test.rb +5 -1
- data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +4 -0
- data/test/controllers/custom/custom_passwords_controller_test.rb +6 -2
- data/test/controllers/custom/custom_registrations_controller_test.rb +17 -8
- data/test/controllers/custom/custom_sessions_controller_test.rb +7 -5
- data/test/controllers/custom/custom_token_validations_controller_test.rb +5 -3
- data/test/controllers/demo_group_controller_test.rb +4 -6
- data/test/controllers/demo_mang_controller_test.rb +3 -3
- data/test/controllers/demo_user_controller_test.rb +53 -25
- data/test/controllers/devise_token_auth/confirmations_controller_test.rb +159 -25
- data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +117 -47
- data/test/controllers/devise_token_auth/passwords_controller_test.rb +309 -126
- data/test/controllers/devise_token_auth/registrations_controller_test.rb +65 -23
- data/test/controllers/devise_token_auth/sessions_controller_test.rb +93 -61
- data/test/controllers/devise_token_auth/token_validations_controller_test.rb +18 -6
- data/test/controllers/devise_token_auth/unlocks_controller_test.rb +24 -5
- data/test/controllers/overrides/confirmations_controller_test.rb +6 -2
- data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +5 -1
- data/test/controllers/overrides/passwords_controller_test.rb +27 -29
- data/test/controllers/overrides/registrations_controller_test.rb +33 -27
- data/test/controllers/overrides/sessions_controller_test.rb +6 -4
- data/test/controllers/overrides/token_validations_controller_test.rb +5 -3
- data/test/dummy/app/active_record/confirmable_user.rb +11 -0
- data/test/dummy/app/{models → active_record}/lockable_user.rb +2 -0
- data/test/dummy/app/{models → active_record}/mang.rb +2 -0
- data/test/dummy/app/{models → active_record}/only_email_user.rb +2 -0
- data/test/dummy/app/{models → active_record}/scoped_user.rb +4 -2
- data/test/dummy/app/{models → active_record}/unconfirmable_user.rb +3 -2
- data/test/dummy/app/active_record/unregisterable_user.rb +9 -0
- data/test/dummy/app/active_record/user.rb +6 -0
- data/test/dummy/app/controllers/application_controller.rb +2 -0
- data/test/dummy/app/controllers/auth_origin_controller.rb +2 -0
- data/test/dummy/app/controllers/custom/confirmations_controller.rb +2 -2
- data/test/dummy/app/controllers/custom/omniauth_callbacks_controller.rb +2 -0
- data/test/dummy/app/controllers/custom/passwords_controller.rb +3 -4
- data/test/dummy/app/controllers/custom/registrations_controller.rb +3 -3
- data/test/dummy/app/controllers/custom/sessions_controller.rb +3 -3
- data/test/dummy/app/controllers/custom/token_validations_controller.rb +3 -3
- data/test/dummy/app/controllers/demo_group_controller.rb +2 -0
- data/test/dummy/app/controllers/demo_mang_controller.rb +2 -0
- data/test/dummy/app/controllers/demo_user_controller.rb +2 -0
- data/test/dummy/app/controllers/overrides/confirmations_controller.rb +8 -6
- data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +5 -3
- data/test/dummy/app/controllers/overrides/passwords_controller.rb +10 -8
- data/test/dummy/app/controllers/overrides/registrations_controller.rb +5 -3
- data/test/dummy/app/controllers/overrides/sessions_controller.rb +12 -12
- data/test/dummy/app/controllers/overrides/token_validations_controller.rb +5 -5
- data/test/dummy/app/helpers/application_helper.rb +1029 -1036
- data/test/dummy/app/models/{user.rb → concerns/favorite_color.rb} +8 -7
- data/test/dummy/app/mongoid/confirmable_user.rb +52 -0
- data/test/dummy/app/mongoid/lockable_user.rb +38 -0
- data/test/dummy/app/mongoid/mang.rb +46 -0
- data/test/dummy/app/mongoid/only_email_user.rb +33 -0
- data/test/dummy/app/mongoid/scoped_user.rb +50 -0
- data/test/dummy/app/mongoid/unconfirmable_user.rb +44 -0
- data/test/dummy/app/mongoid/unregisterable_user.rb +47 -0
- data/test/dummy/app/mongoid/user.rb +49 -0
- data/test/dummy/app/views/layouts/application.html.erb +0 -2
- data/test/dummy/config/application.rb +26 -3
- data/test/dummy/config/boot.rb +8 -2
- data/test/dummy/config/environment.rb +3 -1
- data/test/dummy/config/environments/development.rb +5 -13
- data/test/dummy/config/environments/production.rb +2 -16
- data/test/dummy/config/environments/test.rb +3 -1
- data/test/dummy/config/initializers/backtrace_silencers.rb +2 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -1
- data/test/dummy/config/initializers/devise.rb +287 -0
- data/test/dummy/config/initializers/devise_token_auth.rb +37 -4
- data/test/dummy/config/initializers/figaro.rb +3 -1
- data/test/dummy/config/initializers/filter_parameter_logging.rb +2 -0
- data/test/dummy/config/initializers/inflections.rb +2 -0
- data/test/dummy/config/initializers/mime_types.rb +2 -0
- data/test/dummy/config/initializers/omniauth.rb +5 -2
- data/test/dummy/config/initializers/session_store.rb +2 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +2 -0
- data/test/dummy/config/routes.rb +14 -29
- data/test/dummy/config/spring.rb +2 -0
- data/test/dummy/config.ru +5 -3
- data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +9 -14
- data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +8 -13
- data/test/dummy/db/migrate/20140829044006_add_operating_thetan_to_user.rb +2 -0
- data/test/dummy/db/migrate/20140916224624_add_favorite_color_to_mangs.rb +2 -0
- data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +6 -11
- data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +8 -13
- data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +8 -13
- data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +8 -13
- data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +8 -13
- data/test/dummy/{tmp/generators/db/migrate/20171014052631_devise_token_auth_create_users.rb → db/migrate/20190924101113_devise_token_auth_create_confirmable_users.rb} +8 -14
- data/test/dummy/db/schema.rb +11 -71
- data/test/dummy/lib/migration_database_helper.rb +15 -1
- data/test/dummy/tmp/generators/app/controllers/application_controller.rb +6 -0
- data/test/dummy/tmp/generators/app/models/azpire/v1/human_resource/user.rb +56 -0
- data/test/dummy/tmp/generators/config/initializers/devise_token_auth.rb +12 -0
- data/test/factories/users.rb +41 -0
- data/test/lib/devise_token_auth/blacklist_test.rb +19 -0
- data/test/lib/devise_token_auth/rails/custom_routes_test.rb +29 -0
- data/test/lib/devise_token_auth/rails/routes_test.rb +87 -0
- data/test/lib/devise_token_auth/token_factory_test.rb +191 -0
- data/test/lib/devise_token_auth/url_test.rb +9 -7
- data/test/lib/generators/devise_token_auth/install_generator_test.rb +67 -37
- data/test/lib/generators/devise_token_auth/install_generator_with_namespace_test.rb +222 -0
- data/test/lib/generators/devise_token_auth/install_views_generator_test.rb +3 -1
- data/test/models/concerns/mongoid_support_test.rb +31 -0
- data/test/models/concerns/tokens_serialization_test.rb +104 -0
- data/test/models/confirmable_user_test.rb +35 -0
- data/test/models/only_email_user_test.rb +2 -8
- data/test/models/user_test.rb +18 -79
- data/test/support/controllers/routes.rb +43 -0
- data/test/test_helper.rb +83 -26
- metadata +153 -44
- data/config/initializers/devise.rb +0 -196
- data/lib/generators/devise_token_auth/templates/user.rb +0 -7
- data/test/dummy/app/models/evil_user.rb +0 -3
- data/test/dummy/app/models/nice_user.rb +0 -7
- data/test/dummy/app/models/unregisterable_user.rb +0 -7
- data/test/dummy/config/initializers/assets.rb +0 -8
- data/test/dummy/db/migrate/20140928231203_devise_token_auth_create_evil_users.rb +0 -64
- data/test/dummy/db/migrate/20150409095712_devise_token_auth_create_nice_users.rb +0 -61
- data/test/dummy/tmp/generators/app/models/user.rb +0 -11
- data/test/integration/navigation_test.rb +0 -10
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
# was the web request successful?
|
@@ -10,7 +12,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
10
12
|
describe DeviseTokenAuth::PasswordsController do
|
11
13
|
describe 'Password reset' do
|
12
14
|
before do
|
13
|
-
@resource =
|
15
|
+
@resource = create(:user, :confirmed)
|
14
16
|
@redirect_url = 'http://ng-token-auth.dev'
|
15
17
|
end
|
16
18
|
|
@@ -39,55 +41,133 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
39
41
|
before do
|
40
42
|
@auth_headers = @resource.create_new_auth_token
|
41
43
|
@new_password = Faker::Internet.password
|
42
|
-
|
43
|
-
post :create,
|
44
|
-
params: { email: 'chester@cheet.ah' }
|
45
|
-
@data = JSON.parse(response.body)
|
46
44
|
end
|
47
45
|
|
48
|
-
|
49
|
-
|
50
|
-
|
46
|
+
describe 'for create' do
|
47
|
+
before do
|
48
|
+
post :create,
|
49
|
+
params: { email: 'chester@cheet.ah' }
|
50
|
+
@data = JSON.parse(response.body)
|
51
|
+
end
|
51
52
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
53
|
+
test 'response should fail' do
|
54
|
+
assert_equal 401, response.status
|
55
|
+
end
|
56
|
+
|
57
|
+
test 'error message should be returned' do
|
58
|
+
assert @data['errors']
|
59
|
+
assert_equal(
|
60
|
+
@data['errors'],
|
61
|
+
[I18n.t('devise_token_auth.passwords.missing_redirect_url')]
|
62
|
+
)
|
63
|
+
end
|
56
64
|
end
|
57
|
-
end
|
58
65
|
|
59
|
-
|
60
|
-
describe 'unknown user should return 404' do
|
66
|
+
describe 'for edit' do
|
61
67
|
before do
|
62
|
-
|
63
|
-
|
64
|
-
redirect_url: @redirect_url }
|
68
|
+
get_reset_token
|
69
|
+
get :edit, params: { reset_password_token: @mail_reset_token}
|
65
70
|
@data = JSON.parse(response.body)
|
66
71
|
end
|
67
72
|
|
68
|
-
test '
|
69
|
-
assert_equal
|
73
|
+
test 'response should fail' do
|
74
|
+
assert_equal 401, response.status
|
70
75
|
end
|
71
76
|
|
72
|
-
test '
|
77
|
+
test 'error message should be returned' do
|
73
78
|
assert @data['errors']
|
74
|
-
assert_equal
|
75
|
-
|
76
|
-
|
79
|
+
assert_equal(
|
80
|
+
@data['errors'],
|
81
|
+
[I18n.t('devise_token_auth.passwords.missing_redirect_url')]
|
82
|
+
)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe 'request password reset' do
|
88
|
+
describe 'unknown user' do
|
89
|
+
describe 'without paranoid mode' do
|
90
|
+
before do
|
91
|
+
post :create,
|
92
|
+
params: { email: 'chester@cheet.ah',
|
93
|
+
redirect_url: @redirect_url }
|
94
|
+
@data = JSON.parse(response.body)
|
95
|
+
end
|
96
|
+
|
97
|
+
test 'unknown user should return 404' do
|
98
|
+
assert_equal 404, response.status
|
99
|
+
end
|
100
|
+
|
101
|
+
test 'errors should be returned' do
|
102
|
+
assert @data['errors']
|
103
|
+
assert_equal @data['errors'],
|
104
|
+
[I18n.t('devise_token_auth.passwords.user_not_found',
|
105
|
+
email: 'chester@cheet.ah')]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe 'with paranoid mode' do
|
110
|
+
before do
|
111
|
+
swap Devise, paranoid: true do
|
112
|
+
post :create,
|
113
|
+
params: { email: 'chester@cheet.ah',
|
114
|
+
redirect_url: @redirect_url }
|
115
|
+
@data = JSON.parse(response.body)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
test 'unknown user should return 404' do
|
120
|
+
assert_equal 404, response.status
|
121
|
+
end
|
122
|
+
|
123
|
+
test 'errors should be returned' do
|
124
|
+
assert @data['errors']
|
125
|
+
assert_equal @data['errors'],
|
126
|
+
[I18n.t('devise_token_auth.passwords.sended_paranoid')]
|
127
|
+
end
|
77
128
|
end
|
78
129
|
end
|
79
130
|
|
80
131
|
describe 'successfully requested password reset' do
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
132
|
+
describe 'without paranoid mode' do
|
133
|
+
before do
|
134
|
+
post :create,
|
135
|
+
params: { email: @resource.email,
|
136
|
+
redirect_url: @redirect_url }
|
85
137
|
|
86
|
-
|
138
|
+
@data = JSON.parse(response.body)
|
139
|
+
end
|
140
|
+
|
141
|
+
test 'response should not contain extra data' do
|
142
|
+
assert_nil @data['data']
|
143
|
+
end
|
144
|
+
|
145
|
+
test 'response should contains message' do
|
146
|
+
assert_equal \
|
147
|
+
@data['message'],
|
148
|
+
I18n.t('devise_token_auth.passwords.sended', email: @resource.email)
|
149
|
+
end
|
87
150
|
end
|
88
151
|
|
89
|
-
|
90
|
-
|
152
|
+
describe 'with paranoid mode' do
|
153
|
+
before do
|
154
|
+
swap Devise, paranoid: true do
|
155
|
+
post :create,
|
156
|
+
params: { email: @resource.email,
|
157
|
+
redirect_url: @redirect_url }
|
158
|
+
@data = JSON.parse(response.body)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
test 'response should return success status' do
|
163
|
+
assert_equal 200, response.status
|
164
|
+
end
|
165
|
+
|
166
|
+
test 'response should contain message' do
|
167
|
+
assert_equal \
|
168
|
+
@data['message'],
|
169
|
+
I18n.t('devise_token_auth.passwords.sended_paranoid')
|
170
|
+
end
|
91
171
|
end
|
92
172
|
end
|
93
173
|
|
@@ -111,7 +191,9 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
111
191
|
end
|
112
192
|
|
113
193
|
test 'response should contains message' do
|
114
|
-
assert_equal
|
194
|
+
assert_equal \
|
195
|
+
@data['message'],
|
196
|
+
I18n.t('devise_token_auth.passwords.sended', email: @resource.email)
|
115
197
|
end
|
116
198
|
|
117
199
|
test 'action should send an email' do
|
@@ -209,10 +291,10 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
209
291
|
end
|
210
292
|
end
|
211
293
|
|
212
|
-
describe '
|
294
|
+
describe 'Checking reset_password_token' do
|
213
295
|
before do
|
214
296
|
post :create, params: {
|
215
|
-
email:
|
297
|
+
email: @resource.email,
|
216
298
|
redirect_url: @redirect_url
|
217
299
|
}
|
218
300
|
|
@@ -229,14 +311,14 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
229
311
|
assert_equal Devise.token_generator.digest(self, :reset_password_token, @mail_reset_token), @resource.reset_password_token
|
230
312
|
end
|
231
313
|
|
232
|
-
test 'reset_password_token should be rewritten by origin mail_reset_token' do
|
314
|
+
test 'reset_password_token should not be rewritten by origin mail_reset_token' do
|
233
315
|
get :edit, params: {
|
234
316
|
reset_password_token: @mail_reset_token,
|
235
317
|
redirect_url: @mail_redirect_url
|
236
318
|
}
|
237
319
|
@resource.reload
|
238
320
|
|
239
|
-
assert_equal @mail_reset_token, @resource.reset_password_token
|
321
|
+
assert_equal Devise.token_generator.digest(self, :reset_password_token, @mail_reset_token), @resource.reset_password_token
|
240
322
|
end
|
241
323
|
|
242
324
|
test 'response should return success status' do
|
@@ -248,26 +330,6 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
248
330
|
assert_equal 302, response.status
|
249
331
|
end
|
250
332
|
|
251
|
-
test 'reset_password_token should be valid only one first time' do
|
252
|
-
get :edit, params: {
|
253
|
-
reset_password_token: @mail_reset_token,
|
254
|
-
redirect_url: @mail_redirect_url
|
255
|
-
}
|
256
|
-
|
257
|
-
@resource.reload
|
258
|
-
assert_equal @mail_reset_token, @resource.reset_password_token
|
259
|
-
|
260
|
-
assert_raises(ActionController::RoutingError) {
|
261
|
-
get :edit, params: {
|
262
|
-
reset_password_token: @mail_reset_token,
|
263
|
-
redirect_url: @mail_redirect_url
|
264
|
-
}
|
265
|
-
}
|
266
|
-
|
267
|
-
@resource.reload
|
268
|
-
assert_equal @mail_reset_token, @resource.reset_password_token
|
269
|
-
end
|
270
|
-
|
271
333
|
test 'reset_password_sent_at should be valid' do
|
272
334
|
assert_equal @resource.reset_password_period_valid?, true
|
273
335
|
|
@@ -277,7 +339,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
277
339
|
}
|
278
340
|
|
279
341
|
@resource.reload
|
280
|
-
assert_equal @mail_reset_token, @resource.reset_password_token
|
342
|
+
assert_equal Devise.token_generator.digest(self, :reset_password_token, @mail_reset_token), @resource.reset_password_token
|
281
343
|
end
|
282
344
|
|
283
345
|
test 'reset_password_sent_at should be expired' do
|
@@ -314,7 +376,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
314
376
|
|
315
377
|
describe 'Using default_password_reset_url' do
|
316
378
|
before do
|
317
|
-
@resource =
|
379
|
+
@resource = create(:user, :confirmed)
|
318
380
|
@redirect_url = 'http://ng-token-auth.dev'
|
319
381
|
|
320
382
|
DeviseTokenAuth.default_password_reset_url = @redirect_url
|
@@ -348,8 +410,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
348
410
|
|
349
411
|
describe 'Using redirect_whitelist' do
|
350
412
|
before do
|
351
|
-
@
|
352
|
-
@good_redirect_url = Faker::Internet.url
|
413
|
+
@good_redirect_url = @redirect_url
|
353
414
|
@bad_redirect_url = Faker::Internet.url
|
354
415
|
DeviseTokenAuth.redirect_whitelist = [@good_redirect_url]
|
355
416
|
end
|
@@ -358,31 +419,65 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
358
419
|
DeviseTokenAuth.redirect_whitelist = nil
|
359
420
|
end
|
360
421
|
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
422
|
+
describe 'for create' do
|
423
|
+
test 'request to whitelisted redirect should be successful' do
|
424
|
+
post :create,
|
425
|
+
params: { email: @resource.email,
|
426
|
+
redirect_url: @good_redirect_url }
|
365
427
|
|
366
|
-
|
367
|
-
|
428
|
+
assert_equal 200, response.status
|
429
|
+
end
|
368
430
|
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
431
|
+
test 'request to non-whitelisted redirect should fail' do
|
432
|
+
post :create,
|
433
|
+
params: { email: @resource.email,
|
434
|
+
redirect_url: @bad_redirect_url }
|
435
|
+
|
436
|
+
assert_equal 422, response.status
|
437
|
+
end
|
438
|
+
|
439
|
+
test 'request to non-whitelisted redirect should return error message' do
|
440
|
+
post :create,
|
441
|
+
params: { email: @resource.email,
|
442
|
+
redirect_url: @bad_redirect_url }
|
373
443
|
|
374
|
-
|
444
|
+
@data = JSON.parse(response.body)
|
445
|
+
assert @data['errors']
|
446
|
+
assert_equal @data['errors'],
|
447
|
+
[I18n.t('devise_token_auth.passwords.not_allowed_redirect_url',
|
448
|
+
redirect_url: @bad_redirect_url)]
|
449
|
+
end
|
375
450
|
end
|
376
|
-
test 'request to non-whitelisted redirect should return error message' do
|
377
|
-
post :create,
|
378
|
-
params: { email: @resource.email,
|
379
|
-
redirect_url: @bad_redirect_url }
|
380
451
|
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
452
|
+
describe 'for edit' do
|
453
|
+
before do
|
454
|
+
@auth_headers = @resource.create_new_auth_token
|
455
|
+
@new_password = Faker::Internet.password
|
456
|
+
|
457
|
+
get_reset_token
|
458
|
+
end
|
459
|
+
|
460
|
+
test 'request to whitelisted redirect should be successful' do
|
461
|
+
get :edit, params: { reset_password_token: @mail_reset_token, redirect_url: @good_redirect_url }
|
462
|
+
|
463
|
+
assert_equal 302, response.status
|
464
|
+
end
|
465
|
+
|
466
|
+
test 'request to non-whitelisted redirect should fail' do
|
467
|
+
get :edit, params: { reset_password_token: @mail_reset_token, redirect_url: @bad_redirect_url }
|
468
|
+
|
469
|
+
assert_equal 422, response.status
|
470
|
+
end
|
471
|
+
|
472
|
+
test 'request to non-whitelisted redirect should return error message' do
|
473
|
+
get :edit, params: { reset_password_token: @mail_reset_token, redirect_url: @bad_redirect_url }
|
474
|
+
|
475
|
+
@data = JSON.parse(response.body)
|
476
|
+
assert @data['errors']
|
477
|
+
assert_equal @data['errors'],
|
478
|
+
[I18n.t('devise_token_auth.passwords.not_allowed_redirect_url',
|
479
|
+
redirect_url: @bad_redirect_url)]
|
480
|
+
end
|
386
481
|
end
|
387
482
|
end
|
388
483
|
|
@@ -397,6 +492,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
397
492
|
|
398
493
|
describe 'success' do
|
399
494
|
before do
|
495
|
+
DeviseTokenAuth.require_client_password_reset_token = false
|
400
496
|
@auth_headers = @resource.create_new_auth_token
|
401
497
|
request.headers.merge!(@auth_headers)
|
402
498
|
@new_password = Faker::Internet.password
|
@@ -461,6 +557,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
461
557
|
|
462
558
|
describe 'current password mismatch error' do
|
463
559
|
before do
|
560
|
+
DeviseTokenAuth.require_client_password_reset_token = false
|
464
561
|
@auth_headers = @resource.create_new_auth_token
|
465
562
|
request.headers.merge!(@auth_headers)
|
466
563
|
@new_password = Faker::Internet.password
|
@@ -477,7 +574,35 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
477
574
|
end
|
478
575
|
|
479
576
|
describe 'change password' do
|
480
|
-
describe '
|
577
|
+
describe 'using reset token' do
|
578
|
+
before do
|
579
|
+
DeviseTokenAuth.require_client_password_reset_token = true
|
580
|
+
@redirect_url = 'http://client-app.dev'
|
581
|
+
get_reset_token
|
582
|
+
edit_url = CGI.unescape(@mail.body.match(/href=\"(.+)\"/)[1])
|
583
|
+
query_parts = Rack::Utils.parse_nested_query(URI.parse(edit_url).query)
|
584
|
+
get :edit, params: query_parts
|
585
|
+
end
|
586
|
+
|
587
|
+
test 'request should be redirect' do
|
588
|
+
assert_equal 302, response.status
|
589
|
+
end
|
590
|
+
|
591
|
+
test 'request should redirect to correct redirect url' do
|
592
|
+
host = URI.parse(response.location).host
|
593
|
+
query_parts = Rack::Utils.parse_nested_query(URI.parse(response.location).query)
|
594
|
+
|
595
|
+
assert_equal 'client-app.dev', host
|
596
|
+
assert_equal @mail_reset_token, query_parts['reset_password_token']
|
597
|
+
assert_equal 1, query_parts.keys.size
|
598
|
+
end
|
599
|
+
|
600
|
+
teardown do
|
601
|
+
DeviseTokenAuth.require_client_password_reset_token = false
|
602
|
+
end
|
603
|
+
end
|
604
|
+
|
605
|
+
describe 'with valid headers' do
|
481
606
|
before do
|
482
607
|
@auth_headers = @resource.create_new_auth_token
|
483
608
|
request.headers.merge!(@auth_headers)
|
@@ -503,6 +628,10 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
503
628
|
test 'new password should authenticate user' do
|
504
629
|
assert @resource.valid_password?(@new_password)
|
505
630
|
end
|
631
|
+
|
632
|
+
test 'reset_password_token should be removed' do
|
633
|
+
assert_nil @resource.reset_password_token
|
634
|
+
end
|
506
635
|
end
|
507
636
|
|
508
637
|
describe 'password mismatch error' do
|
@@ -520,19 +649,93 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
520
649
|
end
|
521
650
|
end
|
522
651
|
|
523
|
-
describe '
|
652
|
+
describe 'without valid headers' do
|
524
653
|
before do
|
525
|
-
@
|
526
|
-
|
654
|
+
@resource.create_new_auth_token
|
655
|
+
new_password = Faker::Internet.password
|
527
656
|
|
528
|
-
put :update, params: { password:
|
529
|
-
password_confirmation:
|
657
|
+
put :update, params: { password: new_password,
|
658
|
+
password_confirmation: new_password }
|
530
659
|
end
|
531
660
|
|
532
661
|
test 'response should fail' do
|
533
662
|
assert_equal 401, response.status
|
534
663
|
end
|
535
664
|
end
|
665
|
+
|
666
|
+
describe 'with valid reset password token' do
|
667
|
+
before do
|
668
|
+
reset_password_token = @resource.send_reset_password_instructions
|
669
|
+
@new_password = Faker::Internet.password
|
670
|
+
@params = { password: @new_password,
|
671
|
+
password_confirmation: @new_password,
|
672
|
+
reset_password_token: reset_password_token }
|
673
|
+
end
|
674
|
+
|
675
|
+
describe 'with require_client_password_reset_token disabled' do
|
676
|
+
before do
|
677
|
+
DeviseTokenAuth.require_client_password_reset_token = false
|
678
|
+
put :update, params: @params
|
679
|
+
|
680
|
+
@data = JSON.parse(response.body)
|
681
|
+
@resource.reload
|
682
|
+
end
|
683
|
+
|
684
|
+
test 'request should be not be successful' do
|
685
|
+
assert_equal 401, response.status
|
686
|
+
end
|
687
|
+
end
|
688
|
+
|
689
|
+
describe 'with require_client_password_reset_token enabled' do
|
690
|
+
before do
|
691
|
+
DeviseTokenAuth.require_client_password_reset_token = true
|
692
|
+
put :update, params: @params
|
693
|
+
|
694
|
+
@data = JSON.parse(response.body)
|
695
|
+
@resource.reload
|
696
|
+
end
|
697
|
+
|
698
|
+
test 'request should be successful' do
|
699
|
+
assert_equal 200, response.status
|
700
|
+
end
|
701
|
+
|
702
|
+
test 'request should return success message' do
|
703
|
+
assert @data['message']
|
704
|
+
assert_equal @data['message'],
|
705
|
+
I18n.t('devise_token_auth.passwords.successfully_updated')
|
706
|
+
end
|
707
|
+
|
708
|
+
test 'new password should authenticate user' do
|
709
|
+
assert @resource.valid_password?(@new_password)
|
710
|
+
end
|
711
|
+
|
712
|
+
teardown do
|
713
|
+
DeviseTokenAuth.require_client_password_reset_token = false
|
714
|
+
end
|
715
|
+
end
|
716
|
+
end
|
717
|
+
|
718
|
+
describe 'with invalid reset password token' do
|
719
|
+
before do
|
720
|
+
DeviseTokenAuth.require_client_password_reset_token = true
|
721
|
+
@resource.update reset_password_token: 'koskoskoskos'
|
722
|
+
put :update, params: @params
|
723
|
+
@data = JSON.parse(response.body)
|
724
|
+
@resource.reload
|
725
|
+
end
|
726
|
+
|
727
|
+
test 'request should fail' do
|
728
|
+
assert_equal 401, response.status
|
729
|
+
end
|
730
|
+
|
731
|
+
test 'new password should not authenticate user' do
|
732
|
+
assert !@resource.valid_password?(@new_password)
|
733
|
+
end
|
734
|
+
|
735
|
+
teardown do
|
736
|
+
DeviseTokenAuth.require_client_password_reset_token = false
|
737
|
+
end
|
738
|
+
end
|
536
739
|
end
|
537
740
|
end
|
538
741
|
|
@@ -546,18 +749,9 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
546
749
|
end
|
547
750
|
|
548
751
|
before do
|
549
|
-
@resource =
|
752
|
+
@resource = create(:mang_user, :confirmed)
|
550
753
|
@redirect_url = 'http://ng-token-auth.dev'
|
551
|
-
|
552
|
-
post :create, params: { email: @resource.email,
|
553
|
-
redirect_url: @redirect_url }
|
554
|
-
|
555
|
-
@mail = ActionMailer::Base.deliveries.last
|
556
|
-
@resource.reload
|
557
|
-
|
558
|
-
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
|
559
|
-
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
560
|
-
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
754
|
+
get_reset_token
|
561
755
|
end
|
562
756
|
|
563
757
|
test 'response should return success status' do
|
@@ -573,18 +767,10 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
573
767
|
|
574
768
|
describe 'unconfirmed user' do
|
575
769
|
before do
|
576
|
-
@resource =
|
770
|
+
@resource = create(:user)
|
577
771
|
@redirect_url = 'http://ng-token-auth.dev'
|
578
772
|
|
579
|
-
|
580
|
-
redirect_url: @redirect_url }
|
581
|
-
|
582
|
-
@mail = ActionMailer::Base.deliveries.last
|
583
|
-
@resource.reload
|
584
|
-
|
585
|
-
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
|
586
|
-
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
587
|
-
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
773
|
+
get_reset_token
|
588
774
|
|
589
775
|
get :edit, params: { reset_password_token: @mail_reset_token,
|
590
776
|
redirect_url: @mail_redirect_url }
|
@@ -604,17 +790,8 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
604
790
|
|
605
791
|
before do
|
606
792
|
@resource = unconfirmable_users(:user)
|
607
|
-
@redirect_url = 'http://ng-token-auth.dev'
|
608
|
-
|
609
|
-
post :create, params: { email: @resource.email,
|
610
|
-
redirect_url: @redirect_url }
|
611
793
|
|
612
|
-
|
613
|
-
@resource.reload
|
614
|
-
|
615
|
-
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
|
616
|
-
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
617
|
-
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
794
|
+
get_reset_token
|
618
795
|
|
619
796
|
get :edit, params: { reset_password_token: @mail_reset_token,
|
620
797
|
redirect_url: @mail_redirect_url }
|
@@ -625,25 +802,31 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
|
|
625
802
|
|
626
803
|
describe 'alternate user type' do
|
627
804
|
before do
|
628
|
-
@resource =
|
805
|
+
@resource = create(:user, :confirmed)
|
629
806
|
@redirect_url = 'http://ng-token-auth.dev'
|
630
807
|
@config_name = 'altUser'
|
631
808
|
|
632
|
-
|
809
|
+
params = { email: @resource.email,
|
633
810
|
redirect_url: @redirect_url,
|
634
811
|
config_name: @config_name }
|
635
|
-
|
636
|
-
@mail = ActionMailer::Base.deliveries.last
|
637
|
-
@resource.reload
|
638
|
-
|
639
|
-
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
|
640
|
-
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
641
|
-
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
812
|
+
get_reset_token params
|
642
813
|
end
|
643
814
|
|
644
815
|
test 'config_name param is included in the confirmation email link' do
|
645
816
|
assert_equal @config_name, @mail_config_name
|
646
817
|
end
|
647
818
|
end
|
819
|
+
|
820
|
+
def get_reset_token(params = nil)
|
821
|
+
params ||= { email: @resource.email, redirect_url: @redirect_url }
|
822
|
+
post :create, params: params
|
823
|
+
|
824
|
+
@mail = ActionMailer::Base.deliveries.last
|
825
|
+
@resource.reload
|
826
|
+
|
827
|
+
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
|
828
|
+
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
829
|
+
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
830
|
+
end
|
648
831
|
end
|
649
832
|
end
|