doorkeeper 4.2.0 → 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 (271) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1038 -0
  3. data/README.md +110 -348
  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 -20
  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 +112 -35
  12. data/app/helpers/doorkeeper/dashboard_helper.rb +10 -6
  13. data/app/views/doorkeeper/applications/_delete_form.html.erb +4 -3
  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 +7 -1
  22. data/app/views/doorkeeper/authorized_applications/_delete_form.html.erb +1 -2
  23. data/app/views/doorkeeper/authorized_applications/index.html.erb +0 -1
  24. data/app/views/layouts/doorkeeper/admin.html.erb +16 -14
  25. data/config/locales/en.yml +33 -9
  26. data/lib/doorkeeper/config/abstract_builder.rb +28 -0
  27. data/lib/doorkeeper/config/option.rb +82 -0
  28. data/lib/doorkeeper/config/validations.rb +53 -0
  29. data/lib/doorkeeper/config.rb +545 -143
  30. data/lib/doorkeeper/engine.rb +11 -5
  31. data/lib/doorkeeper/errors.rb +37 -10
  32. data/lib/doorkeeper/grant_flow/fallback_flow.rb +15 -0
  33. data/lib/doorkeeper/grant_flow/flow.rb +44 -0
  34. data/lib/doorkeeper/grant_flow/registry.rb +50 -0
  35. data/lib/doorkeeper/grant_flow.rb +45 -0
  36. data/lib/doorkeeper/grape/authorization_decorator.rb +6 -4
  37. data/lib/doorkeeper/grape/helpers.rb +24 -12
  38. data/lib/doorkeeper/helpers/controller.rb +49 -27
  39. data/lib/doorkeeper/models/access_grant_mixin.rb +100 -21
  40. data/lib/doorkeeper/models/access_token_mixin.rb +379 -75
  41. data/lib/doorkeeper/models/application_mixin.rb +72 -25
  42. data/lib/doorkeeper/models/concerns/accessible.rb +6 -0
  43. data/lib/doorkeeper/models/concerns/expirable.rb +20 -6
  44. data/lib/doorkeeper/models/concerns/orderable.rb +15 -0
  45. data/lib/doorkeeper/models/concerns/ownership.rb +4 -7
  46. data/lib/doorkeeper/models/concerns/resource_ownerable.rb +47 -0
  47. data/lib/doorkeeper/models/concerns/reusable.rb +19 -0
  48. data/lib/doorkeeper/models/concerns/revocable.rb +12 -18
  49. data/lib/doorkeeper/models/concerns/scopes.rb +12 -2
  50. data/lib/doorkeeper/models/concerns/secret_storable.rb +106 -0
  51. data/lib/doorkeeper/oauth/authorization/code.rb +48 -12
  52. data/lib/doorkeeper/oauth/authorization/context.rb +17 -0
  53. data/lib/doorkeeper/oauth/authorization/token.rb +66 -28
  54. data/lib/doorkeeper/oauth/authorization/uri_builder.rb +22 -18
  55. data/lib/doorkeeper/oauth/authorization_code_request.rb +64 -14
  56. data/lib/doorkeeper/oauth/base_request.rb +66 -0
  57. data/lib/doorkeeper/oauth/base_response.rb +31 -0
  58. data/lib/doorkeeper/oauth/client/credentials.rb +23 -10
  59. data/lib/doorkeeper/oauth/client.rb +10 -12
  60. data/lib/doorkeeper/oauth/client_credentials/creator.rb +47 -4
  61. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +16 -9
  62. data/lib/doorkeeper/oauth/client_credentials/validator.rb +56 -0
  63. data/lib/doorkeeper/oauth/client_credentials_request.rb +11 -15
  64. data/lib/doorkeeper/oauth/code_request.rb +8 -12
  65. data/lib/doorkeeper/oauth/code_response.rb +28 -15
  66. data/lib/doorkeeper/oauth/error.rb +5 -3
  67. data/lib/doorkeeper/oauth/error_response.rb +41 -20
  68. data/lib/doorkeeper/oauth/forbidden_token_response.rb +10 -3
  69. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +23 -18
  70. data/lib/doorkeeper/oauth/helpers/unique_token.rb +20 -3
  71. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +53 -3
  72. data/lib/doorkeeper/oauth/hooks/context.rb +21 -0
  73. data/lib/doorkeeper/oauth/invalid_request_response.rb +43 -0
  74. data/lib/doorkeeper/oauth/invalid_token_response.rb +31 -5
  75. data/lib/doorkeeper/oauth/nonstandard.rb +39 -0
  76. data/lib/doorkeeper/oauth/password_access_token_request.rb +45 -13
  77. data/lib/doorkeeper/oauth/pre_authorization.rb +135 -26
  78. data/lib/doorkeeper/oauth/refresh_token_request.rb +61 -36
  79. data/lib/doorkeeper/oauth/scopes.rb +26 -12
  80. data/lib/doorkeeper/oauth/token.rb +25 -23
  81. data/lib/doorkeeper/oauth/token_introspection.rb +202 -0
  82. data/lib/doorkeeper/oauth/token_request.rb +8 -21
  83. data/lib/doorkeeper/oauth/token_response.rb +14 -10
  84. data/lib/doorkeeper/oauth.rb +13 -0
  85. data/lib/doorkeeper/orm/active_record/access_grant.rb +6 -4
  86. data/lib/doorkeeper/orm/active_record/access_token.rb +5 -25
  87. data/lib/doorkeeper/orm/active_record/application.rb +6 -15
  88. data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +68 -0
  89. data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +59 -0
  90. data/lib/doorkeeper/orm/active_record/mixins/application.rb +198 -0
  91. data/lib/doorkeeper/orm/active_record/redirect_uri_validator.rb +66 -0
  92. data/lib/doorkeeper/orm/active_record/stale_records_cleaner.rb +33 -0
  93. data/lib/doorkeeper/orm/active_record.rb +37 -8
  94. data/lib/doorkeeper/rails/helpers.rb +14 -15
  95. data/lib/doorkeeper/rails/routes/abstract_router.rb +35 -0
  96. data/lib/doorkeeper/rails/routes/mapper.rb +3 -1
  97. data/lib/doorkeeper/rails/routes/mapping.rb +10 -8
  98. data/lib/doorkeeper/rails/routes/registry.rb +45 -0
  99. data/lib/doorkeeper/rails/routes.rb +42 -30
  100. data/lib/doorkeeper/rake/db.rake +40 -0
  101. data/lib/doorkeeper/rake/setup.rake +11 -0
  102. data/lib/doorkeeper/rake.rb +14 -0
  103. data/lib/doorkeeper/request/authorization_code.rb +12 -4
  104. data/lib/doorkeeper/request/client_credentials.rb +3 -3
  105. data/lib/doorkeeper/request/code.rb +1 -1
  106. data/lib/doorkeeper/request/password.rb +5 -14
  107. data/lib/doorkeeper/request/refresh_token.rb +6 -5
  108. data/lib/doorkeeper/request/strategy.rb +4 -2
  109. data/lib/doorkeeper/request/token.rb +1 -1
  110. data/lib/doorkeeper/request.rb +62 -29
  111. data/lib/doorkeeper/secret_storing/base.rb +64 -0
  112. data/lib/doorkeeper/secret_storing/bcrypt.rb +60 -0
  113. data/lib/doorkeeper/secret_storing/plain.rb +33 -0
  114. data/lib/doorkeeper/secret_storing/sha256_hash.rb +26 -0
  115. data/lib/doorkeeper/server.rb +9 -19
  116. data/lib/doorkeeper/stale_records_cleaner.rb +24 -0
  117. data/lib/doorkeeper/validations.rb +5 -2
  118. data/lib/doorkeeper/version.rb +12 -1
  119. data/lib/doorkeeper.rb +111 -56
  120. data/lib/generators/doorkeeper/application_owner_generator.rb +28 -13
  121. data/lib/generators/doorkeeper/confidential_applications_generator.rb +33 -0
  122. data/lib/generators/doorkeeper/enable_polymorphic_resource_owner_generator.rb +39 -0
  123. data/lib/generators/doorkeeper/install_generator.rb +19 -9
  124. data/lib/generators/doorkeeper/migration_generator.rb +27 -10
  125. data/lib/generators/doorkeeper/pkce_generator.rb +33 -0
  126. data/lib/generators/doorkeeper/previous_refresh_token_generator.rb +31 -19
  127. data/lib/generators/doorkeeper/templates/add_confidential_to_applications.rb.erb +13 -0
  128. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb.erb +9 -0
  129. data/lib/generators/doorkeeper/templates/{add_previous_refresh_token_to_access_tokens.rb → add_previous_refresh_token_to_access_tokens.rb.erb} +3 -1
  130. data/lib/generators/doorkeeper/templates/enable_pkce_migration.rb.erb +8 -0
  131. data/lib/generators/doorkeeper/templates/enable_polymorphic_resource_owner_migration.rb.erb +17 -0
  132. data/lib/generators/doorkeeper/templates/initializer.rb +410 -31
  133. data/lib/generators/doorkeeper/templates/migration.rb.erb +88 -0
  134. data/lib/generators/doorkeeper/views_generator.rb +8 -4
  135. data/vendor/assets/stylesheets/doorkeeper/bootstrap.min.css +4 -5
  136. metadata +132 -286
  137. data/.gitignore +0 -14
  138. data/.hound.yml +0 -13
  139. data/.rspec +0 -1
  140. data/.travis.yml +0 -20
  141. data/CONTRIBUTING.md +0 -47
  142. data/Gemfile +0 -14
  143. data/NEWS.md +0 -593
  144. data/RELEASING.md +0 -17
  145. data/Rakefile +0 -20
  146. data/app/validators/redirect_uri_validator.rb +0 -34
  147. data/doorkeeper.gemspec +0 -28
  148. data/lib/doorkeeper/oauth/client/methods.rb +0 -18
  149. data/lib/doorkeeper/oauth/client_credentials/validation.rb +0 -45
  150. data/lib/doorkeeper/oauth/request_concern.rb +0 -48
  151. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb +0 -7
  152. data/lib/generators/doorkeeper/templates/migration.rb +0 -68
  153. data/spec/controllers/application_metal_controller.rb +0 -10
  154. data/spec/controllers/applications_controller_spec.rb +0 -58
  155. data/spec/controllers/authorizations_controller_spec.rb +0 -189
  156. data/spec/controllers/protected_resources_controller_spec.rb +0 -300
  157. data/spec/controllers/token_info_controller_spec.rb +0 -52
  158. data/spec/controllers/tokens_controller_spec.rb +0 -88
  159. data/spec/dummy/Rakefile +0 -7
  160. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  161. data/spec/dummy/app/controllers/custom_authorizations_controller.rb +0 -7
  162. data/spec/dummy/app/controllers/full_protected_resources_controller.rb +0 -12
  163. data/spec/dummy/app/controllers/home_controller.rb +0 -17
  164. data/spec/dummy/app/controllers/metal_controller.rb +0 -11
  165. data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +0 -11
  166. data/spec/dummy/app/helpers/application_helper.rb +0 -5
  167. data/spec/dummy/app/models/user.rb +0 -5
  168. data/spec/dummy/app/views/home/index.html.erb +0 -0
  169. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  170. data/spec/dummy/config/application.rb +0 -23
  171. data/spec/dummy/config/boot.rb +0 -9
  172. data/spec/dummy/config/database.yml +0 -15
  173. data/spec/dummy/config/environment.rb +0 -5
  174. data/spec/dummy/config/environments/development.rb +0 -29
  175. data/spec/dummy/config/environments/production.rb +0 -62
  176. data/spec/dummy/config/environments/test.rb +0 -44
  177. data/spec/dummy/config/initializers/active_record_belongs_to_required_by_default.rb +0 -6
  178. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  179. data/spec/dummy/config/initializers/doorkeeper.rb +0 -96
  180. data/spec/dummy/config/initializers/secret_token.rb +0 -9
  181. data/spec/dummy/config/initializers/session_store.rb +0 -8
  182. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  183. data/spec/dummy/config/locales/doorkeeper.en.yml +0 -5
  184. data/spec/dummy/config/routes.rb +0 -52
  185. data/spec/dummy/config.ru +0 -4
  186. data/spec/dummy/db/migrate/20111122132257_create_users.rb +0 -9
  187. data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +0 -5
  188. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +0 -60
  189. data/spec/dummy/db/migrate/20151223200000_add_owner_to_application.rb +0 -7
  190. data/spec/dummy/db/migrate/20160320211015_add_previous_refresh_token_to_access_tokens.rb +0 -11
  191. data/spec/dummy/db/schema.rb +0 -67
  192. data/spec/dummy/public/404.html +0 -26
  193. data/spec/dummy/public/422.html +0 -26
  194. data/spec/dummy/public/500.html +0 -26
  195. data/spec/dummy/public/favicon.ico +0 -0
  196. data/spec/dummy/script/rails +0 -6
  197. data/spec/factories.rb +0 -28
  198. data/spec/generators/application_owner_generator_spec.rb +0 -22
  199. data/spec/generators/install_generator_spec.rb +0 -31
  200. data/spec/generators/migration_generator_spec.rb +0 -20
  201. data/spec/generators/templates/routes.rb +0 -3
  202. data/spec/generators/views_generator_spec.rb +0 -27
  203. data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +0 -24
  204. data/spec/lib/config_spec.rb +0 -334
  205. data/spec/lib/doorkeeper_spec.rb +0 -28
  206. data/spec/lib/models/expirable_spec.rb +0 -51
  207. data/spec/lib/models/revocable_spec.rb +0 -59
  208. data/spec/lib/models/scopes_spec.rb +0 -43
  209. data/spec/lib/oauth/authorization/uri_builder_spec.rb +0 -42
  210. data/spec/lib/oauth/authorization_code_request_spec.rb +0 -80
  211. data/spec/lib/oauth/client/credentials_spec.rb +0 -47
  212. data/spec/lib/oauth/client/methods_spec.rb +0 -54
  213. data/spec/lib/oauth/client_credentials/creator_spec.rb +0 -44
  214. data/spec/lib/oauth/client_credentials/issuer_spec.rb +0 -86
  215. data/spec/lib/oauth/client_credentials/validation_spec.rb +0 -54
  216. data/spec/lib/oauth/client_credentials_integration_spec.rb +0 -27
  217. data/spec/lib/oauth/client_credentials_request_spec.rb +0 -104
  218. data/spec/lib/oauth/client_spec.rb +0 -39
  219. data/spec/lib/oauth/code_request_spec.rb +0 -45
  220. data/spec/lib/oauth/code_response_spec.rb +0 -34
  221. data/spec/lib/oauth/error_response_spec.rb +0 -61
  222. data/spec/lib/oauth/error_spec.rb +0 -23
  223. data/spec/lib/oauth/forbidden_token_response_spec.rb +0 -23
  224. data/spec/lib/oauth/helpers/scope_checker_spec.rb +0 -64
  225. data/spec/lib/oauth/helpers/unique_token_spec.rb +0 -20
  226. data/spec/lib/oauth/helpers/uri_checker_spec.rb +0 -104
  227. data/spec/lib/oauth/invalid_token_response_spec.rb +0 -28
  228. data/spec/lib/oauth/password_access_token_request_spec.rb +0 -90
  229. data/spec/lib/oauth/pre_authorization_spec.rb +0 -155
  230. data/spec/lib/oauth/refresh_token_request_spec.rb +0 -154
  231. data/spec/lib/oauth/scopes_spec.rb +0 -122
  232. data/spec/lib/oauth/token_request_spec.rb +0 -98
  233. data/spec/lib/oauth/token_response_spec.rb +0 -85
  234. data/spec/lib/oauth/token_spec.rb +0 -116
  235. data/spec/lib/request/strategy_spec.rb +0 -53
  236. data/spec/lib/server_spec.rb +0 -52
  237. data/spec/models/doorkeeper/access_grant_spec.rb +0 -36
  238. data/spec/models/doorkeeper/access_token_spec.rb +0 -394
  239. data/spec/models/doorkeeper/application_spec.rb +0 -179
  240. data/spec/requests/applications/applications_request_spec.rb +0 -94
  241. data/spec/requests/applications/authorized_applications_spec.rb +0 -30
  242. data/spec/requests/endpoints/authorization_spec.rb +0 -72
  243. data/spec/requests/endpoints/token_spec.rb +0 -64
  244. data/spec/requests/flows/authorization_code_errors_spec.rb +0 -66
  245. data/spec/requests/flows/authorization_code_spec.rb +0 -156
  246. data/spec/requests/flows/client_credentials_spec.rb +0 -58
  247. data/spec/requests/flows/implicit_grant_errors_spec.rb +0 -32
  248. data/spec/requests/flows/implicit_grant_spec.rb +0 -61
  249. data/spec/requests/flows/password_spec.rb +0 -115
  250. data/spec/requests/flows/refresh_token_spec.rb +0 -174
  251. data/spec/requests/flows/revoke_token_spec.rb +0 -157
  252. data/spec/requests/flows/skip_authorization_spec.rb +0 -59
  253. data/spec/requests/protected_resources/metal_spec.rb +0 -14
  254. data/spec/requests/protected_resources/private_api_spec.rb +0 -81
  255. data/spec/routing/custom_controller_routes_spec.rb +0 -71
  256. data/spec/routing/default_routes_spec.rb +0 -35
  257. data/spec/routing/scoped_routes_spec.rb +0 -31
  258. data/spec/spec_helper.rb +0 -2
  259. data/spec/spec_helper_integration.rb +0 -59
  260. data/spec/support/dependencies/factory_girl.rb +0 -2
  261. data/spec/support/helpers/access_token_request_helper.rb +0 -11
  262. data/spec/support/helpers/authorization_request_helper.rb +0 -41
  263. data/spec/support/helpers/config_helper.rb +0 -9
  264. data/spec/support/helpers/model_helper.rb +0 -67
  265. data/spec/support/helpers/request_spec_helper.rb +0 -76
  266. data/spec/support/helpers/url_helper.rb +0 -55
  267. data/spec/support/http_method_shim.rb +0 -24
  268. data/spec/support/orm/active_record.rb +0 -3
  269. data/spec/support/shared/controllers_shared_context.rb +0 -69
  270. data/spec/support/shared/models_shared_examples.rb +0 -52
  271. 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,28 +0,0 @@
