doorkeeper 5.1.0.rc2 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of doorkeeper might be problematic. Click here for more details.

Files changed (208) hide show
  1. checksums.yaml +4 -4
  2. data/.hound.yml +2 -1
  3. data/.rubocop.yml +37 -4
  4. data/.travis.yml +4 -27
  5. data/Appraisals +8 -12
  6. data/Gemfile +6 -2
  7. data/NEWS.md +16 -0
  8. data/README.md +11 -2
  9. data/Rakefile +10 -8
  10. data/app/controllers/doorkeeper/application_controller.rb +1 -2
  11. data/app/controllers/doorkeeper/application_metal_controller.rb +2 -13
  12. data/app/controllers/doorkeeper/applications_controller.rb +17 -5
  13. data/app/controllers/doorkeeper/token_info_controller.rb +1 -1
  14. data/app/controllers/doorkeeper/tokens_controller.rb +7 -7
  15. data/app/helpers/doorkeeper/dashboard_helper.rb +1 -1
  16. data/app/validators/redirect_uri_validator.rb +5 -2
  17. data/app/views/doorkeeper/applications/_form.html.erb +6 -0
  18. data/bin/console +5 -4
  19. data/config/locales/en.yml +1 -0
  20. data/doorkeeper.gemspec +24 -22
  21. data/gemfiles/rails_5_0.gemfile +2 -1
  22. data/gemfiles/rails_5_1.gemfile +2 -1
  23. data/gemfiles/rails_5_2.gemfile +2 -1
  24. data/gemfiles/rails_6_0.gemfile +1 -0
  25. data/gemfiles/rails_master.gemfile +1 -0
  26. data/lib/doorkeeper.rb +68 -66
  27. data/lib/doorkeeper/config.rb +53 -90
  28. data/lib/doorkeeper/config/option.rb +64 -0
  29. data/lib/doorkeeper/engine.rb +1 -1
  30. data/lib/doorkeeper/grape/authorization_decorator.rb +4 -4
  31. data/lib/doorkeeper/grape/helpers.rb +3 -3
  32. data/lib/doorkeeper/helpers/controller.rb +1 -1
  33. data/lib/doorkeeper/models/access_grant_mixin.rb +4 -2
  34. data/lib/doorkeeper/models/access_token_mixin.rb +10 -10
  35. data/lib/doorkeeper/models/application_mixin.rb +1 -0
  36. data/lib/doorkeeper/models/concerns/expirable.rb +1 -0
  37. data/lib/doorkeeper/models/concerns/ownership.rb +1 -6
  38. data/lib/doorkeeper/models/concerns/revocable.rb +2 -1
  39. data/lib/doorkeeper/models/concerns/scopes.rb +1 -1
  40. data/lib/doorkeeper/models/concerns/secret_storable.rb +2 -0
  41. data/lib/doorkeeper/oauth.rb +5 -5
  42. data/lib/doorkeeper/oauth/authorization/code.rb +1 -1
  43. data/lib/doorkeeper/oauth/authorization/token.rb +9 -6
  44. data/lib/doorkeeper/oauth/authorization/uri_builder.rb +1 -1
  45. data/lib/doorkeeper/oauth/authorization_code_request.rb +5 -3
  46. data/lib/doorkeeper/oauth/client_credentials/validation.rb +1 -1
  47. data/lib/doorkeeper/oauth/client_credentials_request.rb +1 -1
  48. data/lib/doorkeeper/oauth/error_response.rb +5 -5
  49. data/lib/doorkeeper/oauth/forbidden_token_response.rb +1 -1
  50. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +1 -1
  51. data/lib/doorkeeper/oauth/helpers/unique_token.rb +2 -1
  52. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +6 -2
  53. data/lib/doorkeeper/oauth/invalid_token_response.rb +1 -1
  54. data/lib/doorkeeper/oauth/pre_authorization.rb +4 -3
  55. data/lib/doorkeeper/oauth/refresh_token_request.rb +1 -1
  56. data/lib/doorkeeper/oauth/scopes.rb +5 -3
  57. data/lib/doorkeeper/oauth/token.rb +2 -2
  58. data/lib/doorkeeper/oauth/token_introspection.rb +4 -4
  59. data/lib/doorkeeper/oauth/token_response.rb +9 -9
  60. data/lib/doorkeeper/orm/active_record.rb +6 -6
  61. data/lib/doorkeeper/orm/active_record/access_grant.rb +5 -12
  62. data/lib/doorkeeper/orm/active_record/access_token.rb +6 -13
  63. data/lib/doorkeeper/orm/active_record/application.rb +6 -5
  64. data/lib/doorkeeper/orm/active_record/stale_records_cleaner.rb +10 -3
  65. data/lib/doorkeeper/rails/helpers.rb +1 -1
  66. data/lib/doorkeeper/rails/routes.rb +11 -11
  67. data/lib/doorkeeper/rails/routes/mapping.rb +7 -7
  68. data/lib/doorkeeper/rake.rb +1 -1
  69. data/lib/doorkeeper/rake/db.rake +13 -13
  70. data/lib/doorkeeper/request.rb +1 -1
  71. data/lib/doorkeeper/secret_storing/base.rb +7 -6
  72. data/lib/doorkeeper/secret_storing/bcrypt.rb +4 -3
  73. data/lib/doorkeeper/secret_storing/plain.rb +4 -4
  74. data/lib/doorkeeper/secret_storing/sha256_hash.rb +3 -2
  75. data/lib/doorkeeper/stale_records_cleaner.rb +1 -1
  76. data/lib/doorkeeper/version.rb +2 -2
  77. data/lib/generators/doorkeeper/application_owner_generator.rb +10 -9
  78. data/lib/generators/doorkeeper/confidential_applications_generator.rb +10 -9
  79. data/lib/generators/doorkeeper/install_generator.rb +11 -9
  80. data/lib/generators/doorkeeper/migration_generator.rb +9 -9
  81. data/lib/generators/doorkeeper/pkce_generator.rb +10 -9
  82. data/lib/generators/doorkeeper/previous_refresh_token_generator.rb +10 -9
  83. data/lib/generators/doorkeeper/templates/initializer.rb +30 -5
  84. data/lib/generators/doorkeeper/templates/migration.rb.erb +15 -7
  85. data/lib/generators/doorkeeper/views_generator.rb +6 -4
  86. data/spec/controllers/application_metal_controller_spec.rb +10 -10
  87. data/spec/controllers/applications_controller_spec.rb +54 -52
  88. data/spec/controllers/authorizations_controller_spec.rb +136 -142
  89. data/spec/controllers/protected_resources_controller_spec.rb +78 -76
  90. data/spec/controllers/token_info_controller_spec.rb +13 -11
  91. data/spec/controllers/tokens_controller_spec.rb +109 -94
  92. data/spec/dummy/Rakefile +3 -1
  93. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  94. data/spec/dummy/app/controllers/custom_authorizations_controller.rb +2 -0
  95. data/spec/dummy/app/controllers/full_protected_resources_controller.rb +4 -2
  96. data/spec/dummy/app/controllers/home_controller.rb +5 -3
  97. data/spec/dummy/app/controllers/metal_controller.rb +2 -0
  98. data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +4 -2
  99. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  100. data/spec/dummy/app/models/user.rb +2 -0
  101. data/spec/dummy/config.ru +3 -1
  102. data/spec/dummy/config/application.rb +13 -0
  103. data/spec/dummy/config/environments/development.rb +2 -0
  104. data/spec/dummy/config/environments/production.rb +2 -0
  105. data/spec/dummy/config/environments/test.rb +3 -1
  106. data/spec/dummy/config/initializers/backtrace_silencers.rb +2 -0
  107. data/spec/dummy/config/initializers/doorkeeper.rb +5 -2
  108. data/spec/dummy/config/initializers/secret_token.rb +3 -1
  109. data/spec/dummy/config/initializers/session_store.rb +3 -1
  110. data/spec/dummy/config/initializers/wrap_parameters.rb +2 -0
  111. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +17 -10
  112. data/spec/dummy/db/migrate/20170822064514_enable_pkce.rb +2 -0
  113. data/spec/dummy/db/schema.rb +1 -1
  114. data/spec/dummy/script/rails +5 -3
  115. data/spec/factories.rb +5 -3
  116. data/spec/generators/application_owner_generator_spec.rb +13 -26
  117. data/spec/generators/confidential_applications_generator_spec.rb +12 -28
  118. data/spec/generators/install_generator_spec.rb +17 -15
  119. data/spec/generators/migration_generator_spec.rb +13 -26
  120. data/spec/generators/pkce_generator_spec.rb +11 -26
  121. data/spec/generators/previous_refresh_token_generator_spec.rb +16 -29
  122. data/spec/generators/templates/routes.rb +2 -0
  123. data/spec/generators/views_generator_spec.rb +14 -12
  124. data/spec/grape/grape_integration_spec.rb +34 -32
  125. data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +9 -7
  126. data/spec/lib/config_spec.rb +137 -136
  127. data/spec/lib/doorkeeper_spec.rb +3 -1
  128. data/spec/lib/models/expirable_spec.rb +12 -10
  129. data/spec/lib/models/reusable_spec.rb +6 -6
  130. data/spec/lib/models/revocable_spec.rb +8 -6
  131. data/spec/lib/models/scopes_spec.rb +19 -17
  132. data/spec/lib/models/secret_storable_spec.rb +71 -49
  133. data/spec/lib/oauth/authorization/uri_builder_spec.rb +17 -15
  134. data/spec/lib/oauth/authorization_code_request_spec.rb +18 -12
  135. data/spec/lib/oauth/base_request_spec.rb +20 -8
  136. data/spec/lib/oauth/base_response_spec.rb +3 -1
  137. data/spec/lib/oauth/client/credentials_spec.rb +24 -22
  138. data/spec/lib/oauth/client_credentials/creator_spec.rb +13 -11
  139. data/spec/lib/oauth/client_credentials/issuer_spec.rb +27 -18
  140. data/spec/lib/oauth/client_credentials/validation_spec.rb +17 -15
  141. data/spec/lib/oauth/client_credentials_integration_spec.rb +7 -5
  142. data/spec/lib/oauth/client_credentials_request_spec.rb +27 -21
  143. data/spec/lib/oauth/client_spec.rb +15 -13
  144. data/spec/lib/oauth/code_request_spec.rb +8 -6
  145. data/spec/lib/oauth/code_response_spec.rb +9 -7
  146. data/spec/lib/oauth/error_response_spec.rb +14 -12
  147. data/spec/lib/oauth/error_spec.rb +4 -2
  148. data/spec/lib/oauth/forbidden_token_response_spec.rb +7 -5
  149. data/spec/lib/oauth/helpers/scope_checker_spec.rb +35 -33
  150. data/spec/lib/oauth/helpers/unique_token_spec.rb +8 -6
  151. data/spec/lib/oauth/helpers/uri_checker_spec.rb +103 -101
  152. data/spec/lib/oauth/invalid_token_response_spec.rb +3 -1
  153. data/spec/lib/oauth/password_access_token_request_spec.rb +52 -34
  154. data/spec/lib/oauth/pre_authorization_spec.rb +64 -62
  155. data/spec/lib/oauth/refresh_token_request_spec.rb +36 -33
  156. data/spec/lib/oauth/scopes_spec.rb +63 -61
  157. data/spec/lib/oauth/token_request_spec.rb +66 -26
  158. data/spec/lib/oauth/token_response_spec.rb +39 -37
  159. data/spec/lib/oauth/token_spec.rb +51 -49
  160. data/spec/lib/request/strategy_spec.rb +3 -1
  161. data/spec/lib/secret_storing/base_spec.rb +23 -23
  162. data/spec/lib/secret_storing/bcrypt_spec.rb +18 -18
  163. data/spec/lib/secret_storing/plain_spec.rb +17 -17
  164. data/spec/lib/secret_storing/sha256_hash_spec.rb +16 -16
  165. data/spec/lib/server_spec.rb +16 -14
  166. data/spec/lib/stale_records_cleaner_spec.rb +17 -17
  167. data/spec/models/doorkeeper/access_grant_spec.rb +30 -26
  168. data/spec/models/doorkeeper/access_token_spec.rb +97 -95
  169. data/spec/models/doorkeeper/application_spec.rb +98 -57
  170. data/spec/requests/applications/applications_request_spec.rb +98 -66
  171. data/spec/requests/applications/authorized_applications_spec.rb +20 -18
  172. data/spec/requests/endpoints/authorization_spec.rb +25 -23
  173. data/spec/requests/endpoints/token_spec.rb +38 -36
  174. data/spec/requests/flows/authorization_code_errors_spec.rb +26 -24
  175. data/spec/requests/flows/authorization_code_spec.rb +161 -159
  176. data/spec/requests/flows/client_credentials_spec.rb +53 -51
  177. data/spec/requests/flows/implicit_grant_errors_spec.rb +10 -8
  178. data/spec/requests/flows/implicit_grant_spec.rb +27 -25
  179. data/spec/requests/flows/password_spec.rb +56 -54
  180. data/spec/requests/flows/refresh_token_spec.rb +45 -43
  181. data/spec/requests/flows/revoke_token_spec.rb +29 -27
  182. data/spec/requests/flows/skip_authorization_spec.rb +23 -21
  183. data/spec/requests/protected_resources/metal_spec.rb +7 -5
  184. data/spec/requests/protected_resources/private_api_spec.rb +35 -33
  185. data/spec/routing/custom_controller_routes_spec.rb +67 -65
  186. data/spec/routing/default_routes_spec.rb +22 -20
  187. data/spec/routing/scoped_routes_spec.rb +20 -18
  188. data/spec/spec_helper.rb +14 -13
  189. data/spec/spec_helper_integration.rb +3 -1
  190. data/spec/support/dependencies/factory_bot.rb +3 -1
  191. data/spec/support/doorkeeper_rspec.rb +3 -1
  192. data/spec/support/helpers/access_token_request_helper.rb +3 -1
  193. data/spec/support/helpers/authorization_request_helper.rb +4 -2
  194. data/spec/support/helpers/config_helper.rb +2 -0
  195. data/spec/support/helpers/model_helper.rb +3 -1
  196. data/spec/support/helpers/request_spec_helper.rb +5 -3
  197. data/spec/support/helpers/url_helper.rb +9 -7
  198. data/spec/support/http_method_shim.rb +4 -9
  199. data/spec/support/orm/active_record.rb +3 -1
  200. data/spec/support/shared/controllers_shared_context.rb +18 -16
  201. data/spec/support/shared/hashing_shared_context.rb +3 -3
  202. data/spec/support/shared/models_shared_examples.rb +12 -10
  203. data/spec/validators/redirect_uri_validator_spec.rb +74 -45
  204. data/spec/version/version_spec.rb +7 -5
  205. metadata +12 -16
  206. data/gemfiles/rails_4_2.gemfile +0 -17
  207. data/spec/dummy/config/initializers/new_framework_defaults.rb +0 -8
  208. data/spec/support/ruby_2_6_rails_4_2_patch.rb +0 -14
