doorkeeper 5.2.6 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -2,45 +2,45 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
5
|
+
describe Doorkeeper::OAuth::CodeRequest do
|
6
|
+
let(:pre_auth) do
|
7
|
+
server = Doorkeeper.configuration
|
8
|
+
allow(server)
|
9
|
+
.to receive(:default_scopes).and_return(Doorkeeper::OAuth::Scopes.from_string("public"))
|
10
|
+
allow(server)
|
11
|
+
.to receive(:grant_flows).and_return(Doorkeeper::OAuth::Scopes.from_string("authorization_code"))
|
12
|
+
|
13
|
+
application = FactoryBot.create(:application, scopes: "public")
|
14
|
+
client = Doorkeeper::OAuth::Client.new(application)
|
15
|
+
|
16
|
+
attributes = {
|
17
|
+
client_id: client.uid,
|
18
|
+
response_type: "code",
|
19
|
+
redirect_uri: "https://app.com/callback",
|
20
|
+
}
|
21
|
+
|
22
|
+
pre_auth = Doorkeeper::OAuth::PreAuthorization.new(server, attributes)
|
23
|
+
pre_auth.authorizable?
|
24
|
+
pre_auth
|
25
|
+
end
|
25
26
|
|
26
|
-
|
27
|
+
let(:owner) { double :owner, id: 8900 }
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
subject do
|
30
|
+
described_class.new(pre_auth, owner)
|
31
|
+
end
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
33
|
+
context "when pre_auth is authorized" do
|
34
|
+
it "creates an access grant and returns a code response" do
|
35
|
+
expect { subject.authorize }.to change { Doorkeeper::AccessGrant.count }.by(1)
|
36
|
+
expect(subject.authorize).to be_a(Doorkeeper::OAuth::CodeResponse)
|
37
37
|
end
|
38
|
+
end
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
end
|
40
|
+
context "when pre_auth is denied" do
|
41
|
+
it "does not create access grant and returns a error response" do
|
42
|
+
expect { subject.deny }.not_to(change { Doorkeeper::AccessGrant.count })
|
43
|
+
expect(subject.deny).to be_a(Doorkeeper::OAuth::ErrorResponse)
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -2,34 +2,30 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
)
|
18
|
-
end
|
5
|
+
describe Doorkeeper::OAuth::CodeResponse do
|
6
|
+
describe "#redirect_uri" do
|
7
|
+
context "when generating the redirect URI for an implicit grant" do
|
8
|
+
let :pre_auth do
|
9
|
+
double(
|
10
|
+
:pre_auth,
|
11
|
+
client: double(:application, id: 1),
|
12
|
+
redirect_uri: "http://tst.com/cb",
|
13
|
+
state: nil,
|
14
|
+
scopes: Doorkeeper::OAuth::Scopes.from_string("public"),
|
15
|
+
)
|
16
|
+
end
|
19
17
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
18
|
+
let :auth do
|
19
|
+
Doorkeeper::OAuth::Authorization::Token.new(pre_auth, double(id: 1)).tap do |c|
|
20
|
+
c.issue_token
|
21
|
+
allow(c.token).to receive(:expires_in_seconds).and_return(3600)
|
22
|
+
end
|
23
|
+
end
|
26
24
|
|
27
|
-
|
25
|
+
subject { described_class.new(pre_auth, auth, response_on_fragment: true).redirect_uri }
|
28
26
|
|
29
|
-
|
30
|
-
|
31
|
-
end
|
32
|
-
end
|
27
|
+
it "includes the remaining TTL of the token relative to the time the token was generated" do
|
28
|
+
expect(subject).to include("expires_in=3600")
|
33
29
|
end
|
34
30
|
end
|
35
31
|
end
|
@@ -2,65 +2,63 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
-
|
6
|
-
describe
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
5
|
+
describe Doorkeeper::OAuth::ErrorResponse do
|
6
|
+
describe "#status" do
|
7
|
+
it "should have a status of bad_request" do
|
8
|
+
expect(subject.status).to eq(:bad_request)
|
9
|
+
end
|
11
10
|
|
12
|
-
|
13
|
-
|
11
|
+
it "should have a status of unauthorized for an invalid_client error" do
|
12
|
+
subject = described_class.new(name: :invalid_client)
|
14
13
|
|
15
|
-
|
16
|
-
end
|
14
|
+
expect(subject.status).to eq(:unauthorized)
|
17
15
|
end
|
16
|
+
end
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
it "ignores state if request does not respond to state" do
|
26
|
-
error = ErrorResponse.from_request double(error: :some_error)
|
27
|
-
expect(error.state).to be_nil
|
28
|
-
end
|
18
|
+
describe ".from_request" do
|
19
|
+
it "has the error from request" do
|
20
|
+
error = described_class.from_request double(error: :some_error)
|
21
|
+
expect(error.name).to eq(:some_error)
|
22
|
+
end
|
29
23
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
24
|
+
it "ignores state if request does not respond to state" do
|
25
|
+
error = described_class.from_request double(error: :some_error)
|
26
|
+
expect(error.state).to be_nil
|
34
27
|
end
|
35
28
|
|
36
|
-
it "
|
37
|
-
|
38
|
-
expect(
|
29
|
+
it "has state if request responds to state" do
|
30
|
+
error = described_class.from_request double(error: :some_error, state: :hello)
|
31
|
+
expect(error.state).to eq(:hello)
|
39
32
|
end
|
33
|
+
end
|
34
|
+
|
35
|
+
it "ignores empty error values" do
|
36
|
+
subject = described_class.new(error: :some_error, state: nil)
|
37
|
+
expect(subject.body).not_to have_key(:state)
|
38
|
+
end
|
40
39
|
|
41
|
-
|
42
|
-
|
40
|
+
describe ".body" do
|
41
|
+
subject { described_class.new(name: :some_error, state: :some_state).body }
|
43
42
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
43
|
+
describe "#body" do
|
44
|
+
it { expect(subject).to have_key(:error) }
|
45
|
+
it { expect(subject).to have_key(:error_description) }
|
46
|
+
it { expect(subject).to have_key(:state) }
|
49
47
|
end
|
48
|
+
end
|
50
49
|
|
51
|
-
|
52
|
-
|
53
|
-
|
50
|
+
describe ".headers" do
|
51
|
+
let(:error_response) { described_class.new(name: :some_error, state: :some_state) }
|
52
|
+
subject { error_response.headers }
|
54
53
|
|
55
|
-
|
54
|
+
it { expect(subject).to include "WWW-Authenticate" }
|
56
55
|
|
57
|
-
|
58
|
-
|
56
|
+
describe "WWW-Authenticate header" do
|
57
|
+
subject { error_response.headers["WWW-Authenticate"] }
|
59
58
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
59
|
+
it { expect(subject).to include("realm=\"#{error_response.realm}\"") }
|
60
|
+
it { expect(subject).to include("error=\"#{error_response.name}\"") }
|
61
|
+
it { expect(subject).to include("error_description=\"#{error_response.description}\"") }
|
64
62
|
end
|
65
63
|
end
|
66
64
|
end
|
@@ -2,22 +2,20 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
subject(:error) { Error.new(:some_error, :some_state) }
|
5
|
+
describe Doorkeeper::OAuth::Error do
|
6
|
+
subject(:error) { described_class.new(:some_error, :some_state) }
|
8
7
|
|
9
|
-
|
10
|
-
|
8
|
+
it { expect(subject).to respond_to(:name) }
|
9
|
+
it { expect(subject).to respond_to(:state) }
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
11
|
+
describe "#description" do
|
12
|
+
it "is translated from translation messages" do
|
13
|
+
expect(I18n).to receive(:translate).with(
|
14
|
+
:some_error,
|
15
|
+
scope: %i[doorkeeper errors messages],
|
16
|
+
default: :server_error,
|
17
|
+
)
|
18
|
+
error.description
|
21
19
|
end
|
22
20
|
end
|
23
21
|
end
|
@@ -2,21 +2,19 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
-
|
6
|
-
describe
|
7
|
-
|
8
|
-
|
9
|
-
end
|
5
|
+
describe Doorkeeper::OAuth::ForbiddenTokenResponse do
|
6
|
+
describe "#name" do
|
7
|
+
it { expect(subject.name).to eq(:invalid_scope) }
|
8
|
+
end
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
describe "#status" do
|
11
|
+
it { expect(subject.status).to eq(:forbidden) }
|
12
|
+
end
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
14
|
+
describe ".from_scopes" do
|
15
|
+
it "should have a list of acceptable scopes" do
|
16
|
+
response = described_class.from_scopes(["public"])
|
17
|
+
expect(response.description).to include("public")
|
20
18
|
end
|
21
19
|
end
|
22
20
|
end
|
@@ -44,15 +44,19 @@ module Doorkeeper::OAuth::Helpers
|
|
44
44
|
end
|
45
45
|
|
46
46
|
it "is valid if scope is included in the application scope list" do
|
47
|
-
expect(ScopeChecker.valid?(
|
48
|
-
|
49
|
-
|
47
|
+
expect(ScopeChecker.valid?(
|
48
|
+
scope_str: "app123",
|
49
|
+
server_scopes: server_scopes,
|
50
|
+
app_scopes: application_scopes,
|
51
|
+
)).to be_truthy
|
50
52
|
end
|
51
53
|
|
52
54
|
it "is invalid if any scope is not included in the application" do
|
53
|
-
expect(ScopeChecker.valid?(
|
54
|
-
|
55
|
-
|
55
|
+
expect(ScopeChecker.valid?(
|
56
|
+
scope_str: "svr",
|
57
|
+
server_scopes: server_scopes,
|
58
|
+
app_scopes: application_scopes,
|
59
|
+
)).to be_falsey
|
56
60
|
end
|
57
61
|
end
|
58
62
|
|
@@ -63,15 +67,19 @@ module Doorkeeper::OAuth::Helpers
|
|
63
67
|
|
64
68
|
context "with scopes_by_grant_type not configured for grant_type" do
|
65
69
|
it "is valid if the scope is in server scopes" do
|
66
|
-
expect(ScopeChecker.valid?(
|
67
|
-
|
68
|
-
|
70
|
+
expect(ScopeChecker.valid?(
|
71
|
+
scope_str: "scope1",
|
72
|
+
server_scopes: server_scopes,
|
73
|
+
grant_type: Doorkeeper::OAuth::PASSWORD,
|
74
|
+
)).to be_truthy
|
69
75
|
end
|
70
76
|
|
71
77
|
it "is invalid if the scope is not in server scopes" do
|
72
|
-
expect(ScopeChecker.valid?(
|
73
|
-
|
74
|
-
|
78
|
+
expect(ScopeChecker.valid?(
|
79
|
+
scope_str: "unknown",
|
80
|
+
server_scopes: server_scopes,
|
81
|
+
grant_type: Doorkeeper::OAuth::PASSWORD,
|
82
|
+
)).to be_falsey
|
75
83
|
end
|
76
84
|
end
|
77
85
|
|
@@ -82,15 +90,19 @@ module Doorkeeper::OAuth::Helpers
|
|
82
90
|
end
|
83
91
|
|
84
92
|
it "is valid if the scope is permitted for grant_type" do
|
85
|
-
expect(ScopeChecker.valid?(
|
86
|
-
|
87
|
-
|
93
|
+
expect(ScopeChecker.valid?(
|
94
|
+
scope_str: "scope1",
|
95
|
+
server_scopes: server_scopes,
|
96
|
+
grant_type: Doorkeeper::OAuth::PASSWORD,
|
97
|
+
)).to be_truthy
|
88
98
|
end
|
89
99
|
|
90
100
|
it "is invalid if the scope is permitted for grant_type" do
|
91
|
-
expect(ScopeChecker.valid?(
|
92
|
-
|
93
|
-
|
101
|
+
expect(ScopeChecker.valid?(
|
102
|
+
scope_str: "scope2",
|
103
|
+
server_scopes: server_scopes,
|
104
|
+
grant_type: Doorkeeper::OAuth::PASSWORD,
|
105
|
+
)).to be_falsey
|
94
106
|
end
|
95
107
|
end
|
96
108
|
end
|
@@ -2,73 +2,71 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
-
|
6
|
-
describe
|
7
|
-
|
8
|
-
|
9
|
-
end
|
5
|
+
describe Doorkeeper::OAuth::InvalidRequestResponse do
|
6
|
+
describe "#name" do
|
7
|
+
it { expect(subject.name).to eq(:invalid_request) }
|
8
|
+
end
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
describe "#status" do
|
11
|
+
it { expect(subject.status).to eq(:bad_request) }
|
12
|
+
end
|
14
13
|
|
15
|
-
|
16
|
-
|
14
|
+
describe ".from_request" do
|
15
|
+
let(:response) { described_class.from_request(request) }
|
17
16
|
|
18
|
-
|
19
|
-
|
17
|
+
context "missing param" do
|
18
|
+
let(:request) { double(missing_param: "some_param") }
|
20
19
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
20
|
+
it "sets a description" do
|
21
|
+
expect(response.description).to eq(
|
22
|
+
I18n.t(:missing_param, scope: %i[doorkeeper errors messages invalid_request], value: "some_param"),
|
23
|
+
)
|
24
|
+
end
|
26
25
|
|
27
|
-
|
28
|
-
|
29
|
-
end
|
26
|
+
it "sets the reason" do
|
27
|
+
expect(response.reason).to eq(:missing_param)
|
30
28
|
end
|
29
|
+
end
|
31
30
|
|
32
|
-
|
33
|
-
|
31
|
+
context "server doesn't support_pkce" do
|
32
|
+
let(:request) { double(invalid_request_reason: :not_support_pkce) }
|
34
33
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
34
|
+
it "sets a description" do
|
35
|
+
expect(response.description).to eq(
|
36
|
+
I18n.t(:not_support_pkce, scope: %i[doorkeeper errors messages invalid_request]),
|
37
|
+
)
|
38
|
+
end
|
40
39
|
|
41
|
-
|
42
|
-
|
43
|
-
end
|
40
|
+
it "sets the reason" do
|
41
|
+
expect(response.reason).to eq(:not_support_pkce)
|
44
42
|
end
|
43
|
+
end
|
45
44
|
|
46
|
-
|
47
|
-
|
45
|
+
context "request is not authorized" do
|
46
|
+
let(:request) { double(invalid_request_reason: :request_not_authorized) }
|
48
47
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
48
|
+
it "sets a description" do
|
49
|
+
expect(response.description).to eq(
|
50
|
+
I18n.t(:request_not_authorized, scope: %i[doorkeeper errors messages invalid_request]),
|
51
|
+
)
|
52
|
+
end
|
54
53
|
|
55
|
-
|
56
|
-
|
57
|
-
end
|
54
|
+
it "sets the reason" do
|
55
|
+
expect(response.reason).to eq(:request_not_authorized)
|
58
56
|
end
|
57
|
+
end
|
59
58
|
|
60
|
-
|
61
|
-
|
59
|
+
context "unknown reason" do
|
60
|
+
let(:request) { double(invalid_request_reason: :unknown_reason) }
|
62
61
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
62
|
+
it "sets a description" do
|
63
|
+
expect(response.description).to eq(
|
64
|
+
I18n.t(:unknown, scope: %i[doorkeeper errors messages invalid_request]),
|
65
|
+
)
|
66
|
+
end
|
68
67
|
|
69
|
-
|
70
|
-
|
71
|
-
end
|
68
|
+
it "unknown reason" do
|
69
|
+
expect(response.reason).to eq(:unknown_reason)
|
72
70
|
end
|
73
71
|
end
|
74
72
|
end
|