doorkeeper 5.1.2 → 5.6.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (272) hide show
  1. checksums.yaml +4 -4
  2. data/{NEWS.md → CHANGELOG.md} +314 -27
  3. data/README.md +39 -22
  4. data/app/controllers/doorkeeper/application_controller.rb +3 -2
  5. data/app/controllers/doorkeeper/application_metal_controller.rb +3 -2
  6. data/app/controllers/doorkeeper/applications_controller.rb +5 -4
  7. data/app/controllers/doorkeeper/authorizations_controller.rb +76 -25
  8. data/app/controllers/doorkeeper/authorized_applications_controller.rb +5 -5
  9. data/app/controllers/doorkeeper/token_info_controller.rb +12 -2
  10. data/app/controllers/doorkeeper/tokens_controller.rb +99 -28
  11. data/app/helpers/doorkeeper/dashboard_helper.rb +1 -1
  12. data/app/views/doorkeeper/applications/_form.html.erb +1 -7
  13. data/app/views/doorkeeper/applications/show.html.erb +35 -14
  14. data/app/views/doorkeeper/authorizations/error.html.erb +3 -1
  15. data/app/views/doorkeeper/authorizations/form_post.html.erb +15 -0
  16. data/app/views/doorkeeper/authorizations/new.html.erb +16 -14
  17. data/config/locales/en.yml +16 -3
  18. data/lib/doorkeeper/config/abstract_builder.rb +28 -0
  19. data/lib/doorkeeper/config/option.rb +20 -2
  20. data/lib/doorkeeper/config/validations.rb +53 -0
  21. data/lib/doorkeeper/config.rb +300 -136
  22. data/lib/doorkeeper/engine.rb +10 -3
  23. data/lib/doorkeeper/errors.rb +13 -18
  24. data/lib/doorkeeper/grant_flow/fallback_flow.rb +15 -0
  25. data/lib/doorkeeper/grant_flow/flow.rb +44 -0
  26. data/lib/doorkeeper/grant_flow/registry.rb +50 -0
  27. data/lib/doorkeeper/grant_flow.rb +45 -0
  28. data/lib/doorkeeper/grape/helpers.rb +7 -3
  29. data/lib/doorkeeper/helpers/controller.rb +36 -11
  30. data/lib/doorkeeper/models/access_grant_mixin.rb +23 -19
  31. data/lib/doorkeeper/models/access_token_mixin.rb +195 -52
  32. data/lib/doorkeeper/models/application_mixin.rb +8 -7
  33. data/lib/doorkeeper/models/concerns/expirable.rb +1 -1
  34. data/lib/doorkeeper/models/concerns/expiration_time_sql_math.rb +88 -0
  35. data/lib/doorkeeper/models/concerns/ownership.rb +1 -1
  36. data/lib/doorkeeper/models/concerns/polymorphic_resource_owner.rb +30 -0
  37. data/lib/doorkeeper/models/concerns/resource_ownerable.rb +47 -0
  38. data/lib/doorkeeper/models/concerns/reusable.rb +1 -1
  39. data/lib/doorkeeper/models/concerns/revocable.rb +1 -28
  40. data/lib/doorkeeper/models/concerns/scopes.rb +5 -1
  41. data/lib/doorkeeper/models/concerns/secret_storable.rb +1 -3
  42. data/lib/doorkeeper/oauth/authorization/code.rb +31 -14
  43. data/lib/doorkeeper/oauth/authorization/context.rb +5 -5
  44. data/lib/doorkeeper/oauth/authorization/token.rb +30 -19
  45. data/lib/doorkeeper/oauth/authorization/uri_builder.rb +4 -4
  46. data/lib/doorkeeper/oauth/authorization_code_request.rb +51 -22
  47. data/lib/doorkeeper/oauth/base_request.rb +21 -22
  48. data/lib/doorkeeper/oauth/client/credentials.rb +2 -4
  49. data/lib/doorkeeper/oauth/client.rb +8 -9
  50. data/lib/doorkeeper/oauth/client_credentials/creator.rb +42 -5
  51. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +10 -8
  52. data/lib/doorkeeper/oauth/client_credentials/{validation.rb → validator.rb} +14 -5
  53. data/lib/doorkeeper/oauth/client_credentials_request.rb +8 -7
  54. data/lib/doorkeeper/oauth/code_request.rb +6 -12
  55. data/lib/doorkeeper/oauth/code_response.rb +24 -14
  56. data/lib/doorkeeper/oauth/error.rb +1 -1
  57. data/lib/doorkeeper/oauth/error_response.rb +11 -13
  58. data/lib/doorkeeper/oauth/forbidden_token_response.rb +2 -1
  59. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +8 -12
  60. data/lib/doorkeeper/oauth/helpers/unique_token.rb +10 -7
  61. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +19 -23
  62. data/lib/doorkeeper/oauth/hooks/context.rb +21 -0
  63. data/lib/doorkeeper/oauth/invalid_request_response.rb +43 -0
  64. data/lib/doorkeeper/oauth/invalid_token_response.rb +7 -4
  65. data/lib/doorkeeper/oauth/nonstandard.rb +39 -0
  66. data/lib/doorkeeper/oauth/password_access_token_request.rb +34 -11
  67. data/lib/doorkeeper/oauth/pre_authorization.rb +114 -44
  68. data/lib/doorkeeper/oauth/refresh_token_request.rb +54 -34
  69. data/lib/doorkeeper/oauth/token.rb +6 -7
  70. data/lib/doorkeeper/oauth/token_introspection.rb +28 -22
  71. data/lib/doorkeeper/oauth/token_request.rb +6 -20
  72. data/lib/doorkeeper/oauth/token_response.rb +2 -3
  73. data/lib/doorkeeper/orm/active_record/access_grant.rb +4 -43
  74. data/lib/doorkeeper/orm/active_record/access_token.rb +4 -35
  75. data/lib/doorkeeper/orm/active_record/application.rb +5 -149
  76. data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +63 -0
  77. data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +77 -0
  78. data/lib/doorkeeper/orm/active_record/mixins/application.rb +210 -0
  79. data/lib/doorkeeper/orm/active_record/redirect_uri_validator.rb +66 -0
  80. data/lib/doorkeeper/orm/active_record/stale_records_cleaner.rb +5 -2
  81. data/lib/doorkeeper/orm/active_record.rb +29 -22
  82. data/lib/doorkeeper/rails/helpers.rb +4 -4
  83. data/lib/doorkeeper/rails/routes/abstract_router.rb +35 -0
  84. data/lib/doorkeeper/rails/routes/mapper.rb +2 -2
  85. data/lib/doorkeeper/rails/routes/registry.rb +45 -0
  86. data/lib/doorkeeper/rails/routes.rb +28 -27
  87. data/lib/doorkeeper/rake/db.rake +6 -6
  88. data/lib/doorkeeper/request/authorization_code.rb +5 -3
  89. data/lib/doorkeeper/request/client_credentials.rb +2 -2
  90. data/lib/doorkeeper/request/password.rb +3 -2
  91. data/lib/doorkeeper/request/refresh_token.rb +5 -4
  92. data/lib/doorkeeper/request/strategy.rb +2 -2
  93. data/lib/doorkeeper/request.rb +49 -17
  94. data/lib/doorkeeper/server.rb +7 -11
  95. data/lib/doorkeeper/stale_records_cleaner.rb +6 -2
  96. data/lib/doorkeeper/version.rb +2 -6
  97. data/lib/doorkeeper.rb +183 -80
  98. data/lib/generators/doorkeeper/application_owner_generator.rb +1 -1
  99. data/lib/generators/doorkeeper/confidential_applications_generator.rb +2 -2
  100. data/lib/generators/doorkeeper/enable_polymorphic_resource_owner_generator.rb +39 -0
  101. data/lib/generators/doorkeeper/migration_generator.rb +1 -1
  102. data/lib/generators/doorkeeper/pkce_generator.rb +1 -1
  103. data/lib/generators/doorkeeper/previous_refresh_token_generator.rb +7 -7
  104. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb.erb +3 -1
  105. data/lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb.erb +2 -0
  106. data/lib/generators/doorkeeper/templates/enable_pkce_migration.rb.erb +2 -0
  107. data/lib/generators/doorkeeper/templates/enable_polymorphic_resource_owner_migration.rb.erb +17 -0
  108. data/lib/generators/doorkeeper/templates/initializer.rb +230 -50
  109. data/lib/generators/doorkeeper/templates/migration.rb.erb +31 -9
  110. metadata +61 -327
  111. data/.coveralls.yml +0 -1
  112. data/.github/ISSUE_TEMPLATE.md +0 -25
  113. data/.github/PULL_REQUEST_TEMPLATE.md +0 -17
  114. data/.gitignore +0 -20
  115. data/.gitlab-ci.yml +0 -16
  116. data/.hound.yml +0 -3
  117. data/.rspec +0 -1
  118. data/.rubocop.yml +0 -50
  119. data/.travis.yml +0 -35
  120. data/Appraisals +0 -40
  121. data/CODE_OF_CONDUCT.md +0 -46
  122. data/CONTRIBUTING.md +0 -47
  123. data/Dangerfile +0 -67
  124. data/Gemfile +0 -24
  125. data/RELEASING.md +0 -10
  126. data/Rakefile +0 -28
  127. data/SECURITY.md +0 -15
  128. data/UPGRADE.md +0 -2
  129. data/app/validators/redirect_uri_validator.rb +0 -50
  130. data/bin/console +0 -16
  131. data/doorkeeper.gemspec +0 -34
  132. data/gemfiles/rails_5_0.gemfile +0 -17
  133. data/gemfiles/rails_5_1.gemfile +0 -17
  134. data/gemfiles/rails_5_2.gemfile +0 -17
  135. data/gemfiles/rails_6_0.gemfile +0 -17
  136. data/gemfiles/rails_master.gemfile +0 -17
  137. data/spec/controllers/application_metal_controller_spec.rb +0 -64
  138. data/spec/controllers/applications_controller_spec.rb +0 -180
  139. data/spec/controllers/authorizations_controller_spec.rb +0 -527
  140. data/spec/controllers/protected_resources_controller_spec.rb +0 -353
  141. data/spec/controllers/token_info_controller_spec.rb +0 -50
  142. data/spec/controllers/tokens_controller_spec.rb +0 -330
  143. data/spec/dummy/Rakefile +0 -9
  144. data/spec/dummy/app/assets/config/manifest.js +0 -2
  145. data/spec/dummy/app/controllers/application_controller.rb +0 -5
  146. data/spec/dummy/app/controllers/custom_authorizations_controller.rb +0 -9
  147. data/spec/dummy/app/controllers/full_protected_resources_controller.rb +0 -14
  148. data/spec/dummy/app/controllers/home_controller.rb +0 -18
  149. data/spec/dummy/app/controllers/metal_controller.rb +0 -13
  150. data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +0 -13
  151. data/spec/dummy/app/helpers/application_helper.rb +0 -7
  152. data/spec/dummy/app/models/user.rb +0 -7
  153. data/spec/dummy/app/views/home/index.html.erb +0 -0
  154. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  155. data/spec/dummy/config/application.rb +0 -47
  156. data/spec/dummy/config/boot.rb +0 -7
  157. data/spec/dummy/config/database.yml +0 -15
  158. data/spec/dummy/config/environment.rb +0 -5
  159. data/spec/dummy/config/environments/development.rb +0 -31
  160. data/spec/dummy/config/environments/production.rb +0 -64
  161. data/spec/dummy/config/environments/test.rb +0 -45
  162. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -9
  163. data/spec/dummy/config/initializers/doorkeeper.rb +0 -121
  164. data/spec/dummy/config/initializers/secret_token.rb +0 -10
  165. data/spec/dummy/config/initializers/session_store.rb +0 -10
  166. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -16
  167. data/spec/dummy/config/locales/doorkeeper.en.yml +0 -5
  168. data/spec/dummy/config/routes.rb +0 -13
  169. data/spec/dummy/config.ru +0 -6
  170. data/spec/dummy/db/migrate/20111122132257_create_users.rb +0 -11
  171. data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +0 -7
  172. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +0 -69
  173. data/spec/dummy/db/migrate/20151223200000_add_owner_to_application.rb +0 -9
  174. data/spec/dummy/db/migrate/20160320211015_add_previous_refresh_token_to_access_tokens.rb +0 -13
  175. data/spec/dummy/db/migrate/20170822064514_enable_pkce.rb +0 -8
  176. data/spec/dummy/db/migrate/20180210183654_add_confidential_to_applications.rb +0 -13
  177. data/spec/dummy/db/schema.rb +0 -68
  178. data/spec/dummy/public/404.html +0 -26
  179. data/spec/dummy/public/422.html +0 -26
  180. data/spec/dummy/public/500.html +0 -26
  181. data/spec/dummy/public/favicon.ico +0 -0
  182. data/spec/dummy/script/rails +0 -9
  183. data/spec/factories.rb +0 -30
  184. data/spec/generators/application_owner_generator_spec.rb +0 -28
  185. data/spec/generators/confidential_applications_generator_spec.rb +0 -29
  186. data/spec/generators/install_generator_spec.rb +0 -36
  187. data/spec/generators/migration_generator_spec.rb +0 -28
  188. data/spec/generators/pkce_generator_spec.rb +0 -28
  189. data/spec/generators/previous_refresh_token_generator_spec.rb +0 -44
  190. data/spec/generators/templates/routes.rb +0 -4
  191. data/spec/generators/views_generator_spec.rb +0 -29
  192. data/spec/grape/grape_integration_spec.rb +0 -137
  193. data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +0 -26
  194. data/spec/lib/config_spec.rb +0 -697
  195. data/spec/lib/doorkeeper_spec.rb +0 -27
  196. data/spec/lib/models/expirable_spec.rb +0 -61
  197. data/spec/lib/models/reusable_spec.rb +0 -40
  198. data/spec/lib/models/revocable_spec.rb +0 -59
  199. data/spec/lib/models/scopes_spec.rb +0 -53
  200. data/spec/lib/models/secret_storable_spec.rb +0 -135
  201. data/spec/lib/oauth/authorization/uri_builder_spec.rb +0 -39
  202. data/spec/lib/oauth/authorization_code_request_spec.rb +0 -156
  203. data/spec/lib/oauth/base_request_spec.rb +0 -205
  204. data/spec/lib/oauth/base_response_spec.rb +0 -47
  205. data/spec/lib/oauth/client/credentials_spec.rb +0 -90
  206. data/spec/lib/oauth/client_credentials/creator_spec.rb +0 -94
  207. data/spec/lib/oauth/client_credentials/issuer_spec.rb +0 -112
  208. data/spec/lib/oauth/client_credentials/validation_spec.rb +0 -59
  209. data/spec/lib/oauth/client_credentials_integration_spec.rb +0 -29
  210. data/spec/lib/oauth/client_credentials_request_spec.rb +0 -109
  211. data/spec/lib/oauth/client_spec.rb +0 -38
  212. data/spec/lib/oauth/code_request_spec.rb +0 -47
  213. data/spec/lib/oauth/code_response_spec.rb +0 -36
  214. data/spec/lib/oauth/error_response_spec.rb +0 -66
  215. data/spec/lib/oauth/error_spec.rb +0 -23
  216. data/spec/lib/oauth/forbidden_token_response_spec.rb +0 -22
  217. data/spec/lib/oauth/helpers/scope_checker_spec.rb +0 -98
  218. data/spec/lib/oauth/helpers/unique_token_spec.rb +0 -21
  219. data/spec/lib/oauth/helpers/uri_checker_spec.rb +0 -247
  220. data/spec/lib/oauth/invalid_token_response_spec.rb +0 -55
  221. data/spec/lib/oauth/password_access_token_request_spec.rb +0 -192
  222. data/spec/lib/oauth/pre_authorization_spec.rb +0 -215
  223. data/spec/lib/oauth/refresh_token_request_spec.rb +0 -177
  224. data/spec/lib/oauth/scopes_spec.rb +0 -148
  225. data/spec/lib/oauth/token_request_spec.rb +0 -150
  226. data/spec/lib/oauth/token_response_spec.rb +0 -86
  227. data/spec/lib/oauth/token_spec.rb +0 -158
  228. data/spec/lib/request/strategy_spec.rb +0 -54
  229. data/spec/lib/secret_storing/base_spec.rb +0 -60
  230. data/spec/lib/secret_storing/bcrypt_spec.rb +0 -49
  231. data/spec/lib/secret_storing/plain_spec.rb +0 -44
  232. data/spec/lib/secret_storing/sha256_hash_spec.rb +0 -48
  233. data/spec/lib/server_spec.rb +0 -61
  234. data/spec/lib/stale_records_cleaner_spec.rb +0 -89
  235. data/spec/models/doorkeeper/access_grant_spec.rb +0 -144
  236. data/spec/models/doorkeeper/access_token_spec.rb +0 -591
  237. data/spec/models/doorkeeper/application_spec.rb +0 -472
  238. data/spec/requests/applications/applications_request_spec.rb +0 -259
  239. data/spec/requests/applications/authorized_applications_spec.rb +0 -32
  240. data/spec/requests/endpoints/authorization_spec.rb +0 -73
  241. data/spec/requests/endpoints/token_spec.rb +0 -75
  242. data/spec/requests/flows/authorization_code_errors_spec.rb +0 -78
  243. data/spec/requests/flows/authorization_code_spec.rb +0 -447
  244. data/spec/requests/flows/client_credentials_spec.rb +0 -128
  245. data/spec/requests/flows/implicit_grant_errors_spec.rb +0 -34
  246. data/spec/requests/flows/implicit_grant_spec.rb +0 -90
  247. data/spec/requests/flows/password_spec.rb +0 -259
  248. data/spec/requests/flows/refresh_token_spec.rb +0 -233
  249. data/spec/requests/flows/revoke_token_spec.rb +0 -143
  250. data/spec/requests/flows/skip_authorization_spec.rb +0 -66
  251. data/spec/requests/protected_resources/metal_spec.rb +0 -16
  252. data/spec/requests/protected_resources/private_api_spec.rb +0 -83
  253. data/spec/routing/custom_controller_routes_spec.rb +0 -133
  254. data/spec/routing/default_routes_spec.rb +0 -41
  255. data/spec/routing/scoped_routes_spec.rb +0 -47
  256. data/spec/spec_helper.rb +0 -57
  257. data/spec/spec_helper_integration.rb +0 -4
  258. data/spec/support/dependencies/factory_bot.rb +0 -4
  259. data/spec/support/doorkeeper_rspec.rb +0 -22
  260. data/spec/support/helpers/access_token_request_helper.rb +0 -13
  261. data/spec/support/helpers/authorization_request_helper.rb +0 -43
  262. data/spec/support/helpers/config_helper.rb +0 -11
  263. data/spec/support/helpers/model_helper.rb +0 -78
  264. data/spec/support/helpers/request_spec_helper.rb +0 -98
  265. data/spec/support/helpers/url_helper.rb +0 -62
  266. data/spec/support/http_method_shim.rb +0 -29
  267. data/spec/support/orm/active_record.rb +0 -5
  268. data/spec/support/shared/controllers_shared_context.rb +0 -123
  269. data/spec/support/shared/hashing_shared_context.rb +0 -36
  270. data/spec/support/shared/models_shared_examples.rb +0 -54
  271. data/spec/validators/redirect_uri_validator_spec.rb +0 -158
  272. data/spec/version/version_spec.rb +0 -17
