doorkeeper 4.3.2 → 5.0.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.
Files changed (188) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.gitlab-ci.yml +16 -0
  4. data/.rubocop.yml +4 -0
  5. data/.travis.yml +2 -0
  6. data/Appraisals +2 -2
  7. data/Gemfile +1 -1
  8. data/NEWS.md +70 -0
  9. data/README.md +92 -9
  10. data/Rakefile +6 -0
  11. data/UPGRADE.md +2 -0
  12. data/app/assets/stylesheets/doorkeeper/admin/application.css +2 -2
  13. data/app/controllers/doorkeeper/application_controller.rb +4 -3
  14. data/app/controllers/doorkeeper/application_metal_controller.rb +4 -0
  15. data/app/controllers/doorkeeper/applications_controller.rb +43 -22
  16. data/app/controllers/doorkeeper/authorizations_controller.rb +55 -12
  17. data/app/controllers/doorkeeper/authorized_applications_controller.rb +19 -2
  18. data/app/controllers/doorkeeper/tokens_controller.rb +11 -16
  19. data/app/helpers/doorkeeper/dashboard_helper.rb +7 -7
  20. data/app/validators/redirect_uri_validator.rb +3 -2
  21. data/app/views/doorkeeper/applications/_delete_form.html.erb +3 -1
  22. data/app/views/doorkeeper/applications/_form.html.erb +31 -19
  23. data/app/views/doorkeeper/applications/edit.html.erb +1 -1
  24. data/app/views/doorkeeper/applications/index.html.erb +18 -6
  25. data/app/views/doorkeeper/applications/new.html.erb +1 -1
  26. data/app/views/doorkeeper/applications/show.html.erb +8 -5
  27. data/app/views/doorkeeper/authorizations/error.html.erb +1 -1
  28. data/app/views/doorkeeper/authorizations/new.html.erb +4 -0
  29. data/app/views/layouts/doorkeeper/admin.html.erb +15 -15
  30. data/config/locales/en.yml +16 -1
  31. data/doorkeeper.gemspec +18 -18
  32. data/gemfiles/rails_5_2.gemfile +1 -1
  33. data/gemfiles/rails_master.gemfile +4 -1
  34. data/lib/doorkeeper/config.rb +77 -27
  35. data/lib/doorkeeper/engine.rb +4 -0
  36. data/lib/doorkeeper/errors.rb +2 -5
  37. data/lib/doorkeeper/grape/helpers.rb +1 -1
  38. data/lib/doorkeeper/helpers/controller.rb +7 -2
  39. data/lib/doorkeeper/models/access_grant_mixin.rb +71 -0
  40. data/lib/doorkeeper/models/access_token_mixin.rb +40 -23
  41. data/lib/doorkeeper/models/application_mixin.rb +8 -1
  42. data/lib/doorkeeper/models/concerns/scopes.rb +1 -1
  43. data/lib/doorkeeper/oauth/authorization/code.rb +31 -8
  44. data/lib/doorkeeper/oauth/authorization/context.rb +15 -0
  45. data/lib/doorkeeper/oauth/authorization/token.rb +36 -14
  46. data/lib/doorkeeper/oauth/authorization_code_request.rb +27 -2
  47. data/lib/doorkeeper/oauth/base_request.rb +20 -9
  48. data/lib/doorkeeper/oauth/client/credentials.rb +4 -2
  49. data/lib/doorkeeper/oauth/client.rb +0 -2
  50. data/lib/doorkeeper/oauth/client_credentials/creator.rb +2 -1
  51. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +6 -3
  52. data/lib/doorkeeper/oauth/client_credentials/validation.rb +4 -6
  53. data/lib/doorkeeper/oauth/client_credentials_request.rb +0 -4
  54. data/lib/doorkeeper/oauth/error_response.rb +11 -3
  55. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +0 -8
  56. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +1 -0
  57. data/lib/doorkeeper/oauth/password_access_token_request.rb +7 -4
  58. data/lib/doorkeeper/oauth/pre_authorization.rb +45 -13
  59. data/lib/doorkeeper/oauth/refresh_token_request.rb +6 -1
  60. data/lib/doorkeeper/oauth/scopes.rb +1 -1
  61. data/lib/doorkeeper/oauth/token.rb +5 -2
  62. data/lib/doorkeeper/oauth/token_introspection.rb +2 -2
  63. data/lib/doorkeeper/oauth/token_response.rb +4 -2
  64. data/lib/doorkeeper/oauth.rb +13 -0
  65. data/lib/doorkeeper/orm/active_record/application.rb +25 -0
  66. data/lib/doorkeeper/orm/active_record/stale_records_cleaner.rb +26 -0
  67. data/lib/doorkeeper/orm/active_record.rb +2 -0
  68. data/lib/doorkeeper/rails/helpers.rb +2 -4
  69. data/lib/doorkeeper/rails/routes.rb +13 -1
  70. data/lib/doorkeeper/rake/db.rake +40 -0
  71. data/lib/doorkeeper/rake/setup.rake +6 -0
  72. data/lib/doorkeeper/rake.rb +14 -0
  73. data/lib/doorkeeper/request/authorization_code.rb +0 -2
  74. data/lib/doorkeeper/request/client_credentials.rb +0 -2
  75. data/lib/doorkeeper/request/code.rb +0 -2
  76. data/lib/doorkeeper/request/password.rb +1 -13
  77. data/lib/doorkeeper/request/refresh_token.rb +0 -2
  78. data/lib/doorkeeper/request/token.rb +0 -2
  79. data/lib/doorkeeper/request.rb +28 -35
  80. data/lib/doorkeeper/version.rb +5 -4
  81. data/lib/doorkeeper.rb +19 -17
  82. data/lib/generators/doorkeeper/application_owner_generator.rb +23 -18
  83. data/lib/generators/doorkeeper/confidential_applications_generator.rb +32 -0
  84. data/lib/generators/doorkeeper/install_generator.rb +17 -9
  85. data/lib/generators/doorkeeper/migration_generator.rb +23 -18
  86. data/lib/generators/doorkeeper/pkce_generator.rb +32 -0
  87. data/lib/generators/doorkeeper/previous_refresh_token_generator.rb +29 -24
  88. data/lib/generators/doorkeeper/templates/add_confidential_to_applications.rb.erb +13 -0
  89. data/lib/generators/doorkeeper/templates/enable_pkce_migration.rb.erb +6 -0
  90. data/lib/generators/doorkeeper/templates/initializer.rb +76 -11
  91. data/lib/generators/doorkeeper/templates/migration.rb.erb +1 -0
  92. data/lib/generators/doorkeeper/views_generator.rb +3 -1
  93. data/spec/controllers/application_metal_controller_spec.rb +50 -0
  94. data/spec/controllers/applications_controller_spec.rb +126 -13
  95. data/spec/controllers/authorizations_controller_spec.rb +279 -17
  96. data/spec/controllers/protected_resources_controller_spec.rb +16 -16
  97. data/spec/controllers/token_info_controller_spec.rb +4 -12
  98. data/spec/controllers/tokens_controller_spec.rb +72 -22
  99. data/spec/dummy/app/assets/config/manifest.js +2 -0
  100. data/spec/dummy/config/environments/test.rb +4 -5
  101. data/spec/dummy/config/initializers/doorkeeper.rb +11 -1
  102. data/spec/dummy/config/initializers/new_framework_defaults.rb +4 -0
  103. data/spec/dummy/config/routes.rb +3 -42
  104. data/spec/dummy/db/migrate/20111122132257_create_users.rb +3 -1
  105. data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +3 -1
  106. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +3 -1
  107. data/spec/dummy/db/migrate/20151223200000_add_owner_to_application.rb +3 -1
  108. data/spec/dummy/db/migrate/20160320211015_add_previous_refresh_token_to_access_tokens.rb +3 -1
  109. data/spec/dummy/db/migrate/20170822064514_enable_pkce.rb +6 -0
  110. data/spec/dummy/db/migrate/20180210183654_add_confidential_to_applications.rb +13 -0
  111. data/spec/dummy/db/schema.rb +38 -37
  112. data/spec/generators/application_owner_generator_spec.rb +1 -1
  113. data/spec/generators/confidential_applications_generator_spec.rb +45 -0
  114. data/spec/generators/install_generator_spec.rb +1 -1
  115. data/spec/generators/migration_generator_spec.rb +1 -1
  116. data/spec/generators/pkce_generator_spec.rb +43 -0
  117. data/spec/generators/previous_refresh_token_generator_spec.rb +1 -1
  118. data/spec/generators/views_generator_spec.rb +1 -1
  119. data/spec/grape/grape_integration_spec.rb +1 -1
  120. data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +1 -1
  121. data/spec/lib/config_spec.rb +88 -14
  122. data/spec/lib/doorkeeper_spec.rb +1 -126
  123. data/spec/lib/models/expirable_spec.rb +0 -3
  124. data/spec/lib/models/revocable_spec.rb +0 -2
  125. data/spec/lib/models/scopes_spec.rb +0 -4
  126. data/spec/lib/oauth/authorization/uri_builder_spec.rb +0 -4
  127. data/spec/lib/oauth/authorization_code_request_spec.rb +24 -2
  128. data/spec/lib/oauth/base_request_spec.rb +40 -2
  129. data/spec/lib/oauth/base_response_spec.rb +1 -1
  130. data/spec/lib/oauth/client/credentials_spec.rb +5 -5
  131. data/spec/lib/oauth/client_credentials/creator_spec.rb +5 -1
  132. data/spec/lib/oauth/client_credentials/issuer_spec.rb +26 -7
  133. data/spec/lib/oauth/client_credentials/validation_spec.rb +2 -3
  134. data/spec/lib/oauth/client_credentials_integration_spec.rb +1 -1
  135. data/spec/lib/oauth/client_credentials_request_spec.rb +3 -5
  136. data/spec/lib/oauth/client_spec.rb +0 -3
  137. data/spec/lib/oauth/code_request_spec.rb +4 -2
  138. data/spec/lib/oauth/error_response_spec.rb +0 -3
  139. data/spec/lib/oauth/error_spec.rb +0 -2
  140. data/spec/lib/oauth/forbidden_token_response_spec.rb +1 -4
  141. data/spec/lib/oauth/helpers/scope_checker_spec.rb +0 -3
  142. data/spec/lib/oauth/helpers/unique_token_spec.rb +0 -1
  143. data/spec/lib/oauth/helpers/uri_checker_spec.rb +5 -2
  144. data/spec/lib/oauth/invalid_token_response_spec.rb +1 -4
  145. data/spec/lib/oauth/password_access_token_request_spec.rb +37 -2
  146. data/spec/lib/oauth/pre_authorization_spec.rb +40 -6
  147. data/spec/lib/oauth/refresh_token_request_spec.rb +11 -7
  148. data/spec/lib/oauth/scopes_spec.rb +0 -3
  149. data/spec/lib/oauth/token_request_spec.rb +4 -5
  150. data/spec/lib/oauth/token_response_spec.rb +0 -1
  151. data/spec/lib/oauth/token_spec.rb +37 -14
  152. data/spec/lib/orm/active_record/stale_records_cleaner_spec.rb +79 -0
  153. data/spec/lib/request/strategy_spec.rb +0 -1
  154. data/spec/lib/server_spec.rb +1 -1
  155. data/spec/models/doorkeeper/access_grant_spec.rb +44 -1
  156. data/spec/models/doorkeeper/access_token_spec.rb +66 -22
  157. data/spec/models/doorkeeper/application_spec.rb +64 -6
  158. data/spec/requests/applications/applications_request_spec.rb +134 -1
  159. data/spec/requests/applications/authorized_applications_spec.rb +1 -1
  160. data/spec/requests/endpoints/authorization_spec.rb +1 -1
  161. data/spec/requests/endpoints/token_spec.rb +7 -5
  162. data/spec/requests/flows/authorization_code_errors_spec.rb +1 -1
  163. data/spec/requests/flows/authorization_code_spec.rb +198 -2
  164. data/spec/requests/flows/client_credentials_spec.rb +46 -6
  165. data/spec/requests/flows/implicit_grant_errors_spec.rb +1 -1
  166. data/spec/requests/flows/implicit_grant_spec.rb +38 -11
  167. data/spec/requests/flows/password_spec.rb +120 -23
  168. data/spec/requests/flows/refresh_token_spec.rb +2 -2
  169. data/spec/requests/flows/revoke_token_spec.rb +11 -11
  170. data/spec/requests/flows/skip_authorization_spec.rb +16 -11
  171. data/spec/requests/protected_resources/metal_spec.rb +1 -1
  172. data/spec/requests/protected_resources/private_api_spec.rb +1 -1
  173. data/spec/routing/custom_controller_routes_spec.rb +59 -7
  174. data/spec/routing/default_routes_spec.rb +2 -2
  175. data/spec/routing/scoped_routes_spec.rb +16 -2
  176. data/spec/spec_helper.rb +54 -3
  177. data/spec/spec_helper_integration.rb +2 -74
  178. data/spec/support/doorkeeper_rspec.rb +19 -0
  179. data/spec/support/helpers/authorization_request_helper.rb +4 -4
  180. data/spec/support/helpers/request_spec_helper.rb +10 -2
  181. data/spec/support/helpers/url_helper.rb +7 -3
  182. data/spec/support/http_method_shim.rb +12 -16
  183. data/spec/validators/redirect_uri_validator_spec.rb +7 -1
  184. data/spec/version/version_spec.rb +3 -3
  185. data/vendor/assets/stylesheets/doorkeeper/bootstrap.min.css +4 -5
  186. metadata +36 -10
  187. data/spec/controllers/application_metal_controller.rb +0 -10
  188. /data/spec/support/dependencies/{factory_girl.rb → factory_bot.rb} +0 -0
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :doorkeeper do
4
+ namespace :db do
5
+ desc 'Removes stale data from doorkeeper related database tables'
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'
11
+ ]
12
+
13
+ namespace :cleanup do
14
+ desc 'Removes stale access tokens'
15
+ task revoked_tokens: 'doorkeeper:setup' do
16
+ cleaner = Doorkeeper::Orm::ActiveRecord::StaleRecordsCleaner.new(Doorkeeper::AccessToken)
17
+ cleaner.clean_revoked
18
+ end
19
+
20
+ desc 'Removes expired (TTL passed) access tokens'
21
+ task expired_tokens: 'doorkeeper:setup' do
22
+ expirable_tokens = Doorkeeper::AccessToken.where(refresh_token: nil)
23
+ cleaner = Doorkeeper::Orm::ActiveRecord::StaleRecordsCleaner.new(expirable_tokens)
24
+ cleaner.clean_expired(Doorkeeper.configuration.access_token_expires_in)
25
+ end
26
+
27
+ desc 'Removes stale access grants'
28
+ task revoked_grants: 'doorkeeper:setup' do
29
+ cleaner = Doorkeeper::Orm::ActiveRecord::StaleRecordsCleaner.new(Doorkeeper::AccessGrant)
30
+ cleaner.clean_revoked
31
+ end
32
+
33
+ desc 'Removes expired (TTL passed) access grants'
34
+ task expired_grants: 'doorkeeper:setup' do
35
+ cleaner = Doorkeeper::Orm::ActiveRecord::StaleRecordsCleaner.new(Doorkeeper::AccessGrant)
36
+ cleaner.clean_expired(Doorkeeper.configuration.authorization_code_expires_in)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :doorkeeper do
4
+ task setup: :environment do
5
+ end
6
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Doorkeeper
4
+ module Rake
5
+ class << self
6
+ def load_tasks
7
+ glob = File.join(File.absolute_path(__dir__), 'rake', '*.rake')
8
+ Dir[glob].each do |rake_file|
9
+ load rake_file
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,5 +1,3 @@
1
- require 'doorkeeper/request/strategy'
2
-
3
1
  module Doorkeeper
