doorkeeper 5.2.6 → 5.3.3

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.

Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +2 -2
  3. data/CHANGELOG.md +24 -5
  4. data/Gemfile +2 -2
  5. data/app/controllers/doorkeeper/application_controller.rb +2 -2
  6. data/app/controllers/doorkeeper/application_metal_controller.rb +2 -2
  7. data/app/controllers/doorkeeper/authorizations_controller.rb +2 -2
  8. data/app/controllers/doorkeeper/authorized_applications_controller.rb +2 -2
  9. data/gemfiles/rails_5_0.gemfile +2 -2
  10. data/gemfiles/rails_5_1.gemfile +2 -2
  11. data/gemfiles/rails_5_2.gemfile +2 -2
  12. data/gemfiles/rails_6_0.gemfile +2 -2
  13. data/gemfiles/rails_master.gemfile +2 -2
  14. data/lib/doorkeeper/config.rb +71 -38
  15. data/lib/doorkeeper/grape/helpers.rb +1 -1
  16. data/lib/doorkeeper/helpers/controller.rb +10 -8
  17. data/lib/doorkeeper/models/access_grant_mixin.rb +7 -6
  18. data/lib/doorkeeper/models/access_token_mixin.rb +54 -16
  19. data/lib/doorkeeper/models/application_mixin.rb +3 -3
  20. data/lib/doorkeeper/models/concerns/ownership.rb +1 -1
  21. data/lib/doorkeeper/models/concerns/reusable.rb +1 -1
  22. data/lib/doorkeeper/models/concerns/revocable.rb +0 -27
  23. data/lib/doorkeeper/oauth/authorization/code.rb +4 -4
  24. data/lib/doorkeeper/oauth/authorization/token.rb +9 -6
  25. data/lib/doorkeeper/oauth/authorization_code_request.rb +13 -6
  26. data/lib/doorkeeper/oauth/base_request.rb +8 -4
  27. data/lib/doorkeeper/oauth/client.rb +7 -8
  28. data/lib/doorkeeper/oauth/client_credentials/creator.rb +16 -9
  29. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +7 -7
  30. data/lib/doorkeeper/oauth/client_credentials/{validation.rb → validator.rb} +4 -4
  31. data/lib/doorkeeper/oauth/client_credentials_request.rb +1 -1
  32. data/lib/doorkeeper/oauth/code_response.rb +2 -2
  33. data/lib/doorkeeper/oauth/error.rb +1 -1
  34. data/lib/doorkeeper/oauth/error_response.rb +5 -5
  35. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +7 -5
  36. data/lib/doorkeeper/oauth/helpers/unique_token.rb +8 -5
  37. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +1 -1
  38. data/lib/doorkeeper/oauth/invalid_request_response.rb +3 -3
  39. data/lib/doorkeeper/oauth/invalid_token_response.rb +5 -2
  40. data/lib/doorkeeper/oauth/password_access_token_request.rb +3 -3
  41. data/lib/doorkeeper/oauth/pre_authorization.rb +7 -5
  42. data/lib/doorkeeper/oauth/refresh_token_request.rb +5 -5
  43. data/lib/doorkeeper/oauth/token.rb +2 -2
  44. data/lib/doorkeeper/oauth/token_introspection.rb +6 -6
  45. data/lib/doorkeeper/orm/active_record/access_grant.rb +4 -43
  46. data/lib/doorkeeper/orm/active_record/access_token.rb +4 -35
  47. data/lib/doorkeeper/orm/active_record/application.rb +3 -155
  48. data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +53 -0
  49. data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +47 -0
  50. data/lib/doorkeeper/orm/active_record/mixins/application.rb +187 -0
  51. data/lib/doorkeeper/orm/active_record/redirect_uri_validator.rb +3 -3
  52. data/lib/doorkeeper/orm/active_record.rb +3 -3
  53. data/lib/doorkeeper/rails/helpers.rb +4 -4
  54. data/lib/doorkeeper/rails/routes.rb +5 -7
  55. data/lib/doorkeeper/rake/db.rake +3 -3
  56. data/lib/doorkeeper/request/authorization_code.rb +3 -3
  57. data/lib/doorkeeper/request/client_credentials.rb +2 -2
  58. data/lib/doorkeeper/request/password.rb +2 -2
  59. data/lib/doorkeeper/request/refresh_token.rb +3 -3
  60. data/lib/doorkeeper/request.rb +1 -1
  61. data/lib/doorkeeper/server.rb +1 -1
  62. data/lib/doorkeeper/stale_records_cleaner.rb +1 -1
  63. data/lib/doorkeeper/version.rb +2 -2
  64. data/lib/doorkeeper.rb +2 -3
  65. data/lib/generators/doorkeeper/application_owner_generator.rb +1 -1
  66. data/lib/generators/doorkeeper/confidential_applications_generator.rb +1 -1
  67. data/lib/generators/doorkeeper/migration_generator.rb +1 -1
  68. data/lib/generators/doorkeeper/pkce_generator.rb +1 -1
  69. data/lib/generators/doorkeeper/previous_refresh_token_generator.rb +2 -2
  70. data/lib/generators/doorkeeper/templates/initializer.rb +39 -0
  71. data/spec/controllers/application_metal_controller_spec.rb +1 -1
  72. data/spec/controllers/applications_controller_spec.rb +3 -2
  73. data/spec/controllers/authorizations_controller_spec.rb +18 -18
  74. data/spec/controllers/protected_resources_controller_spec.rb +25 -17
  75. data/spec/controllers/token_info_controller_spec.rb +1 -1
  76. data/spec/controllers/tokens_controller_spec.rb +1 -1
  77. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +3 -3
  78. data/spec/dummy/db/migrate/20160320211015_add_previous_refresh_token_to_access_tokens.rb +1 -1
  79. data/spec/dummy/db/migrate/20180210183654_add_confidential_to_applications.rb +1 -1
  80. data/spec/generators/install_generator_spec.rb +1 -1
  81. data/spec/generators/previous_refresh_token_generator_spec.rb +2 -2
  82. data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +1 -1
  83. data/spec/lib/config_spec.rb +62 -7
  84. data/spec/lib/doorkeeper_spec.rb +1 -1
  85. data/spec/lib/models/revocable_spec.rb +3 -3
  86. data/spec/lib/oauth/authorization_code_request_spec.rb +127 -125
  87. data/spec/lib/oauth/base_request_spec.rb +160 -158
  88. data/spec/lib/oauth/base_response_spec.rb +27 -29
  89. data/spec/lib/oauth/client/credentials_spec.rb +1 -1
  90. data/spec/lib/oauth/client_credentials/creator_spec.rb +42 -5
  91. data/spec/lib/oauth/client_credentials/issuer_spec.rb +12 -12
  92. data/spec/lib/oauth/client_credentials/validation_spec.rb +4 -4
  93. data/spec/lib/oauth/client_credentials_integration_spec.rb +16 -18
  94. data/spec/lib/oauth/client_credentials_request_spec.rb +78 -80
  95. data/spec/lib/oauth/client_spec.rb +26 -26
  96. data/spec/lib/oauth/code_request_spec.rb +34 -34
  97. data/spec/lib/oauth/code_response_spec.rb +21 -25
  98. data/spec/lib/oauth/error_response_spec.rb +42 -44
  99. data/spec/lib/oauth/error_spec.rb +12 -14
  100. data/spec/lib/oauth/forbidden_token_response_spec.rb +11 -13
  101. data/spec/lib/oauth/helpers/scope_checker_spec.rb +30 -18
  102. data/spec/lib/oauth/invalid_request_response_spec.rb +48 -50
  103. data/spec/lib/oauth/invalid_token_response_spec.rb +32 -34
  104. data/spec/lib/oauth/password_access_token_request_spec.rb +145 -147
  105. data/spec/lib/oauth/pre_authorization_spec.rb +159 -161
  106. data/spec/lib/oauth/refresh_token_request_spec.rb +138 -139
  107. data/spec/lib/oauth/scopes_spec.rb +104 -106
  108. data/spec/lib/oauth/token_request_spec.rb +115 -111
  109. data/spec/lib/oauth/token_response_spec.rb +71 -73
  110. data/spec/lib/oauth/token_spec.rb +121 -123
  111. data/spec/models/doorkeeper/access_grant_spec.rb +3 -5
  112. data/spec/models/doorkeeper/access_token_spec.rb +7 -7
  113. data/spec/models/doorkeeper/application_spec.rb +2 -2
  114. data/spec/requests/applications/applications_request_spec.rb +1 -1
  115. data/spec/requests/endpoints/authorization_spec.rb +5 -3
  116. data/spec/requests/flows/authorization_code_spec.rb +34 -22
  117. data/spec/requests/flows/client_credentials_spec.rb +1 -1
  118. data/spec/requests/flows/password_spec.rb +32 -12
  119. data/spec/requests/flows/refresh_token_spec.rb +19 -19
  120. data/spec/requests/flows/revoke_token_spec.rb +18 -12
  121. data/spec/spec_helper.rb +1 -4
  122. data/spec/support/shared/controllers_shared_context.rb +33 -23
  123. data/spec/validators/redirect_uri_validator_spec.rb +1 -1
  124. metadata +6 -5
  125. data/spec/support/http_method_shim.rb +0 -29