@@ -1,697 +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 eq("ActionController::Base") }
506
- end
507
-
508
- context "custom" do
509
- before do
510
- Doorkeeper.configure do
511
- orm DOORKEEPER_ORM
512
- base_controller "ApplicationController"
513
- end
514
- end
515
-
516
- it { expect(Doorkeeper.configuration.base_controller).to eq("ApplicationController") }
517
- end
518
- end
519
-
520
- if DOORKEEPER_ORM == :active_record
521
- describe "active_record_options" do
522
- let(:models) { [Doorkeeper::AccessGrant, Doorkeeper::AccessToken, Doorkeeper::Application] }
523
-
524
- before do
525
- models.each do |model|
526
- allow(model).to receive(:establish_connection).and_return(true)
527
- end
528
- end
529
-
530
- it "establishes connection for Doorkeeper models based on options" do
531
- models.each do |model|
532
- expect(model).to receive(:establish_connection)
533
- end
534
-
535
- Doorkeeper.configure do
536
- orm DOORKEEPER_ORM
537
- active_record_options(
538
- establish_connection: Rails.configuration.database_configuration[Rails.env]
539
- )
540
- end
541
- end
542
- end
543
- end
544
-
545
- describe "api_only" do
546
- it "is false by default" do
547
- expect(subject.api_only).to eq(false)
548
- end
549
-
550
- it "can change the value" do
551
- Doorkeeper.configure do
552
- orm DOORKEEPER_ORM
553
- api_only
554
- end
555
-
556
- expect(subject.api_only).to eq(true)
557
- end
558
- end
559
-
560
- describe "strict_content_type" do
561
- it "is false by default" do
562
- expect(subject.enforce_content_type).to eq(false)
563
- end
564
-
565
- it "can change the value" do
566
- Doorkeeper.configure do
567
- orm DOORKEEPER_ORM
568
- enforce_content_type
569
- end
570
-
571
- expect(subject.enforce_content_type).to eq(true)
572
- end
573
- end
574
-
575
- describe "handle_auth_errors" do
576
- it "is set to render by default" do
577
- expect(Doorkeeper.configuration.handle_auth_errors).to eq(:render)
578
- end
579
- it "can change the value" do
580
- Doorkeeper.configure do
581
- orm DOORKEEPER_ORM
582
- handle_auth_errors :raise
583
- end
584
- expect(subject.handle_auth_errors).to eq(:raise)
585
- end
586
- end
587
-
588
- describe "token_secret_strategy" do
589
- it "is plain by default" do
590
- expect(subject.token_secret_strategy).to eq(Doorkeeper::SecretStoring::Plain)
591
- expect(subject.token_secret_fallback_strategy).to eq(nil)
592
- end
593
-
594
- context "when provided" do
595
- before do
596
- Doorkeeper.configure do
597
- hash_token_secrets
598
- end
599
- end
600
-
601
- it "will enable hashing for applications" do
602
- expect(subject.token_secret_strategy).to eq(Doorkeeper::SecretStoring::Sha256Hash)
603
- expect(subject.token_secret_fallback_strategy).to eq(nil)
604
- end
605
- end
606
-
607
- context "when manually provided with invalid constant" do
608
- it "raises an exception" do
609
- expect do
610
- Doorkeeper.configure do
611
- hash_token_secrets using: "does not exist"
612
- end
613
- end.to raise_error(NameError)
614
- end
615
- end
616
-
617
- context "when manually provided with invalid option" do
618
- it "raises an exception" do
619
- expect do
620
- Doorkeeper.configure do
621
- hash_token_secrets using: "Doorkeeper::SecretStoring::BCrypt"
622
- end
623
- end.to raise_error(ArgumentError,
624
- /can only be used for storing application secrets/)
625
- end
626
- end
627
-
628
- context "when provided with fallback" do
629
- before do
630
- Doorkeeper.configure do
631
- hash_token_secrets fallback: :plain
632
- end
633
- end
634
-
635
- it "will enable hashing for applications" do
636
- expect(subject.token_secret_strategy).to eq(Doorkeeper::SecretStoring::Sha256Hash)
637
- expect(subject.token_secret_fallback_strategy).to eq(Doorkeeper::SecretStoring::Plain)
638
- end
639
- end
640
-
641
- describe "hash_token_secrets together with reuse_access_token" do
642
- it "will disable reuse_access_token" do
643
- expect(Rails.logger).to receive(:warn).with(/reuse_access_token will be disabled/)
644
-
645
- Doorkeeper.configure do
646
- reuse_access_token
647
- hash_token_secrets
648
- end
649
-
650
- expect(subject.reuse_access_token).to eq(false)
651
- end
652
- end
653
- end
654
-
655
- describe "application_secret_strategy" do
656
- it "is plain by default" do
657
- expect(subject.application_secret_strategy).to eq(Doorkeeper::SecretStoring::Plain)
658
- expect(subject.application_secret_fallback_strategy).to eq(nil)
659
- end
660
-
661
- context "when provided" do
662
- before do
663
- Doorkeeper.configure do
664
- hash_application_secrets
665
- end
666
- end
667
-
668
- it "will enable hashing for applications" do
669
- expect(subject.application_secret_strategy).to eq(Doorkeeper::SecretStoring::Sha256Hash)
670
- expect(subject.application_secret_fallback_strategy).to eq(nil)
671
- end
672
- end
673
-
674
- context "when manually provided with invalid constant" do
675
- it "raises an exception" do
676
- expect do
677
- Doorkeeper.configure do
678
- hash_application_secrets using: "does not exist"
679
- end
680
- end.to raise_error(NameError)
681
- end
682
- end
683
-
684
- context "when provided with fallback" do
685
- before do
686
- Doorkeeper.configure do
687
- hash_application_secrets fallback: :plain
688
- end
689
- end
690
-
691
- it "will enable hashing for applications" do
692
- expect(subject.application_secret_strategy).to eq(Doorkeeper::SecretStoring::Sha256Hash)
693
- expect(subject.application_secret_fallback_strategy).to eq(Doorkeeper::SecretStoring::Plain)
694
- end
695
- end
696
- end
697
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- describe Doorkeeper do
6
- describe "#authenticate" do
7
- let(:request) { double }
8
-
9
- it "calls OAuth::Token#authenticate" do
10
- token_strategies = Doorkeeper.configuration.access_token_methods
11
-
12
- expect(Doorkeeper::OAuth::Token).to receive(:authenticate)
13
- .with(request, *token_strategies)
14
-
15
- Doorkeeper.authenticate(request)
16
- end
17
-
18
- it "accepts custom token strategies" do
19
- token_strategies = %i[first_way second_way]
20
-
21
- expect(Doorkeeper::OAuth::Token).to receive(:authenticate)
22
- .with(request, *token_strategies)
23
-
24
- Doorkeeper.authenticate(request, token_strategies)
25
- end
26
- end
27
- end