@@ -43,7 +43,7 @@ module Doorkeeper
43
43
  {
44
44
  expired: Doorkeeper::Errors::TokenExpired,
45
45
  revoked: Doorkeeper::Errors::TokenRevoked,
46
- unknown: Doorkeeper::Errors::TokenUnknown
46
+ unknown: Doorkeeper::Errors::TokenUnknown,
47
47
  }
48
48
  end
49
49
  end
@@ -50,7 +50,7 @@ module Doorkeeper
50
50
  response_type: response_type,
51
51
  scope: scope,
52
52
  client_name: client.name,
53
- status: I18n.t('doorkeeper.pre_authorization.status')
53
+ status: I18n.t("doorkeeper.pre_authorization.status"),
54
54
  }
55
55
  end
56
56
 
@@ -85,7 +85,7 @@ module Doorkeeper
85
85
  end
86
86
 
87
87
  def grant_type
88
- response_type == 'code' ? AUTHORIZATION_CODE : IMPLICIT
88
+ response_type == "code" ? AUTHORIZATION_CODE : IMPLICIT
89
89
  end
90
90
 
91
91
  def validate_redirect_uri
@@ -98,7 +98,8 @@ module Doorkeeper
98
98
  end
99
99
 
100
100
  def validate_code_challenge_method
