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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +1049 -0
- data/README.md +110 -353
- data/app/assets/stylesheets/doorkeeper/admin/application.css +2 -2
- data/app/controllers/doorkeeper/application_controller.rb +6 -7
- data/app/controllers/doorkeeper/application_metal_controller.rb +7 -11
- data/app/controllers/doorkeeper/applications_controller.rb +65 -16
- data/app/controllers/doorkeeper/authorizations_controller.rb +97 -17
- data/app/controllers/doorkeeper/authorized_applications_controller.rb +22 -3
- data/app/controllers/doorkeeper/token_info_controller.rb +16 -4
- data/app/controllers/doorkeeper/tokens_controller.rb +115 -38
- data/app/helpers/doorkeeper/dashboard_helper.rb +10 -6
- data/app/views/doorkeeper/applications/_delete_form.html.erb +3 -1
- data/app/views/doorkeeper/applications/_form.html.erb +33 -21
- data/app/views/doorkeeper/applications/edit.html.erb +1 -1
- data/app/views/doorkeeper/applications/index.html.erb +18 -6
- data/app/views/doorkeeper/applications/new.html.erb +1 -1
- data/app/views/doorkeeper/applications/show.html.erb +40 -16
- data/app/views/doorkeeper/authorizations/error.html.erb +1 -1
- data/app/views/doorkeeper/authorizations/form_post.html.erb +15 -0
- data/app/views/doorkeeper/authorizations/new.html.erb +6 -0
- data/app/views/doorkeeper/authorized_applications/index.html.erb +0 -1
- data/app/views/layouts/doorkeeper/admin.html.erb +16 -14
- data/config/locales/en.yml +34 -7
- data/lib/doorkeeper/config/abstract_builder.rb +28 -0
- data/lib/doorkeeper/config/option.rb +82 -0
- data/lib/doorkeeper/config/validations.rb +53 -0
- data/lib/doorkeeper/config.rb +514 -167
- data/lib/doorkeeper/engine.rb +11 -5
- data/lib/doorkeeper/errors.rb +25 -16
- data/lib/doorkeeper/grant_flow/fallback_flow.rb +15 -0
- data/lib/doorkeeper/grant_flow/flow.rb +44 -0
- data/lib/doorkeeper/grant_flow/registry.rb +50 -0
- data/lib/doorkeeper/grant_flow.rb +45 -0
- data/lib/doorkeeper/grape/authorization_decorator.rb +6 -4
- data/lib/doorkeeper/grape/helpers.rb +23 -12
- data/lib/doorkeeper/helpers/controller.rb +51 -14
- data/lib/doorkeeper/models/access_grant_mixin.rb +94 -27
- data/lib/doorkeeper/models/access_token_mixin.rb +284 -96
- data/lib/doorkeeper/models/application_mixin.rb +58 -27
- data/lib/doorkeeper/models/concerns/accessible.rb +2 -0
- data/lib/doorkeeper/models/concerns/expirable.rb +12 -6
- data/lib/doorkeeper/models/concerns/orderable.rb +15 -0
- data/lib/doorkeeper/models/concerns/ownership.rb +4 -7
- data/lib/doorkeeper/models/concerns/resource_ownerable.rb +47 -0
- data/lib/doorkeeper/models/concerns/reusable.rb +19 -0
- data/lib/doorkeeper/models/concerns/revocable.rb +3 -27
- data/lib/doorkeeper/models/concerns/scopes.rb +12 -2
- data/lib/doorkeeper/models/concerns/secret_storable.rb +106 -0
- data/lib/doorkeeper/oauth/authorization/code.rb +48 -12
- data/lib/doorkeeper/oauth/authorization/context.rb +17 -0
- data/lib/doorkeeper/oauth/authorization/token.rb +66 -28
- data/lib/doorkeeper/oauth/authorization/uri_builder.rb +7 -5
- data/lib/doorkeeper/oauth/authorization_code_request.rb +63 -10
- data/lib/doorkeeper/oauth/base_request.rb +35 -19
- data/lib/doorkeeper/oauth/base_response.rb +2 -0
- data/lib/doorkeeper/oauth/client/credentials.rb +9 -7
- data/lib/doorkeeper/oauth/client.rb +10 -11
- data/lib/doorkeeper/oauth/client_credentials/creator.rb +47 -4
- data/lib/doorkeeper/oauth/client_credentials/issuer.rb +16 -9
- data/lib/doorkeeper/oauth/client_credentials/validator.rb +56 -0
- data/lib/doorkeeper/oauth/client_credentials_request.rb +10 -11
- data/lib/doorkeeper/oauth/code_request.rb +8 -12
- data/lib/doorkeeper/oauth/code_response.rb +27 -15
- data/lib/doorkeeper/oauth/error.rb +5 -3
- data/lib/doorkeeper/oauth/error_response.rb +35 -15
- data/lib/doorkeeper/oauth/forbidden_token_response.rb +11 -3
- data/lib/doorkeeper/oauth/helpers/scope_checker.rb +23 -18
- data/lib/doorkeeper/oauth/helpers/unique_token.rb +20 -3
- data/lib/doorkeeper/oauth/helpers/uri_checker.rb +53 -3
- data/lib/doorkeeper/oauth/hooks/context.rb +21 -0
- data/lib/doorkeeper/oauth/invalid_request_response.rb +43 -0
- data/lib/doorkeeper/oauth/invalid_token_response.rb +29 -5
- data/lib/doorkeeper/oauth/nonstandard.rb +39 -0
- data/lib/doorkeeper/oauth/password_access_token_request.rb +44 -10
- data/lib/doorkeeper/oauth/pre_authorization.rb +135 -26
- data/lib/doorkeeper/oauth/refresh_token_request.rb +60 -31
- data/lib/doorkeeper/oauth/scopes.rb +26 -12
- data/lib/doorkeeper/oauth/token.rb +13 -9
- data/lib/doorkeeper/oauth/token_introspection.rb +202 -0
- data/lib/doorkeeper/oauth/token_request.rb +8 -20
- data/lib/doorkeeper/oauth/token_response.rb +14 -10
- data/lib/doorkeeper/oauth.rb +13 -0
- data/lib/doorkeeper/orm/active_record/access_grant.rb +6 -4
- data/lib/doorkeeper/orm/active_record/access_token.rb +5 -42
- data/lib/doorkeeper/orm/active_record/application.rb +6 -20
- data/lib/doorkeeper/orm/active_record/mixins/access_grant.rb +69 -0
- data/lib/doorkeeper/orm/active_record/mixins/access_token.rb +60 -0
- data/lib/doorkeeper/orm/active_record/mixins/application.rb +199 -0
- data/lib/doorkeeper/orm/active_record/redirect_uri_validator.rb +66 -0
- data/lib/doorkeeper/orm/active_record/stale_records_cleaner.rb +33 -0
- data/lib/doorkeeper/orm/active_record.rb +37 -8
- data/lib/doorkeeper/rails/helpers.rb +14 -13
- data/lib/doorkeeper/rails/routes/abstract_router.rb +35 -0
- data/lib/doorkeeper/rails/routes/mapper.rb +4 -2
- data/lib/doorkeeper/rails/routes/mapping.rb +9 -7
- data/lib/doorkeeper/rails/routes/registry.rb +45 -0
- data/lib/doorkeeper/rails/routes.rb +41 -28
- data/lib/doorkeeper/rake/db.rake +40 -0
- data/lib/doorkeeper/rake/setup.rake +11 -0
- data/lib/doorkeeper/rake.rb +14 -0
- data/lib/doorkeeper/request/authorization_code.rb +6 -4
- data/lib/doorkeeper/request/client_credentials.rb +3 -3
- data/lib/doorkeeper/request/code.rb +1 -1
- data/lib/doorkeeper/request/password.rb +5 -14
- data/lib/doorkeeper/request/refresh_token.rb +6 -5
- data/lib/doorkeeper/request/strategy.rb +4 -2
- data/lib/doorkeeper/request/token.rb +1 -1
- data/lib/doorkeeper/request.rb +62 -29
- data/lib/doorkeeper/secret_storing/base.rb +64 -0
- data/lib/doorkeeper/secret_storing/bcrypt.rb +60 -0
- data/lib/doorkeeper/secret_storing/plain.rb +33 -0
- data/lib/doorkeeper/secret_storing/sha256_hash.rb +26 -0
- data/lib/doorkeeper/server.rb +9 -11
- data/lib/doorkeeper/stale_records_cleaner.rb +24 -0
- data/lib/doorkeeper/validations.rb +5 -2
- data/lib/doorkeeper/version.rb +12 -1
- data/lib/doorkeeper.rb +111 -62
- data/lib/generators/doorkeeper/application_owner_generator.rb +28 -13
- data/lib/generators/doorkeeper/confidential_applications_generator.rb +33 -0
- data/lib/generators/doorkeeper/enable_polymorphic_resource_owner_generator.rb +39 -0
- data/lib/generators/doorkeeper/install_generator.rb +19 -9
- data/lib/generators/doorkeeper/migration_generator.rb +27 -10
- data/lib/generators/doorkeeper/pkce_generator.rb +33 -0
- data/lib/generators/doorkeeper/previous_refresh_token_generator.rb +31 -19
- data/lib/generators/doorkeeper/templates/add_confidential_to_applications.rb.erb +13 -0
- data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb.erb +9 -0
- 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
- data/lib/generators/doorkeeper/templates/enable_pkce_migration.rb.erb +8 -0
- data/lib/generators/doorkeeper/templates/enable_polymorphic_resource_owner_migration.rb.erb +17 -0
- data/lib/generators/doorkeeper/templates/initializer.rb +412 -33
- data/lib/generators/doorkeeper/templates/migration.rb.erb +88 -0
- data/lib/generators/doorkeeper/views_generator.rb +8 -4
- data/vendor/assets/stylesheets/doorkeeper/bootstrap.min.css +4 -5
- metadata +114 -276
- data/.coveralls.yml +0 -1
- data/.gitignore +0 -19
- data/.hound.yml +0 -13
- data/.rspec +0 -1
- data/.travis.yml +0 -26
- data/Appraisals +0 -14
- data/CONTRIBUTING.md +0 -47
- data/Gemfile +0 -10
- data/NEWS.md +0 -606
- data/RELEASING.md +0 -10
- data/Rakefile +0 -20
- data/app/validators/redirect_uri_validator.rb +0 -34
- data/doorkeeper.gemspec +0 -29
- data/gemfiles/rails_4_2.gemfile +0 -11
- data/gemfiles/rails_5_0.gemfile +0 -12
- data/gemfiles/rails_5_1.gemfile +0 -13
- data/lib/doorkeeper/oauth/client_credentials/validation.rb +0 -45
- data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb +0 -7
- data/lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb +0 -11
- data/lib/generators/doorkeeper/templates/migration.rb +0 -68
- data/spec/controllers/application_metal_controller.rb +0 -10
- data/spec/controllers/applications_controller_spec.rb +0 -58
- data/spec/controllers/authorizations_controller_spec.rb +0 -218
- data/spec/controllers/protected_resources_controller_spec.rb +0 -300
- data/spec/controllers/token_info_controller_spec.rb +0 -52
- data/spec/controllers/tokens_controller_spec.rb +0 -88
- data/spec/dummy/Rakefile +0 -7
- data/spec/dummy/app/controllers/application_controller.rb +0 -3
- data/spec/dummy/app/controllers/custom_authorizations_controller.rb +0 -7
- data/spec/dummy/app/controllers/full_protected_resources_controller.rb +0 -12
- data/spec/dummy/app/controllers/home_controller.rb +0 -17
- data/spec/dummy/app/controllers/metal_controller.rb +0 -11
- data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +0 -11
- data/spec/dummy/app/helpers/application_helper.rb +0 -5
- data/spec/dummy/app/models/user.rb +0 -5
- data/spec/dummy/app/views/home/index.html.erb +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +0 -14
- data/spec/dummy/config/application.rb +0 -23
- data/spec/dummy/config/boot.rb +0 -9
- data/spec/dummy/config/database.yml +0 -15
- data/spec/dummy/config/environment.rb +0 -5
- data/spec/dummy/config/environments/development.rb +0 -29
- data/spec/dummy/config/environments/production.rb +0 -62
- data/spec/dummy/config/environments/test.rb +0 -44
- data/spec/dummy/config/initializers/active_record_belongs_to_required_by_default.rb +0 -6
- data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/dummy/config/initializers/doorkeeper.rb +0 -96
- data/spec/dummy/config/initializers/secret_token.rb +0 -9
- data/spec/dummy/config/initializers/session_store.rb +0 -8
- data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/spec/dummy/config/locales/doorkeeper.en.yml +0 -5
- data/spec/dummy/config/routes.rb +0 -52
- data/spec/dummy/config.ru +0 -4
- data/spec/dummy/db/migrate/20111122132257_create_users.rb +0 -9
- data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +0 -5
- data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +0 -60
- data/spec/dummy/db/migrate/20151223200000_add_owner_to_application.rb +0 -7
- data/spec/dummy/db/schema.rb +0 -67
- data/spec/dummy/public/404.html +0 -26
- data/spec/dummy/public/422.html +0 -26
- data/spec/dummy/public/500.html +0 -26
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +0 -6
- data/spec/factories.rb +0 -28
- data/spec/generators/application_owner_generator_spec.rb +0 -22
- data/spec/generators/install_generator_spec.rb +0 -31
- data/spec/generators/migration_generator_spec.rb +0 -20
- data/spec/generators/templates/routes.rb +0 -3
- data/spec/generators/views_generator_spec.rb +0 -27
- data/spec/helpers/doorkeeper/dashboard_helper_spec.rb +0 -24
- data/spec/lib/config_spec.rb +0 -334
- data/spec/lib/doorkeeper_spec.rb +0 -150
- data/spec/lib/models/expirable_spec.rb +0 -50
- data/spec/lib/models/revocable_spec.rb +0 -59
- data/spec/lib/models/scopes_spec.rb +0 -43
- data/spec/lib/oauth/authorization/uri_builder_spec.rb +0 -41
- data/spec/lib/oauth/authorization_code_request_spec.rb +0 -80
- data/spec/lib/oauth/base_request_spec.rb +0 -160
- data/spec/lib/oauth/base_response_spec.rb +0 -45
- data/spec/lib/oauth/client/credentials_spec.rb +0 -88
- data/spec/lib/oauth/client_credentials/creator_spec.rb +0 -44
- data/spec/lib/oauth/client_credentials/issuer_spec.rb +0 -86
- data/spec/lib/oauth/client_credentials/validation_spec.rb +0 -54
- data/spec/lib/oauth/client_credentials_integration_spec.rb +0 -27
- data/spec/lib/oauth/client_credentials_request_spec.rb +0 -104
- data/spec/lib/oauth/client_spec.rb +0 -39
- data/spec/lib/oauth/code_request_spec.rb +0 -45
- data/spec/lib/oauth/code_response_spec.rb +0 -34
- data/spec/lib/oauth/error_response_spec.rb +0 -61
- data/spec/lib/oauth/error_spec.rb +0 -23
- data/spec/lib/oauth/forbidden_token_response_spec.rb +0 -23
- data/spec/lib/oauth/helpers/scope_checker_spec.rb +0 -64
- data/spec/lib/oauth/helpers/unique_token_spec.rb +0 -20
- data/spec/lib/oauth/helpers/uri_checker_spec.rb +0 -104
- data/spec/lib/oauth/invalid_token_response_spec.rb +0 -56
- data/spec/lib/oauth/password_access_token_request_spec.rb +0 -90
- data/spec/lib/oauth/pre_authorization_spec.rb +0 -155
- data/spec/lib/oauth/refresh_token_request_spec.rb +0 -154
- data/spec/lib/oauth/scopes_spec.rb +0 -122
- data/spec/lib/oauth/token_request_spec.rb +0 -98
- data/spec/lib/oauth/token_response_spec.rb +0 -85
- data/spec/lib/oauth/token_spec.rb +0 -116
- data/spec/lib/request/strategy_spec.rb +0 -53
- data/spec/lib/server_spec.rb +0 -49
- data/spec/models/doorkeeper/access_grant_spec.rb +0 -36
- data/spec/models/doorkeeper/access_token_spec.rb +0 -394
- data/spec/models/doorkeeper/application_spec.rb +0 -179
- data/spec/requests/applications/applications_request_spec.rb +0 -94
- data/spec/requests/applications/authorized_applications_spec.rb +0 -30
- data/spec/requests/endpoints/authorization_spec.rb +0 -71
- data/spec/requests/endpoints/token_spec.rb +0 -64
- data/spec/requests/flows/authorization_code_errors_spec.rb +0 -76
- data/spec/requests/flows/authorization_code_spec.rb +0 -148
- data/spec/requests/flows/client_credentials_spec.rb +0 -58
- data/spec/requests/flows/implicit_grant_errors_spec.rb +0 -32
- data/spec/requests/flows/implicit_grant_spec.rb +0 -61
- data/spec/requests/flows/password_spec.rb +0 -115
- data/spec/requests/flows/refresh_token_spec.rb +0 -174
- data/spec/requests/flows/revoke_token_spec.rb +0 -157
- data/spec/requests/flows/skip_authorization_spec.rb +0 -59
- data/spec/requests/protected_resources/metal_spec.rb +0 -14
- data/spec/requests/protected_resources/private_api_spec.rb +0 -81
- data/spec/routing/custom_controller_routes_spec.rb +0 -71
- data/spec/routing/default_routes_spec.rb +0 -35
- data/spec/routing/scoped_routes_spec.rb +0 -31
- data/spec/spec_helper.rb +0 -4
- data/spec/spec_helper_integration.rb +0 -63
- data/spec/support/dependencies/factory_girl.rb +0 -2
- data/spec/support/helpers/access_token_request_helper.rb +0 -11
- data/spec/support/helpers/authorization_request_helper.rb +0 -41
- data/spec/support/helpers/config_helper.rb +0 -9
- data/spec/support/helpers/model_helper.rb +0 -67
- data/spec/support/helpers/request_spec_helper.rb +0 -84
- data/spec/support/helpers/url_helper.rb +0 -55
- data/spec/support/http_method_shim.rb +0 -38
- data/spec/support/orm/active_record.rb +0 -3
- data/spec/support/shared/controllers_shared_context.rb +0 -69
- data/spec/support/shared/models_shared_examples.rb +0 -52
- 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,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
|
data/spec/lib/config_spec.rb
DELETED
@@ -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
|
data/spec/lib/doorkeeper_spec.rb
DELETED
@@ -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
|