devise-api 0.1.2 → 0.1.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4f6b2f86ff9cf332790f64f74212b25afff00bc6ff02ffe66389925db4b8fdc6
4
- data.tar.gz: a7e8420897cf4e587a73a297d2121fcd0d20f4750deb01e9a7685bf4e635059b
3
+ metadata.gz: 7d47e2be72c7d15e0c0de4535943a208d8d37e7d2b801de167ccf5f5c8e3d08e
4
+ data.tar.gz: 87d42ee2c7784370789032608d0caa634f5a703c7c4cbb15139c82d34ca26664
5
5
  SHA512:
6
- metadata.gz: d5a5ec029117561416f93e6748f278f8489aeef2ec4ce832bce7136790a7587d93de2f5490bbbbfe4a202ccb4275c2f371012e435fdb7cb077999189372039f5
7
- data.tar.gz: 43cad74cafb53ce017ebcf1e7ae41e250138eb9d8b0407ee89baf4ed8e2137394d4008f60c7c4f1f7116859aca43571361906a95ebbc1888348f71884f03a817
6
+ metadata.gz: 6b6045dbf6c5906a5ef70de320d39df12f79b1c7599ce91851c98e61be2449959b0f7e263ad3a795d21070d56b9a84944d4799e1a5156fee8ae90039f8c9642e
7
+ data.tar.gz: b92e03c4fdb2d18eb3d3cf1ca690782e9f9149362b27b4535ccae3c739dbae3e14550b9e5d4535da6a3aa7658ee25936b59e49c937a3093b90b88d9477ca0f13
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- devise-api (0.1.2)
4
+ devise-api (0.1.3)
5
5
  devise (>= 4.7.2)
6
6
  dry-configurable (~> 1.0, >= 1.0.1)
7
7
  dry-initializer (>= 3.1.1)
data/README.md CHANGED
@@ -91,6 +91,8 @@ Devise.setup do |config|
91
91
  api.refresh_token.generator = ->(_resource_owner) { Devise.friendly_token(60) }
92
92
  api.refresh_token.expires_in_infinite = ->(_resource_owner) { false }
93
93
 
94
+ # Sign up
95
+ api.sign_up.enabled = true
94
96
 
95
97
  # Authorization
96
98
  api.authorization.key = 'Authorization'
@@ -1,15 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rubocop:disable Metrics/ClassLength
3
4
  module Devise
4
5
  module Api
5
6
  class TokensController < Devise.api.config.base_controller.constantize
6
7
  skip_before_action :verify_authenticity_token, raise: false
7
- before_action :authenticate_devise_api_token!, only: %i[info refresh]
8
+ before_action :authenticate_devise_api_token!, only: %i[info]
8
9
 
9
10
  respond_to :json
10
11
 
11
12
  # rubocop:disable Metrics/AbcSize
12
13
  def sign_up
14
+ unless Devise.api.config.sign_up.enabled
15
+ error_response = Devise::Api::Responses::ErrorResponse.new(request, error: :sign_up_disabled,
16
+ resource_class: resource_class)
17
+
18
+ return render json: error_response.body, status: error_response.status
19
+ end
20
+
13
21
  Devise.api.config.before_sign_up.call(sign_up_params, request, resource_class)
14
22
 
15
23
  service = Devise::Api::ResourceOwnerService::SignUp.new(params: sign_up_params,
@@ -103,9 +111,23 @@ module Devise
103
111
  return render json: error_response.body, status: error_response.status
104
112
  end
105
113
 
106
- Devise.api.config.before_refresh.call(current_devise_api_token, request)
114
+ if current_devise_api_refresh_token.blank?
115
+ error_response = Devise::Api::Responses::ErrorResponse.new(request, error: :invalid_token,
116
+ resource_class: resource_class)
117
+
118
+ return render json: error_response.body, status: error_response.status
119
+ end
120
+
121
+ if current_devise_api_refresh_token.revoked?
122
+ error_response = Devise::Api::Responses::ErrorResponse.new(request, error: :revoked_token,
123
+ resource_class: resource_class)
124
+
125
+ render json: error_response.body, status: error_response.status
126
+ end
127
+
128
+ Devise.api.config.before_refresh.call(current_devise_api_refresh_token, request)
107
129
 
108
- service = Devise::Api::TokensService::Refresh.new(devise_api_token: current_devise_api_token).call
130
+ service = Devise::Api::TokensService::Refresh.new(devise_api_token: current_devise_api_refresh_token).call
109
131
 
110
132
  if service.success?
111
133
  token_response = Devise::Api::Responses::TokenResponse.new(request, token: service.success,
@@ -141,6 +163,15 @@ module Devise
141
163
 
142
164
  resource_owner.update_tracked_fields!(request)
143
165
  end
166
+
167
+ def current_devise_api_refresh_token
168
+ return @current_devise_api_refresh_token if @current_devise_api_refresh_token
169
+
170
+ token = find_devise_api_token
171
+ devise_api_token_model = Devise.api.config.base_token_model.constantize
172
+ @current_devise_api_refresh_token = devise_api_token_model.find_by(refresh_token: token)
173
+ end
144
174
  end
145
175
  end
146
176
  end
177
+ # rubocop:enable Metrics/ClassLength
@@ -8,7 +8,7 @@ module Devise
8
8
  option :previous_refresh_token, type: Types::String | Types::Nil, default: proc { nil }
9
9
 
10
10
  def call
11
- return Failure(:invalid_resource_owner) unless resource_owner.respond_to?(:access_tokens)
11
+ return Failure(error: :invalid_resource_owner) unless resource_owner.respond_to?(:access_tokens)
12
12
 
13
13
  devise_api_token = yield create_devise_api_token
14
14
 
@@ -8,7 +8,7 @@ module Devise
8
8
  option :resource_owner, default: proc { devise_api_token.resource_owner }
9
9
 
10
10
  def call
11
- return Failure(:expired_refresh_token) if devise_api_token.refresh_token_expired?
11
+ return Failure(error: :expired_refresh_token) if devise_api_token.refresh_token_expired?
12
12
 
13
13
  devise_api_token = yield create_devise_api_token
14
14
  Success(devise_api_token)
@@ -8,6 +8,7 @@ en:
8
8
  expired_refresh_token: "Refresh token has expired"
9
9
  revoked_token: "Token has been revoked"
10
10
  refresh_token_disabled: "Refresh token is disabled for this application"
11
+ sign_up_disabled: "Sign up is disabled for this application"
11
12
  invalid_refresh_token: "Refresh token is invalid"
12
13
  invalid_email: "Email is invalid"
13
14
  invalid_resource_owner: "Resource owner is invalid"
@@ -20,6 +20,10 @@ module Devise
20
20
  setting :expires_in_infinite, default: proc { |_resource_owner| false }, reader: true
21
21
  end
22
22
 
23
+ setting :sign_up, reader: true do
24
+ setting :enabled, default: true, reader: true
25
+ end
26
+
23
27
  setting :authorization, reader: true do
24
28
  setting :key, default: 'Authorization', reader: true
25
29
  setting :scheme, default: 'Bearer', reader: true
@@ -38,18 +38,11 @@ module Devise
38
38
  end
39
39
 
40
40
  def current_devise_api_token
41
- token = find_devise_api_token
41
+ return @current_devise_api_token if @current_devise_api_token
42
42
 
43
+ token = find_devise_api_token
43
44
  devise_api_token_model = Devise.api.config.base_token_model.constantize
44
-
45
- if Devise.api.config.refresh_token.enabled
46
- return devise_api_token_model
47
- .where(access_token: token)
48
- .or(devise_api_token_model.where(refresh_token: token))
49
- &.first
50
- end
51
-
52
- devise_api_token_model.find_by(access_token: token)
45
+ @current_devise_api_token = devise_api_token_model.find_by(access_token: token)
53
46
  end
54
47
 
55
48
  def current_devise_api_user
@@ -58,6 +51,10 @@ module Devise
58
51
 
59
52
  private
60
53
 
54
+ def resource_class
55
+ current_devise_api_user&.class
56
+ end
57
+
61
58
  def extract_devise_api_token_from_params
62
59
  params[Devise.api.config.authorization.params_key]
63
60
  end
@@ -12,6 +12,7 @@ module Devise
12
12
  expired_refresh_token
13
13
  revoked_token
14
14
  refresh_token_disabled
15
+ sign_up_disabled
15
16
  invalid_refresh_token
16
17
  invalid_email
17
18
  invalid_resource_owner
@@ -112,6 +113,7 @@ module Devise
112
113
  invalid_email_error? ||
113
114
  invalid_refresh_token_error? ||
114
115
  refresh_token_disabled_error? ||
116
+ sign_up_disabled_error? ||
115
117
  invalid_resource_owner_error?
116
118
  end
117
119
  end
@@ -41,7 +41,7 @@ module Devise
41
41
  end
42
42
 
43
43
  def inactive?
44
- revoked? && expired?
44
+ revoked? || expired?
45
45
  end
46
46
 
47
47
  def expired?
@@ -51,7 +51,7 @@ module Devise
51
51
  end
52
52
 
53
53
  def refresh_token_expired?
54
- return false unless Devise.api.config.refresh_token.expires_in_infinite.call(resource_owner)
54
+ return false if Devise.api.config.refresh_token.expires_in_infinite.call(resource_owner)
55
55
 
56
56
  Time.now.utc > refresh_token_expires_at
57
57
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Devise
4
4
  module Api
5
- VERSION = '0.1.2'
5
+ VERSION = '0.1.3'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - nejdetkadir
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-30 00:00:00.000000000 Z
11
+ date: 2023-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise