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.

Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +2 -2
  3. data/CHANGELOG.md +15 -14
  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/applications_controller.rb +3 -3
  8. data/app/controllers/doorkeeper/authorizations_controller.rb +2 -2
  9. data/app/controllers/doorkeeper/authorized_applications_controller.rb +3 -3
  10. data/gemfiles/rails_5_0.gemfile +2 -2
  11. data/gemfiles/rails_5_1.gemfile +2 -2
  12. data/gemfiles/rails_5_2.gemfile +2 -2
  13. data/gemfiles/rails_6_0.gemfile +2 -2
  14. data/gemfiles/rails_master.gemfile +2 -2
  15. data/lib/doorkeeper.rb +2 -3
  16. data/lib/doorkeeper/config.rb +71 -39
  17. data/lib/doorkeeper/grape/helpers.rb +1 -1
  18. data/lib/doorkeeper/helpers/controller.rb +10 -8
  19. data/lib/doorkeeper/models/access_grant_mixin.rb +7 -6
  20. data/lib/doorkeeper/models/access_token_mixin.rb +55 -18
  21. data/lib/doorkeeper/models/application_mixin.rb +3 -3
  22. data/lib/doorkeeper/models/concerns/ownership.rb +1 -1
  23. data/lib/doorkeeper/models/concerns/reusable.rb +1 -1
  24. data/lib/doorkeeper/models/concerns/revocable.rb +0 -27
  25. data/lib/doorkeeper/oauth/authorization/code.rb +4 -4
  26. data/lib/doorkeeper/oauth/authorization/token.rb +9 -6
  27. data/lib/doorkeeper/oauth/authorization_code_request.rb +13 -6
  28. data/lib/doorkeeper/oauth/base_request.rb +8 -4
  29. data/lib/doorkeeper/oauth/client.rb +7 -8
  30. data/lib/doorkeeper/oauth/client_credentials/creator.rb +16 -9
  31. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +7 -7
  32. data/lib/doorkeeper/oauth/client_credentials/{validation.rb → validator.rb} +4 -4
  33. data/lib/doorkeeper/oauth/client_credentials_request.rb +1 -1
  34. data/lib/doorkeeper/oauth/code_response.rb +2 -2
  35. data/lib/doorkeeper/oauth/error.rb +1 -1
  36. data/lib/doorkeeper/oauth/error_response.rb +5 -5
  37. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +7 -5
  38. data/lib/doorkeeper/oauth/helpers/unique_token.rb +8 -5
  39. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +1 -1
  40. data/lib/doorkeeper/oauth/invalid_request_response.rb +3 -3
  41. data/lib/doorkeeper/oauth/invalid_token_response.rb +5 -2
  42. data/lib/doorkeeper/oauth/password_access_token_request.rb +3 -3
  43. data/lib/doorkeeper/oauth/pre_authorization.rb +7 -5
  44. data/lib/doorkeeper/oauth/refresh_token_request.rb +5 -5
  45. data/lib/doorkeeper/oauth/token.rb +2 -2
  46. data/lib/doorkeeper/oauth/token_introspection.rb +6 -6
  47. data/lib/doorkeeper/orm/active_record.rb +3 -3
  48. data/lib/doorkeeper/orm/active_record/access_grant.rb +4 -43
  49. data/lib/doorkeeper/orm/active_record/access_token.rb +4 -35
  50. data/lib/doorkeeper/orm/active_record/application.rb +3 -155
  51. data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +53 -0
  52. data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +47 -0
  53. data/lib/doorkeeper/orm/active_record/mixins/application.rb +128 -0
  54. data/lib/doorkeeper/orm/active_record/redirect_uri_validator.rb +3 -3
  55. data/lib/doorkeeper/rails/helpers.rb +4 -4
  56. data/lib/doorkeeper/rails/routes.rb +5 -7
  57. data/lib/doorkeeper/rake/db.rake +3 -3
  58. data/lib/doorkeeper/request.rb +1 -1
  59. data/lib/doorkeeper/request/authorization_code.rb +3 -3
  60. data/lib/doorkeeper/request/client_credentials.rb +2 -2
  61. data/lib/doorkeeper/request/password.rb +2 -2
  62. data/lib/doorkeeper/request/refresh_token.rb +3 -3
  63. data/lib/doorkeeper/server.rb +1 -1
  64. data/lib/doorkeeper/stale_records_cleaner.rb +1 -1
  65. data/lib/doorkeeper/version.rb +2 -2
  66. data/lib/generators/doorkeeper/application_owner_generator.rb +1 -1
  67. data/lib/generators/doorkeeper/confidential_applications_generator.rb +1 -1
  68. data/lib/generators/doorkeeper/migration_generator.rb +1 -1
  69. data/lib/generators/doorkeeper/pkce_generator.rb +1 -1
  70. data/lib/generators/doorkeeper/previous_refresh_token_generator.rb +2 -2
  71. data/lib/generators/doorkeeper/templates/initializer.rb +39 -8
  72. data/spec/controllers/application_metal_controller_spec.rb +1 -1
  73. data/spec/controllers/applications_controller_spec.rb +3 -2
  74. data/spec/controllers/authorizations_controller_spec.rb +18 -18
  75. data/spec/controllers/protected_resources_controller_spec.rb +25 -17
  76. data/spec/controllers/token_info_controller_spec.rb +1 -1
  77. data/spec/controllers/tokens_controller_spec.rb +1 -1
  78. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +3 -3
  79. data/spec/dummy/db/migrate/20160320211015_add_previous_refresh_token_to_access_tokens.rb +1 -1
  80. data/spec/dummy/db/migrate/20180210183654_add_confidential_to_applications.rb +1 -1
  81. data/spec/generators/install_generator_spec.rb +1 -1
  82. data/spec/generators/previous_refresh_token_generator_spec.rb +2 -2
  83. data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +1 -1
  84. data/spec/lib/config_spec.rb +61 -21
  85. data/spec/lib/doorkeeper_spec.rb +1 -1
  86. data/spec/lib/models/revocable_spec.rb +3 -3
  87. data/spec/lib/oauth/authorization_code_request_spec.rb +127 -125
  88. data/spec/lib/oauth/base_request_spec.rb +160 -158
  89. data/spec/lib/oauth/base_response_spec.rb +27 -29
  90. data/spec/lib/oauth/client/credentials_spec.rb +1 -1
  91. data/spec/lib/oauth/client_credentials/creator_spec.rb +42 -5
  92. data/spec/lib/oauth/client_credentials/issuer_spec.rb +12 -12
  93. data/spec/lib/oauth/client_credentials/validation_spec.rb +4 -4
  94. data/spec/lib/oauth/client_credentials_integration_spec.rb +16 -18
  95. data/spec/lib/oauth/client_credentials_request_spec.rb +78 -80
  96. data/spec/lib/oauth/client_spec.rb +26 -26
  97. data/spec/lib/oauth/code_request_spec.rb +34 -34
  98. data/spec/lib/oauth/code_response_spec.rb +21 -25
  99. data/spec/lib/oauth/error_response_spec.rb +42 -44
  100. data/spec/lib/oauth/error_spec.rb +12 -14
  101. data/spec/lib/oauth/forbidden_token_response_spec.rb +11 -13
  102. data/spec/lib/oauth/helpers/scope_checker_spec.rb +30 -18
  103. data/spec/lib/oauth/invalid_request_response_spec.rb +48 -50
  104. data/spec/lib/oauth/invalid_token_response_spec.rb +32 -34
  105. data/spec/lib/oauth/password_access_token_request_spec.rb +145 -147
  106. data/spec/lib/oauth/pre_authorization_spec.rb +159 -161
  107. data/spec/lib/oauth/refresh_token_request_spec.rb +138 -139
  108. data/spec/lib/oauth/scopes_spec.rb +104 -106
  109. data/spec/lib/oauth/token_request_spec.rb +115 -111
  110. data/spec/lib/oauth/token_response_spec.rb +71 -73
  111. data/spec/lib/oauth/token_spec.rb +121 -123
  112. data/spec/models/doorkeeper/access_grant_spec.rb +3 -5
  113. data/spec/models/doorkeeper/access_token_spec.rb +7 -7
  114. data/spec/models/doorkeeper/application_spec.rb +295 -373
  115. data/spec/requests/applications/applications_request_spec.rb +1 -1
  116. data/spec/requests/endpoints/authorization_spec.rb +5 -3
  117. data/spec/requests/flows/authorization_code_spec.rb +34 -22
  118. data/spec/requests/flows/client_credentials_spec.rb +1 -1
  119. data/spec/requests/flows/password_spec.rb +32 -12
  120. data/spec/requests/flows/refresh_token_spec.rb +19 -19
  121. data/spec/requests/flows/revoke_token_spec.rb +18 -12
  122. data/spec/spec_helper.rb +1 -4
  123. data/spec/support/shared/controllers_shared_context.rb +33 -23
  124. data/spec/validators/redirect_uri_validator_spec.rb +1 -1
  125. metadata +6 -5
  126. data/spec/support/http_method_shim.rb +0 -29
@@ -2,152 +2,156 @@
2
2
 
3
3
  require "spec_helper"
4
4
 
5
- module Doorkeeper::OAuth
6
- describe TokenRequest do
7
- let :application do
8
- FactoryBot.create(:application, scopes: "public")
9
- end
5
+ describe Doorkeeper::OAuth::TokenRequest do
6
+ let :application do
7
+ FactoryBot.create(:application, scopes: "public")
8
+ end
10
9
 
11
- let :pre_auth do
12
- server = Doorkeeper.configuration
13
- allow(server).to receive(:default_scopes).and_return(Scopes.from_string("public"))
14
- allow(server).to receive(:grant_flows).and_return(Scopes.from_string("implicit"))
10
+ let :pre_auth do
11
+ server = Doorkeeper.configuration
12
+ allow(server).to receive(:default_scopes).and_return(Doorkeeper::OAuth::Scopes.from_string("public"))
13
+ allow(server).to receive(:grant_flows).and_return(Doorkeeper::OAuth::Scopes.from_string("implicit"))
15
14
 
16
- client = Doorkeeper::OAuth::Client.new(application)
15
+ client = Doorkeeper::OAuth::Client.new(application)
17
16
 
18
- attributes = {
19
- client_id: client.uid,
20
- response_type: "token",
21
- redirect_uri: "https://app.com/callback",
22
- }
17
+ attributes = {
18
+ client_id: client.uid,
19
+ response_type: "token",
20
+ redirect_uri: "https://app.com/callback",
21
+ }
23
22
 
24
- pre_auth = PreAuthorization.new(server, attributes)
25
- pre_auth.authorizable?
26
- pre_auth
27
- end
23
+ pre_auth = Doorkeeper::OAuth::PreAuthorization.new(server, attributes)
24
+ pre_auth.authorizable?
25
+ pre_auth
26
+ end
28
27
 
29
- let :owner do
30
- double :owner, id: 7866
31
- end
28
+ let :owner do
29
+ double :owner, id: 7866
30
+ end
32
31
 
33
- subject do
34
- TokenRequest.new(pre_auth, owner)
35
- end
32
+ subject do
33
+ described_class.new(pre_auth, owner)
34
+ end
36
35
 
37
- it "creates an access token" do
38
- expect do
39
- subject.authorize
40
- end.to change { Doorkeeper::AccessToken.count }.by(1)
41
- end
36
+ it "creates an access token" do
37
+ expect do
38
+ subject.authorize
39
+ end.to change { Doorkeeper::AccessToken.count }.by(1)
40
+ end
42
41
 
43
- it "returns a code response" do
44
- expect(subject.authorize).to be_a(CodeResponse)
45
- end
42
+ it "returns a code response" do
43
+ expect(subject.authorize).to be_a(Doorkeeper::OAuth::CodeResponse)
44
+ end
46
45
 
47
- context "when pre_auth is denied" do
48
- it "does not create token and returns a error response" do
49
- expect { subject.deny }.not_to(change { Doorkeeper::AccessToken.count })
50
- expect(subject.deny).to be_a(ErrorResponse)
51
- end
46
+ context "when pre_auth is denied" do
47
+ it "does not create token and returns a error response" do
48
+ expect { subject.deny }.not_to(change { Doorkeeper::AccessToken.count })
49
+ expect(subject.deny).to be_a(Doorkeeper::OAuth::ErrorResponse)
52
50
  end
51
+ end
53
52
 
54
- describe "with custom expiration" do
55
- context "when proper TTL returned" do
56
- before do
57
- Doorkeeper.configure do
58
- orm DOORKEEPER_ORM
59
- custom_access_token_expires_in do |context|
60
- context.grant_type == Doorkeeper::OAuth::IMPLICIT ? 1234 : nil
61
- end
53
+ describe "with custom expiration" do
54
+ context "when proper TTL returned" do
55
+ before do
56
+ Doorkeeper.configure do
57
+ orm DOORKEEPER_ORM
58
+ custom_access_token_expires_in do |context|
59
+ context.grant_type == Doorkeeper::OAuth::IMPLICIT ? 1234 : nil
62
60
  end
63
61
  end
62
+ end
64
63
 
65
- it "should use the custom ttl" do
66
- subject.authorize
67
- token = Doorkeeper::AccessToken.first
68
- expect(token.expires_in).to eq(1234)
69
- end
64
+ it "should use the custom ttl" do
65
+ subject.authorize
66
+ token = Doorkeeper::AccessToken.first
67
+ expect(token.expires_in).to eq(1234)
70
68
  end
69
+ end
71
70
 
72
- context "when nil TTL returned" do
73
- before do
74
- Doorkeeper.configure do
75
- orm DOORKEEPER_ORM
76
- access_token_expires_in 654
77
- custom_access_token_expires_in do |_context|
78
- nil
79
- end
71
+ context "when nil TTL returned" do
72
+ before do
73
+ Doorkeeper.configure do
74
+ orm DOORKEEPER_ORM
75
+ access_token_expires_in 654
76
+ custom_access_token_expires_in do |_context|
77
+ nil
80
78
  end
81
79
  end
80
+ end
82
81
 
83
- it "should fallback to access_token_expires_in" do
84
- subject.authorize
85
- token = Doorkeeper::AccessToken.first
86
- expect(token.expires_in).to eq(654)
87
- end
82
+ it "should fallback to access_token_expires_in" do
83
+ subject.authorize
84
+ token = Doorkeeper::AccessToken.first
85
+ expect(token.expires_in).to eq(654)
88
86
  end
87
+ end
89
88
 
90
- context "when infinite TTL returned" do
91
- before do
92
- Doorkeeper.configure do
93
- orm DOORKEEPER_ORM
94
- access_token_expires_in 654
95
- custom_access_token_expires_in do |_context|
96
- Float::INFINITY
97
- end
89
+ context "when infinite TTL returned" do
90
+ before do
91
+ Doorkeeper.configure do
92
+ orm DOORKEEPER_ORM
93
+ access_token_expires_in 654
94
+ custom_access_token_expires_in do |_context|
95
+ Float::INFINITY
98
96
  end
99
97
  end
98
+ end
100
99
 
101
- it "should fallback to access_token_expires_in" do
102
- subject.authorize
103
- token = Doorkeeper::AccessToken.first
104
- expect(token.expires_in).to be_nil
105
- end
100
+ it "should fallback to access_token_expires_in" do
101
+ subject.authorize
102
+ token = Doorkeeper::AccessToken.first
103
+ expect(token.expires_in).to be_nil
106
104
  end
107
105
  end
106
+ end
108
107
 
109
- context "token reuse" do
110
- it "creates a new token if there are no matching tokens" do
111
- allow(Doorkeeper.configuration).to receive(:reuse_access_token).and_return(true)
112
- expect do
113
- subject.authorize
114
- end.to change { Doorkeeper::AccessToken.count }.by(1)
115
- end
108
+ context "token reuse" do
109
+ it "creates a new token if there are no matching tokens" do
110
+ allow(Doorkeeper.configuration).to receive(:reuse_access_token).and_return(true)
111
+ expect do
112
+ subject.authorize
113
+ end.to change { Doorkeeper::AccessToken.count }.by(1)
114
+ end
116
115
 
117
- it "creates a new token if scopes do not match" do
118
- allow(Doorkeeper.configuration).to receive(:reuse_access_token).and_return(true)
119
- FactoryBot.create(:access_token, application_id: pre_auth.client.id,
120
- resource_owner_id: owner.id, scopes: "")
121
- expect do
122
- subject.authorize
123
- end.to change { Doorkeeper::AccessToken.count }.by(1)
124
- end
116
+ it "creates a new token if scopes do not match" do
117
+ allow(Doorkeeper.configuration).to receive(:reuse_access_token).and_return(true)
118
+ FactoryBot.create(
119
+ :access_token, application_id: pre_auth.client.id,
120
+ resource_owner_id: owner.id, scopes: "",
121
+ )
122
+ expect do
123
+ subject.authorize
124
+ end.to change { Doorkeeper::AccessToken.count }.by(1)
125
+ end
125
126
 
126
- it "skips token creation if there is a matching one reusable" do
127
- allow(Doorkeeper.configuration).to receive(:reuse_access_token).and_return(true)
128
- allow(application.scopes).to receive(:has_scopes?).and_return(true)
129
- allow(application.scopes).to receive(:all?).and_return(true)
127
+ it "skips token creation if there is a matching one reusable" do
128
+ allow(Doorkeeper.configuration).to receive(:reuse_access_token).and_return(true)
129
+ allow(application.scopes).to receive(:has_scopes?).and_return(true)
130
+ allow(application.scopes).to receive(:all?).and_return(true)
130
131
 
131
- FactoryBot.create(:access_token, application_id: pre_auth.client.id,
132
- resource_owner_id: owner.id, scopes: "public")
132
+ FactoryBot.create(
133
+ :access_token, application_id: pre_auth.client.id,
134
+ resource_owner_id: owner.id, scopes: "public",
135
+ )
133
136
 
134
- expect { subject.authorize }.not_to(change { Doorkeeper::AccessToken.count })
135
- end
137
+ expect { subject.authorize }.not_to(change { Doorkeeper::AccessToken.count })
138
+ end
136
139
 
137
- it "creates new token if there is a matching one but non reusable" do
138
- allow(Doorkeeper.configuration).to receive(:reuse_access_token).and_return(true)
139
- allow(application.scopes).to receive(:has_scopes?).and_return(true)
140
- allow(application.scopes).to receive(:all?).and_return(true)
140
+ it "creates new token if there is a matching one but non reusable" do
141
+ allow(Doorkeeper.configuration).to receive(:reuse_access_token).and_return(true)
142
+ allow(application.scopes).to receive(:has_scopes?).and_return(true)
143
+ allow(application.scopes).to receive(:all?).and_return(true)
141
144
 
142
- FactoryBot.create(:access_token, application_id: pre_auth.client.id,
143
- resource_owner_id: owner.id, scopes: "public")
145
+ FactoryBot.create(
146
+ :access_token, application_id: pre_auth.client.id,
147
+ resource_owner_id: owner.id, scopes: "public",
148
+ )
144
149
 
145
- allow_any_instance_of(Doorkeeper::AccessToken).to receive(:reusable?).and_return(false)
150
+ allow_any_instance_of(Doorkeeper::AccessToken).to receive(:reusable?).and_return(false)
146
151
 
147
- expect do
148
- subject.authorize
149
- end.to change { Doorkeeper::AccessToken.count }.by(1)
150
- end
152
+ expect do
153
+ subject.authorize
154
+ end.to change { Doorkeeper::AccessToken.count }.by(1)
151
155
  end
152
156
  end
153
157
  end
@@ -2,85 +2,83 @@
2
2
 
3
3
  require "spec_helper"
4
4
 
5
- module Doorkeeper::OAuth
6
- describe TokenResponse do
7
- subject { TokenResponse.new(double.as_null_object) }
8
-
9
- it "includes access token response headers" do
10
- headers = subject.headers
11
- expect(headers.fetch("Cache-Control")).to eq("no-store")
12
- expect(headers.fetch("Pragma")).to eq("no-cache")
5
+ describe Doorkeeper::OAuth::TokenResponse do
6
+ subject { described_class.new(double.as_null_object) }
7
+
8
+ it "includes access token response headers" do
9
+ headers = subject.headers
10
+ expect(headers.fetch("Cache-Control")).to eq("no-store")
11
+ expect(headers.fetch("Pragma")).to eq("no-cache")
12
+ end
13
+
14
+ it "status is ok" do
15
+ expect(subject.status).to eq(:ok)
16
+ end
17
+
18
+ describe ".body" do
19
+ let(:access_token) do
20
+ double :access_token,
21
+ plaintext_token: "some-token",
22
+ expires_in: "3600",
23
+ expires_in_seconds: "300",
24
+ scopes_string: "two scopes",
25
+ plaintext_refresh_token: "some-refresh-token",
26
+ token_type: "bearer",
27
+ created_at: 0
28
+ end
29
+
30
+ subject { described_class.new(access_token).body }
31
+
32
+ it "includes :access_token" do
33
+ expect(subject["access_token"]).to eq("some-token")
34
+ end
35
+
36
+ it "includes :token_type" do
37
+ expect(subject["token_type"]).to eq("bearer")
38
+ end
39
+
40
+ # expires_in_seconds is returned as `expires_in` in order to match
41
+ # the OAuth spec (section 4.2.2)
42
+ it "includes :expires_in" do
43
+ expect(subject["expires_in"]).to eq("300")
44
+ end
45
+
46
+ it "includes :scope" do
47
+ expect(subject["scope"]).to eq("two scopes")
13
48
  end
14
49
 
15
- it "status is ok" do
16
- expect(subject.status).to eq(:ok)
50
+ it "includes :refresh_token" do
51
+ expect(subject["refresh_token"]).to eq("some-refresh-token")
52
+ end
53
+
54
+ it "includes :created_at" do
55
+ expect(subject["created_at"]).to eq(0)
56
+ end
57
+ end
58
+
59
+ describe ".body filters out empty values" do
60
+ let(:access_token) do
61
+ double :access_token,
62
+ plaintext_token: "some-token",
63
+ expires_in_seconds: "",
64
+ scopes_string: "",
65
+ plaintext_refresh_token: "",
66
+ token_type: "bearer",
67
+ created_at: 0
68
+ end
69
+
70
+ subject { described_class.new(access_token).body }
71
+
72
+ it "includes :expires_in" do
73
+ expect(subject["expires_in"]).to be_nil
17
74
  end
18
75
 
19
- describe ".body" do
20
- let(:access_token) do
21
- double :access_token,
22
- plaintext_token: "some-token",
23
- expires_in: "3600",
24
- expires_in_seconds: "300",
25
- scopes_string: "two scopes",
26
- plaintext_refresh_token: "some-refresh-token",
27
- token_type: "bearer",
28
- created_at: 0
29
- end
30
-
31
- subject { TokenResponse.new(access_token).body }
32
-
33
- it "includes :access_token" do
34
- expect(subject["access_token"]).to eq("some-token")
35
- end
36
-
37
- it "includes :token_type" do
38
- expect(subject["token_type"]).to eq("bearer")
39
- end
40
-
41
- # expires_in_seconds is returned as `expires_in` in order to match
42
- # the OAuth spec (section 4.2.2)
43
- it "includes :expires_in" do
44
- expect(subject["expires_in"]).to eq("300")
45
- end
46
-
47
- it "includes :scope" do
48
- expect(subject["scope"]).to eq("two scopes")
49
- end
50
-
51
- it "includes :refresh_token" do
52
- expect(subject["refresh_token"]).to eq("some-refresh-token")
53
- end
54
-
55
- it "includes :created_at" do
56
- expect(subject["created_at"]).to eq(0)
57
- end
76
+ it "includes :scope" do
77
+ expect(subject["scope"]).to be_nil
58
78
  end
59
79
 
60
- describe ".body filters out empty values" do
61
- let(:access_token) do
62
- double :access_token,
63
- plaintext_token: "some-token",
64
- expires_in_seconds: "",
65
- scopes_string: "",
66
- plaintext_refresh_token: "",
67
- token_type: "bearer",
68
- created_at: 0
69
- end
70
-
71
- subject { TokenResponse.new(access_token).body }
72
-
73
- it "includes :expires_in" do
74
- expect(subject["expires_in"]).to be_nil
75
- end
76
-
77
- it "includes :scope" do
78
- expect(subject["scope"]).to be_nil
79
- end
80
-
81
- it "includes :refresh_token" do
82
- expect(subject["refresh_token"]).to be_nil
83
- end
80
+ it "includes :refresh_token" do
81
+ expect(subject["refresh_token"]).to be_nil
84
82
  end
85
83
  end
86
84
  end
@@ -7,152 +7,150 @@ module Doorkeeper
7
7
  class AccessToken
8
8
  end
9
9
  end
10
+ end
10
11
 
11
- module OAuth
12
- describe Token do
13
- describe :from_request do
14
- let(:request) { double.as_null_object }
12
+ describe Doorkeeper::OAuth::Token do
13
+ describe ".from_request" do
14
+ let(:request) { double.as_null_object }
15
15
 
16
- let(:method) do
17
- ->(*) { "token-value" }
18
- end
16
+ let(:method) do
17
+ ->(*) { "token-value" }
18
+ end
19
19
 
20
- it "accepts anything that responds to #call" do
21
- expect(method).to receive(:call).with(request)
22
- Token.from_request request, method
23
- end
20
+ it "accepts anything that responds to #call" do
21
+ expect(method).to receive(:call).with(request)
22
+ described_class.from_request request, method
23
+ end
24
24
 
25
- it "delegates methods received as symbols to Token class" do
26
- expect(Token).to receive(:from_params).with(request)
27
- Token.from_request request, :from_params
28
- end
25
+ it "delegates methods received as symbols to described_class class" do
26
+ expect(described_class).to receive(:from_params).with(request)
27
+ described_class.from_request request, :from_params
28
+ end
29
29
 
30
- it "stops at the first credentials found" do
31
- not_called_method = double
32
- expect(not_called_method).not_to receive(:call)
33
- Token.from_request request, ->(_r) {}, method, not_called_method
34
- end
30
+ it "stops at the first credentials found" do
31
+ not_called_method = double
32
+ expect(not_called_method).not_to receive(:call)
33
+ described_class.from_request request, ->(_r) {}, method, not_called_method
34
+ end
35
35
 
36
- it "returns the credential from extractor method" do
37
- credentials = Token.from_request request, method
38
- expect(credentials).to eq("token-value")
39
- end
40
- end
36
+ it "returns the credential from extractor method" do
37
+ credentials = described_class.from_request request, method
38
+ expect(credentials).to eq("token-value")
39
+ end
40
+ end
41
41
 
42
- describe :from_access_token_param do
43
- it "returns token from access_token parameter" do
44
- request = double parameters: { access_token: "some-token" }
45
- token = Token.from_access_token_param(request)
46
- expect(token).to eq("some-token")
47
- end
48
- end
42
+ describe ".from_access_token_param" do
43
+ it "returns token from access_token parameter" do
44
+ request = double parameters: { access_token: "some-token" }
45
+ token = described_class.from_access_token_param(request)
46
+ expect(token).to eq("some-token")
47
+ end
48
+ end
49
49
 
50
- describe :from_bearer_param do
51
- it "returns token from bearer_token parameter" do
52
- request = double parameters: { bearer_token: "some-token" }
53
- token = Token.from_bearer_param(request)
54
- expect(token).to eq("some-token")
55
- end
56
- end
50
+ describe ".from_bearer_param" do
51
+ it "returns token from bearer_token parameter" do
52
+ request = double parameters: { bearer_token: "some-token" }
53
+ token = described_class.from_bearer_param(request)
54
+ expect(token).to eq("some-token")
55
+ end
56
+ end
57
57
 
58
- describe :from_bearer_authorization do
59
- it "returns token from capitalized authorization bearer" do
60
- request = double authorization: "Bearer SomeToken"
61
- token = Token.from_bearer_authorization(request)
62
- expect(token).to eq("SomeToken")
63
- end
58
+ describe ".from_bearer_authorization" do
59
+ it "returns token from capitalized authorization bearer" do
60
+ request = double authorization: "Bearer SomeToken"
61
+ token = described_class.from_bearer_authorization(request)
62
+ expect(token).to eq("SomeToken")
63
+ end
64
64
 
65
- it "returns token from lowercased authorization bearer" do
66
- request = double authorization: "bearer SomeToken"
67
- token = Token.from_bearer_authorization(request)
68
- expect(token).to eq("SomeToken")
69
- end
65
+ it "returns token from lowercased authorization bearer" do
66
+ request = double authorization: "bearer SomeToken"
67
+ token = described_class.from_bearer_authorization(request)
68
+ expect(token).to eq("SomeToken")
69
+ end
70
70
 
71
- it "does not return token if authorization is not bearer" do
72
- request = double authorization: "MAC SomeToken"
73
- token = Token.from_bearer_authorization(request)
74
- expect(token).to be_blank
75
- end
76
- end
71
+ it "does not return token if authorization is not bearer" do
72
+ request = double authorization: "MAC SomeToken"
73
+ token = described_class.from_bearer_authorization(request)
74
+ expect(token).to be_blank
75
+ end
76
+ end
77
77
 
78
- describe :from_basic_authorization do
79
- it "returns token from capitalized authorization basic" do
80
- request = double authorization: "Basic #{Base64.encode64 "SomeToken:"}"
81
- token = Token.from_basic_authorization(request)
82
- expect(token).to eq("SomeToken")
83
- end
78
+ describe ".from_basic_authorization" do
79
+ it "returns token from capitalized authorization basic" do
80
+ request = double authorization: "Basic #{Base64.encode64 "SomeToken:"}"
81
+ token = described_class.from_basic_authorization(request)
82
+ expect(token).to eq("SomeToken")
83
+ end
84
84
 
85
- it "returns token from lowercased authorization basic" do
86
- request = double authorization: "basic #{Base64.encode64 "SomeToken:"}"
87
- token = Token.from_basic_authorization(request)
88
- expect(token).to eq("SomeToken")
89
- end
85
+ it "returns token from lowercased authorization basic" do
86
+ request = double authorization: "basic #{Base64.encode64 "SomeToken:"}"
87
+ token = described_class.from_basic_authorization(request)
88
+ expect(token).to eq("SomeToken")
89
+ end
90
90
 
91
- it "does not return token if authorization is not basic" do
92
- request = double authorization: "MAC #{Base64.encode64 "SomeToken:"}"
93
- token = Token.from_basic_authorization(request)
94
- expect(token).to be_blank
91
+ it "does not return token if authorization is not basic" do
92
+ request = double authorization: "MAC #{Base64.encode64 "SomeToken:"}"
93
+ token = described_class.from_basic_authorization(request)
94
+ expect(token).to be_blank
95
+ end
96
+ end
97
+
98
+ describe ".authenticate" do
99
+ context "refresh tokens are disabled (default)" do
100
+ context "refresh tokens are enabled" do
101
+ it "does not revoke previous refresh_token if token was found" do
102
+ token = ->(_r) { "token" }
103
+ expect(
104
+ Doorkeeper::AccessToken,
105
+ ).to receive(:by_token).with("token").and_return(token)
106
+ expect(token).not_to receive(:revoke_previous_refresh_token!)
107
+ described_class.authenticate double, token
95
108
  end
96
109
  end
97
110
 
98
- describe :authenticate do
99
- context "refresh tokens are disabled (default)" do
100
- context "refresh tokens are enabled" do
101
- it "does not revoke previous refresh_token if token was found" do
102
- token = ->(_r) { "token" }
103
- expect(
104
- AccessToken
105
- ).to receive(:by_token).with("token").and_return(token)
106
- expect(token).not_to receive(:revoke_previous_refresh_token!)
107
- Token.authenticate double, token
108
- end
109
- end
110
-
111
- it "calls the finder if token was returned" do
112
- token = ->(_r) { "token" }
113
- expect(AccessToken).to receive(:by_token).with("token")
114
- Token.authenticate double, token
115
- end
116
- end
111
+ it "calls the finder if token was returned" do
112
+ token = ->(_r) { "token" }
113
+ expect(Doorkeeper::AccessToken).to receive(:by_token).with("token")
114
+ described_class.authenticate double, token
115
+ end
116
+ end
117
117
 
118
- context "token hashing is enabled" do
119
- include_context "with token hashing enabled"
118
+ context "token hashing is enabled" do
119
+ include_context "with token hashing enabled"
120
120
 
121
- let(:hashed_token) { hashed_or_plain_token_func.call("token") }
122
- let(:token) { ->(_r) { "token" } }
121
+ let(:hashed_token) { hashed_or_plain_token_func.call("token") }
122
+ let(:token) { ->(_r) { "token" } }
123
123
 
124
- it "searches with the hashed token" do
125
- expect(
126
- AccessToken
127
- ).to receive(:find_by).with(token: hashed_token).and_return(token)
128
- Token.authenticate double, token
129
- end
130
- end
124
+ it "searches with the hashed token" do
125
+ expect(
126
+ Doorkeeper::AccessToken,
127
+ ).to receive(:find_by).with(token: hashed_token).and_return(token)
128
+ described_class.authenticate double, token
129
+ end
130
+ end
131
131
 
132
- context "refresh tokens are enabled" do
133
- before do
134
- Doorkeeper.configure do
135
- orm DOORKEEPER_ORM
136
- use_refresh_token
137
- end
138
- end
139
-
140
- it "revokes previous refresh_token if token was found" do
141
- token = ->(_r) { "token" }
142
- expect(
143
- AccessToken
144
- ).to receive(:by_token).with("token").and_return(token)
145
- expect(token).to receive(:revoke_previous_refresh_token!)
146
- Token.authenticate double, token
147
- end
148
-
149
- it "calls the finder if token was returned" do
150
- token = ->(_r) { "token" }
151
- expect(AccessToken).to receive(:by_token).with("token")
152
- Token.authenticate double, token
153
- end
132
+ context "refresh tokens are enabled" do
133
+ before do
134
+ Doorkeeper.configure do
135
+ orm DOORKEEPER_ORM
136
+ use_refresh_token
154
137
  end
155
138
  end
139
+
140
+ it "revokes previous refresh_token if token was found" do
141
+ token = ->(_r) { "token" }
142
+ expect(
143
+ Doorkeeper::AccessToken,
144
+ ).to receive(:by_token).with("token").and_return(token)
145
+ expect(token).to receive(:revoke_previous_refresh_token!)
146
+ described_class.authenticate double, token
147
+ end
148
+
149
+ it "calls the finder if token was returned" do
150
+ token = ->(_r) { "token" }
151
+ expect(Doorkeeper::AccessToken).to receive(:by_token).with("token")
152
+ described_class.authenticate double, token
153
+ end
156
154
  end
157
155
  end
158
156
  end