@@ -2,28 +2,26 @@
2
2
 
3
3
  require "spec_helper"
4
4
 
5
- module Doorkeeper::OAuth
6
- describe ClientCredentialsRequest do
7
- let(:server) { Doorkeeper.configuration }
5
+ describe Doorkeeper::OAuth::ClientCredentialsRequest do
6
+ let(:server) { Doorkeeper.configuration }
8
7
 
9
- context "with a valid request" do
10
- let(:client) { FactoryBot.create :application }
8
+ context "with a valid request" do
9
+ let(:client) { FactoryBot.create :application }
11
10
 
12
- it "issues an access token" do
13
- request = ClientCredentialsRequest.new(server, client, {})
14
- expect do
15
- request.authorize
16
- end.to change { Doorkeeper::AccessToken.count }.by(1)
17
- end
11
+ it "issues an access token" do
12
+ request = Doorkeeper::OAuth::ClientCredentialsRequest.new(server, client, {})
13
+ expect do
14
+ request.authorize
15
+ end.to change { Doorkeeper::AccessToken.count }.by(1)
18
16
  end
17
+ end
19
18
 
20
- describe "with an invalid request" do
21
- it "does not issue an access token" do
22
- request = ClientCredentialsRequest.new(server, nil, {})
23
- expect do
24
- request.authorize
25
- end.to_not(change { Doorkeeper::AccessToken.count })
26
- end
19
+ describe "with an invalid request" do
20
+ it "does not issue an access token" do
21
+ request = Doorkeeper::OAuth::ClientCredentialsRequest.new(server, nil, {})
22
+ expect do
23
+ request.authorize
24
+ end.to_not(change { Doorkeeper::AccessToken.count })
27
25
  end