101
- !code_challenge.present? || (code_challenge_method.present? && code_challenge_method =~ /^plain$|^S256$/)
101
+ code_challenge.blank? ||
102
+ (code_challenge_method.present? && code_challenge_method =~ /^plain$|^S256$/)
102
103
  end
103
104
  end
104
105
  end
@@ -58,7 +58,7 @@ module Doorkeeper
58
58
  resource_owner_id: refresh_token.resource_owner_id,
59
59
  scopes: scopes.to_s,
60
60
  expires_in: access_token_expires_in,
61
- use_refresh_token: true
61
+ use_refresh_token: true,
62
62
  }.tap do |attributes|
63
63
  if refresh_token_revoked_on_use?
64
64
  attributes[:previous_refresh_token] = refresh_token.refresh_token
@@ -7,7 +7,7 @@ module Doorkeeper
7
7
  include Comparable
8
8
 
9
9
  def self.from_string(string)
10
- string ||= ''
10
+ string ||= ""
11
11
  new.tap do |scope|
12
12
  scope.add(*string.split)
13
13
  end
@@ -39,13 +39,15 @@ module Doorkeeper
39
39
  end
40
40
 
41
41
  def to_s
42
- @scopes.join(' ')
42
+ @scopes.join(" ")
43
43
  end
