doorkeeper 4.2.6 → 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 (274) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1049 -0
  3. data/README.md +110 -353
  4. data/app/assets/stylesheets/doorkeeper/admin/application.css +2 -2
  5. data/app/controllers/doorkeeper/application_controller.rb +6 -7
  6. data/app/controllers/doorkeeper/application_metal_controller.rb +7 -11
  7. data/app/controllers/doorkeeper/applications_controller.rb +65 -16
  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 +115 -38
  12. data/app/helpers/doorkeeper/dashboard_helper.rb +10 -6
  13. data/app/views/doorkeeper/applications/_delete_form.html.erb +3 -1
  14. data/app/views/doorkeeper/applications/_form.html.erb +33 -21
  15. data/app/views/doorkeeper/applications/edit.html.erb +1 -1
  16. data/app/views/doorkeeper/applications/index.html.erb +18 -6
  17. data/app/views/doorkeeper/applications/new.html.erb +1 -1
  18. data/app/views/doorkeeper/applications/show.html.erb +40 -16
  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/doorkeeper/authorized_applications/index.html.erb +0 -1
  23. data/app/views/layouts/doorkeeper/admin.html.erb +16 -14
  24. data/config/locales/en.yml +34 -7
  25. data/lib/doorkeeper/config/abstract_builder.rb +28 -0
  26. data/lib/doorkeeper/config/option.rb +82 -0
  27. data/lib/doorkeeper/config/validations.rb +53 -0
  28. data/lib/doorkeeper/config.rb +514 -167
  29. data/lib/doorkeeper/engine.rb +11 -5
  30. data/lib/doorkeeper/errors.rb +25 -16
  31. data/lib/doorkeeper/grant_flow/fallback_flow.rb +15 -0
  32. data/lib/doorkeeper/grant_flow/flow.rb +44 -0
  33. data/lib/doorkeeper/grant_flow/registry.rb +50 -0
  34. data/lib/doorkeeper/grant_flow.rb +45 -0
  35. data/lib/doorkeeper/grape/authorization_decorator.rb +6 -4
  36. data/lib/doorkeeper/grape/helpers.rb +23 -12
  37. data/lib/doorkeeper/helpers/controller.rb +51 -14
  38. data/lib/doorkeeper/models/access_grant_mixin.rb +94 -27
  39. data/lib/doorkeeper/models/access_token_mixin.rb +284 -96
  40. data/lib/doorkeeper/models/application_mixin.rb +58 -27
  41. data/lib/doorkeeper/models/concerns/accessible.rb +2 -0
  42. data/lib/doorkeeper/models/concerns/expirable.rb +12 -6
  43. data/lib/doorkeeper/models/concerns/orderable.rb +15 -0
  44. data/lib/doorkeeper/models/concerns/ownership.rb +4 -7
  45. data/lib/doorkeeper/models/concerns/resource_ownerable.rb +47 -0
  46. data/lib/doorkeeper/models/concerns/reusable.rb +19 -0
  47. data/lib/doorkeeper/models/concerns/revocable.rb +3 -27
  48. data/lib/doorkeeper/models/concerns/scopes.rb +12 -2
  49. data/lib/doorkeeper/models/concerns/secret_storable.rb +106 -0
  50. data/lib/doorkeeper/oauth/authorization/code.rb +48 -12
  51. data/lib/doorkeeper/oauth/authorization/context.rb +17 -0
  52. data/lib/doorkeeper/oauth/authorization/token.rb +66 -28
  53. data/lib/doorkeeper/oauth/authorization/uri_builder.rb +7 -5
  54. data/lib/doorkeeper/oauth/authorization_code_request.rb +63 -10
  55. data/lib/doorkeeper/oauth/base_request.rb +35 -19
  56. data/lib/doorkeeper/oauth/base_response.rb +2 -0
  57. data/lib/doorkeeper/oauth/client/credentials.rb +9 -7
  58. data/lib/doorkeeper/oauth/client.rb +10 -11
  59. data/lib/doorkeeper/oauth/client_credentials/creator.rb +47 -4
  60. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +16 -9
  61. data/lib/doorkeeper/oauth/client_credentials/validator.rb +56 -0
  62. data/lib/doorkeeper/oauth/client_credentials_request.rb +10 -11
  63. data/lib/doorkeeper/oauth/code_request.rb +8 -12
  64. data/lib/doorkeeper/oauth/code_response.rb +27 -15
  65. data/lib/doorkeeper/oauth/error.rb +5 -3
  66. data/lib/doorkeeper/oauth/error_response.rb +35 -15
  67. data/lib/doorkeeper/oauth/forbidden_token_response.rb +11 -3
  68. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +23 -18
  69. data/lib/doorkeeper/oauth/helpers/unique_token.rb +20 -3
  70. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +53 -3
  71. data/lib/doorkeeper/oauth/hooks/context.rb +21 -0
  72. data/lib/doorkeeper/oauth/invalid_request_response.rb +43 -0
  73. data/lib/doorkeeper/oauth/invalid_token_response.rb +29 -5
  74. data/lib/doorkeeper/oauth/nonstandard.rb +39 -0
  75. data/lib/doorkeeper/oauth/password_access_token_request.rb +44 -10
  76. data/lib/doorkeeper/oauth/pre_authorization.rb +135 -26
  77. data/lib/doorkeeper/oauth/refresh_token_request.rb +60 -31
  78. data/lib/doorkeeper/oauth/scopes.rb +26 -12
  79. data/lib/doorkeeper/oauth/token.rb +13 -9
  80. data/lib/doorkeeper/oauth/token_introspection.rb +202 -0
  81. data/lib/doorkeeper/oauth/token_request.rb +8 -20
  82. data/lib/doorkeeper/oauth/token_response.rb +14 -10
  83. data/lib/doorkeeper/oauth.rb +13 -0
  84. data/lib/doorkeeper/orm/active_record/access_grant.rb +6 -4
  85. data/lib/doorkeeper/orm/active_record/access_token.rb +5 -42
  86. data/lib/doorkeeper/orm/active_record/application.rb +6 -20
  87. data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +69 -0
  88. data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +60 -0
  89. data/lib/doorkeeper/orm/active_record/mixins/application.rb +199 -0
  90. data/lib/doorkeeper/orm/active_record/redirect_uri_validator.rb +66 -0
  91. data/lib/doorkeeper/orm/active_record/stale_records_cleaner.rb +33 -0
  92. data/lib/doorkeeper/orm/active_record.rb +37 -8
  93. data/lib/doorkeeper/rails/helpers.rb +14 -13
  94. data/lib/doorkeeper/rails/routes/abstract_router.rb +35 -0
  95. data/lib/doorkeeper/rails/routes/mapper.rb +4 -2
  96. data/lib/doorkeeper/rails/routes/mapping.rb +9 -7
  97. data/lib/doorkeeper/rails/routes/registry.rb +45 -0
  98. data/lib/doorkeeper/rails/routes.rb +41 -28
  99. data/lib/doorkeeper/rake/db.rake +40 -0
  100. data/lib/doorkeeper/rake/setup.rake +11 -0
  101. data/lib/doorkeeper/rake.rb +14 -0
  102. data/lib/doorkeeper/request/authorization_code.rb +6 -4
  103. data/lib/doorkeeper/request/client_credentials.rb +3 -3
  104. data/lib/doorkeeper/request/code.rb +1 -1
  105. data/lib/doorkeeper/request/password.rb +5 -14
  106. data/lib/doorkeeper/request/refresh_token.rb +6 -5
  107. data/lib/doorkeeper/request/strategy.rb +4 -2
  108. data/lib/doorkeeper/request/token.rb +1 -1
  109. data/lib/doorkeeper/request.rb +62 -29
  110. data/lib/doorkeeper/secret_storing/base.rb +64 -0
  111. data/lib/doorkeeper/secret_storing/bcrypt.rb +60 -0
  112. data/lib/doorkeeper/secret_storing/plain.rb +33 -0
  113. data/lib/doorkeeper/secret_storing/sha256_hash.rb +26 -0
  114. data/lib/doorkeeper/server.rb +9 -11
  115. data/lib/doorkeeper/stale_records_cleaner.rb +24 -0
  116. data/lib/doorkeeper/validations.rb +5 -2
  117. data/lib/doorkeeper/version.rb +12 -1
  118. data/lib/doorkeeper.rb +111 -62
  119. data/lib/generators/doorkeeper/application_owner_generator.rb +28 -13
  120. data/lib/generators/doorkeeper/confidential_applications_generator.rb +33 -0
  121. data/lib/generators/doorkeeper/enable_polymorphic_resource_owner_generator.rb +39 -0
  122. data/lib/generators/doorkeeper/install_generator.rb +19 -9
  123. data/lib/generators/doorkeeper/migration_generator.rb +27 -10
  124. data/lib/generators/doorkeeper/pkce_generator.rb +33 -0
  125. data/lib/generators/doorkeeper/previous_refresh_token_generator.rb +31 -19
  126. data/lib/generators/doorkeeper/templates/add_confidential_to_applications.rb.erb +13 -0
  127. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb.erb +9 -0
  128. data/{spec/dummy/db/migrate/20160320211015_add_previous_refresh_token_to_access_tokens.rb → lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb.erb} +3 -1
  129. data/lib/generators/doorkeeper/templates/enable_pkce_migration.rb.erb +8 -0
  130. data/lib/generators/doorkeeper/templates/enable_polymorphic_resource_owner_migration.rb.erb +17 -0
  131. data/lib/generators/doorkeeper/templates/initializer.rb +412 -33
  132. data/lib/generators/doorkeeper/templates/migration.rb.erb +88 -0
  133. data/lib/generators/doorkeeper/views_generator.rb +8 -4
  134. data/vendor/assets/stylesheets/doorkeeper/bootstrap.min.css +4 -5
  135. metadata +114 -276
  136. data/.coveralls.yml +0 -1
  137. data/.gitignore +0 -19
  138. data/.hound.yml +0 -13
  139. data/.rspec +0 -1
  140. data/.travis.yml +0 -26
  141. data/Appraisals +0 -14
  142. data/CONTRIBUTING.md +0 -47
  143. data/Gemfile +0 -10
  144. data/NEWS.md +0 -606
  145. data/RELEASING.md +0 -10
  146. data/Rakefile +0 -20
  147. data/app/validators/redirect_uri_validator.rb +0 -34
  148. data/doorkeeper.gemspec +0 -29
  149. data/gemfiles/rails_4_2.gemfile +0 -11
  150. data/gemfiles/rails_5_0.gemfile +0 -12
  151. data/gemfiles/rails_5_1.gemfile +0 -13
  152. data/lib/doorkeeper/oauth/client_credentials/validation.rb +0 -45
  153. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb +0 -7
  154. data/lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb +0 -11
  155. data/lib/generators/doorkeeper/templates/migration.rb +0 -68
  156. data/spec/controllers/application_metal_controller.rb +0 -10
  157. data/spec/controllers/applications_controller_spec.rb +0 -58
  158. data/spec/controllers/authorizations_controller_spec.rb +0 -218
  159. data/spec/controllers/protected_resources_controller_spec.rb +0 -300
  160. data/spec/controllers/token_info_controller_spec.rb +0 -52
  161. data/spec/controllers/tokens_controller_spec.rb +0 -88
  162. data/spec/dummy/Rakefile +0 -7
  163. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  164. data/spec/dummy/app/controllers/custom_authorizations_controller.rb +0 -7
  165. data/spec/dummy/app/controllers/full_protected_resources_controller.rb +0 -12
  166. data/spec/dummy/app/controllers/home_controller.rb +0 -17
  167. data/spec/dummy/app/controllers/metal_controller.rb +0 -11
  168. data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +0 -11
  169. data/spec/dummy/app/helpers/application_helper.rb +0 -5
  170. data/spec/dummy/app/models/user.rb +0 -5
  171. data/spec/dummy/app/views/home/index.html.erb +0 -0
  172. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  173. data/spec/dummy/config/application.rb +0 -23
  174. data/spec/dummy/config/boot.rb +0 -9
  175. data/spec/dummy/config/database.yml +0 -15
  176. data/spec/dummy/config/environment.rb +0 -5
  177. data/spec/dummy/config/environments/development.rb +0 -29
  178. data/spec/dummy/config/environments/production.rb +0 -62
  179. data/spec/dummy/config/environments/test.rb +0 -44
  180. data/spec/dummy/config/initializers/active_record_belongs_to_required_by_default.rb +0 -6
  181. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  182. data/spec/dummy/config/initializers/doorkeeper.rb +0 -96
  183. data/spec/dummy/config/initializers/secret_token.rb +0 -9
  184. data/spec/dummy/config/initializers/session_store.rb +0 -8
  185. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  186. data/spec/dummy/config/locales/doorkeeper.en.yml +0 -5
  187. data/spec/dummy/config/routes.rb +0 -52
  188. data/spec/dummy/config.ru +0 -4
  189. data/spec/dummy/db/migrate/20111122132257_create_users.rb +0 -9
  190. data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +0 -5
  191. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +0 -60
  192. data/spec/dummy/db/migrate/20151223200000_add_owner_to_application.rb +0 -7
  193. data/spec/dummy/db/schema.rb +0 -67
  194. data/spec/dummy/public/404.html +0 -26
  195. data/spec/dummy/public/422.html +0 -26
  196. data/spec/dummy/public/500.html +0 -26
  197. data/spec/dummy/public/favicon.ico +0 -0
  198. data/spec/dummy/script/rails +0 -6
  199. data/spec/factories.rb +0 -28
  200. data/spec/generators/application_owner_generator_spec.rb +0 -22
  201. data/spec/generators/install_generator_spec.rb +0 -31
  202. data/spec/generators/migration_generator_spec.rb +0 -20
  203. data/spec/generators/templates/routes.rb +0 -3
  204. data/spec/generators/views_generator_spec.rb +0 -27
  205. data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +0 -24
  206. data/spec/lib/config_spec.rb +0 -334
  207. data/spec/lib/doorkeeper_spec.rb +0 -150
  208. data/spec/lib/models/expirable_spec.rb +0 -50
  209. data/spec/lib/models/revocable_spec.rb +0 -59
  210. data/spec/lib/models/scopes_spec.rb +0 -43
  211. data/spec/lib/oauth/authorization/uri_builder_spec.rb +0 -41
  212. data/spec/lib/oauth/authorization_code_request_spec.rb +0 -80
  213. data/spec/lib/oauth/base_request_spec.rb +0 -160
  214. data/spec/lib/oauth/base_response_spec.rb +0 -45
  215. data/spec/lib/oauth/client/credentials_spec.rb +0 -88
  216. data/spec/lib/oauth/client_credentials/creator_spec.rb +0 -44
  217. data/spec/lib/oauth/client_credentials/issuer_spec.rb +0 -86
  218. data/spec/lib/oauth/client_credentials/validation_spec.rb +0 -54
  219. data/spec/lib/oauth/client_credentials_integration_spec.rb +0 -27
  220. data/spec/lib/oauth/client_credentials_request_spec.rb +0 -104
  221. data/spec/lib/oauth/client_spec.rb +0 -39
  222. data/spec/lib/oauth/code_request_spec.rb +0 -45
  223. data/spec/lib/oauth/code_response_spec.rb +0 -34
  224. data/spec/lib/oauth/error_response_spec.rb +0 -61
  225. data/spec/lib/oauth/error_spec.rb +0 -23
  226. data/spec/lib/oauth/forbidden_token_response_spec.rb +0 -23
  227. data/spec/lib/oauth/helpers/scope_checker_spec.rb +0 -64
  228. data/spec/lib/oauth/helpers/unique_token_spec.rb +0 -20
  229. data/spec/lib/oauth/helpers/uri_checker_spec.rb +0 -104
  230. data/spec/lib/oauth/invalid_token_response_spec.rb +0 -56
  231. data/spec/lib/oauth/password_access_token_request_spec.rb +0 -90
  232. data/spec/lib/oauth/pre_authorization_spec.rb +0 -155
  233. data/spec/lib/oauth/refresh_token_request_spec.rb +0 -154
  234. data/spec/lib/oauth/scopes_spec.rb +0 -122
  235. data/spec/lib/oauth/token_request_spec.rb +0 -98
  236. data/spec/lib/oauth/token_response_spec.rb +0 -85
  237. data/spec/lib/oauth/token_spec.rb +0 -116
  238. data/spec/lib/request/strategy_spec.rb +0 -53
  239. data/spec/lib/server_spec.rb +0 -49
  240. data/spec/models/doorkeeper/access_grant_spec.rb +0 -36
  241. data/spec/models/doorkeeper/access_token_spec.rb +0 -394
  242. data/spec/models/doorkeeper/application_spec.rb +0 -179
  243. data/spec/requests/applications/applications_request_spec.rb +0 -94
  244. data/spec/requests/applications/authorized_applications_spec.rb +0 -30
  245. data/spec/requests/endpoints/authorization_spec.rb +0 -71
  246. data/spec/requests/endpoints/token_spec.rb +0 -64
  247. data/spec/requests/flows/authorization_code_errors_spec.rb +0 -76
  248. data/spec/requests/flows/authorization_code_spec.rb +0 -148
  249. data/spec/requests/flows/client_credentials_spec.rb +0 -58
  250. data/spec/requests/flows/implicit_grant_errors_spec.rb +0 -32
  251. data/spec/requests/flows/implicit_grant_spec.rb +0 -61
  252. data/spec/requests/flows/password_spec.rb +0 -115
  253. data/spec/requests/flows/refresh_token_spec.rb +0 -174
  254. data/spec/requests/flows/revoke_token_spec.rb +0 -157
  255. data/spec/requests/flows/skip_authorization_spec.rb +0 -59
  256. data/spec/requests/protected_resources/metal_spec.rb +0 -14
  257. data/spec/requests/protected_resources/private_api_spec.rb +0 -81
  258. data/spec/routing/custom_controller_routes_spec.rb +0 -71
  259. data/spec/routing/default_routes_spec.rb +0 -35
  260. data/spec/routing/scoped_routes_spec.rb +0 -31
  261. data/spec/spec_helper.rb +0 -4
  262. data/spec/spec_helper_integration.rb +0 -63
  263. data/spec/support/dependencies/factory_girl.rb +0 -2
  264. data/spec/support/helpers/access_token_request_helper.rb +0 -11
  265. data/spec/support/helpers/authorization_request_helper.rb +0 -41
  266. data/spec/support/helpers/config_helper.rb +0 -9
  267. data/spec/support/helpers/model_helper.rb +0 -67
  268. data/spec/support/helpers/request_spec_helper.rb +0 -84
  269. data/spec/support/helpers/url_helper.rb +0 -55
  270. data/spec/support/http_method_shim.rb +0 -38
  271. data/spec/support/orm/active_record.rb +0 -3
  272. data/spec/support/shared/controllers_shared_context.rb +0 -69
  273. data/spec/support/shared/models_shared_examples.rb +0 -52
  274. data/spec/validators/redirect_uri_validator_spec.rb +0 -78