1
- require 'spec_helper_integration'
2
-
3
- describe Doorkeeper do
4
- describe 'authenticate' do
5
- let(:token) { double('Token') }
6
- let(:request) { double('ActionDispatch::Request') }
7
- before do
8
- allow(Doorkeeper::OAuth::Token).to receive(:authenticate).
9
- with(request, *token_strategies) { token }
10
- end
11
-
12
- context 'with specific access token strategies' do
13
- let(:token_strategies) { [:first_way, :second_way] }
14
-
15
- it 'authenticates the token from the request' do
16
- expect(Doorkeeper.authenticate(request, token_strategies)).to eq(token)
17
- end
18
- end
19
-
20
- context 'with default access token strategies' do
21
- let(:token_strategies) { Doorkeeper.configuration.access_token_methods }
22
-
23
- it 'authenticates the token from the request' do
24
- expect(Doorkeeper.authenticate(request)).to eq(token)
25
- end
26
- end
27
- end
28
- end
@@ -1,51 +0,0 @@
1
- require 'spec_helper'
2
- require 'timecop'
3
- require 'active_support/time'
4
- require 'doorkeeper/models/concerns/expirable'
5
-
6
- describe 'Expirable' do
7
- subject do
8
- Class.new do
9
- include Doorkeeper::Models::Expirable
10
- end.new
11
- end
12
-
13
- before do
14
- allow(subject).to receive(:created_at).and_return(1.minute.ago)
15
- end
16
-
17
- describe :expired? do
18
- it 'is not expired if time has not passed' do
19
- allow(subject).to receive(:expires_in).and_return(2.minutes)
20
- expect(subject).not_to be_expired
21
- end
22
-
23
- it 'is expired if time has passed' do
24
- allow(subject).to receive(:expires_in).and_return(10.seconds)
25
- expect(subject).to be_expired
26
- end
27
-
28
- it 'is not expired if expires_in is not set' do
29
- allow(subject).to receive(:expires_in).and_return(nil)
30
- expect(subject).not_to be_expired
31
- end
32
- end
33
-
34
- describe :expires_in_seconds do
35
- it 'should return the amount of time remaining until the token is expired' do
36
- allow(subject).to receive(:expires_in).and_return(2.minutes)
37
- expect(subject.expires_in_seconds).to eq(60)
38
- end
39
-
40
- it 'should return 0 when expired' do
41
- allow(subject).to receive(:expires_in).and_return(30.seconds)
42
- expect(subject.expires_in_seconds).to eq(0)
43
- end
44
-
45
- it 'should return nil when expires_in is nil' do
46
- allow(subject).to receive(:expires_in).and_return(nil)
47
- expect(subject.expires_in_seconds).to be_nil
48
- end
49
-
50
- end
51
- 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
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
- require 'active_support/core_ext/module/delegation'
3
- require 'active_support/core_ext/object/blank'
4
- require 'doorkeeper/oauth/scopes'
5
- require 'doorkeeper/models/concerns/scopes'
6
-
7
- describe 'Doorkeeper::Models::Scopes' do
8
- subject do
9
- Class.new(Hash) do
10
- include Doorkeeper::Models::Scopes
11
- end.new
12
- end
13
-
14
- before do
15
- subject[:scopes] = 'public admin'
16
- end
17
-
18
- describe :scopes do
19
- it 'is a `Scopes` class' do
20
- expect(subject.scopes).to be_a(Doorkeeper::OAuth::Scopes)
21
- end
22
-
23
- it 'includes scopes' do
24
- expect(subject.scopes).to include('public')
25
- end
26
- end
27
-
28
- describe :scopes_string do
29
- it 'is a `Scopes` class' do
30
- expect(subject.scopes_string).to eq('public admin')
31
- end
32
- end
33
-
34
- describe :includes_scope? do
35
- it 'should return true if at least one scope is included' do
36
- expect(subject.includes_scope?('public', 'private')).to be true
37
- end
38
-
39
- it 'should return false if no scopes are included' do
40
- expect(subject.includes_scope?('teacher', 'student')).to be false
41
- end
42
- end
43
- end
@@ -1,42 +0,0 @@
1
- require 'spec_helper'
2
- require 'active_support/core_ext/string'
3
- require 'uri'
4
- require 'rack/utils'
5
- require 'doorkeeper/oauth/authorization/uri_builder'
6
-
7
- module Doorkeeper::OAuth::Authorization
8
- describe URIBuilder do
9
-
10
- subject { Object.new.class.send :include, URIBuilder }
11
-
12
- describe :uri_with_query do
13
- it 'returns the uri with query' do
14
- uri = subject.uri_with_query 'http://example.com/', parameter: 'value'
15
- expect(uri).to eq('http://example.com/?parameter=value')
16
- end
17
-
18
- it 'rejects nil values' do
19
- uri = subject.uri_with_query 'http://example.com/', parameter: ''
20
- expect(uri).to eq('http://example.com/?')
21
- end
22
-
23
- it 'preserves original query parameters' do
24
- uri = subject.uri_with_query 'http://example.com/?query1=value', parameter: 'value'
25
- expect(uri).to match(/query1=value/)
26
- expect(uri).to match(/parameter=value/)
27
- end
28
- end
29
-
30
- describe :uri_with_fragment do
31
- it 'returns uri with parameters as fragments' do
32
- uri = subject.uri_with_fragment 'http://example.com/', parameter: 'value'
33
- expect(uri).to eq('http://example.com/#parameter=value')
34
- end
35
-
36
- it 'preserves original query parameters' do
37
- uri = subject.uri_with_fragment 'http://example.com/?query1=value1', parameter: 'value'
38
- expect(uri).to eq('http://example.com/?query1=value1#parameter=value')
39
- end
40
- end
41
- end
42
- end