doorkeeper 5.3.3 → 5.4.0.rc1

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 (120) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +0 -14
  3. data/CHANGELOG.md +35 -10
  4. data/Dangerfile +7 -7
  5. data/Dockerfile +2 -2
  6. data/Gemfile +9 -9
  7. data/README.md +6 -4
  8. data/app/controllers/doorkeeper/applications_controller.rb +7 -7
  9. data/app/controllers/doorkeeper/authorizations_controller.rb +31 -12
  10. data/app/controllers/doorkeeper/authorized_applications_controller.rb +3 -3
  11. data/app/controllers/doorkeeper/tokens_controller.rb +57 -20
  12. data/app/views/doorkeeper/applications/show.html.erb +19 -2
  13. data/bin/console +14 -0
  14. data/config/locales/en.yml +3 -1
  15. data/doorkeeper.gemspec +1 -1
  16. data/gemfiles/rails_5_0.gemfile +8 -7
  17. data/gemfiles/rails_5_1.gemfile +8 -7
  18. data/gemfiles/rails_5_2.gemfile +8 -7
  19. data/gemfiles/rails_6_0.gemfile +8 -7
  20. data/gemfiles/rails_master.gemfile +8 -7
  21. data/lib/doorkeeper.rb +106 -79
  22. data/lib/doorkeeper/config.rb +40 -17
  23. data/lib/doorkeeper/config/abstract_builder.rb +28 -0
  24. data/lib/doorkeeper/config/option.rb +28 -14
  25. data/lib/doorkeeper/grape/helpers.rb +1 -1
  26. data/lib/doorkeeper/models/access_grant_mixin.rb +9 -11
  27. data/lib/doorkeeper/models/access_token_mixin.rb +100 -41
  28. data/lib/doorkeeper/models/concerns/resource_ownerable.rb +47 -0
  29. data/lib/doorkeeper/models/concerns/revocable.rb +1 -1
  30. data/lib/doorkeeper/models/concerns/scopes.rb +5 -1
  31. data/lib/doorkeeper/models/concerns/secret_storable.rb +1 -3
  32. data/lib/doorkeeper/oauth/authorization/code.rb +14 -5
  33. data/lib/doorkeeper/oauth/authorization/context.rb +2 -2
  34. data/lib/doorkeeper/oauth/authorization/token.rb +7 -11
  35. data/lib/doorkeeper/oauth/authorization/uri_builder.rb +4 -4
  36. data/lib/doorkeeper/oauth/authorization_code_request.rb +18 -8
  37. data/lib/doorkeeper/oauth/base_request.rb +11 -19
  38. data/lib/doorkeeper/oauth/client.rb +1 -1
  39. data/lib/doorkeeper/oauth/client/credentials.rb +2 -4
  40. data/lib/doorkeeper/oauth/client_credentials/creator.rb +25 -7
  41. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +3 -2
  42. data/lib/doorkeeper/oauth/client_credentials/validator.rb +1 -1
  43. data/lib/doorkeeper/oauth/client_credentials_request.rb +8 -7
  44. data/lib/doorkeeper/oauth/code_request.rb +1 -1
  45. data/lib/doorkeeper/oauth/code_response.rb +6 -2
  46. data/lib/doorkeeper/oauth/error_response.rb +2 -4
  47. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +1 -5
  48. data/lib/doorkeeper/oauth/hooks/context.rb +21 -0
  49. data/lib/doorkeeper/oauth/invalid_token_response.rb +2 -2
  50. data/lib/doorkeeper/oauth/password_access_token_request.rb +3 -5
  51. data/lib/doorkeeper/oauth/pre_authorization.rb +32 -27
  52. data/lib/doorkeeper/oauth/refresh_token_request.rb +18 -22
  53. data/lib/doorkeeper/oauth/token.rb +1 -1
  54. data/lib/doorkeeper/oauth/token_introspection.rb +3 -3
  55. data/lib/doorkeeper/oauth/token_request.rb +2 -2
  56. data/lib/doorkeeper/oauth/token_response.rb +1 -1
  57. data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +7 -2
  58. data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +6 -2
  59. data/lib/doorkeeper/orm/active_record/mixins/application.rb +9 -64
  60. data/lib/doorkeeper/rails/routes.rb +13 -17
  61. data/lib/doorkeeper/rails/routes/abstract_router.rb +35 -0
  62. data/lib/doorkeeper/rails/routes/mapper.rb +2 -2
  63. data/lib/doorkeeper/rails/routes/registry.rb +45 -0
  64. data/lib/doorkeeper/request/strategy.rb +2 -2
  65. data/lib/doorkeeper/server.rb +3 -3
  66. data/lib/doorkeeper/version.rb +3 -3
  67. data/lib/generators/doorkeeper/confidential_applications_generator.rb +1 -1
  68. data/lib/generators/doorkeeper/enable_polymorphic_resource_owner_generator.rb +39 -0
  69. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb.erb +2 -0
  70. data/lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb.erb +2 -0
  71. data/lib/generators/doorkeeper/templates/enable_pkce_migration.rb.erb +2 -0
  72. data/lib/generators/doorkeeper/templates/enable_polymorphic_resource_owner_migration.rb.erb +17 -0
  73. data/lib/generators/doorkeeper/templates/initializer.rb +39 -3
  74. data/lib/generators/doorkeeper/templates/migration.rb.erb +2 -0
  75. data/spec/controllers/applications_controller_spec.rb +2 -2
  76. data/spec/controllers/authorizations_controller_spec.rb +165 -30
  77. data/spec/controllers/tokens_controller_spec.rb +6 -5
  78. data/spec/dummy/app/helpers/application_helper.rb +1 -1
  79. data/spec/dummy/app/models/user.rb +5 -1
  80. data/spec/dummy/config/application.rb +6 -4
  81. data/spec/dummy/config/boot.rb +4 -4
  82. data/spec/dummy/config/environment.rb +1 -1
  83. data/spec/dummy/config/routes.rb +4 -4
  84. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +2 -2
  85. data/spec/dummy/db/schema.rb +3 -1
  86. data/spec/factories.rb +1 -1
  87. data/spec/generators/enable_polymorphic_resource_owner_generator_spec.rb +47 -0
  88. data/spec/lib/config_spec.rb +15 -11
  89. data/spec/lib/models/revocable_spec.rb +2 -3
  90. data/spec/lib/models/scopes_spec.rb +8 -0
  91. data/spec/lib/oauth/authorization_code_request_spec.rb +25 -15
  92. data/spec/lib/oauth/base_request_spec.rb +6 -20
  93. data/spec/lib/oauth/client_credentials/creator_spec.rb +90 -89
  94. data/spec/lib/oauth/client_credentials/issuer_spec.rb +84 -86
  95. data/spec/lib/oauth/client_credentials/validation_spec.rb +38 -40
  96. data/spec/lib/oauth/client_credentials_request_spec.rb +5 -4
  97. data/spec/lib/oauth/code_request_spec.rb +1 -1
  98. data/spec/lib/oauth/code_response_spec.rb +5 -1
  99. data/spec/lib/oauth/error_response_spec.rb +1 -1
  100. data/spec/lib/oauth/password_access_token_request_spec.rb +24 -13
  101. data/spec/lib/oauth/pre_authorization_spec.rb +13 -18
  102. data/spec/lib/oauth/refresh_token_request_spec.rb +19 -30
  103. data/spec/lib/oauth/token_request_spec.rb +14 -7
  104. data/spec/lib/option_spec.rb +51 -0
  105. data/spec/lib/stale_records_cleaner_spec.rb +18 -5
  106. data/spec/models/doorkeeper/access_grant_spec.rb +18 -4
  107. data/spec/models/doorkeeper/access_token_spec.rb +507 -479
  108. data/spec/models/doorkeeper/application_spec.rb +22 -62
  109. data/spec/requests/endpoints/token_spec.rb +5 -1
  110. data/spec/requests/flows/authorization_code_errors_spec.rb +4 -1
  111. data/spec/requests/flows/authorization_code_spec.rb +6 -1
  112. data/spec/requests/flows/client_credentials_spec.rb +41 -0
  113. data/spec/requests/flows/refresh_token_spec.rb +16 -8
  114. data/spec/requests/flows/revoke_token_spec.rb +143 -104
  115. data/spec/support/helpers/access_token_request_helper.rb +1 -0
  116. data/spec/support/helpers/authorization_request_helper.rb +4 -4
  117. data/spec/support/helpers/config_helper.rb +1 -1
  118. data/spec/support/shared/controllers_shared_context.rb +2 -2
  119. data/spec/support/shared/models_shared_examples.rb +6 -4
  120. metadata +16 -5