@@ -1,20 +0,0 @@
1
- require 'spec_helper_integration'
2
- require 'generators/doorkeeper/migration_generator'
3
-
4
- describe 'Doorkeeper::MigrationGenerator' do
5
- include GeneratorSpec::TestCase
6
-
7
- tests Doorkeeper::MigrationGenerator
8
- destination ::File.expand_path('../tmp/dummy', __FILE__)
9
-
10
- describe 'after running the generator' do
11
- before :each do
12
- prepare_destination
13
- run_generator
14
- end
15
-
16
- it 'creates a migration' do
17
- assert_migration 'db/migrate/create_doorkeeper_tables.rb'
18
- end
19
- end
20
- end
@@ -1,3 +0,0 @@
1
- Rails.application.routes.draw do
2
-
3
- end
@@ -1,27 +0,0 @@
1
- require 'spec_helper_integration'
2
- require 'generators/doorkeeper/views_generator'
3
-
4
- describe Doorkeeper::Generators::ViewsGenerator do
5
- include GeneratorSpec::TestCase
6
-
7
- tests Doorkeeper::Generators::ViewsGenerator
8
- destination File.expand_path('../tmp/dummy', __FILE__)
9
-
10
- before :each do
11
- prepare_destination
12
- end
13
-
14
- it 'create all views' do
15
- run_generator
16
- assert_file 'app/views/doorkeeper/applications/_form.html.erb'
17
- assert_file 'app/views/doorkeeper/applications/edit.html.erb'
18
- assert_file 'app/views/doorkeeper/applications/index.html.erb'
19
- assert_file 'app/views/doorkeeper/applications/new.html.erb'
20
- assert_file 'app/views/doorkeeper/applications/show.html.erb'
21
-
22
- assert_file 'app/views/doorkeeper/authorizations/error.html.erb'
23
- assert_file 'app/views/doorkeeper/authorizations/new.html.erb'
24
-
25
- assert_file 'app/views/doorkeeper/authorized_applications/index.html.erb'
26
- end
27
- end
@@ -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,334 +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
- expect(subject.authenticate_resource_owner).to eq(block)
14
- end
15
- end
16
-
17
- describe 'setup_orm_adapter' do
18
- it 'adds specific error message to NameError exception' do
19
- expect do
20
- Doorkeeper.configure { orm 'hibernate' }
21
- end.to raise_error(NameError, /ORM adapter not found \(hibernate\)/)
22
- end
23
-
24
- it 'does not change other exceptions' do
25
- allow_any_instance_of(String).to receive(:classify) { raise NoMethodError }
26
-
27
- expect do
28
- Doorkeeper.configure { orm 'hibernate' }
29
- end.to raise_error(NoMethodError, /ORM adapter not found \(hibernate\)/)
30
- end
31
- end
32
-
33
- describe 'admin_authenticator' do
34
- it 'sets the block that is accessible via authenticate_admin' do
35
- block = proc {}
36
- Doorkeeper.configure do
37
- orm DOORKEEPER_ORM
38
- admin_authenticator(&block)
39
- end
40
- expect(subject.authenticate_admin).to eq(block)
41
- end
42
- end
43
-
44
- describe 'access_token_expires_in' do
45
- it 'has 2 hours by default' do
46
- expect(subject.access_token_expires_in).to eq(2.hours)
47
- end
48
-
49
- it 'can change the value' do
50
- Doorkeeper.configure do
51
- orm DOORKEEPER_ORM
52
- access_token_expires_in 4.hours
53
- end
54
- expect(subject.access_token_expires_in).to eq(4.hours)
55
- end
56
-
57
- it 'can be set to nil' do
58
- Doorkeeper.configure do
59
- orm DOORKEEPER_ORM
60
- access_token_expires_in nil
61
- end
62
- expect(subject.access_token_expires_in).to be_nil
63
- end
64
- end
65
-
66
- describe 'scopes' do
67
- it 'has default scopes' do
68
- Doorkeeper.configure do
69
- orm DOORKEEPER_ORM
70
- default_scopes :public
71
- end
72
- expect(subject.default_scopes).to include('public')
73
- end
74
-
75
- it 'has optional scopes' do
76
- Doorkeeper.configure do
77
- orm DOORKEEPER_ORM
78
- optional_scopes :write, :update
79
- end
80
- expect(subject.optional_scopes).to include('write', 'update')
81
- end
82
-
83
- it 'has all scopes' do
84
- Doorkeeper.configure do
85
- orm DOORKEEPER_ORM
86
- default_scopes :normal
87
- optional_scopes :admin
88
- end
89
- expect(subject.scopes).to include('normal', 'admin')
90
- end
91
- end
92
-
93
- describe 'use_refresh_token' do
94
- it 'is false by default' do
95
- expect(subject.refresh_token_enabled?).to be_falsey
96
- end
97
-
98
- it 'can change the value' do
99
- Doorkeeper.configure do
100
- orm DOORKEEPER_ORM
101
- use_refresh_token
102
- end
103
- expect(subject.refresh_token_enabled?).to be_truthy
104
- end
105
-
106
- it "does not includes 'refresh_token' in authorization_response_types" do
107
- expect(subject.token_grant_types).not_to include 'refresh_token'
108
- end
109
-
110
- context "is enabled" do
111
- before do
112
- Doorkeeper.configure {
113
- orm DOORKEEPER_ORM
114
- use_refresh_token
115
- }
116
- end
117
-
118
- it "includes 'refresh_token' in authorization_response_types" do
119
- expect(subject.token_grant_types).to include 'refresh_token'
120
- end
121
- end
122
- end
123
-
124
- describe 'client_credentials' do
125
- it 'has defaults order' do
126
- expect(subject.client_credentials_methods).to eq([:from_basic, :from_params])
127
- end
128
-
129
- it 'can change the value' do
130
- Doorkeeper.configure do
131
- orm DOORKEEPER_ORM
132
- client_credentials :from_digest, :from_params
133
- end
134
- expect(subject.client_credentials_methods).to eq([:from_digest, :from_params])
135
- end
136
- end
137
-
138
- describe 'force_ssl_in_redirect_uri' do
139
- it 'is true by default in non-development environments' do
140
- expect(subject.force_ssl_in_redirect_uri).to be_truthy
141
- end
142
-
143
- it 'can change the value' do
144
- Doorkeeper.configure do
145
- orm DOORKEEPER_ORM
146
- force_ssl_in_redirect_uri(false)
147
- end
148
- expect(subject.force_ssl_in_redirect_uri).to be_falsey
149
- end
150
- end
151
-
152
- describe 'access_token_methods' do
153
- it 'has defaults order' do
154
- expect(subject.access_token_methods).to eq([:from_bearer_authorization, :from_access_token_param, :from_bearer_param])
155
- end
156
-
157
- it 'can change the value' do
158
- Doorkeeper.configure do
159
- orm DOORKEEPER_ORM
160
- access_token_methods :from_access_token_param, :from_bearer_param
161
- end
162
- expect(subject.access_token_methods).to eq([:from_access_token_param, :from_bearer_param])
163
- end
164
- end
165
-
166
- describe 'enable_application_owner' do
167
- it 'is disabled by default' do
168
- expect(Doorkeeper.configuration.enable_application_owner?).not_to be_truthy
169
- end
170
-
171
- context 'when enabled without confirmation' do
172
- before do
173
- Doorkeeper.configure do
174
- orm DOORKEEPER_ORM
175
- enable_application_owner
176
- end
177
- end
178
- it 'adds support for application owner' do
179
- expect(Doorkeeper::Application.new).to respond_to :owner
180
- end
181
- it 'Doorkeeper.configuration.confirm_application_owner? returns false' do
182
- expect(Doorkeeper.configuration.confirm_application_owner?).not_to be_truthy
183
- end
184
- end
185
-
186
- context 'when enabled with confirmation set to true' do
187
- before do
188
- Doorkeeper.configure do
189
- orm DOORKEEPER_ORM
190
- enable_application_owner confirmation: true
191
- end
192
- end
193
- it 'adds support for application owner' do
194
- expect(Doorkeeper::Application.new).to respond_to :owner
195
- end
196
- it 'Doorkeeper.configuration.confirm_application_owner? returns true' do
197
- expect(Doorkeeper.configuration.confirm_application_owner?).to be_truthy
198
- end
199
- end
200
- end
201
-
202
- describe 'realm' do
203
- it 'is \'Doorkeeper\' by default' do
204
- expect(Doorkeeper.configuration.realm).to eq('Doorkeeper')
205
- end
206
-
207
- it 'can change the value' do
208
- Doorkeeper.configure do
209
- orm DOORKEEPER_ORM
210
- realm 'Example'
211
- end
212
- expect(subject.realm).to eq('Example')
213
- end
214
- end
215
-
216
- describe "grant_flows" do
217
- it "is set to all grant flows by default" do
218
- expect(Doorkeeper.configuration.grant_flows).
219
- to eq(%w(authorization_code client_credentials))
220
- end
221
-
222
- it "can change the value" do
223
- Doorkeeper.configure {
224
- orm DOORKEEPER_ORM
225
- grant_flows [ 'authorization_code', 'implicit' ]
226
- }
227
- expect(subject.grant_flows).to eq ['authorization_code', 'implicit']
228
- end
229
-
230
- context "when including 'authorization_code'" do
231
- before do
232
- Doorkeeper.configure {
233
- orm DOORKEEPER_ORM
234
- grant_flows ['authorization_code']
235
- }
236
- end
237
-
238
- it "includes 'code' in authorization_response_types" do
239
- expect(subject.authorization_response_types).to include 'code'
240
- end
241
-
242
- it "includes 'authorization_code' in token_grant_types" do
243
- expect(subject.token_grant_types).to include 'authorization_code'
244
- end
245
- end
246
-
247
- context "when including 'implicit'" do
248
- before do
249
- Doorkeeper.configure {
250
- orm DOORKEEPER_ORM
251
- grant_flows ['implicit']
252
- }
253
- end
254
-
255
- it "includes 'token' in authorization_response_types" do
256
- expect(subject.authorization_response_types).to include 'token'
257
- end
258
- end
259
-
260
- context "when including 'password'" do
261
- before do
262
- Doorkeeper.configure {
263
- orm DOORKEEPER_ORM
264
- grant_flows ['password']
265
- }
266
- end
267
-
268
- it "includes 'password' in token_grant_types" do
269
- expect(subject.token_grant_types).to include 'password'
270
- end
271
- end
272
-
273
- context "when including 'client_credentials'" do
274
- before do
275
- Doorkeeper.configure {
276
- orm DOORKEEPER_ORM
277
- grant_flows ['client_credentials']
278
- }
279
- end
280
-
281
- it "includes 'client_credentials' in token_grant_types" do
282
- expect(subject.token_grant_types).to include 'client_credentials'
283
- end
284
- end
285
- end
286
-
287
- it 'raises an exception when configuration is not set' do
288
- old_config = Doorkeeper.configuration
289
- Doorkeeper.module_eval do
290
- @config = nil
291
- end
292
-
293
- expect do
294
- Doorkeeper.configuration
295
- end.to raise_error Doorkeeper::MissingConfiguration
296
-
297
- Doorkeeper.module_eval do
298
- @config = old_config
299
- end
300
- end
301
-
302
- describe 'access_token_generator' do
303
- it 'is \'Doorkeeper::OAuth::Helpers::UniqueToken\' by default' do
304
- expect(Doorkeeper.configuration.access_token_generator).to(
305
- eq('Doorkeeper::OAuth::Helpers::UniqueToken')
306
- )
307
- end
308
-
309
- it 'can change the value' do
310
- Doorkeeper.configure do
311
- orm DOORKEEPER_ORM
312
- access_token_generator 'Example'
313
- end
314
- expect(subject.access_token_generator).to eq('Example')
315
- end
316
- end
317
-
318
- describe 'base_controller' do
319
- context 'default' do
320
- it { expect(Doorkeeper.configuration.base_controller).to eq('ActionController::Base') }
321
- end
322
-
323
- context 'custom' do
324
- before do
325
- Doorkeeper.configure do
326
- orm DOORKEEPER_ORM
327
- base_controller 'ApplicationController'
328
- end
329
- end
330
-
331
- it { expect(Doorkeeper.configuration.base_controller).to eq('ApplicationController') }
332
- end
333
- end
334
- end
@@ -1,150 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- describe Doorkeeper do
4
- describe "#authenticate" do
5
- let(:request) { double }
6
-
7
- it "calls OAuth::Token#authenticate" do
8
- token_strategies = Doorkeeper.configuration.access_token_methods
9
-
10
- expect(Doorkeeper::OAuth::Token).to receive(:authenticate).
11
- with(request, *token_strategies)
12
-
13
- Doorkeeper.authenticate(request)
14
- end
15
-
16
- it "accepts custom token strategies" do
17
- token_strategies = [:first_way, :second_way]
18
-
19
- expect(Doorkeeper::OAuth::Token).to receive(:authenticate).
20
- with(request, *token_strategies)
21
-
22
- Doorkeeper.authenticate(request, token_strategies)
23
- end
24
- end
25
-
26
- describe "#configured?" do
27
- after do
28
- Doorkeeper.remove_instance_variable(:@config)
29
- end
30
-
31
- context "@config is set" do
32
- it "returns true" do
33
- Doorkeeper.instance_variable_set(:@config, "hi")
34
-
35
- expect(Doorkeeper.configured?).to eq(true)
36
- end
37
- end
38
-
39
- context "@config is not set" do
40
- it "returns false" do
41
- Doorkeeper.instance_variable_set(:@config, nil)
42
-
43
- expect(Doorkeeper.configured?).to eq(false)
44
- end
45
- end
46
-
47
- it "is deprecated" do
48
- expect(ActiveSupport::Deprecation).to receive(:warn).
49
- with("Method `Doorkeeper#configured?` has been deprecated without replacement.")
50
-
51
- Doorkeeper.configured?
52
- end
53
- end
54
-
55
- describe "#database_installed?" do
56
- before do
57
- ["AccessToken", "AccessGrant", "Application"].each do |klass|
58
- @original_classes ||= {}
59
- @original_classes[klass] = Doorkeeper.const_get(klass)
60
- Doorkeeper.send(:remove_const, klass)
61
- end
62
- end
63
-
64
- after do
65
- ["AccessToken", "AccessGrant", "Application"].each do |klass|
66
- Doorkeeper.send(:remove_const, klass)
67
- Doorkeeper.const_set(klass, @original_classes[klass])
68
- end
69
- end
70
-
71
- context "all tables exist" do
72
- before do
73
- klass = double table_exists?: true
74
-
75
- Doorkeeper.const_set(:AccessToken, klass)
76
- Doorkeeper.const_set(:AccessGrant, klass)
77
- Doorkeeper.const_set(:Application, klass)
78
- end
79
-
80
- it "returns true" do
81
- expect(Doorkeeper.database_installed?).to eq(true)
82
- end
83
-
84
- it "is deprecated" do
85
- expect(ActiveSupport::Deprecation).to receive(:warn).
86
- with("Method `Doorkeeper#database_installed?` has been deprecated without replacement.")
87
-
88
- Doorkeeper.database_installed?
89
- end
90
- end
91
-
92
- context "all tables do not exist" do
93
- before do
94
- klass = double table_exists?: false
95
-
96
- Doorkeeper.const_set(:AccessToken, klass)
97
- Doorkeeper.const_set(:AccessGrant, klass)
98
- Doorkeeper.const_set(:Application, klass)
99
- end
100
-
101
- it "returns false" do
102
- expect(Doorkeeper.database_installed?).to eq(false)
103
- end
104
-
105
- it "is deprecated" do
106
- expect(ActiveSupport::Deprecation).to receive(:warn).
107
- with("Method `Doorkeeper#database_installed?` has been deprecated without replacement.")
108
-
109
- Doorkeeper.database_installed?
110
- end
111
- end
112
- end
113
-
114
- describe "#installed?" do
115
- context "methods return true" do
116
- before do
117
- allow(Doorkeeper).to receive(:configured?).and_return(true).once
118
- allow(Doorkeeper).to receive(:database_installed?).and_return(true).once
119
- end
120
-
121
- it "returns true" do
122
- expect(Doorkeeper.installed?).to eq(true)
123
- end
124
- end
125
-
126
- context "methods return false" do
127
- before do
128
- allow(Doorkeeper).to receive(:configured?).and_return(false).once
129
- allow(Doorkeeper).to receive(:database_installed?).and_return(false).once
130
- end
131
-
132
- it "returns false" do
133
- expect(Doorkeeper.installed?).to eq(false)
134
- end
135
- end
136
-
137
- it "is deprecated" do
138
- expect(ActiveSupport::Deprecation).to receive(:warn).
139
- with("Method `Doorkeeper#configured?` has been deprecated without replacement.")
140
-
141
- expect(ActiveSupport::Deprecation).to receive(:warn).
142
- with("Method `Doorkeeper#database_installed?` has been deprecated without replacement.")
143
-
144
- expect(ActiveSupport::Deprecation).to receive(:warn).
145
- with("Method `Doorkeeper#installed?` has been deprecated without replacement.")
146
-
147
- Doorkeeper.installed?
148
- end
149
- end
150
- end
@@ -1,50 +0,0 @@
1
- require 'spec_helper'
2
- require 'active_support/time'
3
- require 'doorkeeper/models/concerns/expirable'
4
-
5
- describe 'Expirable' do
6
- subject do
7
- Class.new do
8
- include Doorkeeper::Models::Expirable
9
- end.new
10
- end
11
-
12
- before do
13
- allow(subject).to receive(:created_at).and_return(1.minute.ago)
14
- end
15
-
16
- describe :expired? do
17
- it 'is not expired if time has not passed' do
18
- allow(subject).to receive(:expires_in).and_return(2.minutes)
19
- expect(subject).not_to be_expired
20
- end
21
-
22
- it 'is expired if time has passed' do
23
- allow(subject).to receive(:expires_in).and_return(10.seconds)
24
- expect(subject).to be_expired
25
- end
26
-
27
- it 'is not expired if expires_in is not set' do
28
- allow(subject).to receive(:expires_in).and_return(nil)
29
- expect(subject).not_to be_expired
30
- end
31
- end
32
-
33
- describe :expires_in_seconds do
34
- it 'should return the amount of time remaining until the token is expired' do
35
- allow(subject).to receive(:expires_in).and_return(2.minutes)
36
- expect(subject.expires_in_seconds).to eq(60)
37
- end
38
-
39
- it 'should return 0 when expired' do
40
- allow(subject).to receive(:expires_in).and_return(30.seconds)
41
- expect(subject.expires_in_seconds).to eq(0)
42
- end
43
-
44
- it 'should return nil when expires_in is nil' do
45
- allow(subject).to receive(:expires_in).and_return(nil)
46
- expect(subject.expires_in_seconds).to be_nil
47
- end
48
-
49
- end
50
- end
@@ -1,59 +0,0 @@
1
- require 'spec_helper'
2
- require 'active_support/core_ext/object/blank'
3
- require 'doorkeeper/models/concerns/revocable'
4
-
5
- describe 'Revocable' do
6
- subject do
7
- Class.new do
8
- include Doorkeeper::Models::Revocable
9
- end.new
10
- end
11
-
12
- describe :revoke do
13
- it 'updates :revoked_at attribute with current time' do
14
- utc = double utc: double
15
- clock = double now: utc
16
- expect(subject).to receive(:update_attribute).with(:revoked_at, clock.now.utc)
17
- subject.revoke(clock)
18
- end
19
- end
20
-
21
- describe :revoked? do
22
- it 'is revoked if :revoked_at has passed' do
23
- allow(subject).to receive(:revoked_at).and_return(Time.now.utc - 1000)
24
- expect(subject).to be_revoked
25
- end
26
-
27
- it 'is not revoked if :revoked_at has not passed' do
28
- allow(subject).to receive(:revoked_at).and_return(Time.now.utc + 1000)
29
- expect(subject).not_to be_revoked
30
- end
31
-
32
- it 'is not revoked if :revoked_at is not set' do
33
- allow(subject).to receive(:revoked_at).and_return(nil)
34
- expect(subject).not_to be_revoked
35
- end
36
- end
37
-
38
- describe :revoke_previous_refresh_token! do
39
- it "revokes the previous token if existing, and resets the
40
- `previous_refresh_token` attribute" do
41
- previous_token = FactoryGirl.create(
42
- :access_token,
43
- refresh_token: "refresh_token"
44
- )
45
- current_token = FactoryGirl.create(
46
- :access_token,
47
- previous_refresh_token: previous_token.refresh_token
48
- )
49
-
50
- expect_any_instance_of(
51
- Doorkeeper::AccessToken
52
- ).to receive(:revoke).and_call_original
53
- current_token.revoke_previous_refresh_token!
54
-
55
- expect(current_token.previous_refresh_token).to be_empty
56
- expect(previous_token.reload).to be_revoked
57
- end
58
- end
59
- end