28
26
  end
29
27
  end
@@ -2,108 +2,106 @@
2
2
 
3
3
  require "spec_helper"
4
4
 
5
- module Doorkeeper::OAuth
6
- describe ClientCredentialsRequest do
7
- let(:server) do
8
- double(
9
- default_scopes: nil,
10
- access_token_expires_in: 2.hours,
11
- custom_access_token_expires_in: ->(_context) { nil }
12
- )
13
- end
5
+ describe Doorkeeper::OAuth::ClientCredentialsRequest do
6
+ let(:server) do
7
+ double(
8
+ default_scopes: nil,
9
+ access_token_expires_in: 2.hours,
10
+ custom_access_token_expires_in: ->(_context) { nil },
11
+ )
12
+ end
14
13
 
15
- let(:application) { FactoryBot.create(:application, scopes: "") }
16
- let(:client) { double :client, application: application }
17
- let(:token_creator) { double :issuer, create: true, token: double }
14
+ let(:application) { FactoryBot.create(:application, scopes: "") }
15
+ let(:client) { double :client, application: application }
16
+ let(:token_creator) { double :issuer, create: true, token: double }
18
17
 
19
- before do
20
- allow(server).to receive(:option_defined?).with(:custom_access_token_expires_in).and_return(true)
21
- end
18
+ before do
19
+ allow(server).to receive(:option_defined?).with(:custom_access_token_expires_in).and_return(true)
20
+ end
21
+
22
+ subject { Doorkeeper::OAuth::ClientCredentialsRequest.new(server, client) }
23
+
24
+ before do
25
+ subject.issuer = token_creator
26
+ end
27
+
28
+ it "issues an access token for the current client" do
29
+ expect(token_creator).to receive(:create).with(client, nil)
30
+ subject.authorize
31
+ end
22
32
 
23
- subject { ClientCredentialsRequest.new(server, client) }
33
+ it "has successful response when issue was created" do
34
+ subject.authorize
35
+ expect(subject.response).to be_a(Doorkeeper::OAuth::TokenResponse)
36
+ end
24
37
 
38
+ context "if issue was not created" do
25
39
  before do
26
- subject.issuer = token_creator
40
+ subject.issuer = double create: false, error: :invalid
27
41
  end
28
42
 
29
- it "issues an access token for the current client" do
30
- expect(token_creator).to receive(:create).with(client, nil)
43
+ it "has an error response" do
31
44
  subject.authorize
45
+ expect(subject.response).to be_a(Doorkeeper::OAuth::ErrorResponse)
32
46
  end
33
47
 
34
- it "has successful response when issue was created" do
48
+ it "delegates the error to issuer" do
35
49
  subject.authorize
36
- expect(subject.response).to be_a(TokenResponse)
50
+ expect(subject.error).to eq(:invalid)
37
51
  end
52
+ end
38
53
 
39
- context "if issue was not created" do
40
- before do
41
- subject.issuer = double create: false, error: :invalid
42
- end
54
+ context "with scopes" do
55
+ let(:default_scopes) { Doorkeeper::OAuth::Scopes.from_string("public email") }
43
56
 
44
- it "has an error response" do
45
- subject.authorize
46
- expect(subject.response).to be_a(Doorkeeper::OAuth::ErrorResponse)
47
- end
57
+ before do
58
+ allow(server).to receive(:default_scopes).and_return(default_scopes)
59
+ end
48
60
 
49
- it "delegates the error to issuer" do
50
- subject.authorize
51
- expect(subject.error).to eq(:invalid)
52
- end
61
+ it "issues an access token with default scopes if none was requested" do
62
+ expect(token_creator).to receive(:create).with(client, default_scopes)
63
+ subject.authorize
53
64
  end
54
65
 
55
- context "with scopes" do
56
- let(:default_scopes) { Doorkeeper::OAuth::Scopes.from_string("public email") }
66
+ it "issues an access token with requested scopes" do
67
+ subject = Doorkeeper::OAuth::ClientCredentialsRequest.new(server, client, scope: "email")
68
+ subject.issuer = token_creator
69
+ expect(token_creator).to receive(:create).with(client, Doorkeeper::OAuth::Scopes.from_string("email"))
70
+ subject.authorize
71
+ end
72
+ end
57
73
 
58
- before do
59
- allow(server).to receive(:default_scopes).and_return(default_scopes)
60
- end
74
+ context "with restricted client" do
75
+ let(:default_scopes) do
76
+ Doorkeeper::OAuth::Scopes.from_string("public email")
77
+ end
78
+ let(:server_scopes) do
79
+ Doorkeeper::OAuth::Scopes.from_string("public email phone")
80
+ end
81
+ let(:client_scopes) do
82
+ Doorkeeper::OAuth::Scopes.from_string("public phone")
83
+ end
61
84
 
62
- it "issues an access token with default scopes if none was requested" do
63
- expect(token_creator).to receive(:create).with(client, default_scopes)
64
- subject.authorize
65
- end
85
+ before do
86
+ allow(server).to receive(:default_scopes).and_return(default_scopes)
87
+ allow(server).to receive(:scopes).and_return(server_scopes)
88
+ allow(server).to receive(:access_token_expires_in).and_return(100)
89
+ allow(application).to receive(:scopes).and_return(client_scopes)
90
+ allow(client).to receive(:id).and_return(nil)
91
+ end
66
92
 
67
- it "issues an access token with requested scopes" do
68
- subject = ClientCredentialsRequest.new(server, client, scope: "email")
69
- subject.issuer = token_creator
70
- expect(token_creator).to receive(:create).with(client, Doorkeeper::OAuth::Scopes.from_string("email"))
71
- subject.authorize
72
- end
93
+ it "delegates the error to issuer if no scope was requested" do
94
+ subject = Doorkeeper::OAuth::ClientCredentialsRequest.new(server, client)
95
+ subject.authorize
96
+ expect(subject.response).to be_a(Doorkeeper::OAuth::ErrorResponse)
97
+ expect(subject.error).to eq(:invalid_scope)
73
98
  end
74
99
 
75
- context "with restricted client" do
76
- let(:default_scopes) do
77
- Doorkeeper::OAuth::Scopes.from_string("public email")
78
- end
79
- let(:server_scopes) do
80
- Doorkeeper::OAuth::Scopes.from_string("public email phone")
81
- end
82
- let(:client_scopes) do
83
- Doorkeeper::OAuth::Scopes.from_string("public phone")
84
- end
85
-
86
- before do
87
- allow(server).to receive(:default_scopes).and_return(default_scopes)
88
- allow(server).to receive(:scopes).and_return(server_scopes)
89
- allow(server).to receive(:access_token_expires_in).and_return(100)
90
- allow(application).to receive(:scopes).and_return(client_scopes)
91
- allow(client).to receive(:id).and_return(nil)
92
- end
93
-
94
- it "delegates the error to issuer if no scope was requested" do
95
- subject = ClientCredentialsRequest.new(server, client)
96
- subject.authorize
97
- expect(subject.response).to be_a(Doorkeeper::OAuth::ErrorResponse)
98
- expect(subject.error).to eq(:invalid_scope)
99
- end
100
-
101
- it "issues an access token with requested scopes" do
102
- subject = ClientCredentialsRequest.new(server, client, scope: "phone")
103
- subject.authorize
104
- expect(subject.response).to be_a(Doorkeeper::OAuth::TokenResponse)
105
- expect(subject.response.token.scopes_string).to eq("phone")
106
- end
100
+ it "issues an access token with requested scopes" do
101
+ subject = Doorkeeper::OAuth::ClientCredentialsRequest.new(server, client, scope: "phone")
102
+ subject.authorize
103
+ expect(subject.response).to be_a(Doorkeeper::OAuth::TokenResponse)
104
+ expect(subject.response.token.scopes_string).to eq("phone")
107
105
  end
108
106
  end
109
107
  end
@@ -2,37 +2,37 @@
2
2
 
3
3
  require "spec_helper"
4
4
 
5
- module Doorkeeper::OAuth
6
- describe Client do
7
- describe :find do
8
- let(:method) { double }
5
+ describe Doorkeeper::OAuth::Client do
6
+ describe :find do
7
+ let(:method) { double }
9
8
 
10
- it "finds the client via uid" do
11
- client = double
12
- expect(method).to receive(:call).with("uid").and_return(client)
13
- expect(Client.find("uid", method)).to be_a(Client)
14
- end
9
+ it "finds the client via uid" do
10
+ client = double
11
+ expect(method).to receive(:call).with("uid").and_return(client)
12
+ expect(Doorkeeper::OAuth::Client.find("uid", method))
13
+ .to be_a(Doorkeeper::OAuth::Client)
14
+ end
15
15
 
16
- it "returns nil if client was not found" do
17
- expect(method).to receive(:call).with("uid").and_return(nil)
18
- expect(Client.find("uid", method)).to be_nil
19
- end
16
+ it "returns nil if client was not found" do
17
+ expect(method).to receive(:call).with("uid").and_return(nil)
18
+ expect(Doorkeeper::OAuth::Client.find("uid", method)).to be_nil
20
19
  end
20
+ end
21
21
 
22
- describe :authenticate do
23
- it "returns the authenticated client via credentials" do
24
- credentials = Client::Credentials.new("some-uid", "some-secret")
25
- authenticator = double
26
- expect(authenticator).to receive(:call).with("some-uid", "some-secret").and_return(double)
27
- expect(Client.authenticate(credentials, authenticator)).to be_a(Client)
28
- end
22
+ describe ".authenticate" do
23
+ it "returns the authenticated client via credentials" do
24
+ credentials = Doorkeeper::OAuth::Client::Credentials.new("some-uid", "some-secret")
25
+ authenticator = double
26
+ expect(authenticator).to receive(:call).with("some-uid", "some-secret").and_return(double)
27
+ expect(Doorkeeper::OAuth::Client.authenticate(credentials, authenticator))
28
+ .to be_a(Doorkeeper::OAuth::Client)
29
+ end
29
30
 
30
- it "returns nil if client was not authenticated" do
31
- credentials = Client::Credentials.new("some-uid", "some-secret")
32
- authenticator = double
33
- expect(authenticator).to receive(:call).with("some-uid", "some-secret").and_return(nil)
34
- expect(Client.authenticate(credentials, authenticator)).to be_nil
35
- end
31
+ it "returns nil if client was not authenticated" do
32
+ credentials = Doorkeeper::OAuth::Client::Credentials.new("some-uid", "some-secret")
33
+ authenticator = double
34
+ expect(authenticator).to receive(:call).with("some-uid", "some-secret").and_return(nil)
35
+ expect(Doorkeeper::OAuth::Client.authenticate(credentials, authenticator)).to be_nil
36
36
  end
37
37
  end
38
38
  end
@@ -2,45 +2,45 @@
2
2
 
3
3
  require "spec_helper"
4
4
 
5
- module Doorkeeper::OAuth
6
- describe CodeRequest do
7
- let :pre_auth do
8
- server = Doorkeeper.configuration
9
- allow(server).to receive(:default_scopes).and_return(Scopes.from_string("public"))
10
- allow(server).to receive(:grant_flows).and_return(Scopes.from_string("authorization_code"))
11
-
12
- application = FactoryBot.create(:application, scopes: "public")
13
- client = Doorkeeper::OAuth::Client.new(application)
14
-
15
- attributes = {
16
- client_id: client.uid,
17
- response_type: "code",
18
- redirect_uri: "https://app.com/callback",
19
- }
20
-
21
- pre_auth = PreAuthorization.new(server, attributes)
22
- pre_auth.authorizable?
23
- pre_auth
24
- end
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
- let(:owner) { double :owner, id: 8900 }
27
+ let(:owner) { double :owner, id: 8900 }
27
28
 
28
- subject do
29
- CodeRequest.new(pre_auth, owner)
30
- end
29
+ subject do
30
+ described_class.new(pre_auth, owner)
31
+ end
31
32
 
32
- context "when pre_auth is authorized" do
33
- it "creates an access grant and returns a code response" do
34
- expect { subject.authorize }.to change { Doorkeeper::AccessGrant.count }.by(1)
35
- expect(subject.authorize).to be_a(CodeResponse)
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
- context "when pre_auth is denied" do
40
- it "does not create access grant and returns a error response" do
41
- expect { subject.deny }.not_to(change { Doorkeeper::AccessGrant.count })
42
- expect(subject.deny).to be_a(ErrorResponse)
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
- module Doorkeeper
6
- module OAuth
7
- describe CodeResponse do
8
- describe ".redirect_uri" do
9
- context "when generating the redirect URI for an implicit grant" do
10
- let :pre_auth do
11
- double(
12
- :pre_auth,
13
- client: double(:application, id: 1),
14
- redirect_uri: "http://tst.com/cb",
15
- state: nil,
16
- scopes: Scopes.from_string("public")
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
- let :auth do
21
- Authorization::Token.new(pre_auth, double(id: 1)).tap do |c|
22
- c.issue_token
23
- allow(c.token).to receive(:expires_in_seconds).and_return(3600)
24
- end
25
- end
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
- subject { CodeResponse.new(pre_auth, auth, response_on_fragment: true).redirect_uri }
25
+ subject { described_class.new(pre_auth, auth, response_on_fragment: true).redirect_uri }
28
26
 
29
- it "includes the remaining TTL of the token relative to the time the token was generated" do
30
- expect(subject).to include("expires_in=3600")
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
- module Doorkeeper::OAuth
6
- describe ErrorResponse do
7
- describe "#status" do
8
- it "should have a status of bad_request" do
9
- expect(subject.status).to eq(:bad_request)
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
- it "should have a status of unauthorized for an invalid_client error" do
13
- subject = described_class.new(name: :invalid_client)
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
- expect(subject.status).to eq(:unauthorized)
16
- end
14
+ expect(subject.status).to eq(:unauthorized)
17
15
  end
16
+ end
18
17
 
19
- describe :from_request do
20
- it "has the error from request" do
21
- error = ErrorResponse.from_request double(error: :some_error)
22
- expect(error.name).to eq(:some_error)
23
- end
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
- it "has state if request responds to state" do
31
- error = ErrorResponse.from_request double(error: :some_error, state: :hello)
32
- expect(error.state).to eq(:hello)
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 "ignores empty error values" do
37
- subject = ErrorResponse.new(error: :some_error, state: nil)
38
- expect(subject.body).not_to have_key(:state)
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
- describe ".body" do
42
- subject { ErrorResponse.new(name: :some_error, state: :some_state).body }
40
+ describe ".body" do
41
+ subject { described_class.new(name: :some_error, state: :some_state).body }
43
42
 
44
- describe "#body" do
45
- it { expect(subject).to have_key(:error) }
46
- it { expect(subject).to have_key(:error_description) }
47
- it { expect(subject).to have_key(:state) }
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
- describe ".headers" do
52
- let(:error_response) { ErrorResponse.new(name: :some_error, state: :some_state) }
53
- subject { error_response.headers }
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
- it { expect(subject).to include "WWW-Authenticate" }
54
+ it { expect(subject).to include "WWW-Authenticate" }
56
55
 
57
- describe "WWW-Authenticate header" do
58
- subject { error_response.headers["WWW-Authenticate"] }
56
+ describe "WWW-Authenticate header" do
57
+ subject { error_response.headers["WWW-Authenticate"] }
59
58
 
60
- it { expect(subject).to include("realm=\"#{error_response.realm}\"") }
61
- it { expect(subject).to include("error=\"#{error_response.name}\"") }
62
- it { expect(subject).to include("error_description=\"#{error_response.description}\"") }
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
- module Doorkeeper::OAuth
6
- describe Error do
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
- it { expect(subject).to respond_to(:name) }
10
- it { expect(subject).to respond_to(:state) }
8
+ it { expect(subject).to respond_to(:name) }
9
+ it { expect(subject).to respond_to(:state) }
11
10
 
12
- describe :description do
13
- it "is translated from translation messages" do
14
- expect(I18n).to receive(:translate).with(
15
- :some_error,
16
- scope: %i[doorkeeper errors messages],
17
- default: :server_error
18
- )
19
- error.description
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
- module Doorkeeper::OAuth
6
- describe ForbiddenTokenResponse do
7
- describe "#name" do
8
- it { expect(subject.name).to eq(:invalid_scope) }
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
- describe "#status" do
12
- it { expect(subject.status).to eq(:forbidden) }
13
- end
10
+ describe "#status" do
11
+ it { expect(subject.status).to eq(:forbidden) }
12
+ end
14
13
 
15
- describe :from_scopes do
16
- it "should have a list of acceptable scopes" do
17
- response = ForbiddenTokenResponse.from_scopes(["public"])
18
- expect(response.description).to include("public")
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