4
2
  module Request
5
3
  class AuthorizationCode < Strategy
@@ -1,5 +1,3 @@
1
- require 'doorkeeper/request/strategy'
2
-
3
1
  module Doorkeeper
4
2
  module Request
5
3
  class ClientCredentials < Strategy
@@ -1,5 +1,3 @@
1
- require 'doorkeeper/request/strategy'
2
-
3
1
  module Doorkeeper
4
2
  module Request
5
3
  class Code < Strategy
@@ -1,9 +1,7 @@
1
- require 'doorkeeper/request/strategy'
2
-
3
1
  module Doorkeeper
4
2
  module Request
5
3
  class Password < Strategy
6
- delegate :credentials, :resource_owner, :parameters, to: :server
4
+ delegate :credentials, :resource_owner, :parameters, :client, to: :server
7
5
 
8
6
  def request
9
7
  @request ||= OAuth::PasswordAccessTokenRequest.new(
@@ -13,16 +11,6 @@ module Doorkeeper
13
11
  parameters
14
12
  )
15
13
  end
16
-
17
- private
18
-
19
- def client
20
- if credentials
21
- server.client
22
- elsif parameters[:client_id]
23
- server.client_via_uid
24
- end
25
- end
26
14
  end
27
15
  end
28
16
  end