44
44
 
45
- def has_scopes?(scopes)
45
+ def scopes?(scopes)
46
46
  scopes.all? { |scope| exists?(scope) }
47
47
  end
48
48
 
49
+ alias has_scopes? scopes?
50
+
49
51
  def +(other)
50
52
  self.class.from_array(all + to_array(other))
51
53
  end
@@ -55,11 +55,11 @@ module Doorkeeper
55
55
  end
56
56
 
57
57
  def token_from_header(header, pattern)
58
- header.gsub pattern, ''
58
+ header.gsub pattern, ""
59
59
  end
60
60
 
61
61
  def match?(header, pattern)
62
- header && header.match(pattern)
62
+ header&.match(pattern)
63
63
  end
64
64
  end
65
65
  end
@@ -30,7 +30,7 @@ module Doorkeeper
30
30
  end
31
31
  end
32
32
 
33
- def to_json
33
+ def to_json(*)
34
34
  active? ? success_response : failure_response
35
35
  end
36
36
 
@@ -109,7 +109,7 @@ module Doorkeeper
109
109
  #
110
110
  def failure_response
111
111
  {
112
- active: false
112
+ active: false,
113
113
  }
114
114
  end
115
115
 
@@ -158,12 +158,12 @@ module Doorkeeper
158
158
 
