doorkeeper 5.2.2 → 5.5.4

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 (260) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +198 -3
  3. data/README.md +28 -20
  4. data/app/controllers/doorkeeper/application_controller.rb +3 -2
  5. data/app/controllers/doorkeeper/application_metal_controller.rb +2 -2
  6. data/app/controllers/doorkeeper/applications_controller.rb +7 -8
  7. data/app/controllers/doorkeeper/authorizations_controller.rb +48 -18
  8. data/app/controllers/doorkeeper/authorized_applications_controller.rb +6 -6
  9. data/app/controllers/doorkeeper/token_info_controller.rb +12 -2
  10. data/app/controllers/doorkeeper/tokens_controller.rb +70 -25
  11. data/app/helpers/doorkeeper/dashboard_helper.rb +1 -1
  12. data/app/views/doorkeeper/applications/_form.html.erb +1 -1
  13. data/app/views/doorkeeper/applications/show.html.erb +35 -14
  14. data/app/views/doorkeeper/authorizations/form_post.html.erb +15 -0
  15. data/app/views/doorkeeper/authorizations/new.html.erb +2 -0
  16. data/config/locales/en.yml +9 -2
  17. data/lib/doorkeeper/config/abstract_builder.rb +28 -0
  18. data/lib/doorkeeper/config/option.rb +26 -14
  19. data/lib/doorkeeper/config/validations.rb +53 -0
  20. data/lib/doorkeeper/config.rb +214 -122
  21. data/lib/doorkeeper/engine.rb +1 -1
  22. data/lib/doorkeeper/grant_flow/fallback_flow.rb +15 -0
  23. data/lib/doorkeeper/grant_flow/flow.rb +44 -0
  24. data/lib/doorkeeper/grant_flow/registry.rb +50 -0
  25. data/lib/doorkeeper/grant_flow.rb +45 -0
  26. data/lib/doorkeeper/grape/helpers.rb +2 -2
  27. data/lib/doorkeeper/helpers/controller.rb +18 -12
  28. data/lib/doorkeeper/models/access_grant_mixin.rb +23 -19
  29. data/lib/doorkeeper/models/access_token_mixin.rb +157 -55
  30. data/lib/doorkeeper/models/application_mixin.rb +8 -7
  31. data/lib/doorkeeper/models/concerns/expirable.rb +1 -1
  32. data/lib/doorkeeper/models/concerns/ownership.rb +1 -1
  33. data/lib/doorkeeper/models/concerns/resource_ownerable.rb +47 -0
  34. data/lib/doorkeeper/models/concerns/reusable.rb +1 -1
  35. data/lib/doorkeeper/models/concerns/revocable.rb +1 -28
  36. data/lib/doorkeeper/models/concerns/scopes.rb +5 -1
  37. data/lib/doorkeeper/models/concerns/secret_storable.rb +1 -3
  38. data/lib/doorkeeper/oauth/authorization/code.rb +22 -9
  39. data/lib/doorkeeper/oauth/authorization/context.rb +5 -5
  40. data/lib/doorkeeper/oauth/authorization/token.rb +23 -18
  41. data/lib/doorkeeper/oauth/authorization/uri_builder.rb +4 -4
  42. data/lib/doorkeeper/oauth/authorization_code_request.rb +30 -20
  43. data/lib/doorkeeper/oauth/base_request.rb +19 -23
  44. data/lib/doorkeeper/oauth/client/credentials.rb +2 -4
  45. data/lib/doorkeeper/oauth/client.rb +8 -9
  46. data/lib/doorkeeper/oauth/client_credentials/creator.rb +38 -12
  47. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +10 -8
  48. data/lib/doorkeeper/oauth/client_credentials/{validation.rb → validator.rb} +7 -5
  49. data/lib/doorkeeper/oauth/client_credentials_request.rb +8 -7
  50. data/lib/doorkeeper/oauth/code_request.rb +4 -4
  51. data/lib/doorkeeper/oauth/code_response.rb +24 -14
  52. data/lib/doorkeeper/oauth/error.rb +1 -1
  53. data/lib/doorkeeper/oauth/error_response.rb +10 -11
  54. data/lib/doorkeeper/oauth/forbidden_token_response.rb +2 -1
  55. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +8 -12
  56. data/lib/doorkeeper/oauth/helpers/unique_token.rb +10 -7
  57. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +1 -19
  58. data/lib/doorkeeper/oauth/hooks/context.rb +21 -0
  59. data/lib/doorkeeper/oauth/invalid_request_response.rb +3 -3
  60. data/lib/doorkeeper/oauth/invalid_token_response.rb +7 -4
  61. data/lib/doorkeeper/oauth/password_access_token_request.rb +28 -10
  62. data/lib/doorkeeper/oauth/pre_authorization.rb +73 -37
  63. data/lib/doorkeeper/oauth/refresh_token_request.rb +35 -26
  64. data/lib/doorkeeper/oauth/token.rb +6 -7
  65. data/lib/doorkeeper/oauth/token_introspection.rb +12 -16
  66. data/lib/doorkeeper/oauth/token_request.rb +3 -3
  67. data/lib/doorkeeper/oauth/token_response.rb +1 -1
  68. data/lib/doorkeeper/orm/active_record/access_grant.rb +4 -43
  69. data/lib/doorkeeper/orm/active_record/access_token.rb +4 -35
  70. data/lib/doorkeeper/orm/active_record/application.rb +5 -95
  71. data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +69 -0
  72. data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +60 -0
  73. data/lib/doorkeeper/orm/active_record/mixins/application.rb +199 -0
  74. data/lib/doorkeeper/orm/active_record/redirect_uri_validator.rb +8 -3
  75. data/lib/doorkeeper/orm/active_record.rb +5 -7
  76. data/lib/doorkeeper/rails/helpers.rb +4 -4
  77. data/lib/doorkeeper/rails/routes/abstract_router.rb +35 -0
  78. data/lib/doorkeeper/rails/routes/mapper.rb +2 -2
  79. data/lib/doorkeeper/rails/routes/registry.rb +45 -0
  80. data/lib/doorkeeper/rails/routes.rb +17 -25
  81. data/lib/doorkeeper/rake/db.rake +6 -6
  82. data/lib/doorkeeper/rake/setup.rake +5 -0
  83. data/lib/doorkeeper/request/authorization_code.rb +3 -3
  84. data/lib/doorkeeper/request/client_credentials.rb +2 -2
  85. data/lib/doorkeeper/request/password.rb +3 -2
  86. data/lib/doorkeeper/request/refresh_token.rb +5 -4
  87. data/lib/doorkeeper/request/strategy.rb +2 -2
  88. data/lib/doorkeeper/request.rb +49 -12
  89. data/lib/doorkeeper/server.rb +5 -5
  90. data/lib/doorkeeper/stale_records_cleaner.rb +4 -4
  91. data/lib/doorkeeper/version.rb +2 -6
  92. data/lib/doorkeeper.rb +112 -81
  93. data/lib/generators/doorkeeper/application_owner_generator.rb +1 -1
  94. data/lib/generators/doorkeeper/confidential_applications_generator.rb +2 -2
  95. data/lib/generators/doorkeeper/enable_polymorphic_resource_owner_generator.rb +39 -0
  96. data/lib/generators/doorkeeper/migration_generator.rb +1 -1
  97. data/lib/generators/doorkeeper/pkce_generator.rb +1 -1
  98. data/lib/generators/doorkeeper/previous_refresh_token_generator.rb +2 -2
  99. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb.erb +3 -1
  100. data/lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb.erb +2 -0
  101. data/lib/generators/doorkeeper/templates/enable_pkce_migration.rb.erb +2 -0
  102. data/lib/generators/doorkeeper/templates/enable_polymorphic_resource_owner_migration.rb.erb +17 -0
  103. data/lib/generators/doorkeeper/templates/initializer.rb +99 -14
  104. data/lib/generators/doorkeeper/templates/migration.rb.erb +14 -5
  105. metadata +37 -306
  106. data/Appraisals +0 -40
  107. data/CODE_OF_CONDUCT.md +0 -46
  108. data/CONTRIBUTING.md +0 -49
  109. data/Dangerfile +0 -67
  110. data/Dockerfile +0 -29
  111. data/Gemfile +0 -25
  112. data/NEWS.md +0 -1
  113. data/RELEASING.md +0 -11
  114. data/Rakefile +0 -28
  115. data/SECURITY.md +0 -15
  116. data/UPGRADE.md +0 -2
  117. data/bin/console +0 -16
  118. data/doorkeeper.gemspec +0 -42
  119. data/gemfiles/rails_5_0.gemfile +0 -18
  120. data/gemfiles/rails_5_1.gemfile +0 -18
  121. data/gemfiles/rails_5_2.gemfile +0 -18
  122. data/gemfiles/rails_6_0.gemfile +0 -18
  123. data/gemfiles/rails_master.gemfile +0 -18
  124. data/spec/controllers/application_metal_controller_spec.rb +0 -64
  125. data/spec/controllers/applications_controller_spec.rb +0 -273
  126. data/spec/controllers/authorizations_controller_spec.rb +0 -608
  127. data/spec/controllers/protected_resources_controller_spec.rb +0 -353
  128. data/spec/controllers/token_info_controller_spec.rb +0 -50
  129. data/spec/controllers/tokens_controller_spec.rb +0 -498
  130. data/spec/dummy/Rakefile +0 -9
  131. data/spec/dummy/app/assets/config/manifest.js +0 -2
  132. data/spec/dummy/app/controllers/application_controller.rb +0 -5
  133. data/spec/dummy/app/controllers/custom_authorizations_controller.rb +0 -9
  134. data/spec/dummy/app/controllers/full_protected_resources_controller.rb +0 -14
  135. data/spec/dummy/app/controllers/home_controller.rb +0 -18
  136. data/spec/dummy/app/controllers/metal_controller.rb +0 -13
  137. data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +0 -13
  138. data/spec/dummy/app/helpers/application_helper.rb +0 -7
  139. data/spec/dummy/app/models/user.rb +0 -7
  140. data/spec/dummy/app/views/home/index.html.erb +0 -0
  141. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  142. data/spec/dummy/config/application.rb +0 -49
  143. data/spec/dummy/config/boot.rb +0 -7
  144. data/spec/dummy/config/database.yml +0 -15
  145. data/spec/dummy/config/environment.rb +0 -5
  146. data/spec/dummy/config/environments/development.rb +0 -31
  147. data/spec/dummy/config/environments/production.rb +0 -64
  148. data/spec/dummy/config/environments/test.rb +0 -45
  149. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -9
  150. data/spec/dummy/config/initializers/doorkeeper.rb +0 -166
  151. data/spec/dummy/config/initializers/secret_token.rb +0 -10
  152. data/spec/dummy/config/initializers/session_store.rb +0 -10
  153. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -16
  154. data/spec/dummy/config/locales/doorkeeper.en.yml +0 -5
  155. data/spec/dummy/config/routes.rb +0 -13
  156. data/spec/dummy/config.ru +0 -6
  157. data/spec/dummy/db/migrate/20111122132257_create_users.rb +0 -11
  158. data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +0 -7
  159. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +0 -69
  160. data/spec/dummy/db/migrate/20151223200000_add_owner_to_application.rb +0 -9
  161. data/spec/dummy/db/migrate/20160320211015_add_previous_refresh_token_to_access_tokens.rb +0 -13
  162. data/spec/dummy/db/migrate/20170822064514_enable_pkce.rb +0 -8
  163. data/spec/dummy/db/migrate/20180210183654_add_confidential_to_applications.rb +0 -13
  164. data/spec/dummy/db/schema.rb +0 -68
  165. data/spec/dummy/public/404.html +0 -26
  166. data/spec/dummy/public/422.html +0 -26
  167. data/spec/dummy/public/500.html +0 -26
  168. data/spec/dummy/public/favicon.ico +0 -0
  169. data/spec/dummy/script/rails +0 -9
  170. data/spec/factories.rb +0 -30
  171. data/spec/generators/application_owner_generator_spec.rb +0 -28
  172. data/spec/generators/confidential_applications_generator_spec.rb +0 -29
  173. data/spec/generators/install_generator_spec.rb +0 -36
  174. data/spec/generators/migration_generator_spec.rb +0 -28
  175. data/spec/generators/pkce_generator_spec.rb +0 -28
  176. data/spec/generators/previous_refresh_token_generator_spec.rb +0 -44
  177. data/spec/generators/templates/routes.rb +0 -4
  178. data/spec/generators/views_generator_spec.rb +0 -29
  179. data/spec/grape/grape_integration_spec.rb +0 -137
  180. data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +0 -26
  181. data/spec/lib/config_spec.rb +0 -739
  182. data/spec/lib/doorkeeper_spec.rb +0 -27
  183. data/spec/lib/models/expirable_spec.rb +0 -61
  184. data/spec/lib/models/reusable_spec.rb +0 -40
  185. data/spec/lib/models/revocable_spec.rb +0 -59
  186. data/spec/lib/models/scopes_spec.rb +0 -53
  187. data/spec/lib/models/secret_storable_spec.rb +0 -135
  188. data/spec/lib/oauth/authorization/uri_builder_spec.rb +0 -39
  189. data/spec/lib/oauth/authorization_code_request_spec.rb +0 -168
  190. data/spec/lib/oauth/base_request_spec.rb +0 -222
  191. data/spec/lib/oauth/base_response_spec.rb +0 -47
  192. data/spec/lib/oauth/client/credentials_spec.rb +0 -90
  193. data/spec/lib/oauth/client_credentials/creator_spec.rb +0 -97
  194. data/spec/lib/oauth/client_credentials/issuer_spec.rb +0 -112
  195. data/spec/lib/oauth/client_credentials/validation_spec.rb +0 -59
  196. data/spec/lib/oauth/client_credentials_integration_spec.rb +0 -29
  197. data/spec/lib/oauth/client_credentials_request_spec.rb +0 -109
  198. data/spec/lib/oauth/client_spec.rb +0 -38
  199. data/spec/lib/oauth/code_request_spec.rb +0 -46
  200. data/spec/lib/oauth/code_response_spec.rb +0 -36
  201. data/spec/lib/oauth/error_response_spec.rb +0 -66
  202. data/spec/lib/oauth/error_spec.rb +0 -23
  203. data/spec/lib/oauth/forbidden_token_response_spec.rb +0 -22
  204. data/spec/lib/oauth/helpers/scope_checker_spec.rb +0 -98
  205. data/spec/lib/oauth/helpers/unique_token_spec.rb +0 -21
  206. data/spec/lib/oauth/helpers/uri_checker_spec.rb +0 -262
  207. data/spec/lib/oauth/invalid_request_response_spec.rb +0 -75
  208. data/spec/lib/oauth/invalid_token_response_spec.rb +0 -55
  209. data/spec/lib/oauth/password_access_token_request_spec.rb +0 -192
  210. data/spec/lib/oauth/pre_authorization_spec.rb +0 -225
  211. data/spec/lib/oauth/refresh_token_request_spec.rb +0 -178
  212. data/spec/lib/oauth/scopes_spec.rb +0 -148
  213. data/spec/lib/oauth/token_request_spec.rb +0 -153
  214. data/spec/lib/oauth/token_response_spec.rb +0 -86
  215. data/spec/lib/oauth/token_spec.rb +0 -158
  216. data/spec/lib/request/strategy_spec.rb +0 -54
  217. data/spec/lib/secret_storing/base_spec.rb +0 -60
  218. data/spec/lib/secret_storing/bcrypt_spec.rb +0 -49
  219. data/spec/lib/secret_storing/plain_spec.rb +0 -44
  220. data/spec/lib/secret_storing/sha256_hash_spec.rb +0 -48
  221. data/spec/lib/server_spec.rb +0 -49
  222. data/spec/lib/stale_records_cleaner_spec.rb +0 -89
  223. data/spec/models/doorkeeper/access_grant_spec.rb +0 -163
  224. data/spec/models/doorkeeper/access_token_spec.rb +0 -622
  225. data/spec/models/doorkeeper/application_spec.rb +0 -377
  226. data/spec/requests/applications/applications_request_spec.rb +0 -259
  227. data/spec/requests/applications/authorized_applications_spec.rb +0 -32
  228. data/spec/requests/endpoints/authorization_spec.rb +0 -89
  229. data/spec/requests/endpoints/token_spec.rb +0 -75
  230. data/spec/requests/flows/authorization_code_errors_spec.rb +0 -79
  231. data/spec/requests/flows/authorization_code_spec.rb +0 -513
  232. data/spec/requests/flows/client_credentials_spec.rb +0 -166
  233. data/spec/requests/flows/implicit_grant_errors_spec.rb +0 -46
  234. data/spec/requests/flows/implicit_grant_spec.rb +0 -91
  235. data/spec/requests/flows/password_spec.rb +0 -296
  236. data/spec/requests/flows/refresh_token_spec.rb +0 -233
  237. data/spec/requests/flows/revoke_token_spec.rb +0 -151
  238. data/spec/requests/flows/skip_authorization_spec.rb +0 -66
  239. data/spec/requests/protected_resources/metal_spec.rb +0 -16
  240. data/spec/requests/protected_resources/private_api_spec.rb +0 -83
  241. data/spec/routing/custom_controller_routes_spec.rb +0 -133
  242. data/spec/routing/default_routes_spec.rb +0 -41
  243. data/spec/routing/scoped_routes_spec.rb +0 -47
  244. data/spec/spec_helper.rb +0 -57
  245. data/spec/spec_helper_integration.rb +0 -4
  246. data/spec/support/dependencies/factory_bot.rb +0 -4
  247. data/spec/support/doorkeeper_rspec.rb +0 -22
  248. data/spec/support/helpers/access_token_request_helper.rb +0 -13
  249. data/spec/support/helpers/authorization_request_helper.rb +0 -43
  250. data/spec/support/helpers/config_helper.rb +0 -11
  251. data/spec/support/helpers/model_helper.rb +0 -78
  252. data/spec/support/helpers/request_spec_helper.rb +0 -110
  253. data/spec/support/helpers/url_helper.rb +0 -62
  254. data/spec/support/http_method_shim.rb +0 -29
  255. data/spec/support/orm/active_record.rb +0 -5
  256. data/spec/support/shared/controllers_shared_context.rb +0 -123
  257. data/spec/support/shared/hashing_shared_context.rb +0 -36
  258. data/spec/support/shared/models_shared_examples.rb +0 -54
  259. data/spec/validators/redirect_uri_validator_spec.rb +0 -183
  260. data/spec/version/version_spec.rb +0 -17