@@ -1,5 +1,3 @@
1
- require 'doorkeeper/request/strategy'
2
-
3
1
  module Doorkeeper
4
2
  module Request
5
3
  class RefreshToken < Strategy
@@ -1,5 +1,3 @@
1
- require 'doorkeeper/request/strategy'
2
-
3
1
  module Doorkeeper
4
2
  module Request
5
3
  class Token < Strategy
@@ -1,46 +1,39 @@
1
- require 'doorkeeper/request/authorization_code'
2
- require 'doorkeeper/request/client_credentials'
3
- require 'doorkeeper/request/code'
4
- require 'doorkeeper/request/password'
5
- require 'doorkeeper/request/refresh_token'
6
- require 'doorkeeper/request/token'
7
-
8
1
  module Doorkeeper
9
2
  module Request
10
- module_function
3
+ class << self
4
+ def authorization_strategy(response_type)
5
+ get_strategy(response_type, authorization_response_types)
6
+ rescue NameError
7
+ raise Errors::InvalidAuthorizationStrategy
8
+ end
11
9
 
12
- def authorization_strategy(response_type)
13
- get_strategy response_type, authorization_response_types
14
- rescue NameError
15
- raise Errors::InvalidAuthorizationStrategy
16
- end
10
+ def token_strategy(grant_type)
11
+ get_strategy(grant_type, token_grant_types)
12
+ rescue NameError
13
+ raise Errors::InvalidTokenStrategy
14
+ end
17
15
 