@@ -5,6 +5,7 @@ module AccessTokenRequestHelper
5
5
  attributes = {
6
6
  application: client,
7
7
  resource_owner_id: resource_owner.id,
8
+ resource_owner_type: resource_owner.class.name,
8
9
  }.merge(access_token_attributes)
9
10
  FactoryBot.create(:access_token, attributes)
10
11
  end
@@ -3,19 +3,19 @@
3
3
  module AuthorizationRequestHelper
4
4
  def resource_owner_is_authenticated(resource_owner = nil)
5
5
  resource_owner ||= User.create!(name: "Joe", password: "sekret")
6
- Doorkeeper.configuration.instance_variable_set(:@authenticate_resource_owner, proc { resource_owner })
6
+ Doorkeeper.config.instance_variable_set(:@authenticate_resource_owner, proc { resource_owner })
7
7
  end
8
8
 
9
9
  def resource_owner_is_not_authenticated
10
- Doorkeeper.configuration.instance_variable_set(:@authenticate_resource_owner, proc { redirect_to("/sign_in") })
10
+ Doorkeeper.config.instance_variable_set(:@authenticate_resource_owner, proc { redirect_to("/sign_in") })
11
11
  end
12
12
 
13
13
  def default_scopes_exist(*scopes)
14
- Doorkeeper.configuration.instance_variable_set(:@default_scopes, Doorkeeper::OAuth::Scopes.from_array(scopes))
14
+ Doorkeeper.config.instance_variable_set(:@default_scopes, Doorkeeper::OAuth::Scopes.from_array(scopes))
15
15
  end
