doorkeeper 5.3.3 → 5.4.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 (224) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +82 -4
  3. data/README.md +6 -4
  4. data/app/controllers/doorkeeper/applications_controller.rb +4 -4
  5. data/app/controllers/doorkeeper/authorizations_controller.rb +31 -12
  6. data/app/controllers/doorkeeper/authorized_applications_controller.rb +2 -2
  7. data/app/controllers/doorkeeper/tokens_controller.rb +57 -20
  8. data/app/views/doorkeeper/applications/_form.html.erb +1 -1
  9. data/app/views/doorkeeper/applications/show.html.erb +19 -2
  10. data/config/locales/en.yml +3 -1
  11. data/lib/doorkeeper/config/abstract_builder.rb +28 -0
  12. data/lib/doorkeeper/config/option.rb +28 -14
  13. data/lib/doorkeeper/config.rb +64 -35
  14. data/lib/doorkeeper/engine.rb +1 -1
  15. data/lib/doorkeeper/grape/helpers.rb +1 -1
  16. data/lib/doorkeeper/helpers/controller.rb +4 -4
  17. data/lib/doorkeeper/models/access_grant_mixin.rb +20 -16
  18. data/lib/doorkeeper/models/access_token_mixin.rb +108 -45
  19. data/lib/doorkeeper/models/application_mixin.rb +5 -4
  20. data/lib/doorkeeper/models/concerns/resource_ownerable.rb +47 -0
  21. data/lib/doorkeeper/models/concerns/revocable.rb +1 -1
  22. data/lib/doorkeeper/models/concerns/scopes.rb +5 -1
  23. data/lib/doorkeeper/models/concerns/secret_storable.rb +1 -3
  24. data/lib/doorkeeper/oauth/authorization/code.rb +15 -6
  25. data/lib/doorkeeper/oauth/authorization/context.rb +2 -2
  26. data/lib/doorkeeper/oauth/authorization/token.rb +8 -12
  27. data/lib/doorkeeper/oauth/authorization/uri_builder.rb +4 -4
  28. data/lib/doorkeeper/oauth/authorization_code_request.rb +18 -8
  29. data/lib/doorkeeper/oauth/base_request.rb +11 -19
  30. data/lib/doorkeeper/oauth/client/credentials.rb +2 -4
  31. data/lib/doorkeeper/oauth/client.rb +1 -1
  32. data/lib/doorkeeper/oauth/client_credentials/creator.rb +26 -8
  33. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +3 -2
  34. data/lib/doorkeeper/oauth/client_credentials/validator.rb +4 -2
  35. data/lib/doorkeeper/oauth/client_credentials_request.rb +8 -7
  36. data/lib/doorkeeper/oauth/code_request.rb +3 -3
  37. data/lib/doorkeeper/oauth/code_response.rb +6 -2
  38. data/lib/doorkeeper/oauth/error_response.rb +2 -4
  39. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +1 -5
  40. data/lib/doorkeeper/oauth/hooks/context.rb +21 -0
  41. data/lib/doorkeeper/oauth/invalid_token_response.rb +2 -2
  42. data/lib/doorkeeper/oauth/password_access_token_request.rb +4 -6
  43. data/lib/doorkeeper/oauth/pre_authorization.rb +36 -30
  44. data/lib/doorkeeper/oauth/refresh_token_request.rb +18 -22
  45. data/lib/doorkeeper/oauth/token.rb +5 -6
  46. data/lib/doorkeeper/oauth/token_introspection.rb +4 -8
  47. data/lib/doorkeeper/oauth/token_request.rb +3 -3
  48. data/lib/doorkeeper/oauth/token_response.rb +1 -1
  49. data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +8 -3
  50. data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +7 -3
  51. data/lib/doorkeeper/orm/active_record.rb +10 -2
  52. data/lib/doorkeeper/rails/routes/abstract_router.rb +35 -0
  53. data/lib/doorkeeper/rails/routes/mapper.rb +2 -2
  54. data/lib/doorkeeper/rails/routes/registry.rb +45 -0
  55. data/lib/doorkeeper/rails/routes.rb +13 -17
  56. data/lib/doorkeeper/request/refresh_token.rb +2 -1
  57. data/lib/doorkeeper/request/strategy.rb +2 -2
  58. data/lib/doorkeeper/server.rb +4 -4
  59. data/lib/doorkeeper/stale_records_cleaner.rb +4 -4
  60. data/lib/doorkeeper/version.rb +2 -2
  61. data/lib/doorkeeper.rb +106 -79
  62. data/lib/generators/doorkeeper/confidential_applications_generator.rb +1 -1
  63. data/lib/generators/doorkeeper/enable_polymorphic_resource_owner_generator.rb +39 -0
  64. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb.erb +2 -0
  65. data/lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb.erb +2 -0
  66. data/lib/generators/doorkeeper/templates/enable_pkce_migration.rb.erb +2 -0
  67. data/lib/generators/doorkeeper/templates/enable_polymorphic_resource_owner_migration.rb.erb +17 -0
  68. data/lib/generators/doorkeeper/templates/initializer.rb +39 -3
  69. data/lib/generators/doorkeeper/templates/migration.rb.erb +14 -5
  70. metadata +13 -296
  71. data/Appraisals +0 -40
  72. data/CODE_OF_CONDUCT.md +0 -46
  73. data/CONTRIBUTING.md +0 -49
  74. data/Dangerfile +0 -67
  75. data/Dockerfile +0 -29
  76. data/Gemfile +0 -25
  77. data/NEWS.md +0 -1
  78. data/RELEASING.md +0 -11
  79. data/Rakefile +0 -28
  80. data/SECURITY.md +0 -15
  81. data/UPGRADE.md +0 -2
  82. data/bin/console +0 -16
  83. data/doorkeeper.gemspec +0 -42
  84. data/gemfiles/rails_5_0.gemfile +0 -18
  85. data/gemfiles/rails_5_1.gemfile +0 -18
  86. data/gemfiles/rails_5_2.gemfile +0 -18
  87. data/gemfiles/rails_6_0.gemfile +0 -18
  88. data/gemfiles/rails_master.gemfile +0 -18
  89. data/spec/controllers/application_metal_controller_spec.rb +0 -64
  90. data/spec/controllers/applications_controller_spec.rb +0 -274
  91. data/spec/controllers/authorizations_controller_spec.rb +0 -608
  92. data/spec/controllers/protected_resources_controller_spec.rb +0 -361
  93. data/spec/controllers/token_info_controller_spec.rb +0 -50
  94. data/spec/controllers/tokens_controller_spec.rb +0 -498
  95. data/spec/dummy/Rakefile +0 -9
  96. data/spec/dummy/app/assets/config/manifest.js +0 -2
  97. data/spec/dummy/app/controllers/application_controller.rb +0 -5
  98. data/spec/dummy/app/controllers/custom_authorizations_controller.rb +0 -9
  99. data/spec/dummy/app/controllers/full_protected_resources_controller.rb +0 -14
  100. data/spec/dummy/app/controllers/home_controller.rb +0 -18
  101. data/spec/dummy/app/controllers/metal_controller.rb +0 -13
  102. data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +0 -13
  103. data/spec/dummy/app/helpers/application_helper.rb +0 -7
  104. data/spec/dummy/app/models/user.rb +0 -7
  105. data/spec/dummy/app/views/home/index.html.erb +0 -0
  106. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  107. data/spec/dummy/config/application.rb +0 -49
  108. data/spec/dummy/config/boot.rb +0 -7
  109. data/spec/dummy/config/database.yml +0 -15
  110. data/spec/dummy/config/environment.rb +0 -5
  111. data/spec/dummy/config/environments/development.rb +0 -31
  112. data/spec/dummy/config/environments/production.rb +0 -64
  113. data/spec/dummy/config/environments/test.rb +0 -45
  114. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -9
  115. data/spec/dummy/config/initializers/doorkeeper.rb +0 -166
  116. data/spec/dummy/config/initializers/secret_token.rb +0 -10
  117. data/spec/dummy/config/initializers/session_store.rb +0 -10
  118. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -16
  119. data/spec/dummy/config/locales/doorkeeper.en.yml +0 -5
  120. data/spec/dummy/config/routes.rb +0 -13
  121. data/spec/dummy/config.ru +0 -6
  122. data/spec/dummy/db/migrate/20111122132257_create_users.rb +0 -11
  123. data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +0 -7
  124. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +0 -69
  125. data/spec/dummy/db/migrate/20151223200000_add_owner_to_application.rb +0 -9
  126. data/spec/dummy/db/migrate/20160320211015_add_previous_refresh_token_to_access_tokens.rb +0 -13
  127. data/spec/dummy/db/migrate/20170822064514_enable_pkce.rb +0 -8
  128. data/spec/dummy/db/migrate/20180210183654_add_confidential_to_applications.rb +0 -13
  129. data/spec/dummy/db/schema.rb +0 -68
  130. data/spec/dummy/public/404.html +0 -26
  131. data/spec/dummy/public/422.html +0 -26
  132. data/spec/dummy/public/500.html +0 -26
  133. data/spec/dummy/public/favicon.ico +0 -0
  134. data/spec/dummy/script/rails +0 -9
  135. data/spec/factories.rb +0 -30
  136. data/spec/generators/application_owner_generator_spec.rb +0 -28
  137. data/spec/generators/confidential_applications_generator_spec.rb +0 -29
  138. data/spec/generators/install_generator_spec.rb +0 -36
  139. data/spec/generators/migration_generator_spec.rb +0 -28
  140. data/spec/generators/pkce_generator_spec.rb +0 -28
  141. data/spec/generators/previous_refresh_token_generator_spec.rb +0 -44
  142. data/spec/generators/templates/routes.rb +0 -4
  143. data/spec/generators/views_generator_spec.rb +0 -29
  144. data/spec/grape/grape_integration_spec.rb +0 -137
  145. data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +0 -26
  146. data/spec/lib/config_spec.rb +0 -809
  147. data/spec/lib/doorkeeper_spec.rb +0 -27
  148. data/spec/lib/models/expirable_spec.rb +0 -61
  149. data/spec/lib/models/reusable_spec.rb +0 -40
  150. data/spec/lib/models/revocable_spec.rb +0 -59
  151. data/spec/lib/models/scopes_spec.rb +0 -53
  152. data/spec/lib/models/secret_storable_spec.rb +0 -135
  153. data/spec/lib/oauth/authorization/uri_builder_spec.rb +0 -39
  154. data/spec/lib/oauth/authorization_code_request_spec.rb +0 -170
  155. data/spec/lib/oauth/base_request_spec.rb +0 -224
  156. data/spec/lib/oauth/base_response_spec.rb +0 -45
  157. data/spec/lib/oauth/client/credentials_spec.rb +0 -90
  158. data/spec/lib/oauth/client_credentials/creator_spec.rb +0 -134
  159. data/spec/lib/oauth/client_credentials/issuer_spec.rb +0 -112
  160. data/spec/lib/oauth/client_credentials/validation_spec.rb +0 -59
  161. data/spec/lib/oauth/client_credentials_integration_spec.rb +0 -27
  162. data/spec/lib/oauth/client_credentials_request_spec.rb +0 -107
  163. data/spec/lib/oauth/client_spec.rb +0 -38
  164. data/spec/lib/oauth/code_request_spec.rb +0 -46
  165. data/spec/lib/oauth/code_response_spec.rb +0 -32
  166. data/spec/lib/oauth/error_response_spec.rb +0 -64
  167. data/spec/lib/oauth/error_spec.rb +0 -21
  168. data/spec/lib/oauth/forbidden_token_response_spec.rb +0 -20
  169. data/spec/lib/oauth/helpers/scope_checker_spec.rb +0 -110
  170. data/spec/lib/oauth/helpers/unique_token_spec.rb +0 -21
  171. data/spec/lib/oauth/helpers/uri_checker_spec.rb +0 -262
  172. data/spec/lib/oauth/invalid_request_response_spec.rb +0 -73
  173. data/spec/lib/oauth/invalid_token_response_spec.rb +0 -53
  174. data/spec/lib/oauth/password_access_token_request_spec.rb +0 -190
  175. data/spec/lib/oauth/pre_authorization_spec.rb +0 -223
  176. data/spec/lib/oauth/refresh_token_request_spec.rb +0 -177
  177. data/spec/lib/oauth/scopes_spec.rb +0 -146
  178. data/spec/lib/oauth/token_request_spec.rb +0 -157
  179. data/spec/lib/oauth/token_response_spec.rb +0 -84
  180. data/spec/lib/oauth/token_spec.rb +0 -156
  181. data/spec/lib/request/strategy_spec.rb +0 -54
  182. data/spec/lib/secret_storing/base_spec.rb +0 -60
  183. data/spec/lib/secret_storing/bcrypt_spec.rb +0 -49
  184. data/spec/lib/secret_storing/plain_spec.rb +0 -44
  185. data/spec/lib/secret_storing/sha256_hash_spec.rb +0 -48
  186. data/spec/lib/server_spec.rb +0 -49
  187. data/spec/lib/stale_records_cleaner_spec.rb +0 -89
  188. data/spec/models/doorkeeper/access_grant_spec.rb +0 -161
  189. data/spec/models/doorkeeper/access_token_spec.rb +0 -622
  190. data/spec/models/doorkeeper/application_spec.rb +0 -482
  191. data/spec/requests/applications/applications_request_spec.rb +0 -259
  192. data/spec/requests/applications/authorized_applications_spec.rb +0 -32
  193. data/spec/requests/endpoints/authorization_spec.rb +0 -91
  194. data/spec/requests/endpoints/token_spec.rb +0 -75
  195. data/spec/requests/flows/authorization_code_errors_spec.rb +0 -79
  196. data/spec/requests/flows/authorization_code_spec.rb +0 -525
  197. data/spec/requests/flows/client_credentials_spec.rb +0 -166
  198. data/spec/requests/flows/implicit_grant_errors_spec.rb +0 -46
  199. data/spec/requests/flows/implicit_grant_spec.rb +0 -91
  200. data/spec/requests/flows/password_spec.rb +0 -316
  201. data/spec/requests/flows/refresh_token_spec.rb +0 -233
  202. data/spec/requests/flows/revoke_token_spec.rb +0 -157
  203. data/spec/requests/flows/skip_authorization_spec.rb +0 -66
  204. data/spec/requests/protected_resources/metal_spec.rb +0 -16
  205. data/spec/requests/protected_resources/private_api_spec.rb +0 -83
  206. data/spec/routing/custom_controller_routes_spec.rb +0 -133
  207. data/spec/routing/default_routes_spec.rb +0 -41
  208. data/spec/routing/scoped_routes_spec.rb +0 -47
  209. data/spec/spec_helper.rb +0 -54
  210. data/spec/spec_helper_integration.rb +0 -4
  211. data/spec/support/dependencies/factory_bot.rb +0 -4
  212. data/spec/support/doorkeeper_rspec.rb +0 -22
  213. data/spec/support/helpers/access_token_request_helper.rb +0 -13
  214. data/spec/support/helpers/authorization_request_helper.rb +0 -43
  215. data/spec/support/helpers/config_helper.rb +0 -11
  216. data/spec/support/helpers/model_helper.rb +0 -78
  217. data/spec/support/helpers/request_spec_helper.rb +0 -110
  218. data/spec/support/helpers/url_helper.rb +0 -62
  219. data/spec/support/orm/active_record.rb +0 -5
  220. data/spec/support/shared/controllers_shared_context.rb +0 -133
  221. data/spec/support/shared/hashing_shared_context.rb +0 -36
  222. data/spec/support/shared/models_shared_examples.rb +0 -54
  223. data/spec/validators/redirect_uri_validator_spec.rb +0 -183
  224. data/spec/version/version_spec.rb +0 -17