159
159
  # Token can be valid only if it is not expired or revoked.
160
160
  def valid_token?
161
- @token && @token.accessible?
161
+ @token&.accessible?
162
162
  end
163
163
 
164
164
  # RFC7662 Section 2.1
165
165
  def authorized_token_matches_introspected?
166
- authorized_token.token == @token.token
166
+ authorized_token.token == @token&.token
167
167
  end
168
168
 
169
169
  # If token doesn't belong to some client, then it is public.
@@ -11,12 +11,12 @@ module Doorkeeper
11
11
 
12
12
  def body
13
13
  {
14
- 'access_token' => token.plaintext_token,
15
- 'token_type' => token.token_type,
16
- 'expires_in' => token.expires_in_seconds,
17
- 'refresh_token' => token.plaintext_refresh_token,
18
- 'scope' => token.scopes_string,
19
- 'created_at' => token.created_at.to_i
14
+ "access_token" => token.plaintext_token,
15
+ "token_type" => token.token_type,
16
+ "expires_in" => token.expires_in_seconds,
17
+ "refresh_token" => token.plaintext_refresh_token,
18
+ "scope" => token.scopes_string,
19
+ "created_at" => token.created_at.to_i,
20
20
  }.reject { |_, value| value.blank? }
21
21
  end
22
22
 
@@ -26,9 +26,9 @@ module Doorkeeper
26
26
 
27
27
  def headers
28
28
  {
29
- 'Cache-Control' => 'no-store',
30
- 'Pragma' => 'no-cache',
31
- 'Content-Type' => 'application/json; charset=utf-8'
29
+ "Cache-Control" => "no-store",
30
+ "Pragma" => "no-cache",
31
+ "Content-Type" => "application/json; charset=utf-8",
32
32
  }
33
33
  end
34
34
  end
@@ -1,17 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/lazy_load_hooks'
3
+ require "active_support/lazy_load_hooks"
4
4
 
5
- require 'doorkeeper/orm/active_record/stale_records_cleaner'
5
+ require "doorkeeper/orm/active_record/stale_records_cleaner"
6
6
 
7
7
  module Doorkeeper
8
8
  module Orm
9
9
  module ActiveRecord
10
10
  def self.initialize_models!
11
11
  lazy_load do
12
- require 'doorkeeper/orm/active_record/access_grant'
13
- require 'doorkeeper/orm/active_record/access_token'
14
- require 'doorkeeper/orm/active_record/application'
12
+ require "doorkeeper/orm/active_record/access_grant"
13
+ require "doorkeeper/orm/active_record/access_token"
14
+ require "doorkeeper/orm/active_record/application"
15
15
 
16
16
  if Doorkeeper.configuration.active_record_options[:establish_connection]
17
17
  [Doorkeeper::AccessGrant, Doorkeeper::AccessToken, Doorkeeper::Application].each do |model|