16
16
 
17
17
  def optional_scopes_exist(*scopes)
18
- Doorkeeper.configuration.instance_variable_set(:@optional_scopes, Doorkeeper::OAuth::Scopes.from_array(scopes))
18
+ Doorkeeper.config.instance_variable_set(:@optional_scopes, Doorkeeper::OAuth::Scopes.from_array(scopes))
19
19
  end
20
20
 
21
21
  def client_should_be_authorized(client)
@@ -4,7 +4,7 @@ module ConfigHelper
4
4
  def config_is_set(setting, value = nil, &block)
5
5
  setting_ivar = "@#{setting}"
6
6
  value = block_given? ? block : value
7
- Doorkeeper.configuration.instance_variable_set(setting_ivar, value)
7
+ Doorkeeper.config.instance_variable_set(setting_ivar, value)
8
8
  end
9
9
  end
10
10
 
@@ -40,13 +40,13 @@ end
40
40
  shared_context "authenticated resource owner" do
41
41
  before do
42
42
  user = double(:resource, id: 1)
43
- allow(Doorkeeper.configuration).to receive(:authenticate_resource_owner) { proc { user } }
43
+ allow(Doorkeeper.config).to receive(:authenticate_resource_owner) { proc { user } }
44
44
  end
45
45
  end
46
46
 
47
47
  shared_context "not authenticated resource owner" do
48
48
  before do