18
- def token_strategy(grant_type)
19
- get_strategy grant_type, token_grant_types
20
- rescue NameError
21
- raise Errors::InvalidTokenStrategy
22
- end
16
+ def get_strategy(grant_or_request_type, available)
17
+ raise Errors::MissingRequestStrategy if grant_or_request_type.blank?
18
+ raise NameError unless available.include?(grant_or_request_type.to_s)
23
19
 
24
- def get_strategy(grant_or_request_type, available)
25
- fail Errors::MissingRequestStrategy unless grant_or_request_type.present?
26
- fail NameError unless available.include?(grant_or_request_type.to_s)
27
- strategy_class(grant_or_request_type)
28
- end
20
+ build_strategy_class(grant_or_request_type)
21
+ end
29
22
 
30
- def authorization_response_types
31
- Doorkeeper.configuration.authorization_response_types
32
- end
33
- private_class_method :authorization_response_types
23
+ private
34
24
 
35
- def token_grant_types
36
- Doorkeeper.configuration.token_grant_types
37
- end
38
- private_class_method :token_grant_types
25
+ def authorization_response_types
26
+ Doorkeeper.configuration.authorization_response_types
27
+ end
28
+
29
+ def token_grant_types
30
+ Doorkeeper.configuration.token_grant_types
31
+ end
39
32
 
