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