devise_jwt_auth 0.1.1 → 0.1.6
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 +4 -4
- data/README.md +3 -3
- data/app/controllers/devise_jwt_auth/application_controller.rb +15 -13
- data/app/controllers/devise_jwt_auth/concerns/resource_finder.rb +2 -6
- data/app/controllers/devise_jwt_auth/concerns/{set_user_by_jwt_token.rb → set_user_by_token.rb} +23 -19
- data/app/controllers/devise_jwt_auth/confirmations_controller.rb +10 -19
- data/app/controllers/devise_jwt_auth/omniauth_callbacks_controller.rb +32 -33
- data/app/controllers/devise_jwt_auth/passwords_controller.rb +29 -19
- data/app/controllers/devise_jwt_auth/refresh_token_controller.rb +4 -1
- data/app/controllers/devise_jwt_auth/registrations_controller.rb +40 -21
- data/app/controllers/devise_jwt_auth/sessions_controller.rb +21 -21
- data/app/controllers/devise_jwt_auth/unlocks_controller.rb +5 -4
- data/app/models/devise_jwt_auth/concerns/active_record_support.rb +3 -0
- data/app/models/devise_jwt_auth/concerns/confirmable_support.rb +7 -4
- data/app/models/devise_jwt_auth/concerns/mongoid_support.rb +3 -0
- data/app/models/devise_jwt_auth/concerns/tokens_serialization.rb +4 -1
- data/app/models/devise_jwt_auth/concerns/user.rb +18 -9
- data/app/models/devise_jwt_auth/concerns/user_omniauth_callbacks.rb +11 -3
- data/app/validators/devise_jwt_auth_email_validator.rb +5 -4
- data/lib/devise_jwt_auth/blacklist.rb +2 -0
- data/lib/devise_jwt_auth/controllers/url_helpers.rb +1 -2
- data/lib/devise_jwt_auth/engine.rb +4 -4
- data/lib/devise_jwt_auth/rails/routes.rb +35 -24
- data/lib/devise_jwt_auth/token_factory.rb +3 -2
- data/lib/devise_jwt_auth/url.rb +2 -4
- data/lib/devise_jwt_auth/version.rb +1 -1
- data/lib/generators/devise_jwt_auth/install_generator.rb +7 -6
- data/lib/generators/devise_jwt_auth/install_generator_helpers.rb +27 -6
- data/lib/generators/devise_jwt_auth/install_mongoid_generator.rb +3 -2
- data/lib/generators/devise_jwt_auth/templates/devise_jwt_auth.rb +15 -16
- data/lib/generators/devise_jwt_auth/templates/devise_jwt_auth_create_users.rb.erb +15 -11
- data/lib/generators/devise_jwt_auth/templates/user.rb.erb +2 -2
- data/test/controllers/custom/custom_confirmations_controller_test.rb +2 -2
- data/test/controllers/custom/custom_passwords_controller_test.rb +4 -4
- data/test/controllers/custom/custom_refresh_token_controller_test.rb +2 -3
- data/test/controllers/custom/custom_registrations_controller_test.rb +2 -2
- data/test/controllers/demo_mang_controller_test.rb +206 -210
- data/test/controllers/demo_user_controller_test.rb +358 -374
- data/test/controllers/devise_jwt_auth/confirmations_controller_test.rb +5 -5
- data/test/controllers/devise_jwt_auth/omniauth_callbacks_controller_test.rb +6 -7
- data/test/controllers/devise_jwt_auth/passwords_controller_test.rb +11 -13
- data/test/controllers/devise_jwt_auth/refresh_token_controller_test.rb +8 -12
- data/test/controllers/devise_jwt_auth/registrations_controller_test.rb +23 -25
- data/test/controllers/devise_jwt_auth/sessions_controller_test.rb +32 -34
- data/test/controllers/devise_jwt_auth/unlocks_controller_test.rb +2 -2
- data/test/controllers/overrides/confirmations_controller_test.rb +1 -1
- data/test/controllers/overrides/passwords_controller_test.rb +1 -1
- data/test/controllers/overrides/refresh_token_controller_test.rb +1 -2
- data/test/controllers/overrides/registrations_controller_test.rb +1 -1
- data/test/dummy/app/controllers/application_controller.rb +1 -1
- data/test/dummy/app/controllers/custom/refresh_token_controller.rb +2 -1
- data/test/dummy/app/controllers/custom/registrations_controller.rb +1 -1
- data/test/dummy/app/controllers/overrides/confirmations_controller.rb +4 -4
- data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +4 -4
- data/test/dummy/app/controllers/overrides/passwords_controller.rb +4 -4
- data/test/dummy/app/controllers/overrides/refresh_token_controller.rb +1 -1
- data/test/dummy/app/controllers/overrides/registrations_controller.rb +2 -2
- data/test/dummy/app/controllers/overrides/sessions_controller.rb +2 -2
- data/test/dummy/app/models/concerns/favorite_color.rb +11 -9
- data/test/dummy/config.ru +2 -2
- data/test/dummy/config/application.rb +1 -0
- data/test/dummy/config/boot.rb +1 -1
- data/test/dummy/config/environments/test.rb +11 -7
- data/test/dummy/config/initializers/figaro.rb +1 -1
- data/test/dummy/config/initializers/omniauth.rb +2 -2
- data/test/dummy/config/routes.rb +8 -8
- data/test/dummy/db/migrate/{20140715061447_devise_token_auth_create_users.rb → 20140715061447_devise_jwt_auth_create_users.rb} +0 -0
- data/test/dummy/db/migrate/{20140715061805_devise_token_auth_create_mangs.rb → 20140715061805_devise_jwt_auth_create_mangs.rb} +0 -0
- data/test/dummy/db/migrate/{20141222035835_devise_token_auth_create_only_email_users.rb → 20141222035835_devise_jwt_auth_create_only_email_users.rb} +9 -9
- data/test/dummy/db/migrate/{20141222053502_devise_token_auth_create_unregisterable_users.rb → 20141222053502_devise_jwt_auth_create_unregisterable_users.rb} +0 -0
- data/test/dummy/db/migrate/{20150708104536_devise_token_auth_create_unconfirmable_users.rb → 20150708104536_devise_jwt_auth_create_unconfirmable_users.rb} +0 -0
- data/test/dummy/db/migrate/{20160103235141_devise_token_auth_create_scoped_users.rb → 20160103235141_devise_jwt_auth_create_scoped_users.rb} +0 -0
- data/test/dummy/db/migrate/{20160629184441_devise_token_auth_create_lockable_users.rb → 20160629184441_devise_jwt_auth_create_lockable_users.rb} +0 -0
- data/test/dummy/db/migrate/{20190924101113_devise_token_auth_create_confirmable_users.rb → 20190924101113_devise_jwt_auth_create_confirmable_users.rb} +6 -5
- data/test/dummy/db/schema.rb +170 -170
- data/test/dummy/tmp/generators/app/controllers/application_controller.rb +6 -0
- data/test/dummy/tmp/generators/app/models/user.rb +9 -0
- data/test/dummy/tmp/generators/config/initializers/devise_jwt_auth.rb +73 -0
- data/test/dummy/tmp/generators/db/migrate/20201006030349_devise_jwt_auth_create_users.rb +54 -0
- data/test/factories/users.rb +5 -3
- data/test/lib/devise_jwt_auth/token_factory_test.rb +6 -6
- data/test/lib/generators/devise_jwt_auth/install_generator_test.rb +3 -20
- data/test/lib/generators/devise_jwt_auth/install_generator_with_namespace_test.rb +4 -21
- data/test/models/concerns/tokens_serialization_test.rb +68 -68
- data/test/models/user_test.rb +35 -37
- data/test/support/controllers/routes.rb +7 -5
- data/test/test_helper.rb +1 -1
- metadata +70 -76
@@ -1,7 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Dumping and loading serialized tokens in JSON format.
|
1
4
|
module DeviseJwtAuth::Concerns::TokensSerialization
|
2
5
|
# Serialization hash to json
|
3
6
|
def self.dump(object)
|
4
|
-
object
|
7
|
+
object&.each_value(&:compact!)
|
5
8
|
JSON.generate(object)
|
6
9
|
end
|
7
10
|
|
@@ -22,14 +22,20 @@ module DeviseJwtAuth::Concerns::User
|
|
22
22
|
include DeviseJwtAuth::Concerns::MongoidSupport
|
23
23
|
end
|
24
24
|
|
25
|
-
if DeviseJwtAuth.default_callbacks
|
26
|
-
include DeviseJwtAuth::Concerns::UserOmniauthCallbacks
|
27
|
-
end
|
25
|
+
include DeviseJwtAuth::Concerns::UserOmniauthCallbacks if DeviseJwtAuth.default_callbacks
|
28
26
|
|
29
27
|
# don't use default devise email validation
|
30
|
-
def email_required
|
31
|
-
|
32
|
-
|
28
|
+
def email_required?
|
29
|
+
false
|
30
|
+
end
|
31
|
+
|
32
|
+
def email_changed?
|
33
|
+
false
|
34
|
+
end
|
35
|
+
|
36
|
+
def will_save_change_to_email?
|
37
|
+
false
|
38
|
+
end
|
33
39
|
|
34
40
|
if DeviseJwtAuth.send_confirmation_email && devise_modules.include?(:confirmable)
|
35
41
|
include DeviseJwtAuth::Concerns::ConfirmableSupport
|
@@ -37,6 +43,7 @@ module DeviseJwtAuth::Concerns::User
|
|
37
43
|
|
38
44
|
def password_required?
|
39
45
|
return false unless provider == 'email'
|
46
|
+
|
40
47
|
super
|
41
48
|
end
|
42
49
|
|
@@ -77,11 +84,11 @@ module DeviseJwtAuth::Concerns::User
|
|
77
84
|
end
|
78
85
|
|
79
86
|
def create_token(token_options = {})
|
80
|
-
DeviseJwtAuth::TokenFactory.create_access_token({sub: uid}.merge(token_options))
|
87
|
+
DeviseJwtAuth::TokenFactory.create_access_token({ sub: uid }.merge(token_options))
|
81
88
|
end
|
82
89
|
|
83
90
|
def create_refresh_token(token_options = {})
|
84
|
-
DeviseJwtAuth::TokenFactory.create_refresh_token({sub: uid}.merge(token_options))
|
91
|
+
DeviseJwtAuth::TokenFactory.create_refresh_token({ sub: uid }.merge(token_options))
|
85
92
|
end
|
86
93
|
end
|
87
94
|
|
@@ -93,7 +100,9 @@ module DeviseJwtAuth::Concerns::User
|
|
93
100
|
|
94
101
|
# this must be done from the controller so that additional params
|
95
102
|
# can be passed on from the client
|
96
|
-
def send_confirmation_notification
|
103
|
+
def send_confirmation_notification?
|
104
|
+
false
|
105
|
+
end
|
97
106
|
|
98
107
|
def build_auth_url(base_url, args)
|
99
108
|
args[:uid] = uid
|
@@ -4,12 +4,20 @@ module DeviseJwtAuth::Concerns::UserOmniauthCallbacks
|
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
6
|
included do
|
7
|
-
validates :email, presence: true,if: :email_provider?
|
8
|
-
validates :email,
|
7
|
+
validates :email, presence: true, if: :email_provider?
|
8
|
+
validates :email,
|
9
|
+
devise_jwt_auth_email: true,
|
10
|
+
allow_nil: true,
|
11
|
+
allow_blank: true,
|
12
|
+
if: :email_provider?
|
13
|
+
|
9
14
|
validates_presence_of :uid, unless: :email_provider?
|
10
15
|
|
11
16
|
# only validate unique emails among email registration users
|
12
|
-
validates :email,
|
17
|
+
validates :email,
|
18
|
+
uniqueness: { case_sensitive: false, scope: :provider },
|
19
|
+
on: :create,
|
20
|
+
if: :email_provider?
|
13
21
|
|
14
22
|
# keep uid in sync with email
|
15
23
|
before_save :sync_uid
|
@@ -1,10 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Email field validator.
|
3
4
|
class DeviseJwtAuthEmailValidator < ActiveModel::EachValidator
|
4
5
|
def validate_each(record, attribute, value)
|
5
|
-
|
6
|
-
|
7
|
-
|
6
|
+
return if value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
|
7
|
+
|
8
|
+
record.errors[attribute] << email_invalid_message
|
8
9
|
end
|
9
10
|
|
10
11
|
private
|
@@ -14,7 +15,7 @@ class DeviseJwtAuthEmailValidator < ActiveModel::EachValidator
|
|
14
15
|
message = options[:message]
|
15
16
|
|
16
17
|
if message.nil?
|
17
|
-
# Try
|
18
|
+
# Try DeviseJwtAuth translations or fallback to ActiveModel translations
|
18
19
|
message = I18n.t(:'errors.messages.not_email', default: :'errors.messages.invalid')
|
19
20
|
end
|
20
21
|
|
@@ -33,7 +33,7 @@ module DeviseJwtAuth
|
|
33
33
|
|
34
34
|
self.send_new_access_token_on_each_request = false
|
35
35
|
self.refresh_token_lifespan = 1.week
|
36
|
-
self.access_token_lifespan =
|
36
|
+
self.access_token_lifespan = 15.minutes
|
37
37
|
self.refresh_token_name = 'refresh-token'
|
38
38
|
self.access_token_name = 'access-token'
|
39
39
|
self.refresh_token_encryption_key = 'your-refresh-token-secret-key-here'
|
@@ -51,12 +51,12 @@ module DeviseJwtAuth
|
|
51
51
|
self.send_confirmation_email = false
|
52
52
|
self.require_client_password_reset_token = false
|
53
53
|
|
54
|
-
def self.setup
|
54
|
+
def self.setup
|
55
55
|
yield self
|
56
56
|
|
57
57
|
Rails.application.config.after_initialize do
|
58
58
|
if defined?(::OmniAuth)
|
59
|
-
::OmniAuth
|
59
|
+
::OmniAuth.config.path_prefix = Devise.omniauth_path_prefix = omniauth_prefix
|
60
60
|
|
61
61
|
# Omniauth currently does not pass along omniauth.params upon failure redirect
|
62
62
|
# see also: https://github.com/intridea/omniauth/issues/626
|
@@ -84,7 +84,7 @@ module DeviseJwtAuth
|
|
84
84
|
fail!(mocked_auth)
|
85
85
|
else
|
86
86
|
@env['omniauth.auth'] = mocked_auth
|
87
|
-
OmniAuth.config.before_callback_phase
|
87
|
+
OmniAuth.config.before_callback_phase&.call(@env)
|
88
88
|
call_app!
|
89
89
|
end
|
90
90
|
end
|
@@ -8,14 +8,13 @@ module ActionDispatch::Routing
|
|
8
8
|
opts[:skip] ||= []
|
9
9
|
|
10
10
|
# check for ctrl overrides, fall back to defaults
|
11
|
-
sessions_ctrl
|
12
|
-
registrations_ctrl
|
13
|
-
passwords_ctrl
|
14
|
-
confirmations_ctrl
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
unlocks_ctrl = opts[:controllers][:unlocks] || 'devise_jwt_auth/unlocks'
|
11
|
+
sessions_ctrl = opts[:controllers][:sessions] || 'devise_jwt_auth/sessions'
|
12
|
+
registrations_ctrl = opts[:controllers][:registrations] || 'devise_jwt_auth/registrations'
|
13
|
+
passwords_ctrl = opts[:controllers][:passwords] || 'devise_jwt_auth/passwords'
|
14
|
+
confirmations_ctrl = opts[:controllers][:confirmations] || 'devise_jwt_auth/confirmations'
|
15
|
+
refresh_token_ctrl = opts[:controllers][:refresh_token] || 'devise_jwt_auth/refresh_token'
|
16
|
+
omniauth_ctrl = opts[:controllers][:omniauth_callbacks] || 'devise_jwt_auth/omniauth_callbacks'
|
17
|
+
unlocks_ctrl = opts[:controllers][:unlocks] || 'devise_jwt_auth/unlocks'
|
19
18
|
|
20
19
|
# define devise controller mappings
|
21
20
|
controllers = { sessions: sessions_ctrl,
|
@@ -26,7 +25,7 @@ module ActionDispatch::Routing
|
|
26
25
|
controllers[:unlocks] = unlocks_ctrl if unlocks_ctrl
|
27
26
|
|
28
27
|
# remove any unwanted devise modules
|
29
|
-
opts[:skip].each{ |item| controllers.delete(item) }
|
28
|
+
opts[:skip].each { |item| controllers.delete(item) }
|
30
29
|
|
31
30
|
devise_for resource.pluralize.underscore.gsub('/', '_').to_sym,
|
32
31
|
class_name: resource,
|
@@ -44,12 +43,12 @@ module ActionDispatch::Routing
|
|
44
43
|
|
45
44
|
# clear scope so controller routes aren't namespaced
|
46
45
|
@scope = ActionDispatch::Routing::Mapper::Scope.new(
|
47
|
-
path:
|
46
|
+
path: '',
|
48
47
|
shallow_path: '',
|
49
|
-
constraints:
|
50
|
-
defaults:
|
51
|
-
options:
|
52
|
-
parent:
|
48
|
+
constraints: {},
|
49
|
+
defaults: {},
|
50
|
+
options: {},
|
51
|
+
parent: nil
|
53
52
|
)
|
54
53
|
|
55
54
|
mapping_name = resource.underscore.gsub('/', '_')
|
@@ -57,22 +56,34 @@ module ActionDispatch::Routing
|
|
57
56
|
|
58
57
|
devise_scope mapping_name.to_sym do
|
59
58
|
# path to refresh access tokens
|
60
|
-
|
61
|
-
|
59
|
+
unless opts[:skip].include?(:refresh_token)
|
60
|
+
get "#{full_path}/refresh_token", controller: refresh_token_ctrl.to_s, action: 'show'
|
61
|
+
end
|
62
62
|
|
63
63
|
# omniauth routes. only define if omniauth is installed and not skipped.
|
64
64
|
if defined?(::OmniAuth) && !opts[:skip].include?(:omniauth_callbacks)
|
65
|
-
match "#{full_path}/failure",
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
match "#{
|
65
|
+
match "#{full_path}/failure",
|
66
|
+
controller: omniauth_ctrl,
|
67
|
+
action: 'omniauth_failure',
|
68
|
+
via: [:get]
|
69
|
+
match "#{full_path}/:provider/callback",
|
70
|
+
controller: omniauth_ctrl,
|
71
|
+
action: 'omniauth_success',
|
72
|
+
via: [:get]
|
73
|
+
match "#{DeviseJwtAuth.omniauth_prefix}/:provider/callback",
|
74
|
+
controller: omniauth_ctrl,
|
75
|
+
action: 'redirect_callbacks',
|
76
|
+
via: [:get, :post]
|
77
|
+
match "#{DeviseJwtAuth.omniauth_prefix}/failure",
|
78
|
+
controller: omniauth_ctrl,
|
79
|
+
action: 'omniauth_failure',
|
80
|
+
via: [:get, :post]
|
70
81
|
|
71
82
|
# preserve the resource class thru oauth authentication by setting name of
|
72
83
|
# resource as "resource_class" param
|
73
|
-
match "#{full_path}/:provider", to: redirect{ |params, request|
|
84
|
+
match "#{full_path}/:provider", to: redirect { |params, request|
|
74
85
|
# get the current querystring
|
75
|
-
qs = CGI
|
86
|
+
qs = CGI.parse(request.env['QUERY_STRING'])
|
76
87
|
|
77
88
|
# append name of current resource
|
78
89
|
qs['resource_class'] = [resource]
|
@@ -80,7 +91,7 @@ module ActionDispatch::Routing
|
|
80
91
|
|
81
92
|
set_omniauth_path_prefix!(DeviseJwtAuth.omniauth_prefix)
|
82
93
|
|
83
|
-
redirect_params = {}.tap { |hash| qs.each{ |k, v| hash[k] = v.first } }
|
94
|
+
redirect_params = {}.tap { |hash| qs.each { |k, v| hash[k] = v.first } }
|
84
95
|
|
85
96
|
if DeviseJwtAuth.redirect_whitelist
|
86
97
|
redirect_url = request.params['auth_origin_url']
|
@@ -1,9 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'jwt'
|
2
4
|
|
3
5
|
module DeviseJwtAuth
|
4
6
|
# A token management factory which allow generate token objects and check them.
|
5
7
|
module TokenFactory
|
6
|
-
|
7
8
|
def self.create_refresh_token(payload)
|
8
9
|
if payload[:exp].blank? && payload['exp'].blank?
|
9
10
|
payload[:exp] = (Time.zone.now + DeviseJwtAuth.refresh_token_lifespan).to_i
|
@@ -33,7 +34,7 @@ module DeviseJwtAuth
|
|
33
34
|
rescue TypeError
|
34
35
|
{}
|
35
36
|
end
|
36
|
-
|
37
|
+
|
37
38
|
def self.decode_access_token(token)
|
38
39
|
JWT.decode(token, DeviseJwtAuth.access_token_encryption_key).first
|
39
40
|
rescue JWT::ExpiredSignature
|
data/lib/devise_jwt_auth/url.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module DeviseJwtAuth::Url
|
4
|
-
|
5
4
|
def self.generate(url, params = {})
|
6
5
|
uri = URI(url)
|
7
6
|
|
8
7
|
res = "#{uri.scheme}://#{uri.host}"
|
9
|
-
res += ":#{uri.port}" if
|
8
|
+
res += ":#{uri.port}" if uri.port && uri.port != 80 && uri.port != 443
|
10
9
|
res += uri.path.to_s if uri.path
|
11
10
|
query = [uri.query, params.to_query].reject(&:blank?).join('&')
|
12
11
|
res += "?#{query}"
|
@@ -28,7 +27,7 @@ module DeviseJwtAuth::Url
|
|
28
27
|
# wildcard convenience class
|
29
28
|
class Wildcat
|
30
29
|
def self.parse_to_regex(str)
|
31
|
-
escaped = Regexp.escape(str).gsub('\*','.*?')
|
30
|
+
escaped = Regexp.escape(str).gsub('\*', '.*?')
|
32
31
|
Regexp.new("^#{escaped}$", Regexp::IGNORECASE)
|
33
32
|
end
|
34
33
|
|
@@ -40,5 +39,4 @@ module DeviseJwtAuth::Url
|
|
40
39
|
!!@regex.match(str)
|
41
40
|
end
|
42
41
|
end
|
43
|
-
|
44
42
|
end
|
@@ -10,12 +10,12 @@ module DeviseJwtAuth
|
|
10
10
|
class_option :primary_key_type, type: :string, desc: 'The type for primary key'
|
11
11
|
|
12
12
|
def copy_migrations
|
13
|
-
if self.class.migration_exists?('db/migrate', "devise_jwt_auth_create_#{user_class.pluralize.gsub('::','').underscore}")
|
14
|
-
say_status('skipped', "Migration 'devise_jwt_auth_create_#{user_class.pluralize.gsub('::','').underscore}' already exists")
|
13
|
+
if self.class.migration_exists?('db/migrate', "devise_jwt_auth_create_#{user_class.pluralize.gsub('::', '').underscore}")
|
14
|
+
say_status('skipped', "Migration 'devise_jwt_auth_create_#{user_class.pluralize.gsub('::', '').underscore}' already exists")
|
15
15
|
else
|
16
16
|
migration_template(
|
17
17
|
'devise_jwt_auth_create_users.rb.erb',
|
18
|
-
"db/migrate/devise_jwt_auth_create_#{user_class.pluralize.gsub('::','').underscore}.rb"
|
18
|
+
"db/migrate/devise_jwt_auth_create_#{user_class.pluralize.gsub('::', '').underscore}.rb"
|
19
19
|
)
|
20
20
|
end
|
21
21
|
end
|
@@ -26,8 +26,9 @@ module DeviseJwtAuth
|
|
26
26
|
inclusion = 'include DeviseJwtAuth::Concerns::User'
|
27
27
|
unless parse_file_for_line(fname, inclusion)
|
28
28
|
|
29
|
-
active_record_needle =
|
30
|
-
inject_into_file fname, after: "class #{user_class} < #{active_record_needle}\n" do
|
29
|
+
active_record_needle = Rails::VERSION::MAJOR == 5 ? 'ApplicationRecord' : 'ActiveRecord::Base'
|
30
|
+
inject_into_file fname, after: "class #{user_class} < #{active_record_needle}\n" do
|
31
|
+
<<-'RUBY'
|
31
32
|
# Include default devise modules.
|
32
33
|
devise :database_authenticatable, :registerable,
|
33
34
|
:recoverable, :rememberable, :trackable, :validatable,
|
@@ -43,7 +44,7 @@ module DeviseJwtAuth
|
|
43
44
|
|
44
45
|
private
|
45
46
|
|
46
|
-
def self.next_migration_number(
|
47
|
+
def self.next_migration_number(_path)
|
47
48
|
Time.zone.now.utc.strftime('%Y%m%d%H%M%S')
|
48
49
|
end
|
49
50
|
|
@@ -1,4 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DeviseJwtAuth
|
4
|
+
# Helper methods for installation generators.
|
2
5
|
module InstallGeneratorHelpers
|
3
6
|
class << self
|
4
7
|
def included(mod)
|
@@ -19,15 +22,19 @@ module DeviseJwtAuth
|
|
19
22
|
if File.exist?(File.join(destination_root, fname))
|
20
23
|
if parse_file_for_line(fname, line)
|
21
24
|
say_status('skipped', 'Concern is already included in the application controller.')
|
22
|
-
elsif
|
23
|
-
inject_into_file fname,
|
25
|
+
elsif rails_api?
|
26
|
+
inject_into_file fname,
|
27
|
+
after: "class ApplicationController < ActionController::API\n" do
|
28
|
+
<<-'RUBY'
|
24
29
|
include DeviseJwtAuth::Concerns::SetUserByToken
|
25
|
-
|
30
|
+
RUBY
|
26
31
|
end
|
27
32
|
else
|
28
|
-
inject_into_file fname,
|
33
|
+
inject_into_file fname,
|
34
|
+
after: "class ApplicationController < ActionController::Base\n" do
|
35
|
+
<<-'RUBY'
|
29
36
|
include DeviseJwtAuth::Concerns::SetUserByToken
|
30
|
-
|
37
|
+
RUBY
|
31
38
|
end
|
32
39
|
end
|
33
40
|
else
|
@@ -67,6 +74,20 @@ module DeviseJwtAuth
|
|
67
74
|
end
|
68
75
|
end
|
69
76
|
|
77
|
+
def ip_column
|
78
|
+
# Padded with spaces so it aligns nicely with the rest of the columns.
|
79
|
+
format('%-8s', (inet? ? 'inet' : 'string'))
|
80
|
+
end
|
81
|
+
|
82
|
+
def inet?
|
83
|
+
postgresql?
|
84
|
+
end
|
85
|
+
|
86
|
+
def postgresql?
|
87
|
+
config = ActiveRecord::Base.configurations[Rails.env]
|
88
|
+
config && config['adapter'] == 'postgresql'
|
89
|
+
end
|
90
|
+
|
70
91
|
private
|
71
92
|
|
72
93
|
def insert_after_line(filename, line, str)
|
@@ -86,7 +107,7 @@ module DeviseJwtAuth
|
|
86
107
|
match
|
87
108
|
end
|
88
109
|
|
89
|
-
def
|
110
|
+
def rails_api?
|
90
111
|
fname = 'app/controllers/application_controller.rb'
|
91
112
|
line = 'class ApplicationController < ActionController::API'
|
92
113
|
parse_file_for_line(fname, line)
|
@@ -3,6 +3,7 @@
|
|
3
3
|
require_relative 'install_generator_helpers'
|
4
4
|
|
5
5
|
module DeviseJwtAuth
|
6
|
+
# Adds Mongoid settings to ORM
|
6
7
|
class InstallMongoidGenerator < Rails::Generators::Base
|
7
8
|
include DeviseJwtAuth::InstallGeneratorHelpers
|
8
9
|
|
@@ -11,8 +12,8 @@ module DeviseJwtAuth
|
|
11
12
|
if File.exist?(File.join(destination_root, fname))
|
12
13
|
inclusion = 'include DeviseJwtAuth::Concerns::User'
|
13
14
|
unless parse_file_for_line(fname, inclusion)
|
14
|
-
inject_into_file fname, before: /end\s\z/ do
|
15
|
-
|
15
|
+
inject_into_file fname, before: /end\s\z/ do
|
16
|
+
<<-'RUBY'
|
16
17
|
include Mongoid::Locker
|
17
18
|
|
18
19
|
field :locker_locked_at, type: Time
|