@@ -24,7 +24,7 @@ module Doorkeeper
24
24
 
25
25
  def self.initialize_application_owner!
26
26
  lazy_load do
27
- require 'doorkeeper/models/concerns/ownership'
27
+ require "doorkeeper/models/concerns/ownership"
28
28
 
29
29
  Doorkeeper::Application.send :include, Doorkeeper::Models::Ownership
30
30
  end
@@ -1,20 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Doorkeeper
2
4
  class AccessGrant < ActiveRecord::Base
3
- self.table_name = "#{table_name_prefix}oauth_access_grants#{table_name_suffix}".to_sym
5
+ self.table_name = "#{table_name_prefix}oauth_access_grants#{table_name_suffix}"
4
6
 
5
7
  include AccessGrantMixin
6
- include ActiveModel::MassAssignmentSecurity if defined?(::ProtectedAttributes)
7
-
8
- belongs_to_options = {
9
- class_name: 'Doorkeeper::Application',
10
- inverse_of: :access_grants
11
- }
12
-
13
- if defined?(ActiveRecord::Base) && ActiveRecord::VERSION::MAJOR >= 5
14
- belongs_to_options[:optional] = true
15
- end
16
8
 
17
- belongs_to :application, belongs_to_options
9
+ belongs_to :application, class_name: "Doorkeeper::Application",
10
+ optional: true, inverse_of: :access_grants
18
11
 
19
12
  validates :resource_owner_id,
20
13
  :application_id,
@@ -1,20 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Doorkeeper
2
4
  class AccessToken < ActiveRecord::Base
3
- self.table_name = "#{table_name_prefix}oauth_access_tokens#{table_name_suffix}".to_sym
5
+ self.table_name = "#{table_name_prefix}oauth_access_tokens#{table_name_suffix}"
4
6
 
5
7
  include AccessTokenMixin
6
- include ActiveModel::MassAssignmentSecurity if defined?(::ProtectedAttributes)
7
-
8
- belongs_to_options = {
9
- class_name: 'Doorkeeper::Application',
10
- inverse_of: :access_tokens
11
- }
12
-
13
- if defined?(ActiveRecord::Base) && ActiveRecord::VERSION::MAJOR >= 5
14
- belongs_to_options[:optional] = true
15
- end
16
8
 
17
- belongs_to :application, belongs_to_options
9
+ belongs_to :application, class_name: "Doorkeeper::Application",
10
+ inverse_of: :access_tokens, optional: true
18
11
 
19
12
  validates :token, presence: true, uniqueness: true
20
13
  validates :refresh_token, uniqueness: true, if: :use_refresh_token?
@@ -41,7 +34,7 @@ module Doorkeeper
41
34
  end
42
35
 
43
36
  def self.refresh_token_revoked_on_use?
44
- column_names.include?('previous_refresh_token')
37
+ column_names.include?("previous_refresh_token")
45
38
  end
46
39
  end
47
40
  end
@@ -1,12 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Doorkeeper
2
4
  class Application < ActiveRecord::Base
3
- self.table_name = "#{table_name_prefix}oauth_applications#{table_name_suffix}".to_sym
5
+ self.table_name = "#{table_name_prefix}oauth_applications#{table_name_suffix}"
4
6
 
5
7
  include ApplicationMixin
6
- include ActiveModel::MassAssignmentSecurity if defined?(::ProtectedAttributes)
7
8
 
8
- has_many :access_grants, dependent: :delete_all, class_name: 'Doorkeeper::AccessGrant'
9
- has_many :access_tokens, dependent: :delete_all, class_name: 'Doorkeeper::AccessToken'
9
+ has_many :access_grants, dependent: :delete_all, class_name: "Doorkeeper::AccessGrant"
10
+ has_many :access_tokens, dependent: :delete_all, class_name: "Doorkeeper::AccessToken"
10
11
 
11
12
  validates :name, :secret, :uid, presence: true
12
13
  validates :uid, uniqueness: true
@@ -17,7 +18,7 @@ module Doorkeeper
17
18
 
18
19
  before_validation :generate_uid, :generate_secret, on: :create
19
20
 
20
- has_many :authorized_tokens, -> { where(revoked_at: nil) }, class_name: 'AccessToken'
21
+ has_many :authorized_tokens, -> { where(revoked_at: nil) }, class_name: "AccessToken"
21
22
  has_many :authorized_applications, through: :authorized_tokens, source: :application
22
23
 
