doorkeeper 5.3.2 → 5.4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +84 -2
- data/README.md +6 -4
- data/app/controllers/doorkeeper/applications_controller.rb +4 -4
- data/app/controllers/doorkeeper/authorizations_controller.rb +31 -12
- data/app/controllers/doorkeeper/authorized_applications_controller.rb +2 -2
- data/app/controllers/doorkeeper/tokens_controller.rb +57 -20
- data/app/views/doorkeeper/applications/_form.html.erb +1 -1
- data/app/views/doorkeeper/applications/show.html.erb +19 -2
- data/config/locales/en.yml +3 -1
- data/lib/doorkeeper.rb +106 -79
- data/lib/doorkeeper/config.rb +64 -35
- data/lib/doorkeeper/config/abstract_builder.rb +28 -0
- data/lib/doorkeeper/config/option.rb +28 -14
- data/lib/doorkeeper/engine.rb +1 -1
- data/lib/doorkeeper/grape/helpers.rb +1 -1
- data/lib/doorkeeper/helpers/controller.rb +4 -4
- data/lib/doorkeeper/models/access_grant_mixin.rb +20 -16
- data/lib/doorkeeper/models/access_token_mixin.rb +108 -45
- data/lib/doorkeeper/models/application_mixin.rb +5 -4
- data/lib/doorkeeper/models/concerns/resource_ownerable.rb +47 -0
- data/lib/doorkeeper/models/concerns/revocable.rb +1 -1
- data/lib/doorkeeper/models/concerns/scopes.rb +5 -1
- data/lib/doorkeeper/models/concerns/secret_storable.rb +1 -3
- data/lib/doorkeeper/oauth/authorization/code.rb +15 -6
- data/lib/doorkeeper/oauth/authorization/context.rb +2 -2
- data/lib/doorkeeper/oauth/authorization/token.rb +8 -12
- data/lib/doorkeeper/oauth/authorization/uri_builder.rb +4 -4
- data/lib/doorkeeper/oauth/authorization_code_request.rb +18 -8
- data/lib/doorkeeper/oauth/base_request.rb +11 -19
- data/lib/doorkeeper/oauth/client.rb +1 -1
- data/lib/doorkeeper/oauth/client/credentials.rb +2 -4
- data/lib/doorkeeper/oauth/client_credentials/creator.rb +26 -8
- data/lib/doorkeeper/oauth/client_credentials/issuer.rb +3 -2
- data/lib/doorkeeper/oauth/client_credentials/validator.rb +4 -2
- data/lib/doorkeeper/oauth/client_credentials_request.rb +8 -7
- data/lib/doorkeeper/oauth/code_request.rb +3 -3
- data/lib/doorkeeper/oauth/code_response.rb +6 -2
- data/lib/doorkeeper/oauth/error_response.rb +2 -4
- data/lib/doorkeeper/oauth/helpers/scope_checker.rb +1 -5
- data/lib/doorkeeper/oauth/hooks/context.rb +21 -0
- data/lib/doorkeeper/oauth/invalid_token_response.rb +2 -2
- data/lib/doorkeeper/oauth/password_access_token_request.rb +4 -6
- data/lib/doorkeeper/oauth/pre_authorization.rb +36 -30
- data/lib/doorkeeper/oauth/refresh_token_request.rb +18 -22
- data/lib/doorkeeper/oauth/token.rb +5 -6
- data/lib/doorkeeper/oauth/token_introspection.rb +4 -8
- data/lib/doorkeeper/oauth/token_request.rb +3 -3
- data/lib/doorkeeper/oauth/token_response.rb +1 -1
- data/lib/doorkeeper/orm/active_record.rb +10 -2
- data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +8 -3
- data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +7 -3
- data/lib/doorkeeper/orm/active_record/mixins/application.rb +20 -16
- data/lib/doorkeeper/rails/routes.rb +13 -17
- data/lib/doorkeeper/rails/routes/abstract_router.rb +35 -0
- data/lib/doorkeeper/rails/routes/mapper.rb +2 -2
- data/lib/doorkeeper/rails/routes/registry.rb +45 -0
- data/lib/doorkeeper/request/refresh_token.rb +2 -1
- data/lib/doorkeeper/request/strategy.rb +2 -2
- data/lib/doorkeeper/server.rb +4 -4
- data/lib/doorkeeper/stale_records_cleaner.rb +4 -4
- data/lib/doorkeeper/version.rb +2 -2
- data/lib/generators/doorkeeper/confidential_applications_generator.rb +1 -1
- data/lib/generators/doorkeeper/enable_polymorphic_resource_owner_generator.rb +39 -0
- data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb.erb +2 -0
- data/lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb.erb +2 -0
- data/lib/generators/doorkeeper/templates/enable_pkce_migration.rb.erb +2 -0
- data/lib/generators/doorkeeper/templates/enable_polymorphic_resource_owner_migration.rb.erb +17 -0
- data/lib/generators/doorkeeper/templates/initializer.rb +39 -3
- data/lib/generators/doorkeeper/templates/migration.rb.erb +14 -5
- metadata +12 -295
- data/Appraisals +0 -40
- data/CODE_OF_CONDUCT.md +0 -46
- data/CONTRIBUTING.md +0 -49
- data/Dangerfile +0 -67
- data/Dockerfile +0 -29
- data/Gemfile +0 -25
- data/NEWS.md +0 -1
- data/RELEASING.md +0 -11
- data/Rakefile +0 -28
- data/SECURITY.md +0 -15
- data/UPGRADE.md +0 -2
- data/bin/console +0 -16
- data/doorkeeper.gemspec +0 -42
- data/gemfiles/rails_5_0.gemfile +0 -18
- data/gemfiles/rails_5_1.gemfile +0 -18
- data/gemfiles/rails_5_2.gemfile +0 -18
- data/gemfiles/rails_6_0.gemfile +0 -18
- data/gemfiles/rails_master.gemfile +0 -18
- data/spec/controllers/application_metal_controller_spec.rb +0 -64
- data/spec/controllers/applications_controller_spec.rb +0 -274
- data/spec/controllers/authorizations_controller_spec.rb +0 -608
- data/spec/controllers/protected_resources_controller_spec.rb +0 -361
- data/spec/controllers/token_info_controller_spec.rb +0 -50
- data/spec/controllers/tokens_controller_spec.rb +0 -498
- data/spec/dummy/Rakefile +0 -9
- data/spec/dummy/app/assets/config/manifest.js +0 -2
- data/spec/dummy/app/controllers/application_controller.rb +0 -5
- data/spec/dummy/app/controllers/custom_authorizations_controller.rb +0 -9
- data/spec/dummy/app/controllers/full_protected_resources_controller.rb +0 -14
- data/spec/dummy/app/controllers/home_controller.rb +0 -18
- data/spec/dummy/app/controllers/metal_controller.rb +0 -13
- data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +0 -13
- data/spec/dummy/app/helpers/application_helper.rb +0 -7
- data/spec/dummy/app/models/user.rb +0 -7
- data/spec/dummy/app/views/home/index.html.erb +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +0 -14
- data/spec/dummy/config.ru +0 -6
- data/spec/dummy/config/application.rb +0 -49
- data/spec/dummy/config/boot.rb +0 -7
- data/spec/dummy/config/database.yml +0 -15
- data/spec/dummy/config/environment.rb +0 -5
- data/spec/dummy/config/environments/development.rb +0 -31
- data/spec/dummy/config/environments/production.rb +0 -64
- data/spec/dummy/config/environments/test.rb +0 -45
- data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -9
- data/spec/dummy/config/initializers/doorkeeper.rb +0 -166
- data/spec/dummy/config/initializers/secret_token.rb +0 -10
- data/spec/dummy/config/initializers/session_store.rb +0 -10
- data/spec/dummy/config/initializers/wrap_parameters.rb +0 -16
- data/spec/dummy/config/locales/doorkeeper.en.yml +0 -5
- data/spec/dummy/config/routes.rb +0 -13
- data/spec/dummy/db/migrate/20111122132257_create_users.rb +0 -11
- data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +0 -7
- data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +0 -69
- data/spec/dummy/db/migrate/20151223200000_add_owner_to_application.rb +0 -9
- data/spec/dummy/db/migrate/20160320211015_add_previous_refresh_token_to_access_tokens.rb +0 -13
- data/spec/dummy/db/migrate/20170822064514_enable_pkce.rb +0 -8
- data/spec/dummy/db/migrate/20180210183654_add_confidential_to_applications.rb +0 -13
- data/spec/dummy/db/schema.rb +0 -68
- data/spec/dummy/public/404.html +0 -26
- data/spec/dummy/public/422.html +0 -26
- data/spec/dummy/public/500.html +0 -26
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +0 -9
- data/spec/factories.rb +0 -30
- data/spec/generators/application_owner_generator_spec.rb +0 -28
- data/spec/generators/confidential_applications_generator_spec.rb +0 -29
- data/spec/generators/install_generator_spec.rb +0 -36
- data/spec/generators/migration_generator_spec.rb +0 -28
- data/spec/generators/pkce_generator_spec.rb +0 -28
- data/spec/generators/previous_refresh_token_generator_spec.rb +0 -44
- data/spec/generators/templates/routes.rb +0 -4
- data/spec/generators/views_generator_spec.rb +0 -29
- data/spec/grape/grape_integration_spec.rb +0 -137
- data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +0 -26
- data/spec/lib/config_spec.rb +0 -809
- data/spec/lib/doorkeeper_spec.rb +0 -27
- data/spec/lib/models/expirable_spec.rb +0 -61
- data/spec/lib/models/reusable_spec.rb +0 -40
- data/spec/lib/models/revocable_spec.rb +0 -59
- data/spec/lib/models/scopes_spec.rb +0 -53
- data/spec/lib/models/secret_storable_spec.rb +0 -135
- data/spec/lib/oauth/authorization/uri_builder_spec.rb +0 -39
- data/spec/lib/oauth/authorization_code_request_spec.rb +0 -170
- data/spec/lib/oauth/base_request_spec.rb +0 -224
- data/spec/lib/oauth/base_response_spec.rb +0 -45
- data/spec/lib/oauth/client/credentials_spec.rb +0 -90
- data/spec/lib/oauth/client_credentials/creator_spec.rb +0 -134
- data/spec/lib/oauth/client_credentials/issuer_spec.rb +0 -112
- data/spec/lib/oauth/client_credentials/validation_spec.rb +0 -59
- data/spec/lib/oauth/client_credentials_integration_spec.rb +0 -27
- data/spec/lib/oauth/client_credentials_request_spec.rb +0 -107
- data/spec/lib/oauth/client_spec.rb +0 -38
- data/spec/lib/oauth/code_request_spec.rb +0 -46
- data/spec/lib/oauth/code_response_spec.rb +0 -32
- data/spec/lib/oauth/error_response_spec.rb +0 -64
- data/spec/lib/oauth/error_spec.rb +0 -21
- data/spec/lib/oauth/forbidden_token_response_spec.rb +0 -20
- data/spec/lib/oauth/helpers/scope_checker_spec.rb +0 -110
- data/spec/lib/oauth/helpers/unique_token_spec.rb +0 -21
- data/spec/lib/oauth/helpers/uri_checker_spec.rb +0 -262
- data/spec/lib/oauth/invalid_request_response_spec.rb +0 -73
- data/spec/lib/oauth/invalid_token_response_spec.rb +0 -53
- data/spec/lib/oauth/password_access_token_request_spec.rb +0 -190
- data/spec/lib/oauth/pre_authorization_spec.rb +0 -223
- data/spec/lib/oauth/refresh_token_request_spec.rb +0 -177
- data/spec/lib/oauth/scopes_spec.rb +0 -146
- data/spec/lib/oauth/token_request_spec.rb +0 -157
- data/spec/lib/oauth/token_response_spec.rb +0 -84
- data/spec/lib/oauth/token_spec.rb +0 -156
- data/spec/lib/request/strategy_spec.rb +0 -54
- data/spec/lib/secret_storing/base_spec.rb +0 -60
- data/spec/lib/secret_storing/bcrypt_spec.rb +0 -49
- data/spec/lib/secret_storing/plain_spec.rb +0 -44
- data/spec/lib/secret_storing/sha256_hash_spec.rb +0 -48
- data/spec/lib/server_spec.rb +0 -49
- data/spec/lib/stale_records_cleaner_spec.rb +0 -89
- data/spec/models/doorkeeper/access_grant_spec.rb +0 -161
- data/spec/models/doorkeeper/access_token_spec.rb +0 -622
- data/spec/models/doorkeeper/application_spec.rb +0 -482
- data/spec/requests/applications/applications_request_spec.rb +0 -259
- data/spec/requests/applications/authorized_applications_spec.rb +0 -32
- data/spec/requests/endpoints/authorization_spec.rb +0 -91
- data/spec/requests/endpoints/token_spec.rb +0 -75
- data/spec/requests/flows/authorization_code_errors_spec.rb +0 -79
- data/spec/requests/flows/authorization_code_spec.rb +0 -525
- data/spec/requests/flows/client_credentials_spec.rb +0 -166
- data/spec/requests/flows/implicit_grant_errors_spec.rb +0 -46
- data/spec/requests/flows/implicit_grant_spec.rb +0 -91
- data/spec/requests/flows/password_spec.rb +0 -316
- data/spec/requests/flows/refresh_token_spec.rb +0 -233
- data/spec/requests/flows/revoke_token_spec.rb +0 -157
- data/spec/requests/flows/skip_authorization_spec.rb +0 -66
- data/spec/requests/protected_resources/metal_spec.rb +0 -16
- data/spec/requests/protected_resources/private_api_spec.rb +0 -83
- data/spec/routing/custom_controller_routes_spec.rb +0 -133
- data/spec/routing/default_routes_spec.rb +0 -41
- data/spec/routing/scoped_routes_spec.rb +0 -47
- data/spec/spec_helper.rb +0 -54
- data/spec/spec_helper_integration.rb +0 -4
- data/spec/support/dependencies/factory_bot.rb +0 -4
- data/spec/support/doorkeeper_rspec.rb +0 -22
- data/spec/support/helpers/access_token_request_helper.rb +0 -13
- data/spec/support/helpers/authorization_request_helper.rb +0 -43
- data/spec/support/helpers/config_helper.rb +0 -11
- data/spec/support/helpers/model_helper.rb +0 -78
- data/spec/support/helpers/request_spec_helper.rb +0 -110
- data/spec/support/helpers/url_helper.rb +0 -62
- data/spec/support/orm/active_record.rb +0 -5
- data/spec/support/shared/controllers_shared_context.rb +0 -133
- data/spec/support/shared/hashing_shared_context.rb +0 -36
- data/spec/support/shared/models_shared_examples.rb +0 -54
- data/spec/validators/redirect_uri_validator_spec.rb +0 -183
- data/spec/version/version_spec.rb +0 -17
@@ -33,12 +33,20 @@ module Doorkeeper
|
|
33
33
|
lazy_load do
|
34
34
|
require "doorkeeper/models/concerns/ownership"
|
35
35
|
|
36
|
-
Doorkeeper.config.application_model.
|
36
|
+
Doorkeeper.config.application_model.include(Doorkeeper::Models::Ownership)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
40
|
def self.lazy_load(&block)
|
41
|
-
ActiveSupport
|
41
|
+
# ActiveSupport has no public interface to check if something
|
42
|
+
# already lazy-loaded :(
|
43
|
+
loaded = ActiveSupport.instance_variable_get(:"@loaded") || {}
|
44
|
+
|
45
|
+
if loaded.key?(:active_record)
|
46
|
+
block.call
|
47
|
+
else
|
48
|
+
ActiveSupport.on_load(:active_record, {}, &block)
|
49
|
+
end
|
42
50
|
end
|
43
51
|
|
44
52
|
def self.models
|
@@ -9,12 +9,17 @@ module Doorkeeper::Orm::ActiveRecord::Mixins
|
|
9
9
|
|
10
10
|
include ::Doorkeeper::AccessGrantMixin
|
11
11
|
|
12
|
-
belongs_to :application, class_name: Doorkeeper.config.application_class,
|
12
|
+
belongs_to :application, class_name: Doorkeeper.config.application_class.to_s,
|
13
13
|
optional: true,
|
14
14
|
inverse_of: :access_grants
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
if Doorkeeper.config.polymorphic_resource_owner?
|
17
|
+
belongs_to :resource_owner, polymorphic: true, optional: false
|
18
|
+
else
|
19
|
+
validates :resource_owner_id, presence: true
|
20
|
+
end
|
21
|
+
|
22
|
+
validates :application_id,
|
18
23
|
:token,
|
19
24
|
:expires_in,
|
20
25
|
:redirect_uri,
|
@@ -9,10 +9,14 @@ module Doorkeeper::Orm::ActiveRecord::Mixins
|
|
9
9
|
|
10
10
|
include ::Doorkeeper::AccessTokenMixin
|
11
11
|
|
12
|
-
belongs_to :application, class_name: Doorkeeper.config.application_class,
|
12
|
+
belongs_to :application, class_name: Doorkeeper.config.application_class.to_s,
|
13
13
|
inverse_of: :access_tokens,
|
14
14
|
optional: true
|
15
15
|
|
16
|
+
if Doorkeeper.config.polymorphic_resource_owner?
|
17
|
+
belongs_to :resource_owner, polymorphic: true, optional: true
|
18
|
+
end
|
19
|
+
|
16
20
|
validates :token, presence: true, uniqueness: { case_sensitive: true }
|
17
21
|
validates :refresh_token, uniqueness: { case_sensitive: true }, if: :use_refresh_token?
|
18
22
|
|
@@ -25,7 +29,7 @@ module Doorkeeper::Orm::ActiveRecord::Mixins
|
|
25
29
|
on: :create, if: :use_refresh_token?
|
26
30
|
end
|
27
31
|
|
28
|
-
|
32
|
+
module ClassMethods
|
29
33
|
# Searches for not revoked Access Tokens associated with the
|
30
34
|
# specific Resource Owner.
|
31
35
|
#
|
@@ -36,7 +40,7 @@ module Doorkeeper::Orm::ActiveRecord::Mixins
|
|
36
40
|
# active Access Tokens for Resource Owner
|
37
41
|
#
|
38
42
|
def active_for(resource_owner)
|
39
|
-
|
43
|
+
by_resource_owner(resource_owner).where(revoked_at: nil)
|
40
44
|
end
|
41
45
|
|
42
46
|
def refresh_token_revoked_on_use?
|
@@ -12,12 +12,12 @@ module Doorkeeper::Orm::ActiveRecord::Mixins
|
|
12
12
|
has_many :access_grants,
|
13
13
|
foreign_key: :application_id,
|
14
14
|
dependent: :delete_all,
|
15
|
-
class_name: Doorkeeper.config.access_grant_class
|
15
|
+
class_name: Doorkeeper.config.access_grant_class.to_s
|
16
16
|
|
17
17
|
has_many :access_tokens,
|
18
18
|
foreign_key: :application_id,
|
19
19
|
dependent: :delete_all,
|
20
|
-
class_name: Doorkeeper.config.access_token_class
|
20
|
+
class_name: Doorkeeper.config.access_token_class.to_s
|
21
21
|
|
22
22
|
validates :name, :secret, :uid, presence: true
|
23
23
|
validates :uid, uniqueness: { case_sensitive: true }
|
@@ -31,7 +31,7 @@ module Doorkeeper::Orm::ActiveRecord::Mixins
|
|
31
31
|
has_many :authorized_tokens,
|
32
32
|
-> { where(revoked_at: nil) },
|
33
33
|
foreign_key: :application_id,
|
34
|
-
class_name: Doorkeeper.config.access_token_class
|
34
|
+
class_name: Doorkeeper.config.access_token_class.to_s
|
35
35
|
|
36
36
|
has_many :authorized_applications,
|
37
37
|
through: :authorized_tokens,
|
@@ -84,6 +84,21 @@ module Doorkeeper::Orm::ActiveRecord::Mixins
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
+
def authorized_for_resource_owner?(resource_owner)
|
88
|
+
Doorkeeper.configuration.authorize_resource_owner_for_client.call(self, resource_owner)
|
89
|
+
end
|
90
|
+
|
91
|
+
# We need to hook into this method to allow serializing plan-text secrets
|
92
|
+
# when secrets hashing enabled.
|
93
|
+
#
|
94
|
+
# @param key [String] attribute name
|
95
|
+
#
|
96
|
+
def read_attribute_for_serialization(key)
|
97
|
+
return super unless key.to_s == "secret"
|
98
|
+
|
99
|
+
plaintext_secret || secret
|
100
|
+
end
|
101
|
+
|
87
102
|
private
|
88
103
|
|
89
104
|
def generate_uid
|
@@ -91,7 +106,7 @@ module Doorkeeper::Orm::ActiveRecord::Mixins
|
|
91
106
|
end
|
92
107
|
|
93
108
|
def generate_secret
|
94
|
-
return
|
109
|
+
return if secret.present?
|
95
110
|
|
96
111
|
renew_secret
|
97
112
|
end
|
@@ -131,17 +146,6 @@ module Doorkeeper::Orm::ActiveRecord::Mixins
|
|
131
146
|
only.uniq
|
132
147
|
end
|
133
148
|
|
134
|
-
# We need to hook into this method to allow serializing plan-text secrets
|
135
|
-
# when secrets hashing enabled.
|
136
|
-
#
|
137
|
-
# @param key [String] attribute name
|
138
|
-
#
|
139
|
-
def read_attribute_for_serialization(key)
|
140
|
-
return super unless key.to_s == "secret"
|
141
|
-
|
142
|
-
plaintext_secret || secret
|
143
|
-
end
|
144
|
-
|
145
149
|
# Collection of attributes that could be serialized for public.
|
146
150
|
# Override this method if you need additional attributes to be serialized.
|
147
151
|
#
|
@@ -153,7 +157,7 @@ module Doorkeeper::Orm::ActiveRecord::Mixins
|
|
153
157
|
end
|
154
158
|
end
|
155
159
|
|
156
|
-
|
160
|
+
module ClassMethods
|
157
161
|
# Returns Applications associated with active (not revoked) Access Tokens
|
158
162
|
# that are owned by the specific Resource Owner.
|
159
163
|
#
|
@@ -2,29 +2,33 @@
|
|
2
2
|
|
3
3
|
require "doorkeeper/rails/routes/mapping"
|
4
4
|
require "doorkeeper/rails/routes/mapper"
|
5
|
+
require "doorkeeper/rails/routes/abstract_router"
|
6
|
+
require "doorkeeper/rails/routes/registry"
|
5
7
|
|
6
8
|
module Doorkeeper
|
7
9
|
module Rails
|
8
10
|
class Routes # :nodoc:
|
9
|
-
mattr_reader :mapping do
|
10
|
-
{}
|
11
|
-
end
|
12
|
-
|
13
11
|
module Helper
|
14
12
|
def use_doorkeeper(options = {}, &block)
|
15
13
|
Doorkeeper::Rails::Routes.new(self, &block).generate_routes!(options)
|
16
14
|
end
|
17
15
|
end
|
18
16
|
|
17
|
+
include AbstractRouter
|
18
|
+
extend Registry
|
19
|
+
|
20
|
+
mattr_reader :mapping do
|
21
|
+
{}
|
22
|
+
end
|
23
|
+
|
19
24
|
def self.install!
|
20
25
|
ActionDispatch::Routing::Mapper.include Doorkeeper::Rails::Routes::Helper
|
21
|
-
end
|
22
26
|
|
23
|
-
|
27
|
+
registered_routes.each(&:install!)
|
28
|
+
end
|
24
29
|
|
25
|
-
def initialize(routes, &block)
|
26
|
-
|
27
|
-
@mapping = Mapper.new.map(&block)
|
30
|
+
def initialize(routes, mapper = Mapper.new, &block)
|
31
|
+
super
|
28
32
|
|
29
33
|
@mapping.skips.push(:applications, :authorized_applications) if Doorkeeper.config.api_only
|
30
34
|
end
|
@@ -43,14 +47,6 @@ module Doorkeeper
|
|
43
47
|
|
44
48
|
private
|
45
49
|
|
46
|
-
def map_route(name, method)
|
47
|
-
return if @mapping.skipped?(name)
|
48
|
-
|
49
|
-
send(method, @mapping[name])
|
50
|
-
|
51
|
-
mapping[name] = @mapping[name]
|
52
|
-
end
|
53
|
-
|
54
50
|
def authorization_routes(mapping)
|
55
51
|
routes.resource(
|
56
52
|
:authorization,
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Doorkeeper
|
4
|
+
module Rails
|
5
|
+
# Abstract router module that implements base behavior
|
6
|
+
# for generating and mapping Rails routes.
|
7
|
+
#
|
8
|
+
# Could be reused in Doorkeeper extensions.
|
9
|
+
#
|
10
|
+
module AbstractRouter
|
11
|
+
extend ActiveSupport::Concern
|
12
|
+
|
13
|
+
attr_reader :routes
|
14
|
+
|
15
|
+
def initialize(routes, mapper = Mapper.new, &block)
|
16
|
+
@routes = routes
|
17
|
+
@mapping = mapper.map(&block)
|
18
|
+
end
|
19
|
+
|
20
|
+
def generate_routes!(**_options)
|
21
|
+
raise NotImplementedError, "must be redefined for #{self.class.name}!"
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def map_route(name, method)
|
27
|
+
return if @mapping.skipped?(name)
|
28
|
+
|
29
|
+
send(method, @mapping[name])
|
30
|
+
|
31
|
+
mapping[name] = @mapping[name]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Doorkeeper
|
4
|
+
module Rails
|
5
|
+
class Routes
|
6
|
+
# Thread-safe registry of any Doorkeeper additional routes.
|
7
|
+
# Used to allow implementing of Doorkeeper extensions that must
|
8
|
+
# use their own routes.
|
9
|
+
#
|
10
|
+
module Registry
|
11
|
+
ROUTES_ACCESS_LOCK = Mutex.new
|
12
|
+
ROUTES_DEFINITION_LOCK = Mutex.new
|
13
|
+
|
14
|
+
InvalidRouterClass = Class.new(StandardError)
|
15
|
+
|
16
|
+
# Collection of additional registered routes for Doorkeeper.
|
17
|
+
#
|
18
|
+
# @return [Array<Object>] set of registered routes
|
19
|
+
#
|
20
|
+
def registered_routes
|
21
|
+
ROUTES_DEFINITION_LOCK.synchronize do
|
22
|
+
@registered_routes ||= Set.new
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Registers additional routes in the Doorkeeper registry
|
27
|
+
#
|
28
|
+
# @param [Object] routes
|
29
|
+
# routes class
|
30
|
+
#
|
31
|
+
def register_routes(routes)
|
32
|
+
if !routes.is_a?(Module) || !(routes < AbstractRouter)
|
33
|
+
raise InvalidRouterClass, "routes class must include Doorkeeper::Rails::AbstractRouter"
|
34
|
+
end
|
35
|
+
|
36
|
+
ROUTES_ACCESS_LOCK.synchronize do
|
37
|
+
registered_routes << routes
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
alias register register_routes
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/doorkeeper/server.rb
CHANGED
@@ -2,19 +2,19 @@
|
|
2
2
|
|
3
3
|
module Doorkeeper
|
4
4
|
class Server
|
5
|
-
|
5
|
+
attr_reader :context
|
6
6
|
|
7
|
-
def initialize(context
|
7
|
+
def initialize(context)
|
8
8
|
@context = context
|
9
9
|
end
|
10
10
|
|
11
11
|
def authorization_request(strategy)
|
12
|
-
klass = Request.authorization_strategy
|
12
|
+
klass = Request.authorization_strategy(strategy)
|
13
13
|
klass.new(self)
|
14
14
|
end
|
15
15
|
|
16
16
|
def token_request(strategy)
|
17
|
-
klass = Request.token_strategy
|
17
|
+
klass = Request.token_strategy(strategy)
|
18
18
|
klass.new(self)
|
19
19
|
end
|
20
20
|
|
@@ -13,12 +13,12 @@ module Doorkeeper
|
|
13
13
|
raise Doorkeeper::Errors::NoOrmCleaner, "'#{configured_orm}' ORM has no cleaner!"
|
14
14
|
end
|
15
15
|
|
16
|
-
def self.configured_orm
|
17
|
-
Doorkeeper.config.orm
|
18
|
-
end
|
19
|
-
|
20
16
|
def self.new(base_scope)
|
21
17
|
self.for(base_scope)
|
22
18
|
end
|
19
|
+
|
20
|
+
def self.configured_orm
|
21
|
+
Doorkeeper.config.orm
|
22
|
+
end
|
23
23
|
end
|
24
24
|
end
|
data/lib/doorkeeper/version.rb
CHANGED
@@ -12,7 +12,7 @@ module Doorkeeper
|
|
12
12
|
source_root File.expand_path("templates", __dir__)
|
13
13
|
desc "Add confidential column to Doorkeeper applications"
|
14
14
|
|
15
|
-
def
|
15
|
+
def confidential_applications
|
16
16
|
migration_template(
|
17
17
|
"add_confidential_to_applications.rb.erb",
|
18
18
|
"db/migrate/add_confidential_to_applications.rb",
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators"
|
4
|
+
require "rails/generators/active_record"
|
5
|
+
|
6
|
+
module Doorkeeper
|
7
|
+
# Generates migration with polymorphic resource owner required
|
8
|
+
# database columns for Doorkeeper Access Token and Access Grant
|
9
|
+
# models.
|
10
|
+
#
|
11
|
+
class EnablePolymorphicResourceOwnerGenerator < ::Rails::Generators::Base
|
12
|
+
include ::Rails::Generators::Migration
|
13
|
+
source_root File.expand_path("templates", __dir__)
|
14
|
+
desc "Provide support for polymorphic Resource Owner."
|
15
|
+
|
16
|
+
def enable_polymorphic_resource_owner
|
17
|
+
migration_template(
|
18
|
+
"enable_polymorphic_resource_owner_migration.rb.erb",
|
19
|
+
"db/migrate/enable_polymorphic_resource_owner.rb",
|
20
|
+
migration_version: migration_version,
|
21
|
+
)
|
22
|
+
gsub_file(
|
23
|
+
"config/initializers/doorkeeper.rb",
|
24
|
+
"# use_polymorphic_resource_owner",
|
25
|
+
"use_polymorphic_resource_owner",
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.next_migration_number(dirname)
|
30
|
+
ActiveRecord::Generators::Base.next_migration_number(dirname)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def migration_version
|
36
|
+
"[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|