doorkeeper 4.4.3 → 5.5.2

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 (282) hide show
  1. checksums.yaml +5 -5
  2. data/{NEWS.md → CHANGELOG.md} +393 -19
  3. data/README.md +97 -393
  4. data/app/assets/stylesheets/doorkeeper/admin/application.css +2 -2
  5. data/app/controllers/doorkeeper/application_controller.rb +8 -5
  6. data/app/controllers/doorkeeper/application_metal_controller.rb +7 -11
  7. data/app/controllers/doorkeeper/applications_controller.rb +62 -27
  8. data/app/controllers/doorkeeper/authorizations_controller.rb +97 -17
  9. data/app/controllers/doorkeeper/authorized_applications_controller.rb +22 -3
  10. data/app/controllers/doorkeeper/token_info_controller.rb +16 -4
  11. data/app/controllers/doorkeeper/tokens_controller.rb +98 -32
  12. data/app/helpers/doorkeeper/dashboard_helper.rb +9 -7
  13. data/app/views/doorkeeper/applications/_delete_form.html.erb +3 -1
  14. data/app/views/doorkeeper/applications/_form.html.erb +27 -26
  15. data/app/views/doorkeeper/applications/edit.html.erb +1 -1
  16. data/app/views/doorkeeper/applications/index.html.erb +17 -7
  17. data/app/views/doorkeeper/applications/new.html.erb +1 -1
  18. data/app/views/doorkeeper/applications/show.html.erb +38 -17
  19. data/app/views/doorkeeper/authorizations/error.html.erb +1 -1
  20. data/app/views/doorkeeper/authorizations/form_post.html.erb +15 -0
  21. data/app/views/doorkeeper/authorizations/new.html.erb +6 -0
  22. data/app/views/layouts/doorkeeper/admin.html.erb +16 -14
  23. data/config/locales/en.yml +23 -3
  24. data/lib/doorkeeper/config/abstract_builder.rb +28 -0
  25. data/lib/doorkeeper/config/option.rb +82 -0
  26. data/lib/doorkeeper/config/validations.rb +53 -0
  27. data/lib/doorkeeper/config.rb +471 -140
  28. data/lib/doorkeeper/engine.rb +8 -2
  29. data/lib/doorkeeper/errors.rb +25 -16
  30. data/lib/doorkeeper/grant_flow/fallback_flow.rb +15 -0
  31. data/lib/doorkeeper/grant_flow/flow.rb +44 -0
  32. data/lib/doorkeeper/grant_flow/registry.rb +50 -0
  33. data/lib/doorkeeper/grant_flow.rb +45 -0
  34. data/lib/doorkeeper/grape/authorization_decorator.rb +6 -4
  35. data/lib/doorkeeper/grape/helpers.rb +13 -7
  36. data/lib/doorkeeper/helpers/controller.rb +43 -10
  37. data/lib/doorkeeper/models/access_grant_mixin.rb +97 -3
  38. data/lib/doorkeeper/models/access_token_mixin.rb +272 -66
  39. data/lib/doorkeeper/models/application_mixin.rb +50 -5
  40. data/lib/doorkeeper/models/concerns/accessible.rb +2 -0
  41. data/lib/doorkeeper/models/concerns/expirable.rb +7 -3
  42. data/lib/doorkeeper/models/concerns/orderable.rb +2 -0
  43. data/lib/doorkeeper/models/concerns/ownership.rb +4 -7
  44. data/lib/doorkeeper/models/concerns/resource_ownerable.rb +47 -0
  45. data/lib/doorkeeper/models/concerns/reusable.rb +19 -0
  46. data/lib/doorkeeper/models/concerns/revocable.rb +3 -27
  47. data/lib/doorkeeper/models/concerns/scopes.rb +12 -2
  48. data/lib/doorkeeper/models/concerns/secret_storable.rb +106 -0
  49. data/lib/doorkeeper/oauth/authorization/code.rb +48 -12
  50. data/lib/doorkeeper/oauth/authorization/context.rb +17 -0
  51. data/lib/doorkeeper/oauth/authorization/token.rb +58 -24
  52. data/lib/doorkeeper/oauth/authorization/uri_builder.rb +7 -5
  53. data/lib/doorkeeper/oauth/authorization_code_request.rb +58 -10
  54. data/lib/doorkeeper/oauth/base_request.rb +35 -24
  55. data/lib/doorkeeper/oauth/base_response.rb +2 -0
  56. data/lib/doorkeeper/oauth/client/credentials.rb +5 -5
  57. data/lib/doorkeeper/oauth/client.rb +10 -11
  58. data/lib/doorkeeper/oauth/client_credentials/creator.rb +47 -4
  59. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +16 -9
  60. data/lib/doorkeeper/oauth/client_credentials/validator.rb +56 -0
  61. data/lib/doorkeeper/oauth/client_credentials_request.rb +10 -11
  62. data/lib/doorkeeper/oauth/code_request.rb +8 -12
  63. data/lib/doorkeeper/oauth/code_response.rb +27 -15
  64. data/lib/doorkeeper/oauth/error.rb +3 -1
  65. data/lib/doorkeeper/oauth/error_response.rb +35 -14
  66. data/lib/doorkeeper/oauth/forbidden_token_response.rb +10 -3
  67. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +23 -18
  68. data/lib/doorkeeper/oauth/helpers/unique_token.rb +20 -3
  69. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +42 -7
  70. data/lib/doorkeeper/oauth/hooks/context.rb +21 -0
  71. data/lib/doorkeeper/oauth/invalid_request_response.rb +43 -0
  72. data/lib/doorkeeper/oauth/invalid_token_response.rb +29 -4
  73. data/lib/doorkeeper/oauth/nonstandard.rb +39 -0
  74. data/lib/doorkeeper/oauth/password_access_token_request.rb +43 -10
  75. data/lib/doorkeeper/oauth/pre_authorization.rb +133 -26
  76. data/lib/doorkeeper/oauth/refresh_token_request.rb +59 -31
  77. data/lib/doorkeeper/oauth/scopes.rb +8 -4
  78. data/lib/doorkeeper/oauth/token.rb +12 -8
  79. data/lib/doorkeeper/oauth/token_introspection.rb +97 -23
  80. data/lib/doorkeeper/oauth/token_request.rb +8 -20
  81. data/lib/doorkeeper/oauth/token_response.rb +14 -10
  82. data/lib/doorkeeper/oauth.rb +13 -0
  83. data/lib/doorkeeper/orm/active_record/access_grant.rb +5 -30
  84. data/lib/doorkeeper/orm/active_record/access_token.rb +5 -43
  85. data/lib/doorkeeper/orm/active_record/application.rb +6 -57
  86. data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +68 -0
  87. data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +59 -0
  88. data/lib/doorkeeper/orm/active_record/mixins/application.rb +198 -0
  89. data/lib/doorkeeper/orm/active_record/redirect_uri_validator.rb +66 -0
  90. data/lib/doorkeeper/orm/active_record/stale_records_cleaner.rb +33 -0
  91. data/lib/doorkeeper/orm/active_record.rb +27 -9
  92. data/lib/doorkeeper/rails/helpers.rb +10 -8
  93. data/lib/doorkeeper/rails/routes/abstract_router.rb +35 -0
  94. data/lib/doorkeeper/rails/routes/mapper.rb +4 -2
  95. data/lib/doorkeeper/rails/routes/mapping.rb +9 -7
  96. data/lib/doorkeeper/rails/routes/registry.rb +45 -0
  97. data/lib/doorkeeper/rails/routes.rb +37 -30
  98. data/lib/doorkeeper/rake/db.rake +40 -0
  99. data/lib/doorkeeper/rake/setup.rake +11 -0
  100. data/lib/doorkeeper/rake.rb +14 -0
  101. data/lib/doorkeeper/request/authorization_code.rb +6 -4
  102. data/lib/doorkeeper/request/client_credentials.rb +3 -3
  103. data/lib/doorkeeper/request/code.rb +1 -1
  104. data/lib/doorkeeper/request/password.rb +4 -3
  105. data/lib/doorkeeper/request/refresh_token.rb +6 -5
  106. data/lib/doorkeeper/request/strategy.rb +4 -2
  107. data/lib/doorkeeper/request/token.rb +1 -1
  108. data/lib/doorkeeper/request.rb +61 -34
  109. data/lib/doorkeeper/secret_storing/base.rb +64 -0
  110. data/lib/doorkeeper/secret_storing/bcrypt.rb +60 -0
  111. data/lib/doorkeeper/secret_storing/plain.rb +33 -0
  112. data/lib/doorkeeper/secret_storing/sha256_hash.rb +26 -0
  113. data/lib/doorkeeper/server.rb +9 -11
  114. data/lib/doorkeeper/stale_records_cleaner.rb +24 -0
  115. data/lib/doorkeeper/validations.rb +2 -0
  116. data/lib/doorkeeper/version.rb +7 -29
  117. data/lib/doorkeeper.rb +111 -64
  118. data/lib/generators/doorkeeper/application_owner_generator.rb +24 -18
  119. data/lib/generators/doorkeeper/confidential_applications_generator.rb +33 -0
  120. data/lib/generators/doorkeeper/enable_polymorphic_resource_owner_generator.rb +39 -0
  121. data/lib/generators/doorkeeper/install_generator.rb +19 -9
  122. data/lib/generators/doorkeeper/migration_generator.rb +23 -18
  123. data/lib/generators/doorkeeper/pkce_generator.rb +33 -0
  124. data/lib/generators/doorkeeper/previous_refresh_token_generator.rb +28 -22
  125. data/{spec/dummy/db/migrate/20180210183654_add_confidential_to_application.rb → lib/generators/doorkeeper/templates/add_confidential_to_applications.rb.erb} +2 -2
  126. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb.erb +3 -1
  127. data/lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb.erb +2 -0
  128. data/lib/generators/doorkeeper/templates/enable_pkce_migration.rb.erb +8 -0
  129. data/lib/generators/doorkeeper/templates/enable_polymorphic_resource_owner_migration.rb.erb +17 -0
  130. data/lib/generators/doorkeeper/templates/initializer.rb +382 -30
  131. data/lib/generators/doorkeeper/templates/migration.rb.erb +35 -16
  132. data/lib/generators/doorkeeper/views_generator.rb +8 -4
  133. data/vendor/assets/stylesheets/doorkeeper/bootstrap.min.css +4 -5
  134. metadata +95 -309
  135. data/.coveralls.yml +0 -1
  136. data/.github/ISSUE_TEMPLATE.md +0 -25
  137. data/.github/PULL_REQUEST_TEMPLATE.md +0 -17
  138. data/.gitignore +0 -19
  139. data/.hound.yml +0 -2
  140. data/.rspec +0 -1
  141. data/.rubocop.yml +0 -17
  142. data/.travis.yml +0 -38
  143. data/Appraisals +0 -18
  144. data/CODE_OF_CONDUCT.md +0 -46
  145. data/CONTRIBUTING.md +0 -47
  146. data/Gemfile +0 -10
  147. data/RELEASING.md +0 -10
  148. data/Rakefile +0 -20
  149. data/SECURITY.md +0 -15
  150. data/app/validators/redirect_uri_validator.rb +0 -44
  151. data/doorkeeper.gemspec +0 -32
  152. data/gemfiles/rails_4_2.gemfile +0 -13
  153. data/gemfiles/rails_5_0.gemfile +0 -12
  154. data/gemfiles/rails_5_1.gemfile +0 -12
  155. data/gemfiles/rails_5_2.gemfile +0 -12
  156. data/gemfiles/rails_master.gemfile +0 -14
  157. data/lib/doorkeeper/oauth/client_credentials/validation.rb +0 -45
  158. data/lib/generators/doorkeeper/add_client_confidentiality_generator.rb +0 -31
  159. data/lib/generators/doorkeeper/templates/add_confidential_to_application_migration.rb.erb +0 -11
  160. data/spec/controllers/application_metal_controller.rb +0 -10
  161. data/spec/controllers/applications_controller_spec.rb +0 -69
  162. data/spec/controllers/authorizations_controller_spec.rb +0 -250
  163. data/spec/controllers/protected_resources_controller_spec.rb +0 -309
  164. data/spec/controllers/token_info_controller_spec.rb +0 -56
  165. data/spec/controllers/tokens_controller_spec.rb +0 -274
  166. data/spec/dummy/Rakefile +0 -7
  167. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  168. data/spec/dummy/app/controllers/custom_authorizations_controller.rb +0 -7
  169. data/spec/dummy/app/controllers/full_protected_resources_controller.rb +0 -12
  170. data/spec/dummy/app/controllers/home_controller.rb +0 -17
  171. data/spec/dummy/app/controllers/metal_controller.rb +0 -11
  172. data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +0 -11
  173. data/spec/dummy/app/helpers/application_helper.rb +0 -5
  174. data/spec/dummy/app/models/user.rb +0 -5
  175. data/spec/dummy/app/views/home/index.html.erb +0 -0
  176. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  177. data/spec/dummy/config/application.rb +0 -23
  178. data/spec/dummy/config/boot.rb +0 -9
  179. data/spec/dummy/config/database.yml +0 -15
  180. data/spec/dummy/config/environment.rb +0 -5
  181. data/spec/dummy/config/environments/development.rb +0 -29
  182. data/spec/dummy/config/environments/production.rb +0 -62
  183. data/spec/dummy/config/environments/test.rb +0 -44
  184. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  185. data/spec/dummy/config/initializers/doorkeeper.rb +0 -112
  186. data/spec/dummy/config/initializers/new_framework_defaults.rb +0 -6
  187. data/spec/dummy/config/initializers/secret_token.rb +0 -8
  188. data/spec/dummy/config/initializers/session_store.rb +0 -8
  189. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  190. data/spec/dummy/config/locales/doorkeeper.en.yml +0 -5
  191. data/spec/dummy/config/routes.rb +0 -52
  192. data/spec/dummy/config.ru +0 -4
  193. data/spec/dummy/db/migrate/20111122132257_create_users.rb +0 -11
  194. data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +0 -7
  195. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +0 -62
  196. data/spec/dummy/db/migrate/20151223200000_add_owner_to_application.rb +0 -9
  197. data/spec/dummy/db/migrate/20160320211015_add_previous_refresh_token_to_access_tokens.rb +0 -13
  198. data/spec/dummy/db/schema.rb +0 -68
  199. data/spec/dummy/public/404.html +0 -26
  200. data/spec/dummy/public/422.html +0 -26
  201. data/spec/dummy/public/500.html +0 -26
  202. data/spec/dummy/public/favicon.ico +0 -0
  203. data/spec/dummy/script/rails +0 -6
  204. data/spec/factories.rb +0 -28
  205. data/spec/generators/application_owner_generator_spec.rb +0 -41
  206. data/spec/generators/install_generator_spec.rb +0 -31
  207. data/spec/generators/migration_generator_spec.rb +0 -41
  208. data/spec/generators/previous_refresh_token_generator_spec.rb +0 -57
  209. data/spec/generators/templates/routes.rb +0 -3
  210. data/spec/generators/views_generator_spec.rb +0 -27
  211. data/spec/grape/grape_integration_spec.rb +0 -135
  212. data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +0 -24
  213. data/spec/lib/config_spec.rb +0 -462
  214. data/spec/lib/doorkeeper_spec.rb +0 -150
  215. data/spec/lib/models/expirable_spec.rb +0 -50
  216. data/spec/lib/models/revocable_spec.rb +0 -59
  217. data/spec/lib/models/scopes_spec.rb +0 -43
  218. data/spec/lib/oauth/authorization/uri_builder_spec.rb +0 -41
  219. data/spec/lib/oauth/authorization_code_request_spec.rb +0 -123
  220. data/spec/lib/oauth/base_request_spec.rb +0 -155
  221. data/spec/lib/oauth/base_response_spec.rb +0 -45
  222. data/spec/lib/oauth/client/credentials_spec.rb +0 -90
  223. data/spec/lib/oauth/client_credentials/creator_spec.rb +0 -44
  224. data/spec/lib/oauth/client_credentials/issuer_spec.rb +0 -86
  225. data/spec/lib/oauth/client_credentials/validation_spec.rb +0 -54
  226. data/spec/lib/oauth/client_credentials_integration_spec.rb +0 -27
  227. data/spec/lib/oauth/client_credentials_request_spec.rb +0 -105
  228. data/spec/lib/oauth/client_spec.rb +0 -39
  229. data/spec/lib/oauth/code_request_spec.rb +0 -43
  230. data/spec/lib/oauth/code_response_spec.rb +0 -34
  231. data/spec/lib/oauth/error_response_spec.rb +0 -61
  232. data/spec/lib/oauth/error_spec.rb +0 -23
  233. data/spec/lib/oauth/forbidden_token_response_spec.rb +0 -23
  234. data/spec/lib/oauth/helpers/scope_checker_spec.rb +0 -64
  235. data/spec/lib/oauth/helpers/unique_token_spec.rb +0 -20
  236. data/spec/lib/oauth/helpers/uri_checker_spec.rb +0 -218
  237. data/spec/lib/oauth/invalid_token_response_spec.rb +0 -56
  238. data/spec/lib/oauth/password_access_token_request_spec.rb +0 -96
  239. data/spec/lib/oauth/pre_authorization_spec.rb +0 -160
  240. data/spec/lib/oauth/refresh_token_request_spec.rb +0 -166
  241. data/spec/lib/oauth/scopes_spec.rb +0 -149
  242. data/spec/lib/oauth/token_request_spec.rb +0 -96
  243. data/spec/lib/oauth/token_response_spec.rb +0 -85
  244. data/spec/lib/oauth/token_spec.rb +0 -116
  245. data/spec/lib/request/strategy_spec.rb +0 -53
  246. data/spec/lib/server_spec.rb +0 -59
  247. data/spec/models/doorkeeper/access_grant_spec.rb +0 -36
  248. data/spec/models/doorkeeper/access_token_spec.rb +0 -418
  249. data/spec/models/doorkeeper/application_spec.rb +0 -303
  250. data/spec/requests/applications/applications_request_spec.rb +0 -94
  251. data/spec/requests/applications/authorized_applications_spec.rb +0 -30
  252. data/spec/requests/endpoints/authorization_spec.rb +0 -71
  253. data/spec/requests/endpoints/token_spec.rb +0 -71
  254. data/spec/requests/flows/authorization_code_errors_spec.rb +0 -76
  255. data/spec/requests/flows/authorization_code_spec.rb +0 -149
  256. data/spec/requests/flows/client_credentials_spec.rb +0 -86
  257. data/spec/requests/flows/implicit_grant_errors_spec.rb +0 -32
  258. data/spec/requests/flows/implicit_grant_spec.rb +0 -61
  259. data/spec/requests/flows/password_spec.rb +0 -197
  260. data/spec/requests/flows/refresh_token_spec.rb +0 -174
  261. data/spec/requests/flows/revoke_token_spec.rb +0 -157
  262. data/spec/requests/flows/skip_authorization_spec.rb +0 -59
  263. data/spec/requests/protected_resources/metal_spec.rb +0 -14
  264. data/spec/requests/protected_resources/private_api_spec.rb +0 -81
  265. data/spec/routing/custom_controller_routes_spec.rb +0 -75
  266. data/spec/routing/default_routes_spec.rb +0 -39
  267. data/spec/routing/scoped_routes_spec.rb +0 -31
  268. data/spec/spec_helper.rb +0 -4
  269. data/spec/spec_helper_integration.rb +0 -74
  270. data/spec/support/dependencies/factory_girl.rb +0 -2
  271. data/spec/support/helpers/access_token_request_helper.rb +0 -11
  272. data/spec/support/helpers/authorization_request_helper.rb +0 -41
  273. data/spec/support/helpers/config_helper.rb +0 -9
  274. data/spec/support/helpers/model_helper.rb +0 -72
  275. data/spec/support/helpers/request_spec_helper.rb +0 -88
  276. data/spec/support/helpers/url_helper.rb +0 -56
  277. data/spec/support/http_method_shim.rb +0 -38
  278. data/spec/support/orm/active_record.rb +0 -3
  279. data/spec/support/shared/controllers_shared_context.rb +0 -65
  280. data/spec/support/shared/models_shared_examples.rb +0 -52
  281. data/spec/validators/redirect_uri_validator_spec.rb +0 -123
  282. data/spec/version/version_spec.rb +0 -15