40
- def strategy_class(grant_or_request_type)
41
- strategy_class_name = grant_or_request_type.to_s.tr(' ', '_').camelize
42
- "Doorkeeper::Request::#{strategy_class_name}".constantize
33
+ def build_strategy_class(grant_or_request_type)
34
+ strategy_class_name = grant_or_request_type.to_s.tr(' ', '_').camelize
35
+ "Doorkeeper::Request::#{strategy_class_name}".constantize
36
+ end
43
37
  end
44
- private_class_method :strategy_class
45
38
  end
46
39
  end
@@ -5,11 +5,12 @@ module Doorkeeper
5
5
 
6
6
  module VERSION
7
7
  # Semantic versioning
8
- MAJOR = 4
9
- MINOR = 3
10
- TINY = 2
8
+ MAJOR = 5
9
+ MINOR = 0
10
+ TINY = 0
11
+ PRE = nil
11
12
 
12
13
  # Full version number
13
- STRING = [MAJOR, MINOR, TINY].compact.join('.')
14
+ STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
14
15
  end
15
16
  end
data/lib/doorkeeper.rb CHANGED
@@ -2,18 +2,28 @@ require 'doorkeeper/version'
2
2
  require 'doorkeeper/engine'
3
3
  require 'doorkeeper/config'
