doorkeeper 5.1.0 → 5.5.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/{NEWS.md → CHANGELOG.md} +234 -25
- data/README.md +21 -11
- data/app/controllers/doorkeeper/application_controller.rb +2 -2
- data/app/controllers/doorkeeper/application_metal_controller.rb +3 -2
- data/app/controllers/doorkeeper/applications_controller.rb +8 -7
- data/app/controllers/doorkeeper/authorizations_controller.rb +56 -19
- data/app/controllers/doorkeeper/authorized_applications_controller.rb +5 -5
- data/app/controllers/doorkeeper/token_info_controller.rb +12 -2
- data/app/controllers/doorkeeper/tokens_controller.rb +93 -25
- data/app/views/doorkeeper/applications/_form.html.erb +1 -7
- data/app/views/doorkeeper/applications/show.html.erb +35 -14
- data/app/views/doorkeeper/authorizations/form_post.html.erb +11 -0
- data/config/locales/en.yml +13 -3
- data/lib/doorkeeper/config/abstract_builder.rb +28 -0
- data/lib/doorkeeper/config/option.rb +20 -2
- data/lib/doorkeeper/config/validations.rb +53 -0
- data/lib/doorkeeper/config.rb +291 -121
- data/lib/doorkeeper/engine.rb +1 -1
- data/lib/doorkeeper/errors.rb +13 -18
- data/lib/doorkeeper/grant_flow/fallback_flow.rb +15 -0
- data/lib/doorkeeper/grant_flow/flow.rb +44 -0
- data/lib/doorkeeper/grant_flow/registry.rb +50 -0
- data/lib/doorkeeper/grant_flow.rb +45 -0
- data/lib/doorkeeper/grape/helpers.rb +7 -3
- data/lib/doorkeeper/helpers/controller.rb +36 -11
- data/lib/doorkeeper/models/access_grant_mixin.rb +22 -18
- data/lib/doorkeeper/models/access_token_mixin.rb +194 -51
- data/lib/doorkeeper/models/application_mixin.rb +8 -7
- data/lib/doorkeeper/models/concerns/ownership.rb +1 -1
- data/lib/doorkeeper/models/concerns/resource_ownerable.rb +47 -0
- data/lib/doorkeeper/models/concerns/reusable.rb +1 -1
- data/lib/doorkeeper/models/concerns/revocable.rb +1 -28
- 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 +25 -14
- data/lib/doorkeeper/oauth/authorization/context.rb +5 -5
- data/lib/doorkeeper/oauth/authorization/token.rb +24 -19
- data/lib/doorkeeper/oauth/authorization/uri_builder.rb +4 -4
- data/lib/doorkeeper/oauth/authorization_code_request.rb +40 -21
- data/lib/doorkeeper/oauth/base_request.rb +21 -23
- data/lib/doorkeeper/oauth/client/credentials.rb +2 -4
- data/lib/doorkeeper/oauth/client.rb +8 -9
- data/lib/doorkeeper/oauth/client_credentials/creator.rb +45 -5
- data/lib/doorkeeper/oauth/client_credentials/issuer.rb +10 -8
- data/lib/doorkeeper/oauth/client_credentials/{validation.rb → validator.rb} +13 -3
- data/lib/doorkeeper/oauth/client_credentials_request.rb +8 -7
- data/lib/doorkeeper/oauth/code_request.rb +6 -12
- data/lib/doorkeeper/oauth/code_response.rb +24 -14
- data/lib/doorkeeper/oauth/error.rb +1 -1
- data/lib/doorkeeper/oauth/error_response.rb +10 -11
- data/lib/doorkeeper/oauth/helpers/scope_checker.rb +8 -12
- data/lib/doorkeeper/oauth/helpers/unique_token.rb +8 -5
- data/lib/doorkeeper/oauth/helpers/uri_checker.rb +19 -5
- data/lib/doorkeeper/oauth/hooks/context.rb +21 -0
- data/lib/doorkeeper/oauth/invalid_request_response.rb +43 -0
- data/lib/doorkeeper/oauth/invalid_token_response.rb +7 -4
- data/lib/doorkeeper/oauth/nonstandard.rb +39 -0
- data/lib/doorkeeper/oauth/password_access_token_request.rb +32 -10
- data/lib/doorkeeper/oauth/pre_authorization.rb +111 -42
- data/lib/doorkeeper/oauth/refresh_token_request.rb +45 -33
- data/lib/doorkeeper/oauth/token.rb +6 -7
- data/lib/doorkeeper/oauth/token_introspection.rb +24 -18
- data/lib/doorkeeper/oauth/token_request.rb +6 -20
- data/lib/doorkeeper/oauth/token_response.rb +1 -1
- data/lib/doorkeeper/orm/active_record/access_grant.rb +4 -43
- data/lib/doorkeeper/orm/active_record/access_token.rb +4 -35
- data/lib/doorkeeper/orm/active_record/application.rb +5 -83
- data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +68 -0
- data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +59 -0
- data/lib/doorkeeper/orm/active_record/mixins/application.rb +198 -0
- data/lib/doorkeeper/orm/active_record/redirect_uri_validator.rb +66 -0
- data/lib/doorkeeper/orm/active_record.rb +20 -6
- data/lib/doorkeeper/rails/helpers.rb +4 -4
- 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/rails/routes.rb +17 -25
- data/lib/doorkeeper/rake/db.rake +6 -6
- data/lib/doorkeeper/rake/setup.rake +5 -0
- data/lib/doorkeeper/request/authorization_code.rb +5 -3
- data/lib/doorkeeper/request/client_credentials.rb +2 -2
- data/lib/doorkeeper/request/password.rb +2 -2
- data/lib/doorkeeper/request/refresh_token.rb +5 -4
- data/lib/doorkeeper/request/strategy.rb +2 -2
- data/lib/doorkeeper/request.rb +49 -17
- data/lib/doorkeeper/server.rb +7 -11
- data/lib/doorkeeper/stale_records_cleaner.rb +6 -2
- data/lib/doorkeeper/version.rb +1 -5
- data/lib/doorkeeper.rb +114 -79
- data/lib/generators/doorkeeper/application_owner_generator.rb +1 -1
- data/lib/generators/doorkeeper/confidential_applications_generator.rb +2 -2
- data/lib/generators/doorkeeper/enable_polymorphic_resource_owner_generator.rb +39 -0
- data/lib/generators/doorkeeper/migration_generator.rb +1 -1
- data/lib/generators/doorkeeper/pkce_generator.rb +1 -1
- data/lib/generators/doorkeeper/previous_refresh_token_generator.rb +7 -7
- data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb.erb +3 -1
- 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 +205 -43
- data/lib/generators/doorkeeper/templates/migration.rb.erb +18 -6
- metadata +43 -310
- data/.coveralls.yml +0 -1
- data/.github/ISSUE_TEMPLATE.md +0 -25
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -17
- data/.gitignore +0 -20
- data/.gitlab-ci.yml +0 -16
- data/.hound.yml +0 -3
- data/.rspec +0 -1
- data/.rubocop.yml +0 -50
- data/.travis.yml +0 -35
- data/Appraisals +0 -40
- data/CODE_OF_CONDUCT.md +0 -46
- data/CONTRIBUTING.md +0 -47
- data/Dangerfile +0 -67
- data/Gemfile +0 -24
- data/RELEASING.md +0 -10
- data/Rakefile +0 -28
- data/SECURITY.md +0 -15
- data/UPGRADE.md +0 -2
- data/app/validators/redirect_uri_validator.rb +0 -50
- data/bin/console +0 -16
- data/doorkeeper.gemspec +0 -34
- data/gemfiles/rails_5_0.gemfile +0 -17
- data/gemfiles/rails_5_1.gemfile +0 -17
- data/gemfiles/rails_5_2.gemfile +0 -17
- data/gemfiles/rails_6_0.gemfile +0 -17
- data/gemfiles/rails_master.gemfile +0 -17
- data/spec/controllers/application_metal_controller_spec.rb +0 -64
- data/spec/controllers/applications_controller_spec.rb +0 -180
- data/spec/controllers/authorizations_controller_spec.rb +0 -527
- data/spec/controllers/protected_resources_controller_spec.rb +0 -353
- data/spec/controllers/token_info_controller_spec.rb +0 -50
- data/spec/controllers/tokens_controller_spec.rb +0 -330
- 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/application.rb +0 -47
- 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 -121
- 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/config.ru +0 -6
- 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 -697
- 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 -156
- data/spec/lib/oauth/base_request_spec.rb +0 -205
- data/spec/lib/oauth/base_response_spec.rb +0 -47
- data/spec/lib/oauth/client/credentials_spec.rb +0 -90
- data/spec/lib/oauth/client_credentials/creator_spec.rb +0 -94
- 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 -29
- data/spec/lib/oauth/client_credentials_request_spec.rb +0 -109
- data/spec/lib/oauth/client_spec.rb +0 -38
- data/spec/lib/oauth/code_request_spec.rb +0 -47
- data/spec/lib/oauth/code_response_spec.rb +0 -36
- data/spec/lib/oauth/error_response_spec.rb +0 -66
- data/spec/lib/oauth/error_spec.rb +0 -23
- data/spec/lib/oauth/forbidden_token_response_spec.rb +0 -22
- data/spec/lib/oauth/helpers/scope_checker_spec.rb +0 -98
- data/spec/lib/oauth/helpers/unique_token_spec.rb +0 -21
- data/spec/lib/oauth/helpers/uri_checker_spec.rb +0 -247
- data/spec/lib/oauth/invalid_token_response_spec.rb +0 -55
- data/spec/lib/oauth/password_access_token_request_spec.rb +0 -192
- data/spec/lib/oauth/pre_authorization_spec.rb +0 -215
- data/spec/lib/oauth/refresh_token_request_spec.rb +0 -177
- data/spec/lib/oauth/scopes_spec.rb +0 -148
- data/spec/lib/oauth/token_request_spec.rb +0 -150
- data/spec/lib/oauth/token_response_spec.rb +0 -86
- data/spec/lib/oauth/token_spec.rb +0 -158
- 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 -61
- data/spec/lib/stale_records_cleaner_spec.rb +0 -89
- data/spec/models/doorkeeper/access_grant_spec.rb +0 -144
- data/spec/models/doorkeeper/access_token_spec.rb +0 -591
- data/spec/models/doorkeeper/application_spec.rb +0 -367
- 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 -73
- data/spec/requests/endpoints/token_spec.rb +0 -75
- data/spec/requests/flows/authorization_code_errors_spec.rb +0 -78
- data/spec/requests/flows/authorization_code_spec.rb +0 -447
- data/spec/requests/flows/client_credentials_spec.rb +0 -128
- data/spec/requests/flows/implicit_grant_errors_spec.rb +0 -34
- data/spec/requests/flows/implicit_grant_spec.rb +0 -90
- data/spec/requests/flows/password_spec.rb +0 -259
- data/spec/requests/flows/refresh_token_spec.rb +0 -233
- data/spec/requests/flows/revoke_token_spec.rb +0 -143
- 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 -57
- 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 -98
- data/spec/support/helpers/url_helper.rb +0 -62
- data/spec/support/http_method_shim.rb +0 -29
- data/spec/support/orm/active_record.rb +0 -5
- data/spec/support/shared/controllers_shared_context.rb +0 -123
- 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 -158
- data/spec/version/version_spec.rb +0 -17
data/spec/lib/config_spec.rb
DELETED
@@ -1,697 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe Doorkeeper, "configuration" do
|
6
|
-
subject { Doorkeeper.configuration }
|
7
|
-
|
8
|
-
describe "resource_owner_authenticator" do
|
9
|
-
it "sets the block that is accessible via authenticate_resource_owner" do
|
10
|
-
block = proc {}
|
11
|
-
Doorkeeper.configure do
|
12
|
-
orm DOORKEEPER_ORM
|
13
|
-
resource_owner_authenticator(&block)
|
14
|
-
end
|
15
|
-
|
16
|
-
expect(subject.authenticate_resource_owner).to eq(block)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "prints warning message by default" do
|
20
|
-
Doorkeeper.configure do
|
21
|
-
orm DOORKEEPER_ORM
|
22
|
-
end
|
23
|
-
|
24
|
-
expect(Rails.logger).to receive(:warn).with(
|
25
|
-
I18n.t("doorkeeper.errors.messages.resource_owner_authenticator_not_configured")
|
26
|
-
)
|
27
|
-
subject.authenticate_resource_owner.call(nil)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe "resource_owner_from_credentials" do
|
32
|
-
it "sets the block that is accessible via authenticate_resource_owner" do
|
33
|
-
block = proc {}
|
34
|
-
Doorkeeper.configure do
|
35
|
-
orm DOORKEEPER_ORM
|
36
|
-
resource_owner_from_credentials(&block)
|
37
|
-
end
|
38
|
-
|
39
|
-
expect(subject.resource_owner_from_credentials).to eq(block)
|
40
|
-
end
|
41
|
-
|
42
|
-
it "prints warning message by default" do
|
43
|
-
Doorkeeper.configure do
|
44
|
-
orm DOORKEEPER_ORM
|
45
|
-
end
|
46
|
-
|
47
|
-
expect(Rails.logger).to receive(:warn).with(
|
48
|
-
I18n.t("doorkeeper.errors.messages.credential_flow_not_configured")
|
49
|
-
)
|
50
|
-
subject.resource_owner_from_credentials.call(nil)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe "setup_orm_adapter" do
|
55
|
-
it "adds specific error message to NameError exception" do
|
56
|
-
expect do
|
57
|
-
Doorkeeper.configure { orm "hibernate" }
|
58
|
-
end.to raise_error(NameError, /ORM adapter not found \(hibernate\)/)
|
59
|
-
end
|
60
|
-
|
61
|
-
it "does not change other exceptions" do
|
62
|
-
allow(Doorkeeper).to receive(:setup_orm_adapter) { raise NoMethodError }
|
63
|
-
|
64
|
-
expect do
|
65
|
-
Doorkeeper.configure { orm "hibernate" }
|
66
|
-
end.to raise_error(NoMethodError)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe "admin_authenticator" do
|
71
|
-
it "sets the block that is accessible via authenticate_admin" do
|
72
|
-
default_behaviour = "default behaviour"
|
73
|
-
allow(Doorkeeper::Config).to receive(:head).and_return(default_behaviour)
|
74
|
-
|
75
|
-
Doorkeeper.configure do
|
76
|
-
orm DOORKEEPER_ORM
|
77
|
-
end
|
78
|
-
|
79
|
-
expect(subject.authenticate_admin.call({})).to eq(default_behaviour)
|
80
|
-
end
|
81
|
-
|
82
|
-
it "sets the block that is accessible via authenticate_admin" do
|
83
|
-
block = proc {}
|
84
|
-
Doorkeeper.configure do
|
85
|
-
orm DOORKEEPER_ORM
|
86
|
-
admin_authenticator(&block)
|
87
|
-
end
|
88
|
-
|
89
|
-
expect(subject.authenticate_admin).to eq(block)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
describe "access_token_expires_in" do
|
94
|
-
it "has 2 hours by default" do
|
95
|
-
expect(subject.access_token_expires_in).to eq(2.hours)
|
96
|
-
end
|
97
|
-
|
98
|
-
it "can change the value" do
|
99
|
-
Doorkeeper.configure do
|
100
|
-
orm DOORKEEPER_ORM
|
101
|
-
access_token_expires_in 4.hours
|
102
|
-
end
|
103
|
-
expect(subject.access_token_expires_in).to eq(4.hours)
|
104
|
-
end
|
105
|
-
|
106
|
-
it "can be set to nil" do
|
107
|
-
Doorkeeper.configure do
|
108
|
-
orm DOORKEEPER_ORM
|
109
|
-
access_token_expires_in nil
|
110
|
-
end
|
111
|
-
|
112
|
-
expect(subject.access_token_expires_in).to be_nil
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
describe "scopes" do
|
117
|
-
it "has default scopes" do
|
118
|
-
Doorkeeper.configure do
|
119
|
-
orm DOORKEEPER_ORM
|
120
|
-
default_scopes :public
|
121
|
-
end
|
122
|
-
|
123
|
-
expect(subject.default_scopes).to include("public")
|
124
|
-
end
|
125
|
-
|
126
|
-
it "has optional scopes" do
|
127
|
-
Doorkeeper.configure do
|
128
|
-
orm DOORKEEPER_ORM
|
129
|
-
optional_scopes :write, :update
|
130
|
-
end
|
131
|
-
|
132
|
-
expect(subject.optional_scopes).to include("write", "update")
|
133
|
-
end
|
134
|
-
|
135
|
-
it "has all scopes" do
|
136
|
-
Doorkeeper.configure do
|
137
|
-
orm DOORKEEPER_ORM
|
138
|
-
default_scopes :normal
|
139
|
-
optional_scopes :admin
|
140
|
-
end
|
141
|
-
|
142
|
-
expect(subject.scopes).to include("normal", "admin")
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
describe "scopes_by_grant_type" do
|
147
|
-
it "is {} by default" do
|
148
|
-
expect(subject.scopes_by_grant_type).to eq({})
|
149
|
-
end
|
150
|
-
|
151
|
-
it "has hash value" do
|
152
|
-
hash = {}
|
153
|
-
Doorkeeper.configure do
|
154
|
-
orm DOORKEEPER_ORM
|
155
|
-
scopes_by_grant_type hash
|
156
|
-
end
|
157
|
-
|
158
|
-
expect(subject.scopes_by_grant_type).to eq(hash)
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
describe "use_refresh_token" do
|
163
|
-
it "is false by default" do
|
164
|
-
expect(subject.refresh_token_enabled?).to eq(false)
|
165
|
-
end
|
166
|
-
|
167
|
-
it "can change the value" do
|
168
|
-
Doorkeeper.configure do
|
169
|
-
orm DOORKEEPER_ORM
|
170
|
-
use_refresh_token
|
171
|
-
end
|
172
|
-
|
173
|
-
expect(subject.refresh_token_enabled?).to eq(true)
|
174
|
-
end
|
175
|
-
|
176
|
-
it "can accept a boolean parameter" do
|
177
|
-
Doorkeeper.configure do
|
178
|
-
orm DOORKEEPER_ORM
|
179
|
-
use_refresh_token false
|
180
|
-
end
|
181
|
-
|
182
|
-
expect(subject.refresh_token_enabled?).to eq(false)
|
183
|
-
end
|
184
|
-
|
185
|
-
it "can accept a block parameter" do
|
186
|
-
Doorkeeper.configure do
|
187
|
-
orm DOORKEEPER_ORM
|
188
|
-
use_refresh_token { |_context| nil }
|
189
|
-
end
|
190
|
-
|
191
|
-
expect(subject.refresh_token_enabled?).to be_a(Proc)
|
192
|
-
end
|
193
|
-
|
194
|
-
it "does not includes 'refresh_token' in authorization_response_types" do
|
195
|
-
expect(subject.token_grant_types).not_to include "refresh_token"
|
196
|
-
end
|
197
|
-
|
198
|
-
context "is enabled" do
|
199
|
-
before do
|
200
|
-
Doorkeeper.configure do
|
201
|
-
orm DOORKEEPER_ORM
|
202
|
-
use_refresh_token
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
it "includes 'refresh_token' in authorization_response_types" do
|
207
|
-
expect(subject.token_grant_types).to include "refresh_token"
|
208
|
-
end
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
describe "token_reuse_limit" do
|
213
|
-
it "is 100 by default" do
|
214
|
-
expect(subject.token_reuse_limit).to eq(100)
|
215
|
-
end
|
216
|
-
|
217
|
-
it "can change the value" do
|
218
|
-
Doorkeeper.configure do
|
219
|
-
token_reuse_limit 90
|
220
|
-
end
|
221
|
-
|
222
|
-
expect(subject.token_reuse_limit).to eq(90)
|
223
|
-
end
|
224
|
-
|
225
|
-
it "sets the value to 100 if invalid value is being set" do
|
226
|
-
expect(Rails.logger).to receive(:warn).with(/will be set to default 100/)
|
227
|
-
|
228
|
-
Doorkeeper.configure do
|
229
|
-
reuse_access_token
|
230
|
-
token_reuse_limit 110
|
231
|
-
end
|
232
|
-
|
233
|
-
expect(subject.token_reuse_limit).to eq(100)
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
|
-
describe "enforce_configured_scopes" do
|
238
|
-
it "is false by default" do
|
239
|
-
expect(subject.enforce_configured_scopes?).to eq(false)
|
240
|
-
end
|
241
|
-
|
242
|
-
it "can change the value" do
|
243
|
-
Doorkeeper.configure do
|
244
|
-
orm DOORKEEPER_ORM
|
245
|
-
enforce_configured_scopes
|
246
|
-
end
|
247
|
-
|
248
|
-
expect(subject.enforce_configured_scopes?).to eq(true)
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
describe "client_credentials" do
|
253
|
-
it "has defaults order" do
|
254
|
-
expect(subject.client_credentials_methods)
|
255
|
-
.to eq(%i[from_basic from_params])
|
256
|
-
end
|
257
|
-
|
258
|
-
it "can change the value" do
|
259
|
-
Doorkeeper.configure do
|
260
|
-
orm DOORKEEPER_ORM
|
261
|
-
client_credentials :from_digest, :from_params
|
262
|
-
end
|
263
|
-
|
264
|
-
expect(subject.client_credentials_methods)
|
265
|
-
.to eq(%i[from_digest from_params])
|
266
|
-
end
|
267
|
-
end
|
268
|
-
|
269
|
-
describe "force_ssl_in_redirect_uri" do
|
270
|
-
it "is true by default in non-development environments" do
|
271
|
-
expect(subject.force_ssl_in_redirect_uri).to eq(true)
|
272
|
-
end
|
273
|
-
|
274
|
-
it "can change the value" do
|
275
|
-
Doorkeeper.configure do
|
276
|
-
orm DOORKEEPER_ORM
|
277
|
-
force_ssl_in_redirect_uri(false)
|
278
|
-
end
|
279
|
-
|
280
|
-
expect(subject.force_ssl_in_redirect_uri).to eq(false)
|
281
|
-
end
|
282
|
-
|
283
|
-
it "can be a callable object" do
|
284
|
-
block = proc { false }
|
285
|
-
Doorkeeper.configure do
|
286
|
-
orm DOORKEEPER_ORM
|
287
|
-
force_ssl_in_redirect_uri(&block)
|
288
|
-
end
|
289
|
-
|
290
|
-
expect(subject.force_ssl_in_redirect_uri).to eq(block)
|
291
|
-
expect(subject.force_ssl_in_redirect_uri.call).to eq(false)
|
292
|
-
end
|
293
|
-
end
|
294
|
-
|
295
|
-
describe "access_token_methods" do
|
296
|
-
it "has defaults order" do
|
297
|
-
expect(subject.access_token_methods)
|
298
|
-
.to eq(%i[from_bearer_authorization from_access_token_param from_bearer_param])
|
299
|
-
end
|
300
|
-
|
301
|
-
it "can change the value" do
|
302
|
-
Doorkeeper.configure do
|
303
|
-
orm DOORKEEPER_ORM
|
304
|
-
access_token_methods :from_access_token_param, :from_bearer_param
|
305
|
-
end
|
306
|
-
|
307
|
-
expect(subject.access_token_methods)
|
308
|
-
.to eq(%i[from_access_token_param from_bearer_param])
|
309
|
-
end
|
310
|
-
end
|
311
|
-
|
312
|
-
describe "forbid_redirect_uri" do
|
313
|
-
it "is false by default" do
|
314
|
-
expect(subject.forbid_redirect_uri.call(URI.parse("https://localhost"))).to eq(false)
|
315
|
-
end
|
316
|
-
|
317
|
-
it "can be a callable object" do
|
318
|
-
block = proc { true }
|
319
|
-
Doorkeeper.configure do
|
320
|
-
orm DOORKEEPER_ORM
|
321
|
-
forbid_redirect_uri(&block)
|
322
|
-
end
|
323
|
-
|
324
|
-
expect(subject.forbid_redirect_uri).to eq(block)
|
325
|
-
expect(subject.forbid_redirect_uri.call).to eq(true)
|
326
|
-
end
|
327
|
-
end
|
328
|
-
|
329
|
-
describe "enable_application_owner" do
|
330
|
-
it "is disabled by default" do
|
331
|
-
expect(Doorkeeper.configuration.enable_application_owner?).not_to eq(true)
|
332
|
-
end
|
333
|
-
|
334
|
-
context "when enabled without confirmation" do
|
335
|
-
before do
|
336
|
-
Doorkeeper.configure do
|
337
|
-
orm DOORKEEPER_ORM
|
338
|
-
enable_application_owner
|
339
|
-
end
|
340
|
-
end
|
341
|
-
|
342
|
-
it "adds support for application owner" do
|
343
|
-
expect(Doorkeeper::Application.new).to respond_to :owner
|
344
|
-
end
|
345
|
-
|
346
|
-
it "Doorkeeper.configuration.confirm_application_owner? returns false" do
|
347
|
-
expect(Doorkeeper.configuration.confirm_application_owner?).not_to eq(true)
|
348
|
-
end
|
349
|
-
end
|
350
|
-
|
351
|
-
context "when enabled with confirmation set to true" do
|
352
|
-
before do
|
353
|
-
Doorkeeper.configure do
|
354
|
-
orm DOORKEEPER_ORM
|
355
|
-
enable_application_owner confirmation: true
|
356
|
-
end
|
357
|
-
end
|
358
|
-
|
359
|
-
it "adds support for application owner" do
|
360
|
-
expect(Doorkeeper::Application.new).to respond_to :owner
|
361
|
-
end
|
362
|
-
|
363
|
-
it "Doorkeeper.configuration.confirm_application_owner? returns true" do
|
364
|
-
expect(Doorkeeper.configuration.confirm_application_owner?).to eq(true)
|
365
|
-
end
|
366
|
-
end
|
367
|
-
end
|
368
|
-
|
369
|
-
describe "realm" do
|
370
|
-
it "is 'Doorkeeper' by default" do
|
371
|
-
expect(Doorkeeper.configuration.realm).to eq("Doorkeeper")
|
372
|
-
end
|
373
|
-
|
374
|
-
it "can change the value" do
|
375
|
-
Doorkeeper.configure do
|
376
|
-
orm DOORKEEPER_ORM
|
377
|
-
realm "Example"
|
378
|
-
end
|
379
|
-
|
380
|
-
expect(subject.realm).to eq("Example")
|
381
|
-
end
|
382
|
-
end
|
383
|
-
|
384
|
-
describe "grant_flows" do
|
385
|
-
it "is set to all grant flows by default" do
|
386
|
-
expect(Doorkeeper.configuration.grant_flows)
|
387
|
-
.to eq(%w[authorization_code client_credentials])
|
388
|
-
end
|
389
|
-
|
390
|
-
it "can change the value" do
|
391
|
-
Doorkeeper.configure do
|
392
|
-
orm DOORKEEPER_ORM
|
393
|
-
grant_flows %w[authorization_code implicit]
|
394
|
-
end
|
395
|
-
|
396
|
-
expect(subject.grant_flows).to eq %w[authorization_code implicit]
|
397
|
-
end
|
398
|
-
|
399
|
-
context "when including 'authorization_code'" do
|
400
|
-
before do
|
401
|
-
Doorkeeper.configure do
|
402
|
-
orm DOORKEEPER_ORM
|
403
|
-
grant_flows ["authorization_code"]
|
404
|
-
end
|
405
|
-
end
|
406
|
-
|
407
|
-
it "includes 'code' in authorization_response_types" do
|
408
|
-
expect(subject.authorization_response_types).to include "code"
|
409
|
-
end
|
410
|
-
|
411
|
-
it "includes 'authorization_code' in token_grant_types" do
|
412
|
-
expect(subject.token_grant_types).to include "authorization_code"
|
413
|
-
end
|
414
|
-
end
|
415
|
-
|
416
|
-
context "when including 'implicit'" do
|
417
|
-
before do
|
418
|
-
Doorkeeper.configure do
|
419
|
-
orm DOORKEEPER_ORM
|
420
|
-
grant_flows ["implicit"]
|
421
|
-
end
|
422
|
-
end
|
423
|
-
|
424
|
-
it "includes 'token' in authorization_response_types" do
|
425
|
-
expect(subject.authorization_response_types).to include "token"
|
426
|
-
end
|
427
|
-
end
|
428
|
-
|
429
|
-
context "when including 'password'" do
|
430
|
-
before do
|
431
|
-
Doorkeeper.configure do
|
432
|
-
orm DOORKEEPER_ORM
|
433
|
-
grant_flows ["password"]
|
434
|
-
end
|
435
|
-
end
|
436
|
-
|
437
|
-
it "includes 'password' in token_grant_types" do
|
438
|
-
expect(subject.token_grant_types).to include "password"
|
439
|
-
end
|
440
|
-
end
|
441
|
-
|
442
|
-
context "when including 'client_credentials'" do
|
443
|
-
before do
|
444
|
-
Doorkeeper.configure do
|
445
|
-
orm DOORKEEPER_ORM
|
446
|
-
grant_flows ["client_credentials"]
|
447
|
-
end
|
448
|
-
end
|
449
|
-
|
450
|
-
it "includes 'client_credentials' in token_grant_types" do
|
451
|
-
expect(subject.token_grant_types).to include "client_credentials"
|
452
|
-
end
|
453
|
-
end
|
454
|
-
end
|
455
|
-
|
456
|
-
it "raises an exception when configuration is not set" do
|
457
|
-
old_config = Doorkeeper.configuration
|
458
|
-
Doorkeeper.module_eval do
|
459
|
-
@config = nil
|
460
|
-
end
|
461
|
-
|
462
|
-
expect do
|
463
|
-
Doorkeeper.configuration
|
464
|
-
end.to raise_error Doorkeeper::MissingConfiguration
|
465
|
-
|
466
|
-
Doorkeeper.module_eval do
|
467
|
-
@config = old_config
|
468
|
-
end
|
469
|
-
end
|
470
|
-
|
471
|
-
describe "access_token_generator" do
|
472
|
-
it "is 'Doorkeeper::OAuth::Helpers::UniqueToken' by default" do
|
473
|
-
expect(Doorkeeper.configuration.access_token_generator).to(
|
474
|
-
eq("Doorkeeper::OAuth::Helpers::UniqueToken")
|
475
|
-
)
|
476
|
-
end
|
477
|
-
|
478
|
-
it "can change the value" do
|
479
|
-
Doorkeeper.configure do
|
480
|
-
orm DOORKEEPER_ORM
|
481
|
-
access_token_generator "Example"
|
482
|
-
end
|
483
|
-
expect(subject.access_token_generator).to eq("Example")
|
484
|
-
end
|
485
|
-
end
|
486
|
-
|
487
|
-
describe "default_generator_method" do
|
488
|
-
it "is :urlsafe_base64 by default" do
|
489
|
-
expect(Doorkeeper.configuration.default_generator_method)
|
490
|
-
.to eq(:urlsafe_base64)
|
491
|
-
end
|
492
|
-
|
493
|
-
it "can change the value" do
|
494
|
-
Doorkeeper.configure do
|
495
|
-
orm DOORKEEPER_ORM
|
496
|
-
default_generator_method :hex
|
497
|
-
end
|
498
|
-
|
499
|
-
expect(subject.default_generator_method).to eq(:hex)
|
500
|
-
end
|
501
|
-
end
|
502
|
-
|
503
|
-
describe "base_controller" do
|
504
|
-
context "default" do
|
505
|
-
it { expect(Doorkeeper.configuration.base_controller).to eq("ActionController::Base") }
|
506
|
-
end
|
507
|
-
|
508
|
-
context "custom" do
|
509
|
-
before do
|
510
|
-
Doorkeeper.configure do
|
511
|
-
orm DOORKEEPER_ORM
|
512
|
-
base_controller "ApplicationController"
|
513
|
-
end
|
514
|
-
end
|
515
|
-
|
516
|
-
it { expect(Doorkeeper.configuration.base_controller).to eq("ApplicationController") }
|
517
|
-
end
|
518
|
-
end
|
519
|
-
|
520
|
-
if DOORKEEPER_ORM == :active_record
|
521
|
-
describe "active_record_options" do
|
522
|
-
let(:models) { [Doorkeeper::AccessGrant, Doorkeeper::AccessToken, Doorkeeper::Application] }
|
523
|
-
|
524
|
-
before do
|
525
|
-
models.each do |model|
|
526
|
-
allow(model).to receive(:establish_connection).and_return(true)
|
527
|
-
end
|
528
|
-
end
|
529
|
-
|
530
|
-
it "establishes connection for Doorkeeper models based on options" do
|
531
|
-
models.each do |model|
|
532
|
-
expect(model).to receive(:establish_connection)
|
533
|
-
end
|
534
|
-
|
535
|
-
Doorkeeper.configure do
|
536
|
-
orm DOORKEEPER_ORM
|
537
|
-
active_record_options(
|
538
|
-
establish_connection: Rails.configuration.database_configuration[Rails.env]
|
539
|
-
)
|
540
|
-
end
|
541
|
-
end
|
542
|
-
end
|
543
|
-
end
|
544
|
-
|
545
|
-
describe "api_only" do
|
546
|
-
it "is false by default" do
|
547
|
-
expect(subject.api_only).to eq(false)
|
548
|
-
end
|
549
|
-
|
550
|
-
it "can change the value" do
|
551
|
-
Doorkeeper.configure do
|
552
|
-
orm DOORKEEPER_ORM
|
553
|
-
api_only
|
554
|
-
end
|
555
|
-
|
556
|
-
expect(subject.api_only).to eq(true)
|
557
|
-
end
|
558
|
-
end
|
559
|
-
|
560
|
-
describe "strict_content_type" do
|
561
|
-
it "is false by default" do
|
562
|
-
expect(subject.enforce_content_type).to eq(false)
|
563
|
-
end
|
564
|
-
|
565
|
-
it "can change the value" do
|
566
|
-
Doorkeeper.configure do
|
567
|
-
orm DOORKEEPER_ORM
|
568
|
-
enforce_content_type
|
569
|
-
end
|
570
|
-
|
571
|
-
expect(subject.enforce_content_type).to eq(true)
|
572
|
-
end
|
573
|
-
end
|
574
|
-
|
575
|
-
describe "handle_auth_errors" do
|
576
|
-
it "is set to render by default" do
|
577
|
-
expect(Doorkeeper.configuration.handle_auth_errors).to eq(:render)
|
578
|
-
end
|
579
|
-
it "can change the value" do
|
580
|
-
Doorkeeper.configure do
|
581
|
-
orm DOORKEEPER_ORM
|
582
|
-
handle_auth_errors :raise
|
583
|
-
end
|
584
|
-
expect(subject.handle_auth_errors).to eq(:raise)
|
585
|
-
end
|
586
|
-
end
|
587
|
-
|
588
|
-
describe "token_secret_strategy" do
|
589
|
-
it "is plain by default" do
|
590
|
-
expect(subject.token_secret_strategy).to eq(Doorkeeper::SecretStoring::Plain)
|
591
|
-
expect(subject.token_secret_fallback_strategy).to eq(nil)
|
592
|
-
end
|
593
|
-
|
594
|
-
context "when provided" do
|
595
|
-
before do
|
596
|
-
Doorkeeper.configure do
|
597
|
-
hash_token_secrets
|
598
|
-
end
|
599
|
-
end
|
600
|
-
|
601
|
-
it "will enable hashing for applications" do
|
602
|
-
expect(subject.token_secret_strategy).to eq(Doorkeeper::SecretStoring::Sha256Hash)
|
603
|
-
expect(subject.token_secret_fallback_strategy).to eq(nil)
|
604
|
-
end
|
605
|
-
end
|
606
|
-
|
607
|
-
context "when manually provided with invalid constant" do
|
608
|
-
it "raises an exception" do
|
609
|
-
expect do
|
610
|
-
Doorkeeper.configure do
|
611
|
-
hash_token_secrets using: "does not exist"
|
612
|
-
end
|
613
|
-
end.to raise_error(NameError)
|
614
|
-
end
|
615
|
-
end
|
616
|
-
|
617
|
-
context "when manually provided with invalid option" do
|
618
|
-
it "raises an exception" do
|
619
|
-
expect do
|
620
|
-
Doorkeeper.configure do
|
621
|
-
hash_token_secrets using: "Doorkeeper::SecretStoring::BCrypt"
|
622
|
-
end
|
623
|
-
end.to raise_error(ArgumentError,
|
624
|
-
/can only be used for storing application secrets/)
|
625
|
-
end
|
626
|
-
end
|
627
|
-
|
628
|
-
context "when provided with fallback" do
|
629
|
-
before do
|
630
|
-
Doorkeeper.configure do
|
631
|
-
hash_token_secrets fallback: :plain
|
632
|
-
end
|
633
|
-
end
|
634
|
-
|
635
|
-
it "will enable hashing for applications" do
|
636
|
-
expect(subject.token_secret_strategy).to eq(Doorkeeper::SecretStoring::Sha256Hash)
|
637
|
-
expect(subject.token_secret_fallback_strategy).to eq(Doorkeeper::SecretStoring::Plain)
|
638
|
-
end
|
639
|
-
end
|
640
|
-
|
641
|
-
describe "hash_token_secrets together with reuse_access_token" do
|
642
|
-
it "will disable reuse_access_token" do
|
643
|
-
expect(Rails.logger).to receive(:warn).with(/reuse_access_token will be disabled/)
|
644
|
-
|
645
|
-
Doorkeeper.configure do
|
646
|
-
reuse_access_token
|
647
|
-
hash_token_secrets
|
648
|
-
end
|
649
|
-
|
650
|
-
expect(subject.reuse_access_token).to eq(false)
|
651
|
-
end
|
652
|
-
end
|
653
|
-
end
|
654
|
-
|
655
|
-
describe "application_secret_strategy" do
|
656
|
-
it "is plain by default" do
|
657
|
-
expect(subject.application_secret_strategy).to eq(Doorkeeper::SecretStoring::Plain)
|
658
|
-
expect(subject.application_secret_fallback_strategy).to eq(nil)
|
659
|
-
end
|
660
|
-
|
661
|
-
context "when provided" do
|
662
|
-
before do
|
663
|
-
Doorkeeper.configure do
|
664
|
-
hash_application_secrets
|
665
|
-
end
|
666
|
-
end
|
667
|
-
|
668
|
-
it "will enable hashing for applications" do
|
669
|
-
expect(subject.application_secret_strategy).to eq(Doorkeeper::SecretStoring::Sha256Hash)
|
670
|
-
expect(subject.application_secret_fallback_strategy).to eq(nil)
|
671
|
-
end
|
672
|
-
end
|
673
|
-
|
674
|
-
context "when manually provided with invalid constant" do
|
675
|
-
it "raises an exception" do
|
676
|
-
expect do
|
677
|
-
Doorkeeper.configure do
|
678
|
-
hash_application_secrets using: "does not exist"
|
679
|
-
end
|
680
|
-
end.to raise_error(NameError)
|
681
|
-
end
|
682
|
-
end
|
683
|
-
|
684
|
-
context "when provided with fallback" do
|
685
|
-
before do
|
686
|
-
Doorkeeper.configure do
|
687
|
-
hash_application_secrets fallback: :plain
|
688
|
-
end
|
689
|
-
end
|
690
|
-
|
691
|
-
it "will enable hashing for applications" do
|
692
|
-
expect(subject.application_secret_strategy).to eq(Doorkeeper::SecretStoring::Sha256Hash)
|
693
|
-
expect(subject.application_secret_fallback_strategy).to eq(Doorkeeper::SecretStoring::Plain)
|
694
|
-
end
|
695
|
-
end
|
696
|
-
end
|
697
|
-
end
|
data/spec/lib/doorkeeper_spec.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe Doorkeeper do
|
6
|
-
describe "#authenticate" do
|
7
|
-
let(:request) { double }
|
8
|
-
|
9
|
-
it "calls OAuth::Token#authenticate" do
|
10
|
-
token_strategies = Doorkeeper.configuration.access_token_methods
|
11
|
-
|
12
|
-
expect(Doorkeeper::OAuth::Token).to receive(:authenticate)
|
13
|
-
.with(request, *token_strategies)
|
14
|
-
|
15
|
-
Doorkeeper.authenticate(request)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "accepts custom token strategies" do
|
19
|
-
token_strategies = %i[first_way second_way]
|
20
|
-
|
21
|
-
expect(Doorkeeper::OAuth::Token).to receive(:authenticate)
|
22
|
-
.with(request, *token_strategies)
|
23
|
-
|
24
|
-
Doorkeeper.authenticate(request, token_strategies)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|