@@ -1,24 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- describe Doorkeeper::DashboardHelper do
4
- describe '#doorkeeper_errors_for' do
5
- let(:object) { double errors: { method: messages } }
6
- let(:messages) { ['first message', 'second message'] }
7
-
8
- context 'when object has errors' do
9
- it 'returns error messages' do
10
- messages.each do |message|
11
- expect(helper.doorkeeper_errors_for(object, :method)).to include(
12
- message.capitalize
13
- )
14
- end
15
- end
16
- end
17
-
18
- context 'when object has no errors' do
19
- it 'returns nil' do
20
- expect(helper.doorkeeper_errors_for(object, :amonter_method)).to be_nil
21
- end
22
- end
23
- end
24
- end
@@ -1,462 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- describe Doorkeeper, 'configuration' do
4
- subject { Doorkeeper.configuration }
5
-
6
- describe 'resource_owner_authenticator' do
7
- it 'sets the block that is accessible via authenticate_resource_owner' do
8
- block = proc {}
9
- Doorkeeper.configure do
10
- orm DOORKEEPER_ORM
11
- resource_owner_authenticator(&block)
12
- end
13
-
14
- expect(subject.authenticate_resource_owner).to eq(block)
15
- end
16
-
17
- it 'prints warning message by default' do
18
- Doorkeeper.configure do
19
- orm DOORKEEPER_ORM
20
- end
21
-
22
- expect(Rails.logger).to receive(:warn).with(
23
- I18n.t('doorkeeper.errors.messages.resource_owner_authenticator_not_configured')
24
- )
25
- subject.authenticate_resource_owner.call(nil)
26
- end
27
- end
28
-
29
- describe 'resource_owner_from_credentials' do
30
- it 'sets the block that is accessible via authenticate_resource_owner' do
31
- block = proc {}
32
- Doorkeeper.configure do
33
- orm DOORKEEPER_ORM
34
- resource_owner_from_credentials(&block)
35
- end
36
-
37
- expect(subject.resource_owner_from_credentials).to eq(block)
38
- end
39
-
40
- it 'prints warning message by default' do
41
- Doorkeeper.configure do
42
- orm DOORKEEPER_ORM
43
- end
44
-
45
- expect(Rails.logger).to receive(:warn).with(
46
- I18n.t('doorkeeper.errors.messages.credential_flow_not_configured')
47
- )
48
- subject.resource_owner_from_credentials.call(nil)
49
- end
50
- end
51
-
52
- describe 'setup_orm_adapter' do
53
- it 'adds specific error message to NameError exception' do
54
- expect do
55
- Doorkeeper.configure { orm 'hibernate' }
56
- end.to raise_error(NameError, /ORM adapter not found \(hibernate\)/)
57
- end
58
-
59
- it 'does not change other exceptions' do
60
- allow_any_instance_of(String).to receive(:classify) { raise NoMethodError }
61
-
62
- expect do
63
- Doorkeeper.configure { orm 'hibernate' }
64
- end.to raise_error(NoMethodError, /ORM adapter not found \(hibernate\)/)
65
- end
66
- end
67
-
68
- describe 'admin_authenticator' do
69
- it 'sets the block that is accessible via authenticate_admin' do
70
- block = proc {}
71
- Doorkeeper.configure do
72
- orm DOORKEEPER_ORM
73
- admin_authenticator(&block)
74
- end
75
-
76
- expect(subject.authenticate_admin).to eq(block)
77
- end
78
- end
79
-
80
- describe 'access_token_expires_in' do
81
- it 'has 2 hours by default' do
82
- expect(subject.access_token_expires_in).to eq(2.hours)
83
- end
84
-
85
- it 'can change the value' do
86
- Doorkeeper.configure do
87
- orm DOORKEEPER_ORM
88
- access_token_expires_in 4.hours
89
- end
90
- expect(subject.access_token_expires_in).to eq(4.hours)
91
- end
92
-
93
- it 'can be set to nil' do
94
- Doorkeeper.configure do
95
- orm DOORKEEPER_ORM
96
- access_token_expires_in nil
97
- end
98
-
99
- expect(subject.access_token_expires_in).to be_nil
100
- end
101
- end
102
-
103
- describe 'scopes' do
104
- it 'has default scopes' do
105
- Doorkeeper.configure do
106
- orm DOORKEEPER_ORM
107
- default_scopes :public
108
- end
109
-
110
- expect(subject.default_scopes).to include('public')
111
- end
112
-
113
- it 'has optional scopes' do
114
- Doorkeeper.configure do
115
- orm DOORKEEPER_ORM
116
- optional_scopes :write, :update
117
- end
118
-
119
- expect(subject.optional_scopes).to include('write', 'update')
120
- end
121
-
122
- it 'has all scopes' do
123
- Doorkeeper.configure do
124
- orm DOORKEEPER_ORM
125
- default_scopes :normal
126
- optional_scopes :admin
127
- end
128
-
129
- expect(subject.scopes).to include('normal', 'admin')
130
- end
131
- end
132
-
133
- describe 'use_refresh_token' do
134
- it 'is false by default' do
135
- expect(subject.refresh_token_enabled?).to be_falsey
136
- end
137
-
138
- it 'can change the value' do
139
- Doorkeeper.configure do
140
- orm DOORKEEPER_ORM
141
- use_refresh_token
142
- end
143
-
144
- expect(subject.refresh_token_enabled?).to be_truthy
145
- end
146
-
147
- it "does not includes 'refresh_token' in authorization_response_types" do
148
- expect(subject.token_grant_types).not_to include 'refresh_token'
149
- end
150
-
151
- context "is enabled" do
152
- before do
153
- Doorkeeper.configure {
154
- orm DOORKEEPER_ORM
155
- use_refresh_token
156
- }
157
- end
158
-
159
- it "includes 'refresh_token' in authorization_response_types" do
160
- expect(subject.token_grant_types).to include 'refresh_token'
161
- end
162
- end
163
- end
164
-
165
- describe 'opt_out_native_route_change' do
166
- around(:each) do |example|
167
- Doorkeeper.configure do
168
- orm DOORKEEPER_ORM
169
- opt_out_native_route_change
170
- end
171
-
172
- Rails.application.reload_routes!
173
-
174
- subject { Doorkeeper.configuration }
175
-
176
- example.run
177
-
178
- Doorkeeper.configure do
179
- orm DOORKEEPER_ORM
180
- end
181
-
182
- Rails.application.reload_routes!
183
- end
184
-
185
- it 'sets the native authorization code route /:code' do
186
- expect(subject.native_authorization_code_route).to eq('/:code')
187
- end
188
- end
189
-
190
- describe 'client_credentials' do
191
- it 'has defaults order' do
192
- expect(subject.client_credentials_methods).to eq([:from_basic, :from_params])
193
- end
194
-
195
- it 'can change the value' do
196
- Doorkeeper.configure do
197
- orm DOORKEEPER_ORM
198
- client_credentials :from_digest, :from_params
199
- end
200
-
201
- expect(subject.client_credentials_methods).to eq([:from_digest, :from_params])
202
- end
203
- end
204
-
205
- describe 'force_ssl_in_redirect_uri' do
206
- it 'is true by default in non-development environments' do
207
- expect(subject.force_ssl_in_redirect_uri).to be_truthy
208
- end
209
-
210
- it 'can change the value' do
211
- Doorkeeper.configure do
212
- orm DOORKEEPER_ORM
213
- force_ssl_in_redirect_uri(false)
214
- end
215
-
216
- expect(subject.force_ssl_in_redirect_uri).to be_falsey
217
- end
218
-
219
- it 'can be a callable object' do
220
- block = proc { false }
221
- Doorkeeper.configure do
222
- orm DOORKEEPER_ORM
223
- force_ssl_in_redirect_uri(&block)
224
- end
225
-
226
- expect(subject.force_ssl_in_redirect_uri).to eq(block)
227
- expect(subject.force_ssl_in_redirect_uri.call).to be_falsey
228
- end
229
- end
230
-
231
- describe 'access_token_methods' do
232
- it 'has defaults order' do
233
- expect(subject.access_token_methods).to eq([:from_bearer_authorization, :from_access_token_param, :from_bearer_param])
234
- end
235
-
236
- it 'can change the value' do
237
- Doorkeeper.configure do
238
- orm DOORKEEPER_ORM
239
- access_token_methods :from_access_token_param, :from_bearer_param
240
- end
241
-
242
- expect(subject.access_token_methods).to eq([:from_access_token_param, :from_bearer_param])
243
- end
244
- end
245
-
246
- describe 'forbid_redirect_uri' do
247
- it 'is false by default' do
248
- expect(subject.forbid_redirect_uri.call(URI.parse('https://localhost'))).to be_falsey
249
- end
250
-
251
- it 'can be a callable object' do
252
- block = proc { true }
253
- Doorkeeper.configure do
254
- orm DOORKEEPER_ORM
255
- forbid_redirect_uri(&block)
256
- end
257
-
258
- expect(subject.forbid_redirect_uri).to eq(block)
259
- expect(subject.forbid_redirect_uri.call).to be_truthy
260
- end
261
- end
262
-
263
- describe 'enable_application_owner' do
264
- it 'is disabled by default' do
265
- expect(Doorkeeper.configuration.enable_application_owner?).not_to be_truthy
266
- end
267
-
268
- context 'when enabled without confirmation' do
269
- before do
270
- Doorkeeper.configure do
271
- orm DOORKEEPER_ORM
272
- enable_application_owner
273
- end
274
- end
275
-
276
- it 'adds support for application owner' do
277
- expect(Doorkeeper::Application.new).to respond_to :owner
278
- end
279
-
280
- it 'Doorkeeper.configuration.confirm_application_owner? returns false' do
281
- expect(Doorkeeper.configuration.confirm_application_owner?).not_to be_truthy
282
- end
283
- end
284
-
285
- context 'when enabled with confirmation set to true' do
286
- before do
287
- Doorkeeper.configure do
288
- orm DOORKEEPER_ORM
289
- enable_application_owner confirmation: true
290
- end
291
- end
292
-
293
- it 'adds support for application owner' do
294
- expect(Doorkeeper::Application.new).to respond_to :owner
295
- end
296
-
297
- it 'Doorkeeper.configuration.confirm_application_owner? returns true' do
298
- expect(Doorkeeper.configuration.confirm_application_owner?).to be_truthy
299
- end
300
- end
301
- end
302
-
303
- describe 'realm' do
304
- it 'is \'Doorkeeper\' by default' do
305
- expect(Doorkeeper.configuration.realm).to eq('Doorkeeper')
306
- end
307
-
308
- it 'can change the value' do
309
- Doorkeeper.configure do
310
- orm DOORKEEPER_ORM
311
- realm 'Example'
312
- end
313
-
314
- expect(subject.realm).to eq('Example')
315
- end
316
- end
317
-
318
- describe "grant_flows" do
319
- it "is set to all grant flows by default" do
320
- expect(Doorkeeper.configuration.grant_flows).
321
- to eq(%w[authorization_code client_credentials])
322
- end
323
-
324
- it "can change the value" do
325
- Doorkeeper.configure do
326
- orm DOORKEEPER_ORM
327
- grant_flows ['authorization_code', 'implicit']
328
- end
329
-
330
- expect(subject.grant_flows).to eq ['authorization_code', 'implicit']
331
- end
332
-
333
- context "when including 'authorization_code'" do
334
- before do
335
- Doorkeeper.configure do
336
- orm DOORKEEPER_ORM
337
- grant_flows ['authorization_code']
338
- end
339
- end
340
-
341
- it "includes 'code' in authorization_response_types" do
342
- expect(subject.authorization_response_types).to include 'code'
343
- end
344
-
345
- it "includes 'authorization_code' in token_grant_types" do
346
- expect(subject.token_grant_types).to include 'authorization_code'
347
- end
348
- end
349
-
350
- context "when including 'implicit'" do
351
- before do
352
- Doorkeeper.configure do
353
- orm DOORKEEPER_ORM
354
- grant_flows ['implicit']
355
- end
356
- end
357
-
358
- it "includes 'token' in authorization_response_types" do
359
- expect(subject.authorization_response_types).to include 'token'
360
- end
361
- end
362
-
363
- context "when including 'password'" do
364
- before do
365
- Doorkeeper.configure do
366
- orm DOORKEEPER_ORM
367
- grant_flows ['password']
368
- end
369
- end
370
-
371
- it "includes 'password' in token_grant_types" do
372
- expect(subject.token_grant_types).to include 'password'
373
- end
374
- end
375
-
376
- context "when including 'client_credentials'" do
377
- before do
378
- Doorkeeper.configure do
379
- orm DOORKEEPER_ORM
380
- grant_flows ['client_credentials']
381
- end
382
- end
383
-
384
- it "includes 'client_credentials' in token_grant_types" do
385
- expect(subject.token_grant_types).to include 'client_credentials'
386
- end
387
- end
388
- end
389
-
390
- it 'raises an exception when configuration is not set' do
391
- old_config = Doorkeeper.configuration
392
- Doorkeeper.module_eval do
393
- @config = nil
394
- end
395
-
396
- expect do
397
- Doorkeeper.configuration
398
- end.to raise_error Doorkeeper::MissingConfiguration
399
-
400
- Doorkeeper.module_eval do
401
- @config = old_config
402
- end
403
- end
404
-
405
- describe 'access_token_generator' do
406
- it 'is \'Doorkeeper::OAuth::Helpers::UniqueToken\' by default' do
407
- expect(Doorkeeper.configuration.access_token_generator).to(
408
- eq('Doorkeeper::OAuth::Helpers::UniqueToken')
409
- )
410
- end
411
-
412
- it 'can change the value' do
413
- Doorkeeper.configure do
414
- orm DOORKEEPER_ORM
415
- access_token_generator 'Example'
416
- end
417
- expect(subject.access_token_generator).to eq('Example')
418
- end
419
- end
420
-
421
- describe 'base_controller' do
422
- context 'default' do
423
- it { expect(Doorkeeper.configuration.base_controller).to eq('ActionController::Base') }
424
- end
425
-
426
- context 'custom' do
427
- before do
428
- Doorkeeper.configure do
429
- orm DOORKEEPER_ORM
430
- base_controller 'ApplicationController'
431
- end
432
- end
433
-
434
- it { expect(Doorkeeper.configuration.base_controller).to eq('ApplicationController') }
435
- end
436
- end
437
-
438
- if DOORKEEPER_ORM == :active_record
439
- describe 'active_record_options' do
440
- let(:models) { [Doorkeeper::AccessGrant, Doorkeeper::AccessToken, Doorkeeper::Application] }
441
-
442
- before do
443
- models.each do |model|
444
- allow(model).to receive(:establish_connection).and_return(true)
445
- end
446
- end
447
-
448
- it 'establishes connection for Doorkeeper models based on options' do
449
- models.each do |model|
450
- expect(model).to receive(:establish_connection)
451
- end
452
-
453
- Doorkeeper.configure do
454
- orm DOORKEEPER_ORM
455
- active_record_options(
456
- establish_connection: Rails.configuration.database_configuration[Rails.env]
457
- )
458
- end
459
- end
460
- end
461
- end
462
- end