devise_token_auth 1.0.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +4 -2
- data/app/controllers/devise_token_auth/application_controller.rb +19 -3
- data/app/controllers/devise_token_auth/concerns/resource_finder.rb +23 -11
- data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +78 -57
- data/app/controllers/devise_token_auth/confirmations_controller.rb +67 -20
- data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +82 -30
- data/app/controllers/devise_token_auth/passwords_controller.rb +53 -31
- data/app/controllers/devise_token_auth/registrations_controller.rb +33 -40
- data/app/controllers/devise_token_auth/sessions_controller.rb +24 -6
- data/app/controllers/devise_token_auth/unlocks_controller.rb +10 -6
- 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 +77 -80
- data/app/models/devise_token_auth/concerns/user_omniauth_callbacks.rb +12 -5
- data/app/validators/{email_validator.rb → devise_token_auth_email_validator.rb} +11 -3
- data/app/views/devise_token_auth/omniauth_external_window.html.erb +1 -1
- data/config/locales/da-DK.yml +2 -0
- 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 +16 -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 +2 -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 +5 -9
- data/lib/devise_token_auth/engine.rb +17 -2
- data/lib/devise_token_auth/rails/routes.rb +18 -13
- data/lib/devise_token_auth/token_factory.rb +126 -0
- data/lib/devise_token_auth/url.rb +3 -0
- data/lib/devise_token_auth/version.rb +1 -1
- data/lib/devise_token_auth.rb +6 -3
- data/lib/generators/devise_token_auth/USAGE +1 -1
- data/lib/generators/devise_token_auth/install_generator.rb +7 -91
- 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/templates/devise_token_auth.rb +13 -0
- data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +1 -8
- data/lib/generators/devise_token_auth/templates/user.rb.erb +2 -2
- data/lib/generators/devise_token_auth/templates/user_mongoid.rb.erb +56 -0
- data/test/controllers/custom/custom_confirmations_controller_test.rb +1 -1
- data/test/controllers/demo_mang_controller_test.rb +37 -8
- data/test/controllers/demo_user_controller_test.rb +39 -10
- data/test/controllers/devise_token_auth/confirmations_controller_test.rb +163 -18
- data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +110 -43
- data/test/controllers/devise_token_auth/passwords_controller_test.rb +299 -122
- data/test/controllers/devise_token_auth/registrations_controller_test.rb +54 -14
- data/test/controllers/devise_token_auth/sessions_controller_test.rb +31 -40
- data/test/controllers/devise_token_auth/token_validations_controller_test.rb +43 -2
- data/test/controllers/devise_token_auth/unlocks_controller_test.rb +44 -5
- data/test/controllers/overrides/confirmations_controller_test.rb +1 -1
- data/test/dummy/app/active_record/confirmable_user.rb +11 -0
- data/test/dummy/app/{models → active_record}/scoped_user.rb +2 -2
- data/test/dummy/app/{models → active_record}/unconfirmable_user.rb +1 -2
- data/test/dummy/app/{models → active_record}/unregisterable_user.rb +3 -3
- data/test/dummy/app/active_record/user.rb +6 -0
- data/test/dummy/app/controllers/overrides/confirmations_controller.rb +3 -3
- data/test/dummy/app/controllers/overrides/passwords_controller.rb +3 -3
- data/test/dummy/app/controllers/overrides/registrations_controller.rb +1 -1
- data/test/dummy/app/controllers/overrides/sessions_controller.rb +2 -2
- data/test/dummy/app/models/{user.rb → concerns/favorite_color.rb} +7 -8
- 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 +22 -1
- data/test/dummy/config/boot.rb +4 -0
- data/test/dummy/config/environments/development.rb +0 -10
- data/test/dummy/config/environments/production.rb +0 -16
- data/test/dummy/config/initializers/devise.rb +285 -0
- data/test/dummy/config/initializers/devise_token_auth.rb +35 -4
- data/test/dummy/config/initializers/figaro.rb +1 -1
- data/test/dummy/config/initializers/omniauth.rb +1 -0
- data/test/dummy/config/routes.rb +2 -0
- data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +0 -7
- data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +0 -7
- data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +0 -7
- data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +0 -7
- data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +0 -7
- data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +0 -7
- data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +0 -7
- data/test/dummy/db/migrate/20190924101113_devise_token_auth_create_confirmable_users.rb +49 -0
- data/test/dummy/db/schema.rb +31 -33
- data/test/dummy/tmp/generators/app/models/user.rb +11 -0
- data/test/dummy/tmp/generators/config/initializers/devise_token_auth.rb +60 -0
- data/test/dummy/tmp/generators/db/migrate/20220822003050_devise_token_auth_create_users.rb +49 -0
- data/test/factories/users.rb +3 -2
- 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 +2 -2
- data/test/lib/generators/devise_token_auth/install_generator_test.rb +51 -31
- data/test/lib/generators/devise_token_auth/install_generator_with_namespace_test.rb +51 -31
- 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 +0 -8
- data/test/models/user_test.rb +13 -23
- data/test/test_helper.rb +45 -4
- metadata +126 -33
- data/config/initializers/devise.rb +0 -198
- data/test/dummy/config/initializers/assets.rb +0 -10
- data/test/dummy/tmp/generators/app/views/devise/mailer/confirmation_instructions.html.erb +0 -5
- data/test/dummy/tmp/generators/app/views/devise/mailer/reset_password_instructions.html.erb +0 -8
- /data/test/dummy/app/{models → active_record}/lockable_user.rb +0 -0
- /data/test/dummy/app/{models → active_record}/mang.rb +0 -0
- /data/test/dummy/app/{models → active_record}/only_email_user.rb +0 -0
@@ -10,6 +10,17 @@ require 'test_helper'
|
|
10
10
|
|
11
11
|
class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::IntegrationTest
|
12
12
|
describe DeviseTokenAuth::RegistrationsController do
|
13
|
+
|
14
|
+
def mock_registration_params
|
15
|
+
{
|
16
|
+
email: Faker::Internet.email,
|
17
|
+
password: 'secret123',
|
18
|
+
password_confirmation: 'secret123',
|
19
|
+
confirm_success_url: Faker::Internet.url,
|
20
|
+
unpermitted_param: '(x_x)'
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
13
24
|
describe 'Validate non-empty body' do
|
14
25
|
before do
|
15
26
|
# need to post empty data
|
@@ -41,13 +52,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
|
|
41
52
|
@mails_sent = ActionMailer::Base.deliveries.count
|
42
53
|
|
43
54
|
post '/auth',
|
44
|
-
params:
|
45
|
-
email: Faker::Internet.email,
|
46
|
-
password: 'secret123',
|
47
|
-
password_confirmation: 'secret123',
|
48
|
-
confirm_success_url: Faker::Internet.url,
|
49
|
-
unpermitted_param: '(x_x)'
|
50
|
-
}
|
55
|
+
params: mock_registration_params
|
51
56
|
|
52
57
|
@resource = assigns(:resource)
|
53
58
|
@data = JSON.parse(response.body)
|
@@ -83,6 +88,41 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
|
|
83
88
|
end
|
84
89
|
end
|
85
90
|
|
91
|
+
describe 'using allow_unconfirmed_access_for' do
|
92
|
+
before do
|
93
|
+
@original_duration = Devise.allow_unconfirmed_access_for
|
94
|
+
Devise.allow_unconfirmed_access_for = nil
|
95
|
+
end
|
96
|
+
|
97
|
+
test 'auth headers were returned in response' do
|
98
|
+
post '/auth', params: mock_registration_params
|
99
|
+
assert response.headers['access-token']
|
100
|
+
assert response.headers['token-type']
|
101
|
+
assert response.headers['client']
|
102
|
+
assert response.headers['expiry']
|
103
|
+
assert response.headers['uid']
|
104
|
+
end
|
105
|
+
|
106
|
+
describe 'using auth cookie' do
|
107
|
+
before do
|
108
|
+
DeviseTokenAuth.cookie_enabled = true
|
109
|
+
end
|
110
|
+
|
111
|
+
test 'auth cookie was returned in response' do
|
112
|
+
post '/auth', params: mock_registration_params
|
113
|
+
assert response.cookies[DeviseTokenAuth.cookie_name]
|
114
|
+
end
|
115
|
+
|
116
|
+
after do
|
117
|
+
DeviseTokenAuth.cookie_enabled = false
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
after do
|
122
|
+
Devise.allow_unconfirmed_access_for = @original_duration
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
86
126
|
describe 'using "+" in email' do
|
87
127
|
test 'can use + sign in email addresses' do
|
88
128
|
@plus_email = 'ak+testing@gmail.com'
|
@@ -305,7 +345,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
|
|
305
345
|
end
|
306
346
|
|
307
347
|
test 'user should not have been created' do
|
308
|
-
|
348
|
+
refute @resource.persisted?
|
309
349
|
end
|
310
350
|
|
311
351
|
test 'error should be returned in the response' do
|
@@ -333,7 +373,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
|
|
333
373
|
end
|
334
374
|
|
335
375
|
test 'user should not have been created' do
|
336
|
-
|
376
|
+
refute @resource.persisted?
|
337
377
|
end
|
338
378
|
|
339
379
|
test 'error should be returned in the response' do
|
@@ -362,7 +402,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
|
|
362
402
|
end
|
363
403
|
|
364
404
|
test 'user should have been created' do
|
365
|
-
|
405
|
+
refute @resource.persisted?
|
366
406
|
end
|
367
407
|
|
368
408
|
test 'error should be returned in the response' do
|
@@ -393,7 +433,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
|
|
393
433
|
end
|
394
434
|
|
395
435
|
test 'user should have been created' do
|
396
|
-
|
436
|
+
refute @resource.persisted?
|
397
437
|
end
|
398
438
|
|
399
439
|
test 'error should be returned in the response' do
|
@@ -465,7 +505,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
|
|
465
505
|
# test valid update param
|
466
506
|
@resource_class = User
|
467
507
|
@new_operating_thetan = 1_000_000
|
468
|
-
@email =
|
508
|
+
@email = Faker::Internet.safe_email
|
469
509
|
@request_params = {
|
470
510
|
operating_thetan: @new_operating_thetan,
|
471
511
|
email: @email
|
@@ -572,7 +612,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
|
|
572
612
|
# test valid update param
|
573
613
|
@resource_class = User
|
574
614
|
@new_operating_thetan = 1_000_000
|
575
|
-
@email =
|
615
|
+
@email = Faker::Internet.safe_email
|
576
616
|
@request_params = {
|
577
617
|
operating_thetan: @new_operating_thetan,
|
578
618
|
email: @email
|
@@ -623,7 +663,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
|
|
623
663
|
before do
|
624
664
|
DeviseTokenAuth.check_current_password_before_update = :password
|
625
665
|
@new_operating_thetan = 1_000_000
|
626
|
-
@email =
|
666
|
+
@email = Faker::Internet.safe_email
|
627
667
|
end
|
628
668
|
|
629
669
|
after do
|
@@ -17,26 +17,15 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
|
|
17
17
|
|
18
18
|
describe 'success' do
|
19
19
|
before do
|
20
|
-
@
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
@old_last_sign_in_ip = @existing_user.last_sign_in_ip
|
20
|
+
@user_session_params = {
|
21
|
+
email: @existing_user.email,
|
22
|
+
password: @existing_user.password
|
23
|
+
}
|
25
24
|
|
26
|
-
post :create,
|
27
|
-
params: {
|
28
|
-
email: @existing_user.email,
|
29
|
-
password: @existing_user.password
|
30
|
-
}
|
25
|
+
post :create, params: @user_session_params
|
31
26
|
|
32
27
|
@resource = assigns(:resource)
|
33
28
|
@data = JSON.parse(response.body)
|
34
|
-
|
35
|
-
@new_sign_in_count = @resource.sign_in_count
|
36
|
-
@new_current_sign_in_at = @resource.current_sign_in_at
|
37
|
-
@new_last_sign_in_at = @resource.last_sign_in_at
|
38
|
-
@new_sign_in_ip = @resource.current_sign_in_ip
|
39
|
-
@new_last_sign_in_ip = @resource.last_sign_in_ip
|
40
29
|
end
|
41
30
|
|
42
31
|
test 'request should succeed' do
|
@@ -47,29 +36,18 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
|
|
47
36
|
assert_equal @existing_user.email, @data['data']['email']
|
48
37
|
end
|
49
38
|
|
50
|
-
describe '
|
51
|
-
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
test 'current_sign_in_at is updated' do
|
56
|
-
refute @old_current_sign_in_at
|
57
|
-
assert @new_current_sign_in_at
|
58
|
-
end
|
59
|
-
|
60
|
-
test 'last_sign_in_at is updated' do
|
61
|
-
refute @old_last_sign_in_at
|
62
|
-
assert @new_last_sign_in_at
|
39
|
+
describe 'using auth cookie' do
|
40
|
+
before do
|
41
|
+
DeviseTokenAuth.cookie_enabled = true
|
63
42
|
end
|
64
43
|
|
65
|
-
test '
|
66
|
-
|
67
|
-
|
44
|
+
test 'request should return auth cookie' do
|
45
|
+
post :create, params: @user_session_params
|
46
|
+
assert response.cookies[DeviseTokenAuth.cookie_name]
|
68
47
|
end
|
69
48
|
|
70
|
-
|
71
|
-
|
72
|
-
assert_equal '0.0.0.0', @new_last_sign_in_ip
|
49
|
+
after do
|
50
|
+
DeviseTokenAuth.cookie_enabled = false
|
73
51
|
end
|
74
52
|
end
|
75
53
|
|
@@ -79,11 +57,6 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
|
|
79
57
|
# to expedite tests! (Default is 10)
|
80
58
|
DeviseTokenAuth.max_number_of_devices = 2
|
81
59
|
DeviseTokenAuth.change_headers_on_each_request = false
|
82
|
-
|
83
|
-
@user_session_params = {
|
84
|
-
email: @existing_user.email,
|
85
|
-
password: @existing_user.password
|
86
|
-
}
|
87
60
|
end
|
88
61
|
|
89
62
|
test 'should limit the maximum number of concurrent devices' do
|
@@ -197,6 +170,24 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
|
|
197
170
|
test 'session was destroyed' do
|
198
171
|
assert_equal true, @controller.reset_session_called
|
199
172
|
end
|
173
|
+
|
174
|
+
describe 'using auth cookie' do
|
175
|
+
before do
|
176
|
+
DeviseTokenAuth.cookie_enabled = true
|
177
|
+
@auth_token = @existing_user.create_new_auth_token
|
178
|
+
@controller.send(:cookies)[DeviseTokenAuth.cookie_name] = { value: @auth_token.to_json }
|
179
|
+
end
|
180
|
+
|
181
|
+
test 'auth cookie was destroyed' do
|
182
|
+
assert_equal @auth_token.to_json, @controller.send(:cookies)[DeviseTokenAuth.cookie_name] # sanity check
|
183
|
+
delete :destroy, format: :json
|
184
|
+
assert_nil @controller.send(:cookies)[DeviseTokenAuth.cookie_name]
|
185
|
+
end
|
186
|
+
|
187
|
+
after do
|
188
|
+
DeviseTokenAuth.cookie_enabled = false
|
189
|
+
end
|
190
|
+
end
|
200
191
|
end
|
201
192
|
|
202
193
|
describe 'unauthed user sign out' do
|
@@ -18,11 +18,51 @@ class DeviseTokenAuth::TokenValidationsControllerTest < ActionDispatch::Integrat
|
|
18
18
|
@token = @auth_headers['access-token']
|
19
19
|
@client_id = @auth_headers['client']
|
20
20
|
@expiry = @auth_headers['expiry']
|
21
|
-
|
21
|
+
@authorization_header = @auth_headers.slice('Authorization')
|
22
22
|
# ensure that request is not treated as batch request
|
23
23
|
age_token(@resource, @client_id)
|
24
24
|
end
|
25
25
|
|
26
|
+
describe 'using only Authorization header' do
|
27
|
+
describe 'using valid Authorization header' do
|
28
|
+
before do
|
29
|
+
get '/auth/validate_token', params: {}, headers: @authorization_header
|
30
|
+
end
|
31
|
+
|
32
|
+
test 'token valid' do
|
33
|
+
assert_equal 200, response.status
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe 'using invalid Authorization header' do
|
38
|
+
describe 'with invalid base64' do
|
39
|
+
before do
|
40
|
+
get '/auth/validate_token', params: {}, headers: {'Authorization': 'Bearer invalidtoken=='}
|
41
|
+
end
|
42
|
+
|
43
|
+
test 'returns access denied' do
|
44
|
+
assert_equal 401, response.status
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe 'with valid base64' do
|
49
|
+
before do
|
50
|
+
valid_base64 = Base64.strict_encode64({
|
51
|
+
"access-token": 'invalidtoken',
|
52
|
+
"token-type": 'Bearer',
|
53
|
+
"client": 'client',
|
54
|
+
"expiry": '1234567'
|
55
|
+
}.to_json)
|
56
|
+
get '/auth/validate_token', params: {}, headers: {'Authorization': "Bearer #{valid_base64}"}
|
57
|
+
end
|
58
|
+
|
59
|
+
test 'returns access denied' do
|
60
|
+
assert_equal 401, response.status
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
26
66
|
describe 'vanilla user' do
|
27
67
|
before do
|
28
68
|
get '/auth/validate_token', params: {}, headers: @auth_headers
|
@@ -47,7 +87,8 @@ class DeviseTokenAuth::TokenValidationsControllerTest < ActionDispatch::Integrat
|
|
47
87
|
|
48
88
|
describe 'with invalid user' do
|
49
89
|
before do
|
50
|
-
@resource.update_column
|
90
|
+
@resource.update_column(:email, 'invalid') if DEVISE_TOKEN_AUTH_ORM == :active_record
|
91
|
+
@resource.set(email: 'invalid') if DEVISE_TOKEN_AUTH_ORM == :mongoid
|
51
92
|
end
|
52
93
|
|
53
94
|
test 'request should raise invalid model error' do
|
@@ -57,7 +57,7 @@ class DeviseTokenAuth::UnlocksControllerTest < ActionController::TestCase
|
|
57
57
|
end
|
58
58
|
|
59
59
|
describe 'request unlock' do
|
60
|
-
describe '
|
60
|
+
describe 'without paranoid mode' do
|
61
61
|
before do
|
62
62
|
post :create, params: { email: 'chester@cheet.ah' }
|
63
63
|
@data = JSON.parse(response.body)
|
@@ -68,13 +68,32 @@ class DeviseTokenAuth::UnlocksControllerTest < ActionController::TestCase
|
|
68
68
|
|
69
69
|
test 'errors should be returned' do
|
70
70
|
assert @data['errors']
|
71
|
-
assert_equal @data['errors'],
|
72
|
-
|
73
|
-
email: 'chester@cheet.ah')]
|
71
|
+
assert_equal @data['errors'], [I18n.t('devise_token_auth.unlocks.user_not_found',
|
72
|
+
email: 'chester@cheet.ah')]
|
74
73
|
end
|
75
74
|
end
|
76
75
|
|
77
|
-
describe '
|
76
|
+
describe 'with paranoid mode' do
|
77
|
+
before do
|
78
|
+
swap Devise, paranoid: true do
|
79
|
+
post :create, params: { email: 'chester@cheet.ah' }
|
80
|
+
@data = JSON.parse(response.body)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
test 'should always return success' do
|
85
|
+
assert_equal 200, response.status
|
86
|
+
end
|
87
|
+
|
88
|
+
test 'errors should not be returned' do
|
89
|
+
assert @data['success']
|
90
|
+
assert_equal \
|
91
|
+
@data['message'],
|
92
|
+
I18n.t('devise_token_auth.unlocks.sended_paranoid')
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe 'successfully requested unlock without paranoid mode' do
|
78
97
|
before do
|
79
98
|
post :create, params: { email: @resource.email }
|
80
99
|
|
@@ -86,6 +105,26 @@ class DeviseTokenAuth::UnlocksControllerTest < ActionController::TestCase
|
|
86
105
|
end
|
87
106
|
end
|
88
107
|
|
108
|
+
describe 'successfully requested unlock with paranoid mode' do
|
109
|
+
before do
|
110
|
+
swap Devise, paranoid: true do
|
111
|
+
post :create, params: { email: @resource.email }
|
112
|
+
@data = JSON.parse(response.body)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
test 'should always return success' do
|
117
|
+
assert_equal 200, response.status
|
118
|
+
end
|
119
|
+
|
120
|
+
test 'errors should not be returned' do
|
121
|
+
assert @data['success']
|
122
|
+
assert_equal \
|
123
|
+
@data['message'],
|
124
|
+
I18n.t('devise_token_auth.unlocks.sended_paranoid')
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
89
128
|
describe 'case-sensitive email' do
|
90
129
|
before do
|
91
130
|
post :create, params: { email: @resource.email }
|
@@ -38,7 +38,7 @@ class Overrides::ConfirmationsControllerTest < ActionDispatch::IntegrationTest
|
|
38
38
|
override_proof_str = '(^^,)'
|
39
39
|
|
40
40
|
# ensure present in redirect URL
|
41
|
-
override_proof_param =
|
41
|
+
override_proof_param = CGI.unescape(response.headers['Location']
|
42
42
|
.match(/override_proof=([^&]*)&/)[1])
|
43
43
|
|
44
44
|
assert_equal override_proof_str, override_proof_param
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ConfirmableUser < ActiveRecord::Base
|
4
|
+
# Include default devise modules.
|
5
|
+
devise :database_authenticatable, :registerable,
|
6
|
+
:recoverable, :rememberable,
|
7
|
+
:validatable, :confirmable
|
8
|
+
DeviseTokenAuth.send_confirmation_email = true
|
9
|
+
include DeviseTokenAuth::Concerns::User
|
10
|
+
DeviseTokenAuth.send_confirmation_email = false
|
11
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
class ScopedUser < ActiveRecord::Base
|
4
4
|
# Include default devise modules.
|
5
5
|
devise :database_authenticatable, :registerable,
|
6
|
-
:recoverable, :rememberable,
|
7
|
-
:confirmable, :omniauthable
|
6
|
+
:recoverable, :rememberable,
|
7
|
+
:validatable, :confirmable, :omniauthable
|
8
8
|
include DeviseTokenAuth::Concerns::User
|
9
9
|
end
|
@@ -4,7 +4,6 @@ class UnconfirmableUser < ActiveRecord::Base
|
|
4
4
|
# Include default devise modules.
|
5
5
|
devise :database_authenticatable, :registerable,
|
6
6
|
:recoverable, :rememberable,
|
7
|
-
:
|
8
|
-
:omniauthable
|
7
|
+
:validatable, :omniauthable
|
9
8
|
include DeviseTokenAuth::Concerns::User
|
10
9
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
class UnregisterableUser < ActiveRecord::Base
|
4
4
|
# Include default devise modules.
|
5
|
-
devise :database_authenticatable,
|
6
|
-
:
|
7
|
-
:
|
5
|
+
devise :database_authenticatable, :recoverable,
|
6
|
+
:validatable, :confirmable,
|
7
|
+
:omniauthable
|
8
8
|
include DeviseTokenAuth::Concerns::User
|
9
9
|
end
|
@@ -6,7 +6,7 @@ module Overrides
|
|
6
6
|
@resource = resource_class.confirm_by_token(params[:confirmation_token])
|
7
7
|
|
8
8
|
if @resource && @resource.id
|
9
|
-
|
9
|
+
token = @resource.create_token
|
10
10
|
@resource.save!
|
11
11
|
|
12
12
|
redirect_header_options = {
|
@@ -14,8 +14,8 @@ module Overrides
|
|
14
14
|
config: params[:config],
|
15
15
|
override_proof: '(^^,)'
|
16
16
|
}
|
17
|
-
redirect_headers = build_redirect_headers(token,
|
18
|
-
|
17
|
+
redirect_headers = build_redirect_headers(token.token,
|
18
|
+
token.client,
|
19
19
|
redirect_header_options)
|
20
20
|
|
21
21
|
redirect_to(@resource.build_auth_url(params[:redirect_url],
|
@@ -11,7 +11,7 @@ module Overrides
|
|
11
11
|
)
|
12
12
|
|
13
13
|
if @resource && @resource.id
|
14
|
-
|
14
|
+
token = @resource.create_token
|
15
15
|
|
16
16
|
# ensure that user is confirmed
|
17
17
|
@resource.skip_confirmation! unless @resource.confirmed_at
|
@@ -22,8 +22,8 @@ module Overrides
|
|
22
22
|
override_proof: OVERRIDE_PROOF,
|
23
23
|
reset_password: true
|
24
24
|
}
|
25
|
-
redirect_headers = build_redirect_headers(token,
|
26
|
-
|
25
|
+
redirect_headers = build_redirect_headers(token.token,
|
26
|
+
token.client,
|
27
27
|
redirect_header_options)
|
28
28
|
redirect_to(@resource.build_auth_url(params[:redirect_url],
|
29
29
|
redirect_headers))
|
@@ -5,10 +5,10 @@ module Overrides
|
|
5
5
|
OVERRIDE_PROOF = '(^^,)'.freeze
|
6
6
|
|
7
7
|
def create
|
8
|
-
@resource = resource_class.
|
8
|
+
@resource = resource_class.dta_find_by(email: resource_params[:email])
|
9
9
|
|
10
10
|
if @resource && valid_params?(:email, resource_params[:email]) && @resource.valid_password?(resource_params[:password]) && @resource.confirmed?
|
11
|
-
@
|
11
|
+
@token = @resource.create_token
|
12
12
|
@resource.save
|
13
13
|
|
14
14
|
render json: {
|
@@ -1,13 +1,12 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
class User < ActiveRecord::Base
|
4
|
-
include DeviseTokenAuth::Concerns::User
|
5
|
-
|
6
|
-
validates :operating_thetan, numericality: true, allow_nil: true
|
7
|
-
validate :ensure_correct_favorite_color
|
1
|
+
module FavoriteColor
|
2
|
+
extend ActiveSupport::Concern
|
8
3
|
|
4
|
+
included do
|
5
|
+
validates :operating_thetan, numericality: true, allow_nil: true
|
6
|
+
validate :ensure_correct_favorite_color
|
7
|
+
end
|
8
|
+
|
9
9
|
def ensure_correct_favorite_color
|
10
|
-
|
11
10
|
if favorite_color && (favorite_color != '')
|
12
11
|
unless ApplicationHelper::COLOR_NAMES.any?{ |s| s.casecmp(favorite_color)==0 }
|
13
12
|
matches = ApplicationHelper::COLOR_SEARCH.search(favorite_color)
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ConfirmableUser
|
4
|
+
include Mongoid::Document
|
5
|
+
include Mongoid::Timestamps
|
6
|
+
include Mongoid::Locker
|
7
|
+
|
8
|
+
field :locker_locked_at, type: Time
|
9
|
+
field :locker_locked_until, type: Time
|
10
|
+
|
11
|
+
locker locked_at_field: :locker_locked_at,
|
12
|
+
locked_until_field: :locker_locked_until
|
13
|
+
|
14
|
+
## User Info
|
15
|
+
field :name, type: String
|
16
|
+
field :nickname, type: String
|
17
|
+
field :image, type: String
|
18
|
+
|
19
|
+
## Database authenticatable
|
20
|
+
field :email, type: String, default: ''
|
21
|
+
field :encrypted_password, type: String, default: ''
|
22
|
+
|
23
|
+
## Recoverable
|
24
|
+
field :reset_password_token, type: String
|
25
|
+
field :reset_password_sent_at, type: Time
|
26
|
+
field :reset_password_redirect_url, type: String
|
27
|
+
field :allow_password_change, type: Boolean, default: false
|
28
|
+
|
29
|
+
## Rememberable
|
30
|
+
field :remember_created_at, type: Time
|
31
|
+
|
32
|
+
## Confirmable
|
33
|
+
field :confirmation_token, type: String
|
34
|
+
field :confirmed_at, type: Time
|
35
|
+
field :confirmation_sent_at, type: Time
|
36
|
+
field :unconfirmed_email, type: String # Only if using reconfirmable
|
37
|
+
|
38
|
+
## Required
|
39
|
+
field :provider, type: String
|
40
|
+
field :uid, type: String, default: ''
|
41
|
+
|
42
|
+
## Tokens
|
43
|
+
field :tokens, type: Hash, default: {}
|
44
|
+
|
45
|
+
# Include default devise modules.
|
46
|
+
devise :database_authenticatable, :registerable,
|
47
|
+
:recoverable, :rememberable, :trackable,
|
48
|
+
:validatable, :confirmable
|
49
|
+
DeviseTokenAuth.send_confirmation_email = true
|
50
|
+
include DeviseTokenAuth::Concerns::User
|
51
|
+
DeviseTokenAuth.send_confirmation_email = false
|
52
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class LockableUser
|
4
|
+
include Mongoid::Document
|
5
|
+
include Mongoid::Timestamps
|
6
|
+
include Mongoid::Locker
|
7
|
+
|
8
|
+
field :locker_locked_at, type: Time
|
9
|
+
field :locker_locked_until, type: Time
|
10
|
+
|
11
|
+
locker locked_at_field: :locker_locked_at,
|
12
|
+
locked_until_field: :locker_locked_until
|
13
|
+
|
14
|
+
## User Info
|
15
|
+
field :name, type: String
|
16
|
+
field :nickname, type: String
|
17
|
+
field :image, type: String
|
18
|
+
|
19
|
+
## Database authenticatable
|
20
|
+
field :email, type: String, default: ''
|
21
|
+
field :encrypted_password, type: String, default: ''
|
22
|
+
|
23
|
+
## Lockable
|
24
|
+
field :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
|
25
|
+
field :unlock_token, type: String # Only if unlock strategy is :email or :both
|
26
|
+
field :locked_at, type: Time
|
27
|
+
|
28
|
+
## Required
|
29
|
+
field :provider, type: String
|
30
|
+
field :uid, type: String, default: ''
|
31
|
+
|
32
|
+
## Tokens
|
33
|
+
field :tokens, type: Hash, default: {}
|
34
|
+
|
35
|
+
# Include default devise modules.
|
36
|
+
devise :database_authenticatable, :registerable, :lockable
|
37
|
+
include DeviseTokenAuth::Concerns::User
|
38
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Mang
|
4
|
+
include Mongoid::Document
|
5
|
+
include Mongoid::Timestamps
|
6
|
+
include Mongoid::Locker
|
7
|
+
|
8
|
+
field :locker_locked_at, type: Time
|
9
|
+
field :locker_locked_until, type: Time
|
10
|
+
|
11
|
+
locker locked_at_field: :locker_locked_at,
|
12
|
+
locked_until_field: :locker_locked_until
|
13
|
+
|
14
|
+
## User Info
|
15
|
+
field :name, type: String
|
16
|
+
field :nickname, type: String
|
17
|
+
field :image, type: String
|
18
|
+
|
19
|
+
## Database authenticatable
|
20
|
+
field :email, type: String, default: ''
|
21
|
+
field :encrypted_password, type: String, default: ''
|
22
|
+
|
23
|
+
## Recoverable
|
24
|
+
field :reset_password_token, type: String
|
25
|
+
field :reset_password_sent_at, type: Time
|
26
|
+
field :reset_password_redirect_url, type: String
|
27
|
+
field :allow_password_change, type: Boolean, default: false
|
28
|
+
|
29
|
+
## Rememberable
|
30
|
+
field :remember_created_at, type: Time
|
31
|
+
|
32
|
+
## Confirmable
|
33
|
+
field :confirmation_token, type: String
|
34
|
+
field :confirmed_at, type: Time
|
35
|
+
field :confirmation_sent_at, type: Time
|
36
|
+
field :unconfirmed_email, type: String # Only if using reconfirmable
|
37
|
+
|
38
|
+
## Required
|
39
|
+
field :provider, type: String
|
40
|
+
field :uid, type: String, default: ''
|
41
|
+
|
42
|
+
## Tokens
|
43
|
+
field :tokens, type: Hash, default: {}
|
44
|
+
|
45
|
+
include DeviseTokenAuth::Concerns::User
|
46
|
+
end
|