devise_jwt_auth 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +13 -0
- data/README.md +99 -0
- data/Rakefile +42 -0
- data/app/controllers/devise_jwt_auth/application_controller.rb +80 -0
- data/app/controllers/devise_jwt_auth/concerns/resource_finder.rb +44 -0
- data/app/controllers/devise_jwt_auth/concerns/set_user_by_jwt_token.rb +111 -0
- data/app/controllers/devise_jwt_auth/confirmations_controller.rb +88 -0
- data/app/controllers/devise_jwt_auth/omniauth_callbacks_controller.rb +291 -0
- data/app/controllers/devise_jwt_auth/passwords_controller.rb +217 -0
- data/app/controllers/devise_jwt_auth/refresh_token_controller.rb +41 -0
- data/app/controllers/devise_jwt_auth/registrations_controller.rb +203 -0
- data/app/controllers/devise_jwt_auth/sessions_controller.rb +131 -0
- data/app/controllers/devise_jwt_auth/unlocks_controller.rb +99 -0
- data/app/models/devise_jwt_auth/concerns/active_record_support.rb +16 -0
- data/app/models/devise_jwt_auth/concerns/confirmable_support.rb +27 -0
- data/app/models/devise_jwt_auth/concerns/mongoid_support.rb +19 -0
- data/app/models/devise_jwt_auth/concerns/tokens_serialization.rb +19 -0
- data/app/models/devise_jwt_auth/concerns/user.rb +117 -0
- data/app/models/devise_jwt_auth/concerns/user_omniauth_callbacks.rb +28 -0
- data/app/validators/devise_jwt_auth_email_validator.rb +23 -0
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/devise_jwt_auth/omniauth_external_window.html.erb +38 -0
- data/config/locales/da-DK.yml +52 -0
- data/config/locales/de.yml +51 -0
- data/config/locales/en.yml +57 -0
- data/config/locales/es.yml +51 -0
- data/config/locales/fr.yml +51 -0
- data/config/locales/he.yml +52 -0
- data/config/locales/it.yml +48 -0
- data/config/locales/ja.yml +48 -0
- data/config/locales/ko.yml +51 -0
- data/config/locales/nl.yml +32 -0
- data/config/locales/pl.yml +50 -0
- data/config/locales/pt-BR.yml +48 -0
- data/config/locales/pt.yml +50 -0
- data/config/locales/ro.yml +48 -0
- data/config/locales/ru.yml +52 -0
- data/config/locales/sq.yml +48 -0
- data/config/locales/sv.yml +52 -0
- data/config/locales/uk.yml +61 -0
- data/config/locales/vi.yml +52 -0
- data/config/locales/zh-CN.yml +48 -0
- data/config/locales/zh-HK.yml +50 -0
- data/config/locales/zh-TW.yml +50 -0
- data/lib/devise_jwt_auth.rb +14 -0
- data/lib/devise_jwt_auth/blacklist.rb +2 -0
- data/lib/devise_jwt_auth/controllers/helpers.rb +161 -0
- data/lib/devise_jwt_auth/controllers/url_helpers.rb +10 -0
- data/lib/devise_jwt_auth/engine.rb +96 -0
- data/lib/devise_jwt_auth/errors.rb +8 -0
- data/lib/devise_jwt_auth/rails/routes.rb +118 -0
- data/lib/devise_jwt_auth/token_factory.rb +51 -0
- data/lib/devise_jwt_auth/url.rb +44 -0
- data/lib/devise_jwt_auth/version.rb +5 -0
- data/lib/generators/devise_jwt_auth/USAGE +31 -0
- data/lib/generators/devise_jwt_auth/install_generator.rb +91 -0
- data/lib/generators/devise_jwt_auth/install_generator_helpers.rb +98 -0
- data/lib/generators/devise_jwt_auth/install_mongoid_generator.rb +46 -0
- data/lib/generators/devise_jwt_auth/install_views_generator.rb +18 -0
- data/lib/generators/devise_jwt_auth/templates/devise_jwt_auth.rb +74 -0
- data/lib/generators/devise_jwt_auth/templates/devise_jwt_auth_create_users.rb.erb +51 -0
- data/lib/generators/devise_jwt_auth/templates/user.rb.erb +9 -0
- data/lib/generators/devise_jwt_auth/templates/user_mongoid.rb.erb +56 -0
- data/lib/tasks/devise_token_auth_tasks.rake +6 -0
- data/test/controllers/custom/custom_confirmations_controller_test.rb +25 -0
- data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +33 -0
- data/test/controllers/custom/custom_passwords_controller_test.rb +79 -0
- data/test/controllers/custom/custom_refresh_token_controller_test.rb +36 -0
- data/test/controllers/custom/custom_registrations_controller_test.rb +59 -0
- data/test/controllers/custom/custom_sessions_controller_test.rb +39 -0
- data/test/controllers/demo_group_controller_test.rb +150 -0
- data/test/controllers/demo_mang_controller_test.rb +286 -0
- data/test/controllers/demo_user_controller_test.rb +650 -0
- data/test/controllers/devise_jwt_auth/confirmations_controller_test.rb +194 -0
- data/test/controllers/devise_jwt_auth/omniauth_callbacks_controller_test.rb +462 -0
- data/test/controllers/devise_jwt_auth/passwords_controller_test.rb +881 -0
- data/test/controllers/devise_jwt_auth/refresh_token_controller_test.rb +84 -0
- data/test/controllers/devise_jwt_auth/registrations_controller_test.rb +944 -0
- data/test/controllers/devise_jwt_auth/sessions_controller_test.rb +510 -0
- data/test/controllers/devise_jwt_auth/unlocks_controller_test.rb +197 -0
- data/test/controllers/overrides/confirmations_controller_test.rb +47 -0
- data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +53 -0
- data/test/controllers/overrides/passwords_controller_test.rb +65 -0
- data/test/controllers/overrides/refresh_token_controller_test.rb +37 -0
- data/test/controllers/overrides/registrations_controller_test.rb +47 -0
- data/test/controllers/overrides/sessions_controller_test.rb +35 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/app/active_record/confirmable_user.rb +11 -0
- data/test/dummy/app/active_record/lockable_user.rb +7 -0
- data/test/dummy/app/active_record/mang.rb +5 -0
- data/test/dummy/app/active_record/only_email_user.rb +7 -0
- data/test/dummy/app/active_record/scoped_user.rb +9 -0
- data/test/dummy/app/active_record/unconfirmable_user.rb +9 -0
- 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 +18 -0
- data/test/dummy/app/controllers/auth_origin_controller.rb +7 -0
- data/test/dummy/app/controllers/custom/confirmations_controller.rb +13 -0
- data/test/dummy/app/controllers/custom/omniauth_callbacks_controller.rb +13 -0
- data/test/dummy/app/controllers/custom/passwords_controller.rb +39 -0
- data/test/dummy/app/controllers/custom/refresh_token_controller.rb +20 -0
- data/test/dummy/app/controllers/custom/registrations_controller.rb +39 -0
- data/test/dummy/app/controllers/custom/sessions_controller.rb +29 -0
- data/test/dummy/app/controllers/demo_group_controller.rb +15 -0
- data/test/dummy/app/controllers/demo_mang_controller.rb +14 -0
- data/test/dummy/app/controllers/demo_user_controller.rb +27 -0
- data/test/dummy/app/controllers/overrides/confirmations_controller.rb +37 -0
- data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +16 -0
- data/test/dummy/app/controllers/overrides/passwords_controller.rb +45 -0
- data/test/dummy/app/controllers/overrides/refresh_token_controller.rb +22 -0
- data/test/dummy/app/controllers/overrides/registrations_controller.rb +29 -0
- data/test/dummy/app/controllers/overrides/sessions_controller.rb +36 -0
- data/test/dummy/app/helpers/application_helper.rb +1058 -0
- data/test/dummy/app/models/concerns/favorite_color.rb +19 -0
- 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 +14 -0
- data/test/dummy/config.ru +18 -0
- data/test/dummy/config/application.rb +48 -0
- data/test/dummy/config/application.yml.bk +0 -0
- data/test/dummy/config/boot.rb +11 -0
- data/test/dummy/config/environment.rb +7 -0
- data/test/dummy/config/environments/development.rb +46 -0
- data/test/dummy/config/environments/production.rb +84 -0
- data/test/dummy/config/environments/test.rb +50 -0
- data/test/dummy/config/initializers/assets.rb +10 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +9 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/devise.rb +290 -0
- data/test/dummy/config/initializers/devise_jwt_auth.rb +55 -0
- data/test/dummy/config/initializers/figaro.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +6 -0
- data/test/dummy/config/initializers/inflections.rb +18 -0
- data/test/dummy/config/initializers/mime_types.rb +6 -0
- data/test/dummy/config/initializers/omniauth.rb +11 -0
- data/test/dummy/config/initializers/session_store.rb +5 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +16 -0
- data/test/dummy/config/routes.rb +57 -0
- data/test/dummy/config/spring.rb +3 -0
- data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +58 -0
- data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +57 -0
- data/test/dummy/db/migrate/20140829044006_add_operating_thetan_to_user.rb +8 -0
- data/test/dummy/db/migrate/20140916224624_add_favorite_color_to_mangs.rb +7 -0
- data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +55 -0
- data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +56 -0
- data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +56 -0
- data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +56 -0
- data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +56 -0
- data/test/dummy/db/migrate/20190924101113_devise_token_auth_create_confirmable_users.rb +49 -0
- data/test/dummy/db/schema.rb +198 -0
- data/test/dummy/lib/migration_database_helper.rb +43 -0
- data/test/dummy/tmp/generators/app/models/user.rb +9 -0
- data/test/dummy/tmp/generators/config/initializers/devise_jwt_auth.rb +74 -0
- data/test/dummy/tmp/generators/config/routes.rb +4 -0
- data/test/dummy/tmp/generators/db/migrate/20200206224309_devise_jwt_auth_create_users.rb +51 -0
- data/test/factories/users.rb +41 -0
- data/test/lib/devise_jwt_auth/blacklist_test.rb +11 -0
- data/test/lib/devise_jwt_auth/token_factory_test.rb +115 -0
- data/test/lib/devise_jwt_auth/url_test.rb +26 -0
- data/test/lib/generators/devise_jwt_auth/install_generator_test.rb +219 -0
- data/test/lib/generators/devise_jwt_auth/install_generator_with_namespace_test.rb +224 -0
- data/test/lib/generators/devise_jwt_auth/install_views_generator_test.rb +25 -0
- data/test/models/concerns/mongoid_support_test.rb +31 -0
- data/test/models/concerns/tokens_serialization_test.rb +72 -0
- data/test/models/confirmable_user_test.rb +35 -0
- data/test/models/only_email_user_test.rb +29 -0
- data/test/models/user_test.rb +110 -0
- data/test/support/controllers/routes.rb +43 -0
- data/test/test_helper.rb +91 -0
- metadata +503 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class <%= user_class %> < ActiveRecord::Base
|
|
4
|
+
# Include default devise modules. Others available are:
|
|
5
|
+
# :confirmable, :lockable, :timeoutable and :omniauthable
|
|
6
|
+
devise :database_authenticatable, :registerable,
|
|
7
|
+
:recoverable, :rememberable, :trackable, :validatable
|
|
8
|
+
include DeviseJwtAuth::Concerns::User
|
|
9
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class <%= user_class %>
|
|
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
|
+
## Database authenticatable
|
|
15
|
+
field :email, type: String, default: ''
|
|
16
|
+
field :encrypted_password, type: String, default: ''
|
|
17
|
+
|
|
18
|
+
## Recoverable
|
|
19
|
+
field :reset_password_token, type: String
|
|
20
|
+
field :reset_password_sent_at, type: Time
|
|
21
|
+
field :reset_password_redirect_url, type: String
|
|
22
|
+
field :allow_password_change, type: Boolean, default: false
|
|
23
|
+
|
|
24
|
+
## Rememberable
|
|
25
|
+
field :remember_created_at, type: Time
|
|
26
|
+
|
|
27
|
+
## Confirmable
|
|
28
|
+
field :confirmation_token, type: String
|
|
29
|
+
field :confirmed_at, type: Time
|
|
30
|
+
field :confirmation_sent_at, type: Time
|
|
31
|
+
field :unconfirmed_email, type: String # Only if using reconfirmable
|
|
32
|
+
|
|
33
|
+
## Lockable
|
|
34
|
+
# field :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
|
|
35
|
+
# field :unlock_token, type: String # Only if unlock strategy is :email or :both
|
|
36
|
+
# field :locked_at, type: Time
|
|
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. Others available are:
|
|
46
|
+
# :confirmable, :lockable, :timeoutable and :omniauthable
|
|
47
|
+
devise :database_authenticatable, :registerable,
|
|
48
|
+
:recoverable, :rememberable, :trackable, :validatable
|
|
49
|
+
include DeviseJwtAuth::Concerns::User
|
|
50
|
+
|
|
51
|
+
index({ email: 1 }, { name: 'email_index', unique: true, background: true })
|
|
52
|
+
index({ reset_password_token: 1 }, { name: 'reset_password_token_index', unique: true, sparse: true, background: true })
|
|
53
|
+
index({ confirmation_token: 1 }, { name: 'confirmation_token_index', unique: true, sparse: true, background: true })
|
|
54
|
+
index({ uid: 1, provider: 1}, { name: 'uid_provider_index', unique: true, background: true })
|
|
55
|
+
# index({ unlock_token: 1 }, { name: 'unlock_token_index', unique: true, sparse: true, background: true })
|
|
56
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class Custom::ConfirmationsControllerTest < ActionController::TestCase
|
|
6
|
+
describe Custom::ConfirmationsController do
|
|
7
|
+
include CustomControllersRoutes
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@redirect_url = Faker::Internet.url
|
|
11
|
+
@new_user = create(:user)
|
|
12
|
+
@new_user.send_confirmation_instructions(redirect_url: @redirect_url)
|
|
13
|
+
@mail = ActionMailer::Base.deliveries.last
|
|
14
|
+
@token = @mail.body.match(/confirmation_token=([^&]*)&/)[1]
|
|
15
|
+
@client_config = @mail.body.match(/config=([^&]*)&/)[1]
|
|
16
|
+
|
|
17
|
+
get :show,
|
|
18
|
+
params: { confirmation_token: @token, redirect_url: @redirect_url }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
test 'yield resource to block on show success' do
|
|
22
|
+
assert @controller.show_block_called?, 'show failed to yield resource to provided block'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class Custom::OmniauthCallbacksControllerTest < ActionDispatch::IntegrationTest
|
|
6
|
+
describe Custom::OmniauthCallbacksController do
|
|
7
|
+
include CustomControllersRoutes
|
|
8
|
+
|
|
9
|
+
setup do
|
|
10
|
+
OmniAuth.config.test_mode = true
|
|
11
|
+
OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(
|
|
12
|
+
provider: 'facebook',
|
|
13
|
+
uid: '123545',
|
|
14
|
+
info: {
|
|
15
|
+
name: 'swong',
|
|
16
|
+
email: 'swongsong@yandex.ru'
|
|
17
|
+
}
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
test 'yield resource to block on omniauth_success success' do
|
|
22
|
+
@redirect_url = 'http://ng-token-auth.dev/'
|
|
23
|
+
get '/nice_user_auth/facebook',
|
|
24
|
+
params: { auth_origin_url: @redirect_url,
|
|
25
|
+
omniauth_window_type: 'newWindow' }
|
|
26
|
+
|
|
27
|
+
follow_all_redirects!
|
|
28
|
+
|
|
29
|
+
assert @controller.omniauth_success_block_called?,
|
|
30
|
+
'omniauth_success failed to yield resource to provided block'
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class Custom::PasswordsControllerTest < ActionController::TestCase
|
|
6
|
+
describe Custom::PasswordsController do
|
|
7
|
+
include CustomControllersRoutes
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@resource = create(:user, :confirmed)
|
|
11
|
+
@redirect_url = 'http://ng-token-auth.dev'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
test 'yield resource to block on create success' do
|
|
15
|
+
post :create,
|
|
16
|
+
params: { email: @resource.email,
|
|
17
|
+
redirect_url: @redirect_url }
|
|
18
|
+
|
|
19
|
+
@mail = ActionMailer::Base.deliveries.last
|
|
20
|
+
@resource.reload
|
|
21
|
+
|
|
22
|
+
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
|
|
23
|
+
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
|
24
|
+
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
|
25
|
+
|
|
26
|
+
assert @controller.create_block_called?,
|
|
27
|
+
'create failed to yield resource to provided block'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
test 'yield resource to block on edit success' do
|
|
31
|
+
@resource = create(:user)
|
|
32
|
+
@redirect_url = 'http://ng-token-auth.dev'
|
|
33
|
+
|
|
34
|
+
post :create,
|
|
35
|
+
params: { email: @resource.email,
|
|
36
|
+
redirect_url: @redirect_url },
|
|
37
|
+
xhr: true
|
|
38
|
+
|
|
39
|
+
@mail = ActionMailer::Base.deliveries.last
|
|
40
|
+
@resource.reload
|
|
41
|
+
|
|
42
|
+
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
|
|
43
|
+
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
|
44
|
+
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
|
45
|
+
|
|
46
|
+
get :edit,
|
|
47
|
+
params: { reset_password_token: @mail_reset_token,
|
|
48
|
+
redirect_url: @mail_redirect_url },
|
|
49
|
+
xhr: true
|
|
50
|
+
@resource.reload
|
|
51
|
+
assert @controller.edit_block_called?,
|
|
52
|
+
'edit failed to yield resource to provided block'
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
test 'yield resource to block on update success' do
|
|
56
|
+
@auth_headers = @resource.create_named_token_pair
|
|
57
|
+
request.headers.merge!(@auth_headers)
|
|
58
|
+
@new_password = Faker::Internet.password
|
|
59
|
+
put :update,
|
|
60
|
+
params: { password: @new_password,
|
|
61
|
+
password_confirmation: @new_password }
|
|
62
|
+
assert @controller.update_block_called?, 'update failed to yield resource to provided block'
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
test 'yield resource to block on update success with custom json' do
|
|
66
|
+
@auth_headers = @resource.create_named_token_pair
|
|
67
|
+
request.headers.merge!(@auth_headers)
|
|
68
|
+
@new_password = Faker::Internet.password
|
|
69
|
+
put :update,
|
|
70
|
+
params: { password: @new_password,
|
|
71
|
+
password_confirmation: @new_password }
|
|
72
|
+
|
|
73
|
+
@data = JSON.parse(response.body)
|
|
74
|
+
|
|
75
|
+
assert @controller.update_block_called?, 'update failed to yield resource to provided block'
|
|
76
|
+
assert_equal @data['custom'], 'foo'
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class Custom::RefreshTokenControllerTest < ActionDispatch::IntegrationTest
|
|
6
|
+
describe Custom::RefreshTokenController do
|
|
7
|
+
include CustomControllersRoutes
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@resource = create(:user, :confirmed)
|
|
11
|
+
@auth_headers = get_cookie_header(DeviseJwtAuth.refresh_token_name,
|
|
12
|
+
@resource.create_refresh_token
|
|
13
|
+
)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test 'yield resource to block on refresh_token success' do
|
|
17
|
+
get '/nice_user_auth/refresh_token',
|
|
18
|
+
params: {},
|
|
19
|
+
headers: @auth_headers
|
|
20
|
+
assert @controller.refresh_token_block_called?,
|
|
21
|
+
'refresh_token failed to yield resource to provided block'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
test 'yield resource to block on refresh_token success with custom json' do
|
|
25
|
+
get '/nice_user_auth/refresh_token',
|
|
26
|
+
params: {},
|
|
27
|
+
headers: @auth_headers
|
|
28
|
+
|
|
29
|
+
@data = JSON.parse(response.body)
|
|
30
|
+
|
|
31
|
+
assert @controller.refresh_token_block_called?,
|
|
32
|
+
'refresh_token failed to yield resource to provided block'
|
|
33
|
+
assert_equal @data['custom'], 'foo'
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class Custom::RegistrationsControllerTest < ActionDispatch::IntegrationTest
|
|
6
|
+
describe Custom::RegistrationsController do
|
|
7
|
+
include CustomControllersRoutes
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@create_params = attributes_for(:user,
|
|
11
|
+
confirm_success_url: Faker::Internet.url,
|
|
12
|
+
unpermitted_param: '(x_x)')
|
|
13
|
+
|
|
14
|
+
@existing_user = create(:user, :confirmed)
|
|
15
|
+
@auth_headers = @existing_user.create_named_token_pair
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
test 'yield resource to block on create success' do
|
|
19
|
+
post '/nice_user_auth', params: @create_params
|
|
20
|
+
assert @controller.create_block_called?,
|
|
21
|
+
'create failed to yield resource to provided block'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
test 'yield resource to block on create success with custom json' do
|
|
25
|
+
post '/nice_user_auth', params: @create_params
|
|
26
|
+
|
|
27
|
+
@data = JSON.parse(response.body)
|
|
28
|
+
|
|
29
|
+
assert @controller.create_block_called?,
|
|
30
|
+
'create failed to yield resource to provided block'
|
|
31
|
+
assert_equal @data['custom'], 'foo'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
test 'yield resource to block on update success' do
|
|
35
|
+
put '/nice_user_auth',
|
|
36
|
+
params: {
|
|
37
|
+
nickname: "Ol' Sunshine-face"
|
|
38
|
+
},
|
|
39
|
+
headers: @auth_headers
|
|
40
|
+
assert @controller.update_block_called?,
|
|
41
|
+
'update failed to yield resource to provided block'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
test 'yield resource to block on destroy success' do
|
|
45
|
+
delete '/nice_user_auth', headers: @auth_headers
|
|
46
|
+
assert @controller.destroy_block_called?,
|
|
47
|
+
'destroy failed to yield resource to provided block'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe 'when overriding #build_resource' do
|
|
51
|
+
test 'it fails' do
|
|
52
|
+
Custom::RegistrationsController.any_instance.stubs(:build_resource).returns(nil)
|
|
53
|
+
assert_raises DeviseJwtAuth::Errors::NoResourceDefinedError do
|
|
54
|
+
post '/nice_user_auth', params: @create_params
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class Custom::SessionsControllerTest < ActionController::TestCase
|
|
6
|
+
describe Custom::SessionsController do
|
|
7
|
+
include CustomControllersRoutes
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@existing_user = create(:user, :confirmed)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
test 'yield resource to block on create success' do
|
|
14
|
+
post :create,
|
|
15
|
+
params: {
|
|
16
|
+
email: @existing_user.email,
|
|
17
|
+
password: @existing_user.password
|
|
18
|
+
}
|
|
19
|
+
assert @controller.create_block_called?,
|
|
20
|
+
'create failed to yield resource to provided block'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
test 'yield resource to block on destroy success' do
|
|
24
|
+
@auth_headers = @existing_user.create_named_token_pair
|
|
25
|
+
request.headers.merge!(@auth_headers)
|
|
26
|
+
delete :destroy, format: :json
|
|
27
|
+
assert @controller.destroy_block_called?,
|
|
28
|
+
'destroy failed to yield resource to provided block'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
test 'render method override' do
|
|
32
|
+
post :create,
|
|
33
|
+
params: { email: @existing_user.email,
|
|
34
|
+
password: @existing_user.password }
|
|
35
|
+
@data = JSON.parse(response.body)
|
|
36
|
+
assert_equal @data['custom'], 'foo'
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
# was the web request successful?
|
|
6
|
+
# was the user redirected to the right page?
|
|
7
|
+
# was the user successfully authenticated?
|
|
8
|
+
# was the correct object stored in the response?
|
|
9
|
+
# was the appropriate message delivered in the json payload?
|
|
10
|
+
|
|
11
|
+
class DemoGroupControllerTest < ActionDispatch::IntegrationTest
|
|
12
|
+
describe DemoGroupController do
|
|
13
|
+
describe 'Token access' do
|
|
14
|
+
before do
|
|
15
|
+
# user
|
|
16
|
+
@resource = create(:user, :confirmed)
|
|
17
|
+
@resource_auth_headers = @resource.create_named_token_pair
|
|
18
|
+
|
|
19
|
+
# @resource_token = @resource_auth_headers['access-token']
|
|
20
|
+
# @resource_client_id = @resource_auth_headers['client']
|
|
21
|
+
# @resource_expiry = @resource_auth_headers['expiry']
|
|
22
|
+
|
|
23
|
+
# mang
|
|
24
|
+
@mang = create(:mang_user, :confirmed)
|
|
25
|
+
|
|
26
|
+
@mang_auth_headers = @mang.create_named_token_pair
|
|
27
|
+
|
|
28
|
+
# @mang_token = @mang_auth_headers['access-token']
|
|
29
|
+
# @mang_client_id = @mang_auth_headers['client']
|
|
30
|
+
# @mang_expiry = @mang_auth_headers['expiry']
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe 'user access' do
|
|
34
|
+
before do
|
|
35
|
+
# ensure that request is not treated as batch request
|
|
36
|
+
# age_token(@resource, @resource_client_id)
|
|
37
|
+
|
|
38
|
+
get '/demo/members_only_group',
|
|
39
|
+
params: {},
|
|
40
|
+
headers: @resource_auth_headers
|
|
41
|
+
|
|
42
|
+
@resp_token = response.headers['access-token']
|
|
43
|
+
@resp_client_id = response.headers['client']
|
|
44
|
+
@resp_expiry = response.headers['expiry']
|
|
45
|
+
@resp_uid = response.headers['uid']
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
test 'request is successful' do
|
|
49
|
+
assert_equal 200, response.status
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe 'devise mappings' do
|
|
53
|
+
it 'should define current_user' do
|
|
54
|
+
assert_equal @resource, @controller.current_user
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'should define user_signed_in?' do
|
|
58
|
+
assert @controller.user_signed_in?
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'should not define current_mang' do
|
|
62
|
+
refute_equal @resource, @controller.current_mang
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'should define current_member' do
|
|
66
|
+
assert_equal @resource, @controller.current_member
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'should define current_members' do
|
|
70
|
+
assert @controller.current_members.include? @resource
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'should define member_signed_in?' do
|
|
74
|
+
assert @controller.current_members.include? @resource
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it 'should define render_authenticate_error' do
|
|
78
|
+
assert @controller.methods.include?(:render_authenticate_error)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
describe 'mang access' do
|
|
84
|
+
before do
|
|
85
|
+
# ensure that request is not treated as batch request
|
|
86
|
+
# age_token(@mang, @mang_client_id)
|
|
87
|
+
|
|
88
|
+
get '/demo/members_only_group',
|
|
89
|
+
params: {},
|
|
90
|
+
headers: @mang_auth_headers
|
|
91
|
+
|
|
92
|
+
@resp_token = response.headers['access-token']
|
|
93
|
+
@resp_client_id = response.headers['client']
|
|
94
|
+
@resp_expiry = response.headers['expiry']
|
|
95
|
+
@resp_uid = response.headers['uid']
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
test 'request is successful' do
|
|
99
|
+
assert_equal 200, response.status
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
describe 'devise mappings' do
|
|
103
|
+
it 'should define current_mang' do
|
|
104
|
+
assert_equal @mang, @controller.current_mang
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it 'should define mang_signed_in?' do
|
|
108
|
+
assert @controller.mang_signed_in?
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'should not define current_mang' do
|
|
112
|
+
refute_equal @mang, @controller.current_user
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it 'should define current_member' do
|
|
116
|
+
assert_equal @mang, @controller.current_member
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it 'should define current_members' do
|
|
120
|
+
assert @controller.current_members.include? @mang
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it 'should define member_signed_in?' do
|
|
124
|
+
assert @controller.current_members.include? @mang
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it 'should define render_authenticate_error' do
|
|
128
|
+
assert @controller.methods.include?(:render_authenticate_error)
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
describe 'failed access' do
|
|
134
|
+
before do
|
|
135
|
+
get '/demo/members_only_group',
|
|
136
|
+
params: {},
|
|
137
|
+
headers: @mang_auth_headers.merge('access-token' => 'bogus')
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it 'should not return any auth headers' do
|
|
141
|
+
refute response.headers['access-token']
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it 'should return error: unauthorized status' do
|
|
145
|
+
assert_equal 401, response.status
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|