4
4
 
5
+ require 'doorkeeper/request/strategy'
6
+ require 'doorkeeper/request/authorization_code'
7
+ require 'doorkeeper/request/client_credentials'
8
+ require 'doorkeeper/request/code'
9
+ require 'doorkeeper/request/password'
10
+ require 'doorkeeper/request/refresh_token'
11
+ require 'doorkeeper/request/token'
12
+
5
13
  require 'doorkeeper/errors'
6
14
  require 'doorkeeper/server'
7
15
  require 'doorkeeper/request'
8
16
  require 'doorkeeper/validations'
9
17
 
10
18
  require 'doorkeeper/oauth/authorization/code'
19
+ require 'doorkeeper/oauth/authorization/context'
11
20
  require 'doorkeeper/oauth/authorization/token'
12
21
  require 'doorkeeper/oauth/authorization/uri_builder'
13
22
  require 'doorkeeper/oauth/helpers/scope_checker'
14
23
  require 'doorkeeper/oauth/helpers/uri_checker'
15
24
  require 'doorkeeper/oauth/helpers/unique_token'
16
25
 
26
+ require 'doorkeeper/oauth'
17
27
  require 'doorkeeper/oauth/scopes'
18
28
  require 'doorkeeper/oauth/error'
19
29
  require 'doorkeeper/oauth/base_response'
@@ -25,6 +35,13 @@ require 'doorkeeper/oauth/base_request'
25
35
  require 'doorkeeper/oauth/authorization_code_request'
26
36
  require 'doorkeeper/oauth/refresh_token_request'
27
37
  require 'doorkeeper/oauth/password_access_token_request'
38
+
39
+ require 'doorkeeper/oauth/client_credentials/validation'
40
+ require 'doorkeeper/oauth/client_credentials/creator'
41
+ require 'doorkeeper/oauth/client_credentials/issuer'
42
+ require 'doorkeeper/oauth/client_credentials/validation'
43
+ require 'doorkeeper/oauth/client/credentials'
44
+
28
45
  require 'doorkeeper/oauth/client_credentials_request'
29
46
  require 'doorkeeper/oauth/code_request'
30
47
  require 'doorkeeper/oauth/token_request'
@@ -49,26 +66,11 @@ require 'doorkeeper/helpers/controller'
49
66
  require 'doorkeeper/rails/routes'
50
67
  require 'doorkeeper/rails/helpers'
51
68
 
52
- require 'doorkeeper/orm/active_record'
69
+ require 'doorkeeper/rake'
53
70
 
54
- require 'active_support/deprecation'
71
+ require 'doorkeeper/orm/active_record'
55
72
 
56
73
  module Doorkeeper
57
- def self.configured?
58
- ActiveSupport::Deprecation.warn "Method `Doorkeeper#configured?` has been deprecated without replacement."
59
- @config.present?
60
- end
61
-
62
- def self.database_installed?
63
- ActiveSupport::Deprecation.warn "Method `Doorkeeper#database_installed?` has been deprecated without replacement."
64
- [AccessToken, AccessGrant, Application].all?(&:table_exists?)
65
- end
66
-
67
- def self.installed?
68
- ActiveSupport::Deprecation.warn "Method `Doorkeeper#installed?` has been deprecated without replacement."
69
- configured? && database_installed?
70
- end
71
-
72
74
  def self.authenticate(request, methods = Doorkeeper.configuration.access_token_methods)
73
75
  OAuth::Token.authenticate(request, *methods)
74
76
  end
@@ -1,27 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators'
1
4
  require 'rails/generators/active_record'
2
5
 
3
- class Doorkeeper::ApplicationOwnerGenerator < Rails::Generators::Base
4
- include Rails::Generators::Migration
5
- source_root File.expand_path('../templates', __FILE__)
6
- desc 'Provide support for client application ownership.'
6
+ module Doorkeeper
7
+ class ApplicationOwnerGenerator < ::Rails::Generators::Base
8
+ include ::Rails::Generators::Migration
9
+ source_root File.expand_path('templates', __dir__)
10
+ desc 'Provide support for client application ownership.'
7
11
 