49
- allow(Doorkeeper.configuration).to receive(:authenticate_resource_owner) { proc { redirect_to "/" } }
49
+ allow(Doorkeeper.config).to receive(:authenticate_resource_owner) { proc { redirect_to "/" } }
50
50
  end
51
51
  end
52
52
 
@@ -31,20 +31,22 @@ end
31
31
 
32
32
  shared_examples "a unique token" do
33
33
  describe :token do
34
+ let(:owner) { FactoryBot.create(:resource_owner) }
35
+
34
36
  it "is generated before validation" do
35
37
  expect { subject.valid? }.to change { subject.token }.from(nil)
36
38
  end
37
39
 
38
40
  it "is not valid if token exists" do
39
- token1 = FactoryBot.create factory_name
40
- token2 = FactoryBot.create factory_name
41
+ token1 = FactoryBot.create factory_name, resource_owner_id: owner.id, resource_owner_type: owner.class.name
42
+ token2 = FactoryBot.create factory_name, resource_owner_id: owner.id, resource_owner_type: owner.class.name
41
43
  token2.token = token1.token
42
44
  expect(token2).not_to be_valid
43
45
  end
44
46
 
45
47
  it "expects database to throw an error when tokens are the same" do
46
- token1 = FactoryBot.create factory_name
47
- token2 = FactoryBot.create factory_name
48
+ token1 = FactoryBot.create factory_name, resource_owner_id: owner.id, resource_owner_type: owner.class.name
49
+ token2 = FactoryBot.create factory_name, resource_owner_id: owner.id, resource_owner_type: owner.class.name
48
50
  token2.token = token1.token
49
51
  expect do
50
52
  token2.save!(validate: false)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doorkeeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.3
4
+ version: 5.4.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felipe Elias Philipp
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2020-05-07 00:00:00.000000000 Z
14
+ date: 2020-04-08 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: railties
@@ -221,6 +221,7 @@ files:
221
221
  - gemfiles/rails_master.gemfile
222
222
  - lib/doorkeeper.rb
223
223
  - lib/doorkeeper/config.rb
224
+ - lib/doorkeeper/config/abstract_builder.rb
224
225
  - lib/doorkeeper/config/option.rb
225
226
  - lib/doorkeeper/engine.rb
226
227
  - lib/doorkeeper/errors.rb
@@ -234,6 +235,7 @@ files:
234
235
  - lib/doorkeeper/models/concerns/expirable.rb
235
236
  - lib/doorkeeper/models/concerns/orderable.rb
236
237
  - lib/doorkeeper/models/concerns/ownership.rb
238
+ - lib/doorkeeper/models/concerns/resource_ownerable.rb
237
239
  - lib/doorkeeper/models/concerns/reusable.rb
238
240
  - lib/doorkeeper/models/concerns/revocable.rb
239
241
  - lib/doorkeeper/models/concerns/scopes.rb
@@ -260,6 +262,7 @@ files:
260
262
  - lib/doorkeeper/oauth/helpers/scope_checker.rb
261
263
  - lib/doorkeeper/oauth/helpers/unique_token.rb
262
264
  - lib/doorkeeper/oauth/helpers/uri_checker.rb
265
+ - lib/doorkeeper/oauth/hooks/context.rb
263
266
  - lib/doorkeeper/oauth/invalid_request_response.rb
264
267
  - lib/doorkeeper/oauth/invalid_token_response.rb
265
268
  - lib/doorkeeper/oauth/nonstandard.rb
@@ -282,8 +285,10 @@ files:
282
285
  - lib/doorkeeper/orm/active_record/stale_records_cleaner.rb
283
286
  - lib/doorkeeper/rails/helpers.rb
284
287
  - lib/doorkeeper/rails/routes.rb
288
+ - lib/doorkeeper/rails/routes/abstract_router.rb
285
289
  - lib/doorkeeper/rails/routes/mapper.rb
286
290
  - lib/doorkeeper/rails/routes/mapping.rb