23
24
  # Returns Applications associated with active (not revoked) Access Tokens
@@ -3,22 +3,29 @@
3
3
  module Doorkeeper
4
4
  module Orm
5
5
  module ActiveRecord
6
+ # Helper class to clear stale and non-active tokens and grants.
7
+ # Used by Doorkeeper Rake tasks.
8
+ #
6
9
  class StaleRecordsCleaner
7
10
  def initialize(base_scope)
8
11
  @base_scope = base_scope
9
12
  end
10
13
 
14
+ # Clears revoked records
11
15
  def clean_revoked
12
16
  table = @base_scope.arel_table
17
+
13
18
  @base_scope.where.not(revoked_at: nil)
14
- .where(table[:revoked_at].lt(Time.current))
15
- .delete_all
19
+ .where(table[:revoked_at].lt(Time.current))
20
+ .in_batches(&:delete_all)
16
21
  end
17
22
 
23
+ # Clears expired records
18
24
  def clean_expired(ttl)
19
25
  table = @base_scope.arel_table
26
+
20
27
  @base_scope.where(table[:created_at].lt(Time.current - ttl))
21
- .delete_all
28
+ .in_batches(&:delete_all)
22
29
  end
23
30
  end
24
31
  end
@@ -14,7 +14,7 @@ module Doorkeeper
14
14
  def doorkeeper_forbidden_render_options(**); end
15
15
 
16
16
  def valid_doorkeeper_token?
17
- doorkeeper_token && doorkeeper_token.acceptable?(@_doorkeeper_scopes)
17
+ doorkeeper_token&.acceptable?(@_doorkeeper_scopes)
18
18
  end
19
19
 
20
20
  private
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'doorkeeper/rails/routes/mapping'
4
- require 'doorkeeper/rails/routes/mapper'
3
+ require "doorkeeper/rails/routes/mapping"
4
+ require "doorkeeper/rails/routes/mapper"
5
5
 
6
6
  module Doorkeeper
7
7
  module Rails
@@ -32,7 +32,7 @@ module Doorkeeper
32
32
  end
33
33
 
34
34
  def generate_routes!(options)
35
- routes.scope options[:scope] || 'oauth', as: 'oauth' do
35
+ routes.scope options[:scope] || "oauth", as: "oauth" do
36
36
  map_route(:authorizations, :authorization_routes)
37
37
  map_route(:tokens, :token_routes)
38
38
  map_route(:tokens, :revoke_routes)
@@ -56,37 +56,37 @@ module Doorkeeper
56
56
  def authorization_routes(mapping)
57
57
  routes.resource(
58
58
  :authorization,
59
- path: 'authorize',
59
+ path: "authorize",
60
60
  only: %i[create destroy],
61
61
  as: mapping[:as],
62
62
  controller: mapping[:controllers]
63
63
  ) do
64
- routes.get '/native', action: :show, on: :member
65
- routes.get '/', action: :new, on: :member
64
+ routes.get "/native", action: :show, on: :member
65
+ routes.get "/", action: :new, on: :member
66
66
  end
67
67
  end
68
68
 
69
69
  def token_routes(mapping)
70
70
  routes.resource(
71
71
  :token,
72
- path: 'token',
72
+ path: "token",
73
73
  only: [:create], as: mapping[:as],
74
74
  controller: mapping[:controllers]
75
75
  )
76
76
  end
77
77
 
78
78
  def revoke_routes(mapping)
79
- routes.post 'revoke', controller: mapping[:controllers], action: :revoke
79
+ routes.post "revoke", controller: mapping[:controllers], action: :revoke
80
80
  end
81
81
 
82
82
  def introspect_routes(mapping)
83
- routes.post 'introspect', controller: mapping[:controllers], action: :introspect
83
+ routes.post "introspect", controller: mapping[:controllers], action: :introspect
84
84
  end
85
85
 
86
86
  def token_info_routes(mapping)
87
87
  routes.resource(
88
88
  :token_info,
89
- path: 'token/info',
89
+ path: "token/info",
90
90
  only: [:show], as: mapping[:as],
91
91
  controller: mapping[:controllers]
92
92
  )
@@ -96,7 +96,7 @@ module Doorkeeper
96
96
  routes.resources :doorkeeper_applications,
97
97
  controller: mapping[:controllers],
98
98
  as: :applications,
99
- path: 'applications'
99
+ path: "applications"
100
100
  end
101
101
 
102
102
  def authorized_applications_routes(mapping)