8
- def application_owner
9
- migration_template(
10
- 'add_owner_to_application_migration.rb.erb',
11
- 'db/migrate/add_owner_to_application.rb',
12
- migration_version: migration_version
13
- )
14
- end
12
+ def application_owner
13
+ migration_template(
14
+ 'add_owner_to_application_migration.rb.erb',
15
+ 'db/migrate/add_owner_to_application.rb',
16
+ migration_version: migration_version
17
+ )
18
+ end
15
19
 
16
- def self.next_migration_number(dirname)
17
- ActiveRecord::Generators::Base.next_migration_number(dirname)
18
- end
20
+ def self.next_migration_number(dirname)
21
+ ActiveRecord::Generators::Base.next_migration_number(dirname)
22
+ end
19
23
 
20
- private
24
+ private
21
25
 
22
- def migration_version
23
- if ActiveRecord::VERSION::MAJOR >= 5
24
- "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
26
+ def migration_version
27
+ if ActiveRecord::VERSION::MAJOR >= 5
28
+ "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
29
+ end
25
30
  end
26
31
  end
27
32
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators'
4
+ require 'rails/generators/active_record'
5
+
6
+ module Doorkeeper
7
+ class ConfidentialApplicationsGenerator < ::Rails::Generators::Base
8
+ include ::Rails::Generators::Migration
9
+ source_root File.expand_path('templates', __dir__)
10
+ desc 'Add confidential column to Doorkeeper applications'
11
+
12
+ def pkce
13
+ migration_template(
14
+ 'add_confidential_to_applications.rb.erb',
15
+ 'db/migrate/add_confidential_to_applications.rb',
16
+ migration_version: migration_version
17
+ )
18
+ end
19
+
20
+ def self.next_migration_number(dirname)
21
+ ActiveRecord::Generators::Base.next_migration_number(dirname)
22
+ end
23
+
24
+ private
25
+
26
+ def migration_version
27
+ if ActiveRecord::VERSION::MAJOR >= 5
28
+ "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,12 +1,20 @@
1
- class Doorkeeper::InstallGenerator < ::Rails::Generators::Base
2
- include Rails::Generators::Migration
3
- source_root File.expand_path('../templates', __FILE__)
4
- desc 'Installs Doorkeeper.'
1
+ # frozen_string_literal: true
5
2
 
6
- def install
7
- template 'initializer.rb', 'config/initializers/doorkeeper.rb'
8
- copy_file File.expand_path('../../../../config/locales/en.yml', __FILE__), 'config/locales/doorkeeper.en.yml'
9
- route 'use_doorkeeper'
10
- readme 'README'
3
+ require 'rails/generators'
4
+ require 'rails/generators/active_record'
5
+
6
+ module Doorkeeper
7
+ class InstallGenerator < ::Rails::Generators::Base
8
+ include ::Rails::Generators::Migration
9
+ source_root File.expand_path('templates', __dir__)
10
+ desc 'Installs Doorkeeper.'
11
+
12
+ def install
13
+ template 'initializer.rb', 'config/initializers/doorkeeper.rb'
14
+ copy_file File.expand_path('../../../config/locales/en.yml', __dir__),
15
+ 'config/locales/doorkeeper.en.yml'
16
+ route 'use_doorkeeper'
17
+ readme 'README'
18
+ end
11
19
  end
12
20
  end
@@ -1,27 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators'
1
4
  require 'rails/generators/active_record'
2
5
 
3
- class Doorkeeper::MigrationGenerator < ::Rails::Generators::Base
4
- include Rails::Generators::Migration
5
- source_root File.expand_path('../templates', __FILE__)
6
- desc 'Installs Doorkeeper migration file.'
6
+ module Doorkeeper
7
+ class MigrationGenerator < ::Rails::Generators::Base
8
+ include ::Rails::Generators::Migration
9
+ source_root File.expand_path('templates', __dir__)
10
+ desc 'Installs Doorkeeper migration file.'
7
11
 
8
- def install
9
- migration_template(
10
- 'migration.rb.erb',
11
- 'db/migrate/create_doorkeeper_tables.rb',
12
- migration_version: migration_version
13
- )
14
- end
12
+ def install
13
+ migration_template(
14
+ 'migration.rb.erb',
15
+ 'db/migrate/create_doorkeeper_tables.rb',
16
+ migration_version: migration_version
17
+ )
18
+ end
15
19
 
