doorkeeper 5.2.6 → 5.3.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/Appraisals +2 -2
- data/CHANGELOG.md +15 -14
- data/Gemfile +2 -2
- data/app/controllers/doorkeeper/application_controller.rb +2 -2
- data/app/controllers/doorkeeper/application_metal_controller.rb +2 -2
- data/app/controllers/doorkeeper/applications_controller.rb +3 -3
- data/app/controllers/doorkeeper/authorizations_controller.rb +2 -2
- data/app/controllers/doorkeeper/authorized_applications_controller.rb +3 -3
- data/gemfiles/rails_5_0.gemfile +2 -2
- data/gemfiles/rails_5_1.gemfile +2 -2
- data/gemfiles/rails_5_2.gemfile +2 -2
- data/gemfiles/rails_6_0.gemfile +2 -2
- data/gemfiles/rails_master.gemfile +2 -2
- data/lib/doorkeeper.rb +2 -3
- data/lib/doorkeeper/config.rb +71 -39
- data/lib/doorkeeper/grape/helpers.rb +1 -1
- data/lib/doorkeeper/helpers/controller.rb +10 -8
- data/lib/doorkeeper/models/access_grant_mixin.rb +7 -6
- data/lib/doorkeeper/models/access_token_mixin.rb +55 -18
- data/lib/doorkeeper/models/application_mixin.rb +3 -3
- data/lib/doorkeeper/models/concerns/ownership.rb +1 -1
- data/lib/doorkeeper/models/concerns/reusable.rb +1 -1
- data/lib/doorkeeper/models/concerns/revocable.rb +0 -27
- data/lib/doorkeeper/oauth/authorization/code.rb +4 -4
- data/lib/doorkeeper/oauth/authorization/token.rb +9 -6
- data/lib/doorkeeper/oauth/authorization_code_request.rb +13 -6
- data/lib/doorkeeper/oauth/base_request.rb +8 -4
- data/lib/doorkeeper/oauth/client.rb +7 -8
- data/lib/doorkeeper/oauth/client_credentials/creator.rb +16 -9
- data/lib/doorkeeper/oauth/client_credentials/issuer.rb +7 -7
- data/lib/doorkeeper/oauth/client_credentials/{validation.rb → validator.rb} +4 -4
- data/lib/doorkeeper/oauth/client_credentials_request.rb +1 -1
- data/lib/doorkeeper/oauth/code_response.rb +2 -2
- data/lib/doorkeeper/oauth/error.rb +1 -1
- data/lib/doorkeeper/oauth/error_response.rb +5 -5
- data/lib/doorkeeper/oauth/helpers/scope_checker.rb +7 -5
- data/lib/doorkeeper/oauth/helpers/unique_token.rb +8 -5
- data/lib/doorkeeper/oauth/helpers/uri_checker.rb +1 -1
- data/lib/doorkeeper/oauth/invalid_request_response.rb +3 -3
- data/lib/doorkeeper/oauth/invalid_token_response.rb +5 -2
- data/lib/doorkeeper/oauth/password_access_token_request.rb +3 -3
- data/lib/doorkeeper/oauth/pre_authorization.rb +7 -5
- data/lib/doorkeeper/oauth/refresh_token_request.rb +5 -5
- data/lib/doorkeeper/oauth/token.rb +2 -2
- data/lib/doorkeeper/oauth/token_introspection.rb +6 -6
- data/lib/doorkeeper/orm/active_record.rb +3 -3
- 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 +3 -155
- data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +53 -0
- data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +47 -0
- data/lib/doorkeeper/orm/active_record/mixins/application.rb +128 -0
- data/lib/doorkeeper/orm/active_record/redirect_uri_validator.rb +3 -3
- data/lib/doorkeeper/rails/helpers.rb +4 -4
- data/lib/doorkeeper/rails/routes.rb +5 -7
- data/lib/doorkeeper/rake/db.rake +3 -3
- data/lib/doorkeeper/request.rb +1 -1
- data/lib/doorkeeper/request/authorization_code.rb +3 -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 +3 -3
- data/lib/doorkeeper/server.rb +1 -1
- data/lib/doorkeeper/stale_records_cleaner.rb +1 -1
- data/lib/doorkeeper/version.rb +2 -2
- data/lib/generators/doorkeeper/application_owner_generator.rb +1 -1
- data/lib/generators/doorkeeper/confidential_applications_generator.rb +1 -1
- 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/initializer.rb +39 -8
- data/spec/controllers/application_metal_controller_spec.rb +1 -1
- data/spec/controllers/applications_controller_spec.rb +3 -2
- data/spec/controllers/authorizations_controller_spec.rb +18 -18
- data/spec/controllers/protected_resources_controller_spec.rb +25 -17
- data/spec/controllers/token_info_controller_spec.rb +1 -1
- data/spec/controllers/tokens_controller_spec.rb +1 -1
- data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +3 -3
- data/spec/dummy/db/migrate/20160320211015_add_previous_refresh_token_to_access_tokens.rb +1 -1
- data/spec/dummy/db/migrate/20180210183654_add_confidential_to_applications.rb +1 -1
- data/spec/generators/install_generator_spec.rb +1 -1
- data/spec/generators/previous_refresh_token_generator_spec.rb +2 -2
- data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +1 -1
- data/spec/lib/config_spec.rb +61 -21
- data/spec/lib/doorkeeper_spec.rb +1 -1
- data/spec/lib/models/revocable_spec.rb +3 -3
- data/spec/lib/oauth/authorization_code_request_spec.rb +127 -125
- data/spec/lib/oauth/base_request_spec.rb +160 -158
- data/spec/lib/oauth/base_response_spec.rb +27 -29
- data/spec/lib/oauth/client/credentials_spec.rb +1 -1
- data/spec/lib/oauth/client_credentials/creator_spec.rb +42 -5
- data/spec/lib/oauth/client_credentials/issuer_spec.rb +12 -12
- data/spec/lib/oauth/client_credentials/validation_spec.rb +4 -4
- data/spec/lib/oauth/client_credentials_integration_spec.rb +16 -18
- data/spec/lib/oauth/client_credentials_request_spec.rb +78 -80
- data/spec/lib/oauth/client_spec.rb +26 -26
- data/spec/lib/oauth/code_request_spec.rb +34 -34
- data/spec/lib/oauth/code_response_spec.rb +21 -25
- data/spec/lib/oauth/error_response_spec.rb +42 -44
- data/spec/lib/oauth/error_spec.rb +12 -14
- data/spec/lib/oauth/forbidden_token_response_spec.rb +11 -13
- data/spec/lib/oauth/helpers/scope_checker_spec.rb +30 -18
- data/spec/lib/oauth/invalid_request_response_spec.rb +48 -50
- data/spec/lib/oauth/invalid_token_response_spec.rb +32 -34
- data/spec/lib/oauth/password_access_token_request_spec.rb +145 -147
- data/spec/lib/oauth/pre_authorization_spec.rb +159 -161
- data/spec/lib/oauth/refresh_token_request_spec.rb +138 -139
- data/spec/lib/oauth/scopes_spec.rb +104 -106
- data/spec/lib/oauth/token_request_spec.rb +115 -111
- data/spec/lib/oauth/token_response_spec.rb +71 -73
- data/spec/lib/oauth/token_spec.rb +121 -123
- data/spec/models/doorkeeper/access_grant_spec.rb +3 -5
- data/spec/models/doorkeeper/access_token_spec.rb +7 -7
- data/spec/models/doorkeeper/application_spec.rb +295 -373
- data/spec/requests/applications/applications_request_spec.rb +1 -1
- data/spec/requests/endpoints/authorization_spec.rb +5 -3
- data/spec/requests/flows/authorization_code_spec.rb +34 -22
- data/spec/requests/flows/client_credentials_spec.rb +1 -1
- data/spec/requests/flows/password_spec.rb +32 -12
- data/spec/requests/flows/refresh_token_spec.rb +19 -19
- data/spec/requests/flows/revoke_token_spec.rb +18 -12
- data/spec/spec_helper.rb +1 -4
- data/spec/support/shared/controllers_shared_context.rb +33 -23
- data/spec/validators/redirect_uri_validator_spec.rb +1 -1
- metadata +6 -5
- data/spec/support/http_method_shim.rb +0 -29
@@ -8,7 +8,7 @@ module Doorkeeper
|
|
8
8
|
class RedirectUriValidator < ActiveModel::EachValidator
|
9
9
|
def validate_each(record, attribute, value)
|
10
10
|
if value.blank?
|
11
|
-
return if Doorkeeper.
|
11
|
+
return if Doorkeeper.config.allow_blank_redirect_uri?(record)
|
12
12
|
|
13
13
|
record.errors.add(attribute, :blank)
|
14
14
|
else
|
@@ -34,7 +34,7 @@ module Doorkeeper
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def forbidden_uri?(uri)
|
37
|
-
Doorkeeper.
|
37
|
+
Doorkeeper.config.forbid_redirect_uri.call(uri)
|
38
38
|
end
|
39
39
|
|
40
40
|
def unspecified_scheme?(uri)
|
@@ -48,7 +48,7 @@ module Doorkeeper
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def invalid_ssl_uri?(uri)
|
51
|
-
forces_ssl = Doorkeeper.
|
51
|
+
forces_ssl = Doorkeeper.config.force_ssl_in_redirect_uri
|
52
52
|
non_https = uri.try(:scheme) == "http"
|
53
53
|
|
54
54
|
if forces_ssl.respond_to?(:call)
|
@@ -4,7 +4,7 @@ module Doorkeeper
|
|
4
4
|
module Rails
|
5
5
|
module Helpers
|
6
6
|
def doorkeeper_authorize!(*scopes)
|
7
|
-
@_doorkeeper_scopes = scopes.presence || Doorkeeper.
|
7
|
+
@_doorkeeper_scopes = scopes.presence || Doorkeeper.config.default_scopes
|
8
8
|
|
9
9
|
doorkeeper_render_error unless valid_doorkeeper_token?
|
10
10
|
end
|
@@ -21,7 +21,7 @@ module Doorkeeper
|
|
21
21
|
|
22
22
|
def doorkeeper_render_error
|
23
23
|
error = doorkeeper_error
|
24
|
-
error.raise_exception! if Doorkeeper.
|
24
|
+
error.raise_exception! if Doorkeeper.config.raise_on_errors?
|
25
25
|
|
26
26
|
headers.merge!(error.headers.reject { |k| k == "Content-Type" })
|
27
27
|
doorkeeper_render_error_with(error)
|
@@ -30,7 +30,7 @@ module Doorkeeper
|
|
30
30
|
def doorkeeper_render_error_with(error)
|
31
31
|
options = doorkeeper_render_options(error) || {}
|
32
32
|
status = doorkeeper_status_for_error(
|
33
|
-
error, options.delete(:respond_not_found_when_forbidden)
|
33
|
+
error, options.delete(:respond_not_found_when_forbidden),
|
34
34
|
)
|
35
35
|
if options.blank?
|
36
36
|
head status
|
@@ -72,7 +72,7 @@ module Doorkeeper
|
|
72
72
|
def doorkeeper_token
|
73
73
|
@doorkeeper_token ||= OAuth::Token.authenticate(
|
74
74
|
request,
|
75
|
-
*Doorkeeper.
|
75
|
+
*Doorkeeper.config.access_token_methods,
|
76
76
|
)
|
77
77
|
end
|
78
78
|
end
|
@@ -17,7 +17,7 @@ module Doorkeeper
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.install!
|
20
|
-
ActionDispatch::Routing::Mapper.
|
20
|
+
ActionDispatch::Routing::Mapper.include Doorkeeper::Rails::Routes::Helper
|
21
21
|
end
|
22
22
|
|
23
23
|
attr_reader :routes
|
@@ -26,9 +26,7 @@ module Doorkeeper
|
|
26
26
|
@routes = routes
|
27
27
|
@mapping = Mapper.new.map(&block)
|
28
28
|
|
29
|
-
if Doorkeeper.
|
30
|
-
@mapping.skips.push(:applications, :authorized_applications)
|
31
|
-
end
|
29
|
+
@mapping.skips.push(:applications, :authorized_applications) if Doorkeeper.config.api_only
|
32
30
|
end
|
33
31
|
|
34
32
|
def generate_routes!(options)
|
@@ -59,7 +57,7 @@ module Doorkeeper
|
|
59
57
|
path: "authorize",
|
60
58
|
only: %i[create destroy],
|
61
59
|
as: mapping[:as],
|
62
|
-
controller: mapping[:controllers]
|
60
|
+
controller: mapping[:controllers],
|
63
61
|
) do
|
64
62
|
routes.get "/native", action: :show, on: :member
|
65
63
|
routes.get "/", action: :new, on: :member
|
@@ -71,7 +69,7 @@ module Doorkeeper
|
|
71
69
|
:token,
|
72
70
|
path: "token",
|
73
71
|
only: [:create], as: mapping[:as],
|
74
|
-
controller: mapping[:controllers]
|
72
|
+
controller: mapping[:controllers],
|
75
73
|
)
|
76
74
|
end
|
77
75
|
|
@@ -88,7 +86,7 @@ module Doorkeeper
|
|
88
86
|
:token_info,
|
89
87
|
path: "token/info",
|
90
88
|
only: [:show], as: mapping[:as],
|
91
|
-
controller: mapping[:controllers]
|
89
|
+
controller: mapping[:controllers],
|
92
90
|
)
|
93
91
|
end
|
94
92
|
|
data/lib/doorkeeper/rake/db.rake
CHANGED
@@ -19,9 +19,9 @@ namespace :doorkeeper do
|
|
19
19
|
|
20
20
|
desc "Removes expired (TTL passed) access tokens"
|
21
21
|
task expired_tokens: "doorkeeper:setup" do
|
22
|
-
expirable_tokens = Doorkeeper
|
22
|
+
expirable_tokens = Doorkeeper.config.access_token_model.where(refresh_token: nil)
|
23
23
|
cleaner = Doorkeeper::StaleRecordsCleaner.new(expirable_tokens)
|
24
|
-
cleaner.clean_expired(Doorkeeper.
|
24
|
+
cleaner.clean_expired(Doorkeeper.config.access_token_expires_in)
|
25
25
|
end
|
26
26
|
|
27
27
|
desc "Removes stale access grants"
|
@@ -33,7 +33,7 @@ namespace :doorkeeper do
|
|
33
33
|
desc "Removes expired (TTL passed) access grants"
|
34
34
|
task expired_grants: "doorkeeper:setup" do
|
35
35
|
cleaner = Doorkeeper::StaleRecordsCleaner.new(Doorkeeper::AccessGrant)
|
36
|
-
cleaner.clean_expired(Doorkeeper.
|
36
|
+
cleaner.clean_expired(Doorkeeper.config.authorization_code_expires_in)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
data/lib/doorkeeper/request.rb
CHANGED
@@ -7,10 +7,10 @@ module Doorkeeper
|
|
7
7
|
|
8
8
|
def request
|
9
9
|
@request ||= OAuth::AuthorizationCodeRequest.new(
|
10
|
-
Doorkeeper.
|
10
|
+
Doorkeeper.config,
|
11
11
|
grant,
|
12
12
|
client,
|
13
|
-
parameters
|
13
|
+
parameters,
|
14
14
|
)
|
15
15
|
end
|
16
16
|
|
@@ -19,7 +19,7 @@ module Doorkeeper
|
|
19
19
|
def grant
|
20
20
|
raise Errors::MissingRequiredParameter, :code if parameters[:code].blank?
|
21
21
|
|
22
|
-
|
22
|
+
Doorkeeper.config.access_grant_model.by_token(parameters[:code])
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -6,14 +6,14 @@ module Doorkeeper
|
|
6
6
|
delegate :credentials, :parameters, to: :server
|
7
7
|
|
8
8
|
def refresh_token
|
9
|
-
|
9
|
+
Doorkeeper.config.access_token_model.by_refresh_token(parameters[:refresh_token])
|
10
10
|
end
|
11
11
|
|
12
12
|
def request
|
13
13
|
@request ||= OAuth::RefreshTokenRequest.new(
|
14
|
-
Doorkeeper.
|
14
|
+
Doorkeeper.config,
|
15
15
|
refresh_token, credentials,
|
16
|
-
parameters
|
16
|
+
parameters,
|
17
17
|
)
|
18
18
|
end
|
19
19
|
end
|
data/lib/doorkeeper/server.rb
CHANGED
@@ -37,7 +37,7 @@ module Doorkeeper
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def credentials
|
40
|
-
methods = Doorkeeper.
|
40
|
+
methods = Doorkeeper.config.client_credentials_methods
|
41
41
|
@credentials ||= OAuth::Client::Credentials.from_request(context.request, *methods)
|
42
42
|
end
|
43
43
|
end
|
data/lib/doorkeeper/version.rb
CHANGED
@@ -21,7 +21,7 @@ module Doorkeeper
|
|
21
21
|
|
22
22
|
migration_template(
|
23
23
|
"add_previous_refresh_token_to_access_tokens.rb.erb",
|
24
|
-
"db/migrate/add_previous_refresh_token_to_access_tokens.rb"
|
24
|
+
"db/migrate/add_previous_refresh_token_to_access_tokens.rb",
|
25
25
|
)
|
26
26
|
end
|
27
27
|
|
@@ -34,7 +34,7 @@ module Doorkeeper
|
|
34
34
|
def no_previous_refresh_token_column?
|
35
35
|
!ActiveRecord::Base.connection.column_exists?(
|
36
36
|
:oauth_access_tokens,
|
37
|
-
:previous_refresh_token
|
37
|
+
:previous_refresh_token,
|
38
38
|
)
|
39
39
|
end
|
40
40
|
end
|
@@ -29,6 +29,35 @@ Doorkeeper.configure do
|
|
29
29
|
# end
|
30
30
|
# end
|
31
31
|
|
32
|
+
# You can use your own model classes if you need to extend (or even override) default
|
33
|
+
# Doorkeeper models such as `Application`, `AccessToken` and `AccessGrant.
|
34
|
+
#
|
35
|
+
# Be default Doorkeeper ActiveRecord ORM uses it's own classes:
|
36
|
+
#
|
37
|
+
# access_token_class "Doorkeeper::AccessToken"
|
38
|
+
# access_grant_class "Doorkeeper::AccessGrant"
|
39
|
+
# application_class "Doorkeeper::Application"
|
40
|
+
#
|
41
|
+
# Don't forget to include Doorkeeper ORM mixins into your custom models:
|
42
|
+
#
|
43
|
+
# * ::Doorkeeper::Orm::ActiveRecord::Mixins::AccessToken - for access token
|
44
|
+
# * ::Doorkeeper::Orm::ActiveRecord::Mixins::AccessGrant - for access grant
|
45
|
+
# * ::Doorkeeper::Orm::ActiveRecord::Mixins::Application - for application (OAuth2 clients)
|
46
|
+
#
|
47
|
+
# For example:
|
48
|
+
#
|
49
|
+
# access_token_class "MyAccessToken"
|
50
|
+
#
|
51
|
+
# class MyAccessToken < ApplicationRecord
|
52
|
+
# include ::Doorkeeper::Orm::ActiveRecord::Mixins::AccessToken
|
53
|
+
#
|
54
|
+
# self.table_name = "hey_i_wanna_my_name"
|
55
|
+
#
|
56
|
+
# def destroy_me!
|
57
|
+
# destroy
|
58
|
+
# end
|
59
|
+
# end
|
60
|
+
|
32
61
|
# If you are planning to use Doorkeeper in Rails 5 API-only application, then you might
|
33
62
|
# want to use API mode that will skip all the views management and change the way how
|
34
63
|
# Doorkeeper responds to a requests.
|
@@ -88,14 +117,6 @@ Doorkeeper.configure do
|
|
88
117
|
#
|
89
118
|
# reuse_access_token
|
90
119
|
|
91
|
-
# In case you enabled `reuse_access_token` option Doorkeeper will try to find matching
|
92
|
-
# token using `matching_token_for` Access Token API that searches for valid records
|
93
|
-
# in batches in order not to pollute the memory with all the database records. By default
|
94
|
-
# Doorkeeper uses batch size of 10 000 records. You can increase or decrease this value
|
95
|
-
# depending on your needs and server capabilities.
|
96
|
-
#
|
97
|
-
# token_lookup_batch_size 10_000
|
98
|
-
|
99
120
|
# Set a limit for token_reuse if using reuse_access_token option
|
100
121
|
#
|
101
122
|
# This option limits token_reusability to some extent.
|
@@ -106,6 +127,16 @@ Doorkeeper.configure do
|
|
106
127
|
#
|
107
128
|
# token_reuse_limit 100
|
108
129
|
|
130
|
+
# Only allow one valid access token obtained via client credentials
|
131
|
+
# per client. If a new access token is obtained before the old one
|
132
|
+
# expired, the old one gets revoked (disabled by default)
|
133
|
+
#
|
134
|
+
# When enabling this option, make sure that you do not expect multiple processes
|
135
|
+
# using the same credentials at the same time (e.g. web servers spanning
|
136
|
+
# multiple machines and/or processes).
|
137
|
+
#
|
138
|
+
# revoke_previous_client_credentials_token
|
139
|
+
|
109
140
|
# Hash access and refresh tokens before persisting them.
|
110
141
|
# This will disable the possibility to use +reuse_access_token+
|
111
142
|
# since plain values can no longer be retrieved.
|
@@ -21,7 +21,7 @@ describe Doorkeeper::ApplicationMetalController do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
describe "enforce_content_type" do
|
24
|
-
before { allow(Doorkeeper.
|
24
|
+
before { allow(Doorkeeper.config).to receive(:enforce_content_type).and_return(flag) }
|
25
25
|
|
26
26
|
context "enabled" do
|
27
27
|
let(:flag) { true }
|
@@ -117,7 +117,7 @@ module Doorkeeper
|
|
117
117
|
|
118
118
|
context "when admin is not authenticated" do
|
119
119
|
before do
|
120
|
-
allow(Doorkeeper.
|
120
|
+
allow(Doorkeeper.config).to receive(:authenticate_admin).and_return(proc do
|
121
121
|
redirect_to main_app.root_url
|
122
122
|
end)
|
123
123
|
end
|
@@ -142,7 +142,8 @@ module Doorkeeper
|
|
142
142
|
context "when admin is authenticated" do
|
143
143
|
context "when application secrets are hashed" do
|
144
144
|
before do
|
145
|
-
allow(Doorkeeper.configuration)
|
145
|
+
allow(Doorkeeper.configuration)
|
146
|
+
.to receive(:application_secret_strategy).and_return(Doorkeeper::SecretStoring::Sha256Hash)
|
146
147
|
end
|
147
148
|
|
148
149
|
it "shows the application secret after creating a new application" do
|
@@ -27,8 +27,8 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
27
27
|
end)
|
28
28
|
end
|
29
29
|
|
30
|
-
allow(Doorkeeper.
|
31
|
-
allow(Doorkeeper.
|
30
|
+
allow(Doorkeeper.config).to receive(:grant_flows).and_return(["implicit"])
|
31
|
+
allow(Doorkeeper.config).to receive(:authenticate_resource_owner).and_return(->(_) { authenticator_method })
|
32
32
|
allow(controller).to receive(:authenticator_method).and_return(user)
|
33
33
|
expect(controller).to receive(:authenticator_method).at_most(:once)
|
34
34
|
end
|
@@ -69,7 +69,7 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
69
69
|
|
70
70
|
describe "POST #create in API mode" do
|
71
71
|
before do
|
72
|
-
allow(Doorkeeper.
|
72
|
+
allow(Doorkeeper.config).to receive(:api_only).and_return(true)
|
73
73
|
post :create, params: { client_id: client.uid, response_type: "token", redirect_uri: client.redirect_uri }
|
74
74
|
end
|
75
75
|
|
@@ -127,7 +127,7 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
127
127
|
|
128
128
|
it "includes error description" do
|
129
129
|
expect(response_json_body["error_description"]).to eq(
|
130
|
-
translated_invalid_request_error_message(:missing_param, :client_id)
|
130
|
+
translated_invalid_request_error_message(:missing_param, :client_id),
|
131
131
|
)
|
132
132
|
end
|
133
133
|
|
@@ -177,7 +177,7 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
177
177
|
describe "POST #create in API mode with errors" do
|
178
178
|
context "when missing client_id" do
|
179
179
|
before do
|
180
|
-
allow(Doorkeeper.
|
180
|
+
allow(Doorkeeper.config).to receive(:api_only).and_return(true)
|
181
181
|
|
182
182
|
post :create, params: {
|
183
183
|
client_id: "",
|
@@ -198,7 +198,7 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
198
198
|
|
199
199
|
it "includes error description" do
|
200
200
|
expect(response_json_body["error_description"]).to eq(
|
201
|
-
translated_invalid_request_error_message(:missing_param, :client_id)
|
201
|
+
translated_invalid_request_error_message(:missing_param, :client_id),
|
202
202
|
)
|
203
203
|
end
|
204
204
|
|
@@ -209,7 +209,7 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
209
209
|
|
210
210
|
context "when other error happens" do
|
211
211
|
before do
|
212
|
-
allow(Doorkeeper.
|
212
|
+
allow(Doorkeeper.config).to receive(:api_only).and_return(true)
|
213
213
|
default_scopes_exist :public
|
214
214
|
|
215
215
|
post :create, params: {
|
@@ -251,7 +251,7 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
251
251
|
|
252
252
|
describe "POST #create with application already authorized" do
|
253
253
|
before do
|
254
|
-
allow(Doorkeeper.
|
254
|
+
allow(Doorkeeper.config).to receive(:reuse_access_token).and_return(true)
|
255
255
|
|
256
256
|
access_token.save!
|
257
257
|
|
@@ -286,12 +286,12 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
286
286
|
end
|
287
287
|
|
288
288
|
it "should call :before_successful_authorization callback" do
|
289
|
-
expect(Doorkeeper.
|
289
|
+
expect(Doorkeeper.config)
|
290
290
|
.to receive_message_chain(:before_successful_authorization, :call).with(instance_of(described_class))
|
291
291
|
end
|
292
292
|
|
293
293
|
it "should call :after_successful_authorization callback" do
|
294
|
-
expect(Doorkeeper.
|
294
|
+
expect(Doorkeeper.config)
|
295
295
|
.to receive_message_chain(:after_successful_authorization, :call).with(instance_of(described_class))
|
296
296
|
end
|
297
297
|
end
|
@@ -302,18 +302,18 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
302
302
|
end
|
303
303
|
|
304
304
|
it "should not call :before_successful_authorization callback" do
|
305
|
-
expect(Doorkeeper.
|
305
|
+
expect(Doorkeeper.config).not_to receive(:before_successful_authorization)
|
306
306
|
end
|
307
307
|
|
308
308
|
it "should not call :after_successful_authorization callback" do
|
309
|
-
expect(Doorkeeper.
|
309
|
+
expect(Doorkeeper.config).not_to receive(:after_successful_authorization)
|
310
310
|
end
|
311
311
|
end
|
312
312
|
end
|
313
313
|
|
314
314
|
describe "GET #new token request with native url and skip_authorization true" do
|
315
315
|
before do
|
316
|
-
allow(Doorkeeper.
|
316
|
+
allow(Doorkeeper.config).to receive(:skip_authorization).and_return(proc do
|
317
317
|
true
|
318
318
|
end)
|
319
319
|
|
@@ -342,8 +342,8 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
342
342
|
|
343
343
|
describe "GET #new code request with native url and skip_authorization true" do
|
344
344
|
before do
|
345
|
-
allow(Doorkeeper.
|
346
|
-
allow(Doorkeeper.
|
345
|
+
allow(Doorkeeper.config).to receive(:grant_flows).and_return(%w[authorization_code])
|
346
|
+
allow(Doorkeeper.config).to receive(:skip_authorization).and_return(proc do
|
347
347
|
true
|
348
348
|
end)
|
349
349
|
|
@@ -373,7 +373,7 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
373
373
|
|
374
374
|
describe "GET #new with skip_authorization true" do
|
375
375
|
before do
|
376
|
-
allow(Doorkeeper.
|
376
|
+
allow(Doorkeeper.config).to receive(:skip_authorization).and_return(proc do
|
377
377
|
true
|
378
378
|
end)
|
379
379
|
|
@@ -412,7 +412,7 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
412
412
|
|
413
413
|
describe "GET #new in API mode" do
|
414
414
|
before do
|
415
|
-
allow(Doorkeeper.
|
415
|
+
allow(Doorkeeper.config).to receive(:api_only).and_return(true)
|
416
416
|
|
417
417
|
get :new, params: {
|
418
418
|
client_id: client.uid,
|
@@ -468,7 +468,7 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
468
468
|
expect(redirect_uri.match(/token_type=(\w+)&?/)[1]).to eq "Bearer"
|
469
469
|
expect(redirect_uri.match(/expires_in=(\d+)&?/)[1].to_i).to eq 1234
|
470
470
|
expect(
|
471
|
-
redirect_uri.match(/access_token=([a-zA-Z0-9\-_]+)&?/)[1]
|
471
|
+
redirect_uri.match(/access_token=([a-zA-Z0-9\-_]+)&?/)[1],
|
472
472
|
).to eq Doorkeeper::AccessToken.first.token
|
473
473
|
end
|
474
474
|
|