291
+ - lib/doorkeeper/rails/routes/registry.rb
287
292
  - lib/doorkeeper/rake.rb
288
293
  - lib/doorkeeper/rake/db.rake
289
294
  - lib/doorkeeper/rake/setup.rake
@@ -305,6 +310,7 @@ files:
305
310
  - lib/doorkeeper/version.rb
306
311
  - lib/generators/doorkeeper/application_owner_generator.rb
307
312
  - lib/generators/doorkeeper/confidential_applications_generator.rb
313
+ - lib/generators/doorkeeper/enable_polymorphic_resource_owner_generator.rb
308
314
  - lib/generators/doorkeeper/install_generator.rb
309
315
  - lib/generators/doorkeeper/migration_generator.rb
310
316
  - lib/generators/doorkeeper/pkce_generator.rb
@@ -314,6 +320,7 @@ files:
314
320
  - lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb.erb
315
321
  - lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb.erb
316
322
  - lib/generators/doorkeeper/templates/enable_pkce_migration.rb.erb
323
+ - lib/generators/doorkeeper/templates/enable_polymorphic_resource_owner_migration.rb.erb
317
324
  - lib/generators/doorkeeper/templates/initializer.rb
318
325
  - lib/generators/doorkeeper/templates/migration.rb.erb
319
326
  - lib/generators/doorkeeper/views_generator.rb
@@ -366,6 +373,7 @@ files:
366
373
  - spec/factories.rb
367
374
  - spec/generators/application_owner_generator_spec.rb
368
375
  - spec/generators/confidential_applications_generator_spec.rb
376
+ - spec/generators/enable_polymorphic_resource_owner_generator_spec.rb
369
377
  - spec/generators/install_generator_spec.rb
370
378
  - spec/generators/migration_generator_spec.rb
371
379
  - spec/generators/pkce_generator_spec.rb
@@ -409,6 +417,7 @@ files:
409
417
  - spec/lib/oauth/token_request_spec.rb
410
418
  - spec/lib/oauth/token_response_spec.rb
411
419
  - spec/lib/oauth/token_spec.rb
420
+ - spec/lib/option_spec.rb
412
421
  - spec/lib/request/strategy_spec.rb
413
422
  - spec/lib/secret_storing/base_spec.rb
414
423
  - spec/lib/secret_storing/bcrypt_spec.rb
@@ -474,11 +483,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
474
483
  version: '2.4'
475
484
  required_rubygems_version: !ruby/object:Gem::Requirement
476
485
  requirements:
477
- - - ">="
486
+ - - ">"
478
487
  - !ruby/object:Gem::Version
479
- version: '0'
488
+ version: 1.3.1
480
489
  requirements: []
481
- rubygems_version: 3.1.2
490
+ rubygems_version: 3.0.2
482
491
  signing_key:
483
492
  specification_version: 4
484
493
  summary: OAuth 2 provider for Rails and Grape
@@ -532,6 +541,7 @@ test_files:
532
541
  - spec/factories.rb
533
542
  - spec/generators/application_owner_generator_spec.rb
534
543
  - spec/generators/confidential_applications_generator_spec.rb
544
+ - spec/generators/enable_polymorphic_resource_owner_generator_spec.rb
535
545
  - spec/generators/install_generator_spec.rb
536
546
  - spec/generators/migration_generator_spec.rb
537
547
  - spec/generators/pkce_generator_spec.rb
@@ -575,6 +585,7 @@ test_files:
575
585
  - spec/lib/oauth/token_request_spec.rb
576
586
  - spec/lib/oauth/token_response_spec.rb
577
587
  - spec/lib/oauth/token_spec.rb
588
+ - spec/lib/option_spec.rb
578
589
  - spec/lib/request/strategy_spec.rb
579
590
  - spec/lib/secret_storing/base_spec.rb
580
591
  - spec/lib/secret_storing/bcrypt_spec.rb