16
- def self.next_migration_number(dirname)
17
- ActiveRecord::Generators::Base.next_migration_number(dirname)
18
- end
20
+ def self.next_migration_number(dirname)
21
+ ActiveRecord::Generators::Base.next_migration_number(dirname)
22
+ end
19
23
 
20
- private
24
+ private
21
25
 
22
- def migration_version
23
- if ActiveRecord::VERSION::MAJOR >= 5
24
- "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
26
+ def migration_version
27
+ if ActiveRecord::VERSION::MAJOR >= 5
28
+ "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
29
+ end
25
30
  end
26
31
  end
27
32
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators'
4
+ require 'rails/generators/active_record'
5
+
6
+ module Doorkeeper
7
+ class PkceGenerator < ::Rails::Generators::Base
8
+ include ::Rails::Generators::Migration
9
+ source_root File.expand_path('templates', __dir__)
10
+ desc 'Provide support for PKCE.'
11
+
12
+ def pkce
13
+ migration_template(
14
+ 'enable_pkce_migration.rb.erb',
15
+ 'db/migrate/enable_pkce.rb',
16
+ migration_version: migration_version
17
+ )
18
+ end
19
+
20
+ def self.next_migration_number(dirname)
21
+ ActiveRecord::Generators::Base.next_migration_number(dirname)
22
+ end
23
+
24
+ private
25
+
26
+ def migration_version
27
+ if ActiveRecord::VERSION::MAJOR >= 5
28
+ "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,35 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators'
1
4
  require 'rails/generators/active_record'
2
5
 
3
- class Doorkeeper::PreviousRefreshTokenGenerator < Rails::Generators::Base
4
- include Rails::Generators::Migration
5
- source_root File.expand_path('../templates', __FILE__)
6
- desc 'Support revoke refresh token on access token use'
6
+ module Doorkeeper
7
+ class PreviousRefreshTokenGenerator < ::Rails::Generators::Base
8
+ include ::Rails::Generators::Migration
9
+ source_root File.expand_path('templates', __dir__)
10
+ desc 'Support revoke refresh token on access token use'
7
11
 
8
- def self.next_migration_number(path)
9
- ActiveRecord::Generators::Base.next_migration_number(path)
10
- end
12
+ def self.next_migration_number(path)
13
+ ActiveRecord::Generators::Base.next_migration_number(path)
14
+ end
11
15
 
12
- def previous_refresh_token
13
- if no_previous_refresh_token_column?
14
- migration_template(
15
- 'add_previous_refresh_token_to_access_tokens.rb.erb',
16
- 'db/migrate/add_previous_refresh_token_to_access_tokens.rb'
17
- )
16
+ def previous_refresh_token
17
+ if no_previous_refresh_token_column?
18
+ migration_template(
19
+ 'add_previous_refresh_token_to_access_tokens.rb.erb',
20
+ 'db/migrate/add_previous_refresh_token_to_access_tokens.rb'
21
+ )
22
+ end
18
23
  end
19
- end
20
24
 
21
- private
25
+ private
22
26
 
23
- def migration_version
24
- if ActiveRecord::VERSION::MAJOR >= 5
25
- "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
27
+ def migration_version
28
+ if ActiveRecord::VERSION::MAJOR >= 5
29
+ "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
30
+ end
26
31
  end
27
- end
28
32
 
29
- def no_previous_refresh_token_column?
30
- !ActiveRecord::Base.connection.column_exists?(
31
- :oauth_access_tokens,
32
- :previous_refresh_token
33
- )
33
+ def no_previous_refresh_token_column?
34
+ !ActiveRecord::Base.connection.column_exists?(
35
+ :oauth_access_tokens,
36
+ :previous_refresh_token
37
+ )
38
+ end
34
39
  end
35
40
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddConfidentialToApplications < ActiveRecord::Migration<%= migration_version %>
4
+ def change
5
+ add_column(
6
+ :oauth_applications,
7
+ :confidential,
8
+ :boolean,
9
+ null: false,
10
+ default: true
11
+ )
12
+ end
13
+ end
@@ -0,0 +1,6 @@
1
+ class EnablePkce < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ add_column :oauth_access_grants, :code_challenge, :string, null: true
4
+ add_column :oauth_access_grants, :code_challenge_method, :string, null: true
5
+ end
6
+ end