doorkeeper 5.2.2 → 5.5.4
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 +198 -3
- data/README.md +28 -20
- data/app/controllers/doorkeeper/application_controller.rb +3 -2
- data/app/controllers/doorkeeper/application_metal_controller.rb +2 -2
- data/app/controllers/doorkeeper/applications_controller.rb +7 -8
- data/app/controllers/doorkeeper/authorizations_controller.rb +48 -18
- data/app/controllers/doorkeeper/authorized_applications_controller.rb +6 -6
- data/app/controllers/doorkeeper/token_info_controller.rb +12 -2
- data/app/controllers/doorkeeper/tokens_controller.rb +70 -25
- data/app/helpers/doorkeeper/dashboard_helper.rb +1 -1
- data/app/views/doorkeeper/applications/_form.html.erb +1 -1
- data/app/views/doorkeeper/applications/show.html.erb +35 -14
- data/app/views/doorkeeper/authorizations/form_post.html.erb +15 -0
- data/app/views/doorkeeper/authorizations/new.html.erb +2 -0
- data/config/locales/en.yml +9 -2
- data/lib/doorkeeper/config/abstract_builder.rb +28 -0
- data/lib/doorkeeper/config/option.rb +26 -14
- data/lib/doorkeeper/config/validations.rb +53 -0
- data/lib/doorkeeper/config.rb +214 -122
- data/lib/doorkeeper/engine.rb +1 -1
- 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 +2 -2
- data/lib/doorkeeper/helpers/controller.rb +18 -12
- data/lib/doorkeeper/models/access_grant_mixin.rb +23 -19
- data/lib/doorkeeper/models/access_token_mixin.rb +157 -55
- data/lib/doorkeeper/models/application_mixin.rb +8 -7
- data/lib/doorkeeper/models/concerns/expirable.rb +1 -1
- 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 +22 -9
- data/lib/doorkeeper/oauth/authorization/context.rb +5 -5
- data/lib/doorkeeper/oauth/authorization/token.rb +23 -18
- data/lib/doorkeeper/oauth/authorization/uri_builder.rb +4 -4
- data/lib/doorkeeper/oauth/authorization_code_request.rb +30 -20
- data/lib/doorkeeper/oauth/base_request.rb +19 -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 +38 -12
- data/lib/doorkeeper/oauth/client_credentials/issuer.rb +10 -8
- data/lib/doorkeeper/oauth/client_credentials/{validation.rb → validator.rb} +7 -5
- data/lib/doorkeeper/oauth/client_credentials_request.rb +8 -7
- data/lib/doorkeeper/oauth/code_request.rb +4 -4
- 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/forbidden_token_response.rb +2 -1
- data/lib/doorkeeper/oauth/helpers/scope_checker.rb +8 -12
- data/lib/doorkeeper/oauth/helpers/unique_token.rb +10 -7
- data/lib/doorkeeper/oauth/helpers/uri_checker.rb +1 -19
- data/lib/doorkeeper/oauth/hooks/context.rb +21 -0
- data/lib/doorkeeper/oauth/invalid_request_response.rb +3 -3
- data/lib/doorkeeper/oauth/invalid_token_response.rb +7 -4
- data/lib/doorkeeper/oauth/password_access_token_request.rb +28 -10
- data/lib/doorkeeper/oauth/pre_authorization.rb +73 -37
- data/lib/doorkeeper/oauth/refresh_token_request.rb +35 -26
- data/lib/doorkeeper/oauth/token.rb +6 -7
- data/lib/doorkeeper/oauth/token_introspection.rb +12 -16
- data/lib/doorkeeper/oauth/token_request.rb +3 -3
- 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 -95
- data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +69 -0
- data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +60 -0
- data/lib/doorkeeper/orm/active_record/mixins/application.rb +199 -0
- data/lib/doorkeeper/orm/active_record/redirect_uri_validator.rb +8 -3
- data/lib/doorkeeper/orm/active_record.rb +5 -7
- 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 +3 -3
- data/lib/doorkeeper/request/client_credentials.rb +2 -2
- data/lib/doorkeeper/request/password.rb +3 -2
- data/lib/doorkeeper/request/refresh_token.rb +5 -4
- data/lib/doorkeeper/request/strategy.rb +2 -2
- data/lib/doorkeeper/request.rb +49 -12
- data/lib/doorkeeper/server.rb +5 -5
- data/lib/doorkeeper/stale_records_cleaner.rb +4 -4
- data/lib/doorkeeper/version.rb +2 -6
- data/lib/doorkeeper.rb +112 -81
- 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 +2 -2
- 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 +99 -14
- data/lib/generators/doorkeeper/templates/migration.rb.erb +14 -5
- metadata +37 -306
- 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 -273
- data/spec/controllers/authorizations_controller_spec.rb +0 -608
- 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 -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/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/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 -739
- 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 -168
- data/spec/lib/oauth/base_request_spec.rb +0 -222
- 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 -97
- 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 -46
- 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 -262
- data/spec/lib/oauth/invalid_request_response_spec.rb +0 -75
- 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 -225
- data/spec/lib/oauth/refresh_token_request_spec.rb +0 -178
- data/spec/lib/oauth/scopes_spec.rb +0 -148
- data/spec/lib/oauth/token_request_spec.rb +0 -153
- 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 -49
- data/spec/lib/stale_records_cleaner_spec.rb +0 -89
- data/spec/models/doorkeeper/access_grant_spec.rb +0 -163
- data/spec/models/doorkeeper/access_token_spec.rb +0 -622
- data/spec/models/doorkeeper/application_spec.rb +0 -377
- 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 -89
- 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 -513
- 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 -296
- data/spec/requests/flows/refresh_token_spec.rb +0 -233
- data/spec/requests/flows/revoke_token_spec.rb +0 -151
- 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 -110
- 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 -183
- data/spec/version/version_spec.rb +0 -17
@@ -1,89 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
feature "Authorization endpoint" do
|
6
|
-
background do
|
7
|
-
default_scopes_exist :default
|
8
|
-
config_is_set(:authenticate_resource_owner) { User.first || redirect_to("/sign_in") }
|
9
|
-
client_exists(name: "MyApp")
|
10
|
-
end
|
11
|
-
|
12
|
-
scenario "requires resource owner to be authenticated" do
|
13
|
-
visit authorization_endpoint_url(client: @client)
|
14
|
-
i_should_see "Sign in"
|
15
|
-
i_should_be_on "/"
|
16
|
-
end
|
17
|
-
|
18
|
-
context "with authenticated resource owner" do
|
19
|
-
background do
|
20
|
-
create_resource_owner
|
21
|
-
sign_in
|
22
|
-
end
|
23
|
-
|
24
|
-
scenario "displays the authorization form" do
|
25
|
-
visit authorization_endpoint_url(client: @client)
|
26
|
-
i_should_see "Authorize MyApp to use your account?"
|
27
|
-
end
|
28
|
-
|
29
|
-
scenario "displays all requested scopes" do
|
30
|
-
default_scopes_exist :public
|
31
|
-
optional_scopes_exist :write
|
32
|
-
visit authorization_endpoint_url(client: @client, scope: "public write")
|
33
|
-
i_should_see "Access your public data"
|
34
|
-
i_should_see "Update your data"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "with a invalid request's param" do
|
39
|
-
background do
|
40
|
-
create_resource_owner
|
41
|
-
sign_in
|
42
|
-
end
|
43
|
-
|
44
|
-
context "when missing required param" do
|
45
|
-
scenario "displays invalid_request error when missing client" do
|
46
|
-
visit authorization_endpoint_url(client: nil, response_type: "code")
|
47
|
-
i_should_not_see "Authorize"
|
48
|
-
i_should_see_translated_invalid_request_error_message :missing_param, :client_id
|
49
|
-
end
|
50
|
-
|
51
|
-
scenario "displays invalid_request error when missing response_type param" do
|
52
|
-
visit authorization_endpoint_url(client: @client, response_type: "")
|
53
|
-
i_should_not_see "Authorize"
|
54
|
-
i_should_see_translated_invalid_request_error_message :missing_param, :response_type
|
55
|
-
end
|
56
|
-
|
57
|
-
scenario "displays invalid_request error when missing scope param and authorization server has no default scopes" do
|
58
|
-
config_is_set(:default_scopes, [])
|
59
|
-
visit authorization_endpoint_url(client: @client, response_type: "code", scope: "")
|
60
|
-
i_should_not_see "Authorize"
|
61
|
-
i_should_see_translated_invalid_request_error_message :missing_param, :scope
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
scenario "displays unsupported_response_type error when using a disabled response type" do
|
66
|
-
config_is_set(:grant_flows, ["implicit"])
|
67
|
-
visit authorization_endpoint_url(client: @client, response_type: "code")
|
68
|
-
i_should_not_see "Authorize"
|
69
|
-
i_should_see_translated_error_message :unsupported_response_type
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
context "forgery protection enabled" do
|
74
|
-
background do
|
75
|
-
create_resource_owner
|
76
|
-
sign_in
|
77
|
-
end
|
78
|
-
|
79
|
-
scenario "raises exception on forged requests" do
|
80
|
-
allowing_forgery_protection do
|
81
|
-
expect do
|
82
|
-
page.driver.post authorization_endpoint_url(client_id: @client.uid,
|
83
|
-
redirect_uri: @client.redirect_uri,
|
84
|
-
response_type: "code")
|
85
|
-
end.to raise_error(ActionController::InvalidAuthenticityToken)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe "Token endpoint" do
|
6
|
-
before do
|
7
|
-
client_exists
|
8
|
-
authorization_code_exists application: @client, scopes: "public"
|
9
|
-
end
|
10
|
-
|
11
|
-
it "respond with correct headers" do
|
12
|
-
post token_endpoint_url(code: @authorization.token, client: @client)
|
13
|
-
should_have_header "Pragma", "no-cache"
|
14
|
-
|
15
|
-
# Rails 5.2 changed headers
|
16
|
-
if ::Rails::VERSION::MAJOR >= 5 && ::Rails::VERSION::MINOR >= 2 || ::Rails::VERSION::MAJOR >= 6
|
17
|
-
should_have_header "Cache-Control", "private, no-store"
|
18
|
-
else
|
19
|
-
should_have_header "Cache-Control", "no-store"
|
20
|
-
end
|
21
|
-
|
22
|
-
should_have_header "Content-Type", "application/json; charset=utf-8"
|
23
|
-
end
|
24
|
-
|
25
|
-
it "accepts client credentials with basic auth header" do
|
26
|
-
post token_endpoint_url,
|
27
|
-
params: {
|
28
|
-
code: @authorization.token,
|
29
|
-
redirect_uri: @client.redirect_uri,
|
30
|
-
},
|
31
|
-
headers: { "HTTP_AUTHORIZATION" => basic_auth_header_for_client(@client) }
|
32
|
-
|
33
|
-
should_have_json "access_token", Doorkeeper::AccessToken.first.token
|
34
|
-
end
|
35
|
-
|
36
|
-
it "returns null for expires_in when a permanent token is set" do
|
37
|
-
config_is_set(:access_token_expires_in, nil)
|
38
|
-
post token_endpoint_url(code: @authorization.token, client: @client)
|
39
|
-
should_have_json "access_token", Doorkeeper::AccessToken.first.token
|
40
|
-
should_not_have_json "expires_in"
|
41
|
-
end
|
42
|
-
|
43
|
-
it "returns unsupported_grant_type for invalid grant_type param" do
|
44
|
-
post token_endpoint_url(code: @authorization.token, client: @client, grant_type: "nothing")
|
45
|
-
|
46
|
-
should_not_have_json "access_token"
|
47
|
-
should_have_json "error", "unsupported_grant_type"
|
48
|
-
should_have_json "error_description", translated_error_message("unsupported_grant_type")
|
49
|
-
end
|
50
|
-
|
51
|
-
it "returns unsupported_grant_type for disabled grant flows" do
|
52
|
-
config_is_set(:grant_flows, ["implicit"])
|
53
|
-
post token_endpoint_url(code: @authorization.token, client: @client, grant_type: "authorization_code")
|
54
|
-
|
55
|
-
should_not_have_json "access_token"
|
56
|
-
should_have_json "error", "unsupported_grant_type"
|
57
|
-
should_have_json "error_description", translated_error_message("unsupported_grant_type")
|
58
|
-
end
|
59
|
-
|
60
|
-
it "returns unsupported_grant_type when refresh_token is not in use" do
|
61
|
-
post token_endpoint_url(code: @authorization.token, client: @client, grant_type: "refresh_token")
|
62
|
-
|
63
|
-
should_not_have_json "access_token"
|
64
|
-
should_have_json "error", "unsupported_grant_type"
|
65
|
-
should_have_json "error_description", translated_error_message("unsupported_grant_type")
|
66
|
-
end
|
67
|
-
|
68
|
-
it "returns invalid_request if grant_type is missing" do
|
69
|
-
post token_endpoint_url(code: @authorization.token, client: @client, grant_type: "")
|
70
|
-
|
71
|
-
should_not_have_json "access_token"
|
72
|
-
should_have_json "error", "invalid_request"
|
73
|
-
should_have_json "error_description", translated_invalid_request_error_message(:missing_param, :grant_type)
|
74
|
-
end
|
75
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
feature "Authorization Code Flow Errors" do
|
6
|
-
let(:client_params) { {} }
|
7
|
-
background do
|
8
|
-
default_scopes_exist :default
|
9
|
-
config_is_set(:authenticate_resource_owner) { User.first || redirect_to("/sign_in") }
|
10
|
-
client_exists client_params
|
11
|
-
create_resource_owner
|
12
|
-
sign_in
|
13
|
-
end
|
14
|
-
|
15
|
-
after do
|
16
|
-
access_grant_should_not_exist
|
17
|
-
end
|
18
|
-
|
19
|
-
context "with a client trying to xss resource owner" do
|
20
|
-
let(:client_name) { "<div id='xss'>XSS</div>" }
|
21
|
-
let(:client_params) { { name: client_name } }
|
22
|
-
scenario "resource owner visit authorization endpoint" do
|
23
|
-
visit authorization_endpoint_url(client: @client)
|
24
|
-
expect(page).not_to have_css("#xss")
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context "when access was denied" do
|
29
|
-
scenario "redirects with error" do
|
30
|
-
visit authorization_endpoint_url(client: @client)
|
31
|
-
click_on "Deny"
|
32
|
-
|
33
|
-
i_should_be_on_client_callback @client
|
34
|
-
url_should_not_have_param "code"
|
35
|
-
url_should_have_param "error", "access_denied"
|
36
|
-
url_should_have_param "error_description", translated_error_message(:access_denied)
|
37
|
-
end
|
38
|
-
|
39
|
-
scenario "redirects with state parameter" do
|
40
|
-
visit authorization_endpoint_url(client: @client, state: "return-this")
|
41
|
-
click_on "Deny"
|
42
|
-
|
43
|
-
i_should_be_on_client_callback @client
|
44
|
-
url_should_not_have_param "code"
|
45
|
-
url_should_have_param "state", "return-this"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe "Authorization Code Flow Errors", "after authorization" do
|
51
|
-
before do
|
52
|
-
client_exists
|
53
|
-
authorization_code_exists application: @client
|
54
|
-
end
|
55
|
-
|
56
|
-
it "returns :invalid_grant error when posting an already revoked grant code" do
|
57
|
-
# First successful request
|
58
|
-
post token_endpoint_url(code: @authorization.token, client: @client)
|
59
|
-
|
60
|
-
# Second attempt with same token
|
61
|
-
expect do
|
62
|
-
post token_endpoint_url(code: @authorization.token, client: @client)
|
63
|
-
end.to_not(change { Doorkeeper::AccessToken.count })
|
64
|
-
|
65
|
-
should_not_have_json "access_token"
|
66
|
-
should_have_json "error", "invalid_grant"
|
67
|
-
should_have_json "error_description", translated_error_message("invalid_grant")
|
68
|
-
end
|
69
|
-
|
70
|
-
it "returns :invalid_grant error for invalid grant code" do
|
71
|
-
post token_endpoint_url(code: "invalid", client: @client)
|
72
|
-
|
73
|
-
access_token_should_not_exist
|
74
|
-
|
75
|
-
should_not_have_json "access_token"
|
76
|
-
should_have_json "error", "invalid_grant"
|
77
|
-
should_have_json "error_description", translated_error_message("invalid_grant")
|
78
|
-
end
|
79
|
-
end
|