@@ -1,739 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- describe Doorkeeper, "configuration" do
6
- subject { Doorkeeper.configuration }
7
-
8
- describe "resource_owner_authenticator" do
9
- it "sets the block that is accessible via authenticate_resource_owner" do
10
- block = proc {}
11
- Doorkeeper.configure do
12
- orm DOORKEEPER_ORM
13
- resource_owner_authenticator(&block)
14
- end
15
-
16
- expect(subject.authenticate_resource_owner).to eq(block)
17
- end
18
-
19
- it "prints warning message by default" do
20
- Doorkeeper.configure do
21
- orm DOORKEEPER_ORM
22
- end
23
-
24
- expect(Rails.logger).to receive(:warn).with(
25
- I18n.t("doorkeeper.errors.messages.resource_owner_authenticator_not_configured")
26
- )
27
- subject.authenticate_resource_owner.call(nil)
28
- end
29
- end
30
-
31
- describe "resource_owner_from_credentials" do
32
- it "sets the block that is accessible via authenticate_resource_owner" do
33
- block = proc {}
34
- Doorkeeper.configure do
35
- orm DOORKEEPER_ORM
36
- resource_owner_from_credentials(&block)
37
- end
38
-
39
- expect(subject.resource_owner_from_credentials).to eq(block)
40
- end
41
-
42
- it "prints warning message by default" do
43
- Doorkeeper.configure do
44
- orm DOORKEEPER_ORM
45
- end
46
-
47
- expect(Rails.logger).to receive(:warn).with(
48
- I18n.t("doorkeeper.errors.messages.credential_flow_not_configured")
49
- )
50
- subject.resource_owner_from_credentials.call(nil)
51
- end
52
- end
53
-
54
- describe "setup_orm_adapter" do
55
- it "adds specific error message to NameError exception" do
56
- expect do
57
- Doorkeeper.configure { orm "hibernate" }
58
- end.to raise_error(NameError, /ORM adapter not found \(hibernate\)/)
59
- end
60
-
61
- it "does not change other exceptions" do
62
- allow(Doorkeeper).to receive(:setup_orm_adapter) { raise NoMethodError }
63
-
64
- expect do
65
- Doorkeeper.configure { orm "hibernate" }
66
- end.to raise_error(NoMethodError)
67
- end
68
- end
69
-
70
- describe "admin_authenticator" do
71
- it "sets the block that is accessible via authenticate_admin" do
72
- default_behaviour = "default behaviour"
73
- allow(Doorkeeper::Config).to receive(:head).and_return(default_behaviour)
74
-
75
- Doorkeeper.configure do
76
- orm DOORKEEPER_ORM
77
- end
78
-
79
- expect(subject.authenticate_admin.call({})).to eq(default_behaviour)
80
- end
81
-
82
- it "sets the block that is accessible via authenticate_admin" do
83
- block = proc {}
84
- Doorkeeper.configure do
85
- orm DOORKEEPER_ORM
86
- admin_authenticator(&block)
87
- end
88
-
89
- expect(subject.authenticate_admin).to eq(block)
90
- end
91
- end
92
-
93
- describe "access_token_expires_in" do
94
- it "has 2 hours by default" do
95
- expect(subject.access_token_expires_in).to eq(2.hours)
96
- end
97
-
98
- it "can change the value" do
99
- Doorkeeper.configure do
100
- orm DOORKEEPER_ORM
101
- access_token_expires_in 4.hours
102
- end
103
- expect(subject.access_token_expires_in).to eq(4.hours)
104
- end
105
-
106
- it "can be set to nil" do
107
- Doorkeeper.configure do
108
- orm DOORKEEPER_ORM
109
- access_token_expires_in nil
110
- end
111
-
112
- expect(subject.access_token_expires_in).to be_nil
113
- end
114
- end
115
-
116
- describe "scopes" do
117
- it "has default scopes" do
118
- Doorkeeper.configure do
119
- orm DOORKEEPER_ORM
120
- default_scopes :public
121
- end
122
-
123
- expect(subject.default_scopes).to include("public")
124
- end
125
-
126
- it "has optional scopes" do
127
- Doorkeeper.configure do
128
- orm DOORKEEPER_ORM
129
- optional_scopes :write, :update
130
- end
131
-
132
- expect(subject.optional_scopes).to include("write", "update")
133
- end
134
-
135
- it "has all scopes" do
136
- Doorkeeper.configure do
137
- orm DOORKEEPER_ORM
138
- default_scopes :normal
139
- optional_scopes :admin
140
- end
141
-
142
- expect(subject.scopes).to include("normal", "admin")
143
- end
144
- end
145
-
146
- describe "scopes_by_grant_type" do
147
- it "is {} by default" do
148
- expect(subject.scopes_by_grant_type).to eq({})
149
- end
150
-
151
- it "has hash value" do
152
- hash = {}
153
- Doorkeeper.configure do
154
- orm DOORKEEPER_ORM
155
- scopes_by_grant_type hash
156
- end
157
-
158
- expect(subject.scopes_by_grant_type).to eq(hash)
159
- end
160
- end
161
-
162
- describe "use_refresh_token" do
163
- it "is false by default" do
164
- expect(subject.refresh_token_enabled?).to eq(false)
165
- end
166
-
167
- it "can change the value" do
168
- Doorkeeper.configure do
169
- orm DOORKEEPER_ORM
170
- use_refresh_token
171
- end
172
-
173
- expect(subject.refresh_token_enabled?).to eq(true)
174
- end
175
-
176
- it "can accept a boolean parameter" do
177
- Doorkeeper.configure do
178
- orm DOORKEEPER_ORM
179
- use_refresh_token false
180
- end
181
-
182
- expect(subject.refresh_token_enabled?).to eq(false)
183
- end
184
-
185
- it "can accept a block parameter" do
186
- Doorkeeper.configure do
187
- orm DOORKEEPER_ORM
188
- use_refresh_token { |_context| nil }
189
- end
190
-
191
- expect(subject.refresh_token_enabled?).to be_a(Proc)
192
- end
193
-
194
- it "does not includes 'refresh_token' in authorization_response_types" do
195
- expect(subject.token_grant_types).not_to include "refresh_token"
196
- end
197
-
198
- context "is enabled" do
199
- before do
200
- Doorkeeper.configure do
201
- orm DOORKEEPER_ORM
202
- use_refresh_token
203
- end
204
- end
205
-
206
- it "includes 'refresh_token' in authorization_response_types" do
207
- expect(subject.token_grant_types).to include "refresh_token"
208
- end
209
- end
210
- end
211
-
212
- describe "token_reuse_limit" do
213
- it "is 100 by default" do
214
- expect(subject.token_reuse_limit).to eq(100)
215
- end
216
-
217
- it "can change the value" do
218
- Doorkeeper.configure do
219
- token_reuse_limit 90
220
- end
221
-
222
- expect(subject.token_reuse_limit).to eq(90)
223
- end
224
-
225
- it "sets the value to 100 if invalid value is being set" do
226
- expect(Rails.logger).to receive(:warn).with(/will be set to default 100/)
227
-
228
- Doorkeeper.configure do
229
- reuse_access_token
230
- token_reuse_limit 110
231
- end
232
-
233
- expect(subject.token_reuse_limit).to eq(100)
234
- end
235
- end
236
-
237
- describe "enforce_configured_scopes" do
238
- it "is false by default" do
239
- expect(subject.enforce_configured_scopes?).to eq(false)
240
- end
241
-
242
- it "can change the value" do
243
- Doorkeeper.configure do
244
- orm DOORKEEPER_ORM
245
- enforce_configured_scopes
246
- end
247
-
248
- expect(subject.enforce_configured_scopes?).to eq(true)
249
- end
250
- end
251
-
252
- describe "client_credentials" do
253
- it "has defaults order" do
254
- expect(subject.client_credentials_methods)
255
- .to eq(%i[from_basic from_params])
256
- end
257
-
258
- it "can change the value" do
259
- Doorkeeper.configure do
260
- orm DOORKEEPER_ORM
261
- client_credentials :from_digest, :from_params
262
- end
263
-
264
- expect(subject.client_credentials_methods)
265
- .to eq(%i[from_digest from_params])
266
- end
267
- end
268
-
269
- describe "force_ssl_in_redirect_uri" do
270
- it "is true by default in non-development environments" do
271
- expect(subject.force_ssl_in_redirect_uri).to eq(true)
272
- end
273
-
274
- it "can change the value" do
275
- Doorkeeper.configure do
276
- orm DOORKEEPER_ORM
277
- force_ssl_in_redirect_uri(false)
278
- end
279
-
280
- expect(subject.force_ssl_in_redirect_uri).to eq(false)
281
- end
282
-
283
- it "can be a callable object" do
284
- block = proc { false }
285
- Doorkeeper.configure do
286
- orm DOORKEEPER_ORM
287
- force_ssl_in_redirect_uri(&block)
288
- end
289
-
290
- expect(subject.force_ssl_in_redirect_uri).to eq(block)
291
- expect(subject.force_ssl_in_redirect_uri.call).to eq(false)
292
- end
293
- end
294
-
295
- describe "access_token_methods" do
296
- it "has defaults order" do
297
- expect(subject.access_token_methods)
298
- .to eq(%i[from_bearer_authorization from_access_token_param from_bearer_param])
299
- end
300
-
301
- it "can change the value" do
302
- Doorkeeper.configure do
303
- orm DOORKEEPER_ORM
304
- access_token_methods :from_access_token_param, :from_bearer_param
305
- end
306
-
307
- expect(subject.access_token_methods)
308
- .to eq(%i[from_access_token_param from_bearer_param])
309
- end
310
- end
311
-
312
- describe "forbid_redirect_uri" do
313
- it "is false by default" do
314
- expect(subject.forbid_redirect_uri.call(URI.parse("https://localhost"))).to eq(false)
315
- end
316
-
317
- it "can be a callable object" do
318
- block = proc { true }
319
- Doorkeeper.configure do
320
- orm DOORKEEPER_ORM
321
- forbid_redirect_uri(&block)
322
- end
323
-
324
- expect(subject.forbid_redirect_uri).to eq(block)
325
- expect(subject.forbid_redirect_uri.call).to eq(true)
326
- end
327
- end
328
-
329
- describe "enable_application_owner" do
330
- it "is disabled by default" do
331
- expect(Doorkeeper.configuration.enable_application_owner?).not_to eq(true)
332
- end
333
-
334
- context "when enabled without confirmation" do
335
- before do
336
- Doorkeeper.configure do
337
- orm DOORKEEPER_ORM
338
- enable_application_owner
339
- end
340
- end
341
-
342
- it "adds support for application owner" do
343
- expect(Doorkeeper::Application.new).to respond_to :owner
344
- end
345
-
346
- it "Doorkeeper.configuration.confirm_application_owner? returns false" do
347
- expect(Doorkeeper.configuration.confirm_application_owner?).not_to eq(true)
348
- end
349
- end
350
-
351
- context "when enabled with confirmation set to true" do
352
- before do
353
- Doorkeeper.configure do
354
- orm DOORKEEPER_ORM
355
- enable_application_owner confirmation: true
356
- end
357
- end
358
-
359
- it "adds support for application owner" do
360
- expect(Doorkeeper::Application.new).to respond_to :owner
361
- end
362
-
363
- it "Doorkeeper.configuration.confirm_application_owner? returns true" do
364
- expect(Doorkeeper.configuration.confirm_application_owner?).to eq(true)
365
- end
366
- end
367
- end
368
-
369
- describe "realm" do
370
- it "is 'Doorkeeper' by default" do
371
- expect(Doorkeeper.configuration.realm).to eq("Doorkeeper")
372
- end
373
-
374
- it "can change the value" do
375
- Doorkeeper.configure do
376
- orm DOORKEEPER_ORM
377
- realm "Example"
378
- end
379
-
380
- expect(subject.realm).to eq("Example")
381
- end
382
- end
383
-
384
- describe "grant_flows" do
385
- it "is set to all grant flows by default" do
386
- expect(Doorkeeper.configuration.grant_flows)
387
- .to eq(%w[authorization_code client_credentials])
388
- end
389
-
390
- it "can change the value" do
391
- Doorkeeper.configure do
392
- orm DOORKEEPER_ORM
393
- grant_flows %w[authorization_code implicit]
394
- end
395
-
396
- expect(subject.grant_flows).to eq %w[authorization_code implicit]
397
- end
398
-
399
- context "when including 'authorization_code'" do
400
- before do
401
- Doorkeeper.configure do
402
- orm DOORKEEPER_ORM
403
- grant_flows ["authorization_code"]
404
- end
405
- end
406
-
407
- it "includes 'code' in authorization_response_types" do
408
- expect(subject.authorization_response_types).to include "code"
409
- end
410
-
411
- it "includes 'authorization_code' in token_grant_types" do
412
- expect(subject.token_grant_types).to include "authorization_code"
413
- end
414
- end
415
-
416
- context "when including 'implicit'" do
417
- before do
418
- Doorkeeper.configure do
419
- orm DOORKEEPER_ORM
420
- grant_flows ["implicit"]
421
- end
422
- end
423
-
424
- it "includes 'token' in authorization_response_types" do
425
- expect(subject.authorization_response_types).to include "token"
426
- end
427
- end
428
-
429
- context "when including 'password'" do
430
- before do
431
- Doorkeeper.configure do
432
- orm DOORKEEPER_ORM
433
- grant_flows ["password"]
434
- end
435
- end
436
-
437
- it "includes 'password' in token_grant_types" do
438
- expect(subject.token_grant_types).to include "password"
439
- end
440
- end
441
-
442
- context "when including 'client_credentials'" do
443
- before do
444
- Doorkeeper.configure do
445
- orm DOORKEEPER_ORM
446
- grant_flows ["client_credentials"]
447
- end
448
- end
449
-
450
- it "includes 'client_credentials' in token_grant_types" do
451
- expect(subject.token_grant_types).to include "client_credentials"
452
- end
453
- end
454
- end
455
-
456
- it "raises an exception when configuration is not set" do
457
- old_config = Doorkeeper.configuration
458
- Doorkeeper.module_eval do
459
- @config = nil
460
- end
461
-
462
- expect do
463
- Doorkeeper.configuration
464
- end.to raise_error Doorkeeper::MissingConfiguration
465
-
466
- Doorkeeper.module_eval do
467
- @config = old_config
468
- end
469
- end
470
-
471
- describe "access_token_generator" do
472
- it "is 'Doorkeeper::OAuth::Helpers::UniqueToken' by default" do
473
- expect(Doorkeeper.configuration.access_token_generator).to(
474
- eq("Doorkeeper::OAuth::Helpers::UniqueToken")
475
- )
476
- end
477
-
478
- it "can change the value" do
479
- Doorkeeper.configure do
480
- orm DOORKEEPER_ORM
481
- access_token_generator "Example"
482
- end
483
- expect(subject.access_token_generator).to eq("Example")
484
- end
485
- end
486
-
487
- describe "default_generator_method" do
488
- it "is :urlsafe_base64 by default" do
489
- expect(Doorkeeper.configuration.default_generator_method)
490
- .to eq(:urlsafe_base64)
491
- end
492
-
493
- it "can change the value" do
494
- Doorkeeper.configure do
495
- orm DOORKEEPER_ORM
496
- default_generator_method :hex
497
- end
498
-
499
- expect(subject.default_generator_method).to eq(:hex)
500
- end
501
- end
502
-
503
- describe "base_controller" do
504
- context "default" do
505
- it { expect(Doorkeeper.configuration.base_controller).to be_an_instance_of(Proc) }
506
-
507
- it "resolves to a ApplicationController::Base in default mode" do
508
- expect(Doorkeeper.configuration.resolve_controller(:base))
509
- .to eq(ActionController::Base)
510
- end
511
-
512
- it "resolves to a ApplicationController::API in api_only mode" do
513
- Doorkeeper.configure do
514
- api_only
515
- end
516
-
517
- expect(Doorkeeper.configuration.resolve_controller(:base))
518
- .to eq(ActionController::API)
519
- end
520
- end
521
-
522
- context "custom" do
523
- before do
524
- Doorkeeper.configure do
525
- orm DOORKEEPER_ORM
526
- base_controller "ApplicationController"
527
- end
528
- end
529
-
530
- it { expect(Doorkeeper.configuration.base_controller).to eq("ApplicationController") }
531
- end
532
- end
533
-
534
- describe "base_metal_controller" do
535
- context "default" do
536
- it { expect(Doorkeeper.configuration.base_metal_controller).to eq("ActionController::API") }
537
- end
538
-
539
- context "custom" do
540
- before do
541
- Doorkeeper.configure do
542
- orm DOORKEEPER_ORM
543
- base_metal_controller { "ApplicationController" }
544
- end
545
- end
546
-
547
- it { expect(Doorkeeper.configuration.resolve_controller(:base_metal)).to eq(ApplicationController) }
548
- end
549
- end
550
-
551
- if DOORKEEPER_ORM == :active_record
552
- describe "active_record_options" do
553
- let(:models) { [Doorkeeper::AccessGrant, Doorkeeper::AccessToken, Doorkeeper::Application] }
554
-
555
- before do
556
- models.each do |model|
557
- allow(model).to receive(:establish_connection).and_return(true)
558
- end
559
- end
560
-
561
- it "establishes connection for Doorkeeper models based on options" do
562
- models.each do |model|
563
- expect(model).to receive(:establish_connection)
564
- end
565
-
566
- Doorkeeper.configure do
567
- orm DOORKEEPER_ORM
568
- active_record_options(
569
- establish_connection: Rails.configuration.database_configuration[Rails.env]
570
- )
571
- end
572
- end
573
- end
574
- end
575
-
576
- describe "api_only" do
577
- it "is false by default" do
578
- expect(subject.api_only).to eq(false)
579
- end
580
-
581
- it "can change the value" do
582
- Doorkeeper.configure do
583
- orm DOORKEEPER_ORM
584
- api_only
585
- end
586
-
587
- expect(subject.api_only).to eq(true)
588
- end
589
- end
590
-
591
- describe "strict_content_type" do
592
- it "is false by default" do
593
- expect(subject.enforce_content_type).to eq(false)
594
- end
595
-
596
- it "can change the value" do
597
- Doorkeeper.configure do
598
- orm DOORKEEPER_ORM
599
- enforce_content_type
600
- end
601
-
602
- expect(subject.enforce_content_type).to eq(true)
603
- end
604
- end
605
-
606
- describe "handle_auth_errors" do
607
- it "is set to render by default" do
608
- expect(Doorkeeper.configuration.handle_auth_errors).to eq(:render)
609
- end
610
- it "can change the value" do
611
- Doorkeeper.configure do
612
- orm DOORKEEPER_ORM
613
- handle_auth_errors :raise
614
- end
615
- expect(subject.handle_auth_errors).to eq(:raise)
616
- end
617
- end
618
-
619
- describe "token_secret_strategy" do
620
- it "is plain by default" do
621
- expect(subject.token_secret_strategy).to eq(Doorkeeper::SecretStoring::Plain)
622
- expect(subject.token_secret_fallback_strategy).to eq(nil)
623
- end
624
-
625
- context "when provided" do
626
- before do
627
- Doorkeeper.configure do
628
- hash_token_secrets
629
- end
630
- end
631
-
632
- it "will enable hashing for applications" do
633
- expect(subject.token_secret_strategy).to eq(Doorkeeper::SecretStoring::Sha256Hash)
634
- expect(subject.token_secret_fallback_strategy).to eq(nil)
635
- end
636
- end
637
-
638
- context "when manually provided with invalid constant" do
639
- it "raises an exception" do
640
- expect do
641
- Doorkeeper.configure do
642
- hash_token_secrets using: "does not exist"
643
- end
644
- end.to raise_error(NameError)
645
- end
646
- end
647
-
648
- context "when manually provided with invalid option" do
649
- it "raises an exception" do
650
- expect do
651
- Doorkeeper.configure do
652
- hash_token_secrets using: "Doorkeeper::SecretStoring::BCrypt"
653
- end
654
- end.to raise_error(ArgumentError,
655
- /can only be used for storing application secrets/)
656
- end
657
- end
658
-
659
- context "when provided with fallback" do
660
- before do
661
- Doorkeeper.configure do
662
- hash_token_secrets fallback: :plain
663
- end
664
- end
665
-
666
- it "will enable hashing for applications" do
667
- expect(subject.token_secret_strategy).to eq(Doorkeeper::SecretStoring::Sha256Hash)
668
- expect(subject.token_secret_fallback_strategy).to eq(Doorkeeper::SecretStoring::Plain)
669
- end
670
- end
671
-
672
- describe "hash_token_secrets together with reuse_access_token" do
673
- it "will disable reuse_access_token" do
674
- expect(Rails.logger).to receive(:warn).with(/reuse_access_token will be disabled/)
675
-
676
- Doorkeeper.configure do
677
- reuse_access_token
678
- hash_token_secrets
679
- end
680
-
681
- expect(subject.reuse_access_token).to eq(false)
682
- end
683
- end
684
- end
685
-
686
- describe "application_secret_strategy" do
687
- it "is plain by default" do
688
- expect(subject.application_secret_strategy).to eq(Doorkeeper::SecretStoring::Plain)
689
- expect(subject.application_secret_fallback_strategy).to eq(nil)
690
- end
691
-
692
- context "when provided" do
693
- before do
694
- Doorkeeper.configure do
695
- hash_application_secrets
696
- end
697
- end
698
-
699
- it "will enable hashing for applications" do
700
- expect(subject.application_secret_strategy).to eq(Doorkeeper::SecretStoring::Sha256Hash)
701
- expect(subject.application_secret_fallback_strategy).to eq(nil)
702
- end
703
- end
704
-
705
- context "when manually provided with invalid constant" do
706
- it "raises an exception" do
707
- expect do
708
- Doorkeeper.configure do
709
- hash_application_secrets using: "does not exist"
710
- end
711
- end.to raise_error(NameError)
712
- end
713
- end
714
-
715
- context "when provided with fallback" do
716
- before do
717
- Doorkeeper.configure do
718
- hash_application_secrets fallback: :plain
719
- end
720
- end
721
-
722
- it "will enable hashing for applications" do
723
- expect(subject.application_secret_strategy).to eq(Doorkeeper::SecretStoring::Sha256Hash)
724
- expect(subject.application_secret_fallback_strategy).to eq(Doorkeeper::SecretStoring::Plain)
725
- end
726
- end
727
- end
728
-
729
- describe "options deprecation" do
730
- it "prints a warning message when an option is deprecated" do
731
- expect(Kernel).to receive(:warn).with(
732
- "[DOORKEEPER] native_redirect_uri has been deprecated and will soon be removed"
733
- )
734
- Doorkeeper.configure do
735
- native_redirect_uri "urn:ietf:wg:oauth:2.0:oob"
736
- end
737
- end
738
- end
739
- end