@@ -8,17 +8,17 @@ module Doorkeeper
8
8
 
9
9
  def initialize
10
10
  @controllers = {
11
- authorizations: 'doorkeeper/authorizations',
12
- applications: 'doorkeeper/applications',
13
- authorized_applications: 'doorkeeper/authorized_applications',
14
- tokens: 'doorkeeper/tokens',
15
- token_info: 'doorkeeper/token_info'
11
+ authorizations: "doorkeeper/authorizations",
12
+ applications: "doorkeeper/applications",
13
+ authorized_applications: "doorkeeper/authorized_applications",
14
+ tokens: "doorkeeper/tokens",
15
+ token_info: "doorkeeper/token_info",
16
16
  }
17
17
 
18
18
  @as = {
19
19
  authorizations: :authorization,
20
20
  tokens: :token,
21
- token_info: :token_info
21
+ token_info: :token_info,
22
22
  }
23
23
 
24
24
  @skips = []
@@ -27,7 +27,7 @@ module Doorkeeper
27
27
  def [](routes)
28
28
  {
29
29
  controllers: @controllers[routes],
30
- as: @as[routes]
30
+ as: @as[routes],
31
31
  }
32
32
  end
33
33
 
@@ -4,7 +4,7 @@ module Doorkeeper
4
4
  module Rake
5
5
  class << self
6
6
  def load_tasks
7
- glob = File.join(File.absolute_path(__dir__), 'rake', '*.rake')
7
+ glob = File.join(File.absolute_path(__dir__), "rake", "*.rake")
8
8
  Dir[glob].each do |rake_file|
9
9
  load rake_file
10
10
  end
@@ -2,36 +2,36 @@
2
2
 
3
3
  namespace :doorkeeper do
4
4
  namespace :db do
5
- desc 'Removes stale data from doorkeeper related database tables'
5
+ desc "Removes stale data from doorkeeper related database tables"
6
6
  task cleanup: [
7
- 'doorkeeper:db:cleanup:revoked_tokens',
8
- 'doorkeeper:db:cleanup:expired_tokens',
9
- 'doorkeeper:db:cleanup:revoked_grants',
10
- 'doorkeeper:db:cleanup:expired_grants'
7
+ "doorkeeper:db:cleanup:revoked_tokens",
8
+ "doorkeeper:db:cleanup:expired_tokens",
9
+ "doorkeeper:db:cleanup:revoked_grants",
10
+ "doorkeeper:db:cleanup:expired_grants",
11
11
  ]
12
12
 
13
13
  namespace :cleanup do
14
- desc 'Removes stale access tokens'
15
- task revoked_tokens: 'doorkeeper:setup' do
14
+ desc "Removes stale access tokens"
15
+ task revoked_tokens: "doorkeeper:setup" do
16
16
  cleaner = Doorkeeper::StaleRecordsCleaner.new(Doorkeeper::AccessToken)
17
17
  cleaner.clean_revoked
18
18
  end
19
19
 
20
- desc 'Removes expired (TTL passed) access tokens'
21
- task expired_tokens: 'doorkeeper:setup' do
20
+ desc "Removes expired (TTL passed) access tokens"
21
+ task expired_tokens: "doorkeeper:setup" do
22
22
  expirable_tokens = Doorkeeper::AccessToken.where(refresh_token: nil)
23
23
  cleaner = Doorkeeper::StaleRecordsCleaner.new(expirable_tokens)
24
24
  cleaner.clean_expired(Doorkeeper.configuration.access_token_expires_in)
25
25
  end
26
26
 
27
- desc 'Removes stale access grants'
28
- task revoked_grants: 'doorkeeper:setup' do
27
+ desc "Removes stale access grants"
28
+ task revoked_grants: "doorkeeper:setup" do
29
29
  cleaner = Doorkeeper::StaleRecordsCleaner.new(Doorkeeper::AccessGrant)
30
30
  cleaner.clean_revoked
31
31
  end
32
32
 
33
- desc 'Removes expired (TTL passed) access grants'
34
- task expired_grants: 'doorkeeper:setup' do
33
+ desc "Removes expired (TTL passed) access grants"
34
+ task expired_grants: "doorkeeper:setup" do
35
35
  cleaner = Doorkeeper::StaleRecordsCleaner.new(Doorkeeper::AccessGrant)
36
36
  cleaner.clean_expired(Doorkeeper.configuration.authorization_code_expires_in)
37
37
  end