devise-api 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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