@@ -1,361 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- module ControllerActions
6
- def index
7
- render plain: "index"
8
- end
9
-
10
- def show
11
- render plain: "show"
12
- end
13
-
14
- def doorkeeper_unauthorized_render_options(*); end
15
-
16
- def doorkeeper_forbidden_render_options(*); end
17
- end
18
-
19
- describe "doorkeeper authorize filter" do
20
- context "accepts token code specified as" do
21
- controller do
22
- before_action :doorkeeper_authorize!
23
-
24
- def index
25
- render plain: "index"
26
- end
27
- end
28
-
29
- let(:token_string) { "1A2BC3" }
30
- let(:token) do
31
- double(
32
- Doorkeeper::AccessToken,
33
- acceptable?: true, previous_refresh_token: "",
34
- revoke_previous_refresh_token!: true,
35
- )
36
- end
37
-
38
- it "access_token param" do
39
- expect(Doorkeeper::AccessToken).to receive(:by_token).with(token_string).and_return(token)
40
- get :index, params: { access_token: token_string }
41
- end
42
-
43
- it "bearer_token param" do
44
- expect(Doorkeeper::AccessToken).to receive(:by_token).with(token_string).and_return(token)
45
- get :index, params: { bearer_token: token_string }
46
- end
47
-
48
- it "Authorization header" do
49
- expect(Doorkeeper::AccessToken).to receive(:by_token).with(token_string).and_return(token)
50
- request.env["HTTP_AUTHORIZATION"] = "Bearer #{token_string}"
51
- get :index
52
- end
53
-
54
- it "different kind of Authorization header" do
55
- expect(Doorkeeper::AccessToken).not_to receive(:by_token)
56
- request.env["HTTP_AUTHORIZATION"] = "MAC #{token_string}"
57
- get :index
58
- end
59
-
60
- it "does not change Authorization header value" do
61
- expect(Doorkeeper::AccessToken).to receive(:by_token).exactly(2).times.and_return(token)
62
- request.env["HTTP_AUTHORIZATION"] = "Bearer #{token_string}"
63
- get :index
64
- controller.send(:remove_instance_variable, :@doorkeeper_token)
65
- get :index
66
- end
67
- end
68
-
69
- context "defined for all actions" do
70
- controller do
71
- before_action :doorkeeper_authorize!
72
-
73
- include ControllerActions
74
- end
75
-
76
- context "with valid token", token: :valid do
77
- it "allows into index action" do
78
- get :index, params: { access_token: token_string }
79
- expect(response).to be_successful
80
- end
81
-
82
- it "allows into show action" do
83
- get :show, params: { id: "4", access_token: token_string }
84
- expect(response).to be_successful
85
- end
86
- end
87
-
88
- context "with invalid token", token: :invalid do
89
- it "does not allow into index action" do
90
- get :index, params: { access_token: token_string }
91
- expect(response.status).to eq 401
92
- expect(response.header["WWW-Authenticate"]).to match(/^Bearer/)
93
- end
94
-
95
- it "does not allow into show action" do
96
- get :show, params: { id: "4", access_token: token_string }
97
- expect(response.status).to eq 401
98
- expect(response.header["WWW-Authenticate"]).to match(/^Bearer/)
99
- end
100
- end
101
- end
102
-
103
- context "defined with scopes" do
104
- controller do
105
- before_action -> { doorkeeper_authorize! :write }
106
-
107
- include ControllerActions
108
- end
109
-
110
- let(:token_string) { "1A2DUWE" }
111
-
112
- it "allows if the token has particular scopes" do
113
- token = double(
114
- Doorkeeper::AccessToken,
115
- accessible?: true, scopes: %w[write public],
116
- previous_refresh_token: "",
117
- revoke_previous_refresh_token!: true,
118
- )
119
- expect(token).to receive(:acceptable?).with([:write]).and_return(true)
120
- expect(
121
- Doorkeeper::AccessToken,
122
- ).to receive(:by_token).with(token_string).and_return(token)
123
-
124
- get :index, params: { access_token: token_string }
125
- expect(response).to be_successful
126
- end
127
-
128
- it "does not allow if the token does not include given scope" do
129
- token = double(
130
- Doorkeeper::AccessToken,
131
- accessible?: true, scopes: ["public"], revoked?: false,
132
- expired?: false, previous_refresh_token: "",
133
- revoke_previous_refresh_token!: true,
134
- )
135
- expect(
136
- Doorkeeper::AccessToken,
137
- ).to receive(:by_token).with(token_string).and_return(token)
138
- expect(token).to receive(:acceptable?).with([:write]).and_return(false)
139
-
140
- get :index, params: { access_token: token_string }
141
- expect(response.status).to eq 403
142
- expect(response.header).to_not include("WWW-Authenticate")
143
- end
144
- end
145
-
146
- context "when custom unauthorized render options are configured" do
147
- controller do
148
- before_action :doorkeeper_authorize!
149
-
150
- include ControllerActions
151
- end
152
-
153
- context "with a JSON custom render", token: :invalid do
154
- before do
155
- module ControllerActions
156
- remove_method :doorkeeper_unauthorized_render_options
157
-
158
- def doorkeeper_unauthorized_render_options(error: nil)
159
- { json: ActiveSupport::JSON.encode(error_message: error.description) }
160
- end
161
- end
162
- end
163
-
164
- after do
165
- module ControllerActions
166
- remove_method :doorkeeper_unauthorized_render_options
167
-
168
- def doorkeeper_unauthorized_render_options(error: nil); end
169
- end
170
- end
171
-
172
- it "it renders a custom JSON response", token: :invalid do
173
- get :index, params: { access_token: token_string }
174
- expect(response.status).to eq 401
175
- expect(response.content_type).to include("application/json")
176
- expect(response.header["WWW-Authenticate"]).to match(/^Bearer/)
177
-
178
- expect(json_response).not_to be_nil
179
- expect(json_response["error_message"]).to match("token is invalid")
180
- end
181
- end
182
-
183
- context "with a text custom render", token: :invalid do
184
- before do
185
- module ControllerActions
186
- remove_method :doorkeeper_unauthorized_render_options
187
-
188
- def doorkeeper_unauthorized_render_options(**)
189
- { plain: "Unauthorized" }
190
- end
191
- end
192
- end
193
-
194
- after do
195
- module ControllerActions
196
- remove_method :doorkeeper_unauthorized_render_options
197
-
198
- def doorkeeper_unauthorized_render_options(error: nil); end
199
- end
200
- end
201
-
202
- it "it renders a custom text response", token: :invalid do
203
- get :index, params: { access_token: token_string }
204
- expect(response.status).to eq 401
205
- expect(response.content_type).to include("text/plain")
206
- expect(response.header["WWW-Authenticate"]).to match(/^Bearer/)
207
- expect(response.body).to eq("Unauthorized")
208
- end
209
- end
210
- end
211
-
212
- context "when custom forbidden render options are configured" do
213
- before do
214
- expect(Doorkeeper::AccessToken).to receive(:by_token).with(token_string).and_return(token)
215
- expect(token).to receive(:acceptable?).with([:write]).and_return(false)
216
- end
217
-
218
- after do
219
- module ControllerActions
220
- remove_method :doorkeeper_forbidden_render_options
221
-
222
- def doorkeeper_forbidden_render_options(*); end
223
- end
224
- end
225
-
226
- controller do
227
- before_action -> { doorkeeper_authorize! :write }
228
-
229
- include ControllerActions
230
- end
231
-
232
- let(:token) do
233
- double(
234
- Doorkeeper::AccessToken,
235
- accessible?: true, scopes: ["public"], revoked?: false,
236
- expired?: false, previous_refresh_token: "",
237
- revoke_previous_refresh_token!: true,
238
- )
239
- end
240
-
241
- let(:token_string) { "1A2DUWE" }
242
-
243
- context "with a JSON custom render" do
244
- before do
245
- module ControllerActions
246
- remove_method :doorkeeper_forbidden_render_options
247
-
248
- def doorkeeper_forbidden_render_options(*)
249
- { json: { error_message: "Forbidden" } }
250
- end
251
- end
252
- end
253
-
254
- it "renders a custom JSON response" do
255
- get :index, params: { access_token: token_string }
256
- expect(response.header).to_not include("WWW-Authenticate")
257
- expect(response.content_type).to include("application/json")
258
- expect(response.status).to eq 403
259
-
260
- expect(json_response).not_to be_nil
261
- expect(json_response["error_message"]).to match("Forbidden")
262
- end
263
- end
264
-
265
- context "with a status and JSON custom render" do
266
- before do
267
- module ControllerActions
268
- remove_method :doorkeeper_forbidden_render_options
269
- def doorkeeper_forbidden_render_options(*)
270
- { json: { error_message: "Not Found" },
271
- respond_not_found_when_forbidden: true, }
272
- end
273
- end
274
- end
275
-
276
- it "overrides the default status code" do
277
- get :index, params: { access_token: token_string }
278
- expect(response.status).to eq 404
279
- end
280
- end
281
-
282
- context "with a text custom render" do
283
- before do
284
- module ControllerActions
285
- remove_method :doorkeeper_forbidden_render_options
286
-
287
- def doorkeeper_forbidden_render_options(*)
288
- { plain: "Forbidden" }
289
- end
290
- end
291
- end
292
-
293
- it "renders a custom status code and text response" do
294
- get :index, params: { access_token: token_string }
295
- expect(response.header).to_not include("WWW-Authenticate")
296
- expect(response.status).to eq 403
297
- expect(response.body).to eq("Forbidden")
298
- end
299
- end
300
-
301
- context "with a status and text custom render" do
302
- before do
303
- module ControllerActions
304
- remove_method :doorkeeper_forbidden_render_options
305
-
306
- def doorkeeper_forbidden_render_options(*)
307
- { respond_not_found_when_forbidden: true, plain: "Not Found" }
308
- end
309
- end
310
- end
311
-
312
- it "overrides the default status code" do
313
- get :index, params: { access_token: token_string }
314
- expect(response.status).to eq 404
315
- end
316
- end
317
- end
318
-
319
- context "when handle_auth_errors option is set to :raise" do
320
- subject { get :index, params: { access_token: token_string } }
321
-
322
- before do
323
- config_is_set(:handle_auth_errors, :raise)
324
- end
325
-
326
- controller do
327
- before_action :doorkeeper_authorize!
328
- include ControllerActions
329
- end
330
-
331
- context "when token is unknown" do
332
- it "raises Doorkeeper::Errors::TokenUnknown exception", token: :invalid do
333
- expect { subject }.to raise_error(Doorkeeper::Errors::TokenUnknown)
334
- end
335
- end
336
-
337
- context "when token is expired" do
338
- it "raises Doorkeeper::Errors::TokenExpired exception", token: :expired do
339
- expect { subject }.to raise_error(Doorkeeper::Errors::TokenExpired)
340
- end
341
- end
342
-
343
- context "when token is revoked" do
344
- it "raises Doorkeeper::Errors::TokenRevoked exception", token: :revoked do
345
- expect { subject }.to raise_error(Doorkeeper::Errors::TokenRevoked)
346
- end
347
- end
348
-
349
- context "when token is forbidden" do
350
- it "raises Doorkeeper::Errors::TokenForbidden exception", token: :forbidden do
351
- expect { subject }.to raise_error(Doorkeeper::Errors::TokenForbidden)
352
- end
353
- end
354
-
355
- context "when token is valid" do
356
- it "allows into index action", token: :valid do
357
- expect(response).to be_successful
358
- end
359
- end
360
- end
361
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- describe Doorkeeper::TokenInfoController do
6
- describe "when requesting token info with valid token" do
7
- let(:doorkeeper_token) { FactoryBot.create(:access_token) }
8
-
9
- describe "successful request" do
10
- it "responds with token info" do
11
- get :show, params: { access_token: doorkeeper_token.token }
12
-
13
- expect(response.body).to eq(doorkeeper_token.to_json)
14
- end
15
-
16
- it "responds with a 200 status" do
17
- get :show, params: { access_token: doorkeeper_token.token }
18
-
19
- expect(response.status).to eq 200
20
- end
21
- end
22
-
23
- describe "invalid token response" do
24
- it "responds with 401 when doorkeeper_token is not valid" do
25
- get :show
26
-
27
- expect(response.status).to eq 401
28
- expect(response.headers["WWW-Authenticate"]).to match(/^Bearer/)
29
- end
30
-
31
- it "responds with 401 when doorkeeper_token is invalid, expired or revoked" do
32
- allow(controller).to receive(:doorkeeper_token).and_return(doorkeeper_token)
33
- allow(doorkeeper_token).to receive(:accessible?).and_return(false)
34
-
35
- get :show
36
-
37
- expect(response.status).to eq 401
38
- expect(response.headers["WWW-Authenticate"]).to match(/^Bearer/)
39
- end
40
-
41
- it "responds body message for error" do
42
- get :show
43
-
44
- expect(response.body).to eq(
45
- Doorkeeper::OAuth::InvalidTokenResponse.new.body.to_json,
46
- )
47
- end
48
- end
49
- end
50
- end