doorkeeper 3.1.0 → 5.6.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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +1079 -0
- data/README.md +114 -326
- data/app/assets/stylesheets/doorkeeper/admin/application.css +2 -2
- data/app/controllers/doorkeeper/application_controller.rb +7 -6
- data/app/controllers/doorkeeper/application_metal_controller.rb +9 -12
- data/app/controllers/doorkeeper/applications_controller.rb +66 -21
- data/app/controllers/doorkeeper/authorizations_controller.rb +100 -18
- data/app/controllers/doorkeeper/authorized_applications_controller.rb +23 -4
- data/app/controllers/doorkeeper/token_info_controller.rb +16 -4
- data/app/controllers/doorkeeper/tokens_controller.rb +138 -22
- data/app/helpers/doorkeeper/dashboard_helper.rb +15 -9
- data/app/views/doorkeeper/applications/_delete_form.html.erb +4 -3
- 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 +17 -11
- data/app/views/doorkeeper/authorized_applications/_delete_form.html.erb +1 -2
- 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 +37 -9
- 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 +602 -142
- data/lib/doorkeeper/engine.rb +22 -7
- data/lib/doorkeeper/errors.rb +37 -10
- 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 +24 -12
- data/lib/doorkeeper/helpers/controller.rb +49 -27
- data/lib/doorkeeper/models/access_grant_mixin.rb +99 -16
- data/lib/doorkeeper/models/access_token_mixin.rb +386 -77
- data/lib/doorkeeper/models/application_mixin.rb +73 -30
- data/lib/doorkeeper/models/concerns/accessible.rb +6 -0
- data/lib/doorkeeper/models/concerns/expirable.rb +20 -6
- data/lib/doorkeeper/models/concerns/expiration_time_sql_math.rb +88 -0
- data/lib/doorkeeper/models/concerns/orderable.rb +15 -0
- data/lib/doorkeeper/models/concerns/ownership.rb +4 -2
- 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 +13 -2
- 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 +72 -28
- data/lib/doorkeeper/oauth/authorization/uri_builder.rb +22 -18
- data/lib/doorkeeper/oauth/authorization_code_request.rb +64 -14
- data/lib/doorkeeper/oauth/base_request.rb +66 -0
- data/lib/doorkeeper/oauth/base_response.rb +31 -0
- data/lib/doorkeeper/oauth/client/credentials.rb +23 -10
- data/lib/doorkeeper/oauth/client.rb +10 -12
- data/lib/doorkeeper/oauth/client_credentials/creator.rb +48 -4
- data/lib/doorkeeper/oauth/client_credentials/issuer.rb +17 -9
- data/lib/doorkeeper/oauth/client_credentials/validator.rb +55 -0
- data/lib/doorkeeper/oauth/client_credentials_request.rb +14 -15
- data/lib/doorkeeper/oauth/code_request.rb +8 -12
- data/lib/doorkeeper/oauth/code_response.rb +31 -19
- data/lib/doorkeeper/oauth/error.rb +5 -3
- data/lib/doorkeeper/oauth/error_response.rb +41 -20
- data/lib/doorkeeper/oauth/forbidden_token_response.rb +11 -3
- data/lib/doorkeeper/oauth/helpers/scope_checker.rb +24 -19
- data/lib/doorkeeper/oauth/helpers/unique_token.rb +20 -3
- data/lib/doorkeeper/oauth/helpers/uri_checker.rb +55 -4
- 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 +31 -5
- data/lib/doorkeeper/oauth/nonstandard.rb +39 -0
- data/lib/doorkeeper/oauth/password_access_token_request.rb +46 -18
- data/lib/doorkeeper/oauth/pre_authorization.rb +135 -26
- data/lib/doorkeeper/oauth/refresh_token_request.rb +67 -30
- data/lib/doorkeeper/oauth/scopes.rb +26 -12
- data/lib/doorkeeper/oauth/token.rb +28 -25
- data/lib/doorkeeper/oauth/token_introspection.rb +202 -0
- data/lib/doorkeeper/oauth/token_request.rb +8 -21
- 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 -17
- 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 +81 -0
- data/lib/doorkeeper/orm/active_record/mixins/application.rb +214 -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 +36 -26
- data/lib/doorkeeper/rails/helpers.rb +14 -15
- 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 +10 -8
- data/lib/doorkeeper/rails/routes/registry.rb +45 -0
- data/lib/doorkeeper/rails/routes.rb +45 -28
- data/lib/doorkeeper/rake/db.rake +40 -0
- data/lib/doorkeeper/rake/setup.rake +6 -0
- data/lib/doorkeeper/rake.rb +14 -0
- data/lib/doorkeeper/request/authorization_code.rb +12 -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 -4
- 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 -19
- 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 +112 -56
- 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 +41 -0
- 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/lib/generators/doorkeeper/templates/add_previous_refresh_token_to_access_tokens.rb.erb +13 -0
- 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 +417 -32
- 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 +163 -280
- data/.gitignore +0 -14
- data/.hound.yml +0 -13
- data/.rspec +0 -1
- data/.travis.yml +0 -22
- data/CONTRIBUTING.md +0 -45
- data/Gemfile +0 -10
- data/NEWS.md +0 -525
- data/RELEASING.md +0 -17
- data/Rakefile +0 -20
- data/app/validators/redirect_uri_validator.rb +0 -34
- data/doorkeeper.gemspec +0 -27
- data/lib/doorkeeper/oauth/client/methods.rb +0 -18
- data/lib/doorkeeper/oauth/client_credentials/validation.rb +0 -45
- data/lib/doorkeeper/oauth/request_concern.rb +0 -48
- data/lib/generators/doorkeeper/application_scopes_generator.rb +0 -34
- data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb +0 -7
- data/lib/generators/doorkeeper/templates/add_scopes_to_oauth_applications.rb +0 -5
- data/lib/generators/doorkeeper/templates/migration.rb +0 -50
- data/spec/controllers/applications_controller_spec.rb +0 -58
- data/spec/controllers/authorizations_controller_spec.rb +0 -203
- data/spec/controllers/protected_resources_controller_spec.rb +0 -271
- 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 -9
- 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 -57
- 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 -55
- 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/20130902165751_create_doorkeeper_tables.rb +0 -41
- data/spec/dummy/db/migrate/20130902175349_add_owner_to_application.rb +0 -7
- data/spec/dummy/db/migrate/20141209001746_add_scopes_to_oauth_applications.rb +0 -5
- data/spec/dummy/db/schema.rb +0 -66
- 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 -26
- 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 -317
- data/spec/lib/doorkeeper_spec.rb +0 -28
- data/spec/lib/models/expirable_spec.rb +0 -51
- data/spec/lib/models/revocable_spec.rb +0 -36
- data/spec/lib/models/scopes_spec.rb +0 -43
- data/spec/lib/oauth/authorization/uri_builder_spec.rb +0 -42
- data/spec/lib/oauth/authorization_code_request_spec.rb +0 -80
- data/spec/lib/oauth/client/credentials_spec.rb +0 -47
- data/spec/lib/oauth/client/methods_spec.rb +0 -54
- 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/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 -28
- 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 -123
- data/spec/lib/oauth/scopes_spec.rb +0 -123
- 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 -109
- data/spec/lib/request/strategy_spec.rb +0 -53
- data/spec/lib/server_spec.rb +0 -52
- data/spec/models/doorkeeper/access_grant_spec.rb +0 -36
- data/spec/models/doorkeeper/access_token_spec.rb +0 -350
- data/spec/models/doorkeeper/application_spec.rb +0 -187
- 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 -72
- data/spec/requests/endpoints/token_spec.rb +0 -64
- data/spec/requests/flows/authorization_code_errors_spec.rb +0 -66
- data/spec/requests/flows/authorization_code_spec.rb +0 -156
- 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 -94
- data/spec/requests/flows/refresh_token_spec.rb +0 -104
- data/spec/requests/flows/revoke_token_spec.rb +0 -143
- 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 -2
- data/spec/spec_helper_integration.rb +0 -56
- 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 -45
- data/spec/support/helpers/request_spec_helper.rb +0 -76
- data/spec/support/helpers/url_helper.rb +0 -55
- data/spec/support/orm/active_record.rb +0 -3
- data/spec/support/shared/controllers_shared_context.rb +0 -60
- data/spec/support/shared/models_shared_examples.rb +0 -52
- data/spec/validators/redirect_uri_validator_spec.rb +0 -78
@@ -1,104 +0,0 @@
|
|
1
|
-
require 'spec_helper_integration'
|
2
|
-
|
3
|
-
describe 'Refresh Token Flow' do
|
4
|
-
before do
|
5
|
-
Doorkeeper.configure do
|
6
|
-
orm DOORKEEPER_ORM
|
7
|
-
use_refresh_token
|
8
|
-
end
|
9
|
-
client_exists
|
10
|
-
end
|
11
|
-
|
12
|
-
context 'issuing a refresh token' do
|
13
|
-
before do
|
14
|
-
authorization_code_exists application: @client
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'client gets the refresh token and refreshses it' do
|
18
|
-
post token_endpoint_url(code: @authorization.token, client: @client)
|
19
|
-
|
20
|
-
token = Doorkeeper::AccessToken.first
|
21
|
-
|
22
|
-
should_have_json 'access_token', token.token
|
23
|
-
should_have_json 'refresh_token', token.refresh_token
|
24
|
-
|
25
|
-
expect(@authorization.reload).to be_revoked
|
26
|
-
|
27
|
-
post refresh_token_endpoint_url(client: @client, refresh_token: token.refresh_token)
|
28
|
-
|
29
|
-
new_token = Doorkeeper::AccessToken.last
|
30
|
-
should_have_json 'access_token', new_token.token
|
31
|
-
should_have_json 'refresh_token', new_token.refresh_token
|
32
|
-
|
33
|
-
expect(token.token).not_to eq(new_token.token)
|
34
|
-
expect(token.refresh_token).not_to eq(new_token.refresh_token)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context 'refreshing the token' do
|
39
|
-
before do
|
40
|
-
@token = FactoryGirl.create(:access_token, application: @client, resource_owner_id: 1, use_refresh_token: true)
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'client request a token with refresh token' do
|
44
|
-
post refresh_token_endpoint_url(client: @client, refresh_token: @token.refresh_token)
|
45
|
-
should_have_json 'refresh_token', Doorkeeper::AccessToken.last.refresh_token
|
46
|
-
expect(@token.reload).to be_revoked
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'client request a token with expired access token' do
|
50
|
-
@token.update_attribute :expires_in, -100
|
51
|
-
post refresh_token_endpoint_url(client: @client, refresh_token: @token.refresh_token)
|
52
|
-
should_have_json 'refresh_token', Doorkeeper::AccessToken.last.refresh_token
|
53
|
-
expect(@token.reload).to be_revoked
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'client gets an error for invalid refresh token' do
|
57
|
-
post refresh_token_endpoint_url(client: @client, refresh_token: 'invalid')
|
58
|
-
should_not_have_json 'refresh_token'
|
59
|
-
should_have_json 'error', 'invalid_grant'
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'client gets an error for revoked acccess token' do
|
63
|
-
@token.revoke
|
64
|
-
post refresh_token_endpoint_url(client: @client, refresh_token: @token.refresh_token)
|
65
|
-
should_not_have_json 'refresh_token'
|
66
|
-
should_have_json 'error', 'invalid_grant'
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'second of simultaneous client requests get an error for revoked acccess token' do
|
70
|
-
allow_any_instance_of(Doorkeeper::AccessToken).to receive(:revoked?).and_return(false, true)
|
71
|
-
post refresh_token_endpoint_url(client: @client, refresh_token: @token.refresh_token)
|
72
|
-
|
73
|
-
should_not_have_json 'refresh_token'
|
74
|
-
should_have_json 'error', 'invalid_request'
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
context 'refreshing the token with multiple sessions (devices)' do
|
79
|
-
before do
|
80
|
-
# enable password auth to simulate other devices
|
81
|
-
config_is_set(:grant_flows, ["password"])
|
82
|
-
config_is_set(:resource_owner_from_credentials) { User.authenticate! params[:username], params[:password] }
|
83
|
-
create_resource_owner
|
84
|
-
_another_token = post password_token_endpoint_url(client: @client, resource_owner: @resource_owner)
|
85
|
-
last_token.update_attribute :created_at, 5.seconds.ago
|
86
|
-
|
87
|
-
@token = FactoryGirl.create(:access_token, application: @client, resource_owner_id: @resource_owner.id, use_refresh_token: true)
|
88
|
-
@token.update_attribute :expires_in, -100
|
89
|
-
end
|
90
|
-
|
91
|
-
it 'client request a token after creating another token with the same user' do
|
92
|
-
post refresh_token_endpoint_url(client: @client, refresh_token: @token.refresh_token)
|
93
|
-
|
94
|
-
should_have_json 'refresh_token', last_token.refresh_token
|
95
|
-
expect(@token.reload).to be_revoked
|
96
|
-
end
|
97
|
-
|
98
|
-
def last_token
|
99
|
-
Doorkeeper::AccessToken.last_authorized_token_for(
|
100
|
-
@client.id, @resource_owner.id
|
101
|
-
)
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
@@ -1,143 +0,0 @@
|
|
1
|
-
require 'spec_helper_integration'
|
2
|
-
|
3
|
-
describe 'Revoke Token Flow' do
|
4
|
-
before do
|
5
|
-
Doorkeeper.configure { orm DOORKEEPER_ORM }
|
6
|
-
end
|
7
|
-
|
8
|
-
context 'with default parameters' do
|
9
|
-
let(:client_application) { FactoryGirl.create :application }
|
10
|
-
let(:resource_owner) { User.create!(name: 'John', password: 'sekret') }
|
11
|
-
let(:authorization_access_token) do
|
12
|
-
FactoryGirl.create(:access_token,
|
13
|
-
application: client_application,
|
14
|
-
resource_owner_id: resource_owner.id,
|
15
|
-
use_refresh_token: true)
|
16
|
-
end
|
17
|
-
let(:headers) { { 'HTTP_AUTHORIZATION' => "Bearer #{authorization_access_token.token}" } }
|
18
|
-
|
19
|
-
context 'With invalid token to revoke' do
|
20
|
-
it 'client wants to revoke the given access token' do
|
21
|
-
post revocation_token_endpoint_url, { token: 'I_AM_AN_INVALIDE_TOKEN' }, headers
|
22
|
-
|
23
|
-
authorization_access_token.reload
|
24
|
-
# The authorization server responds with HTTP status code 200 if the token
|
25
|
-
# has been revoked successfully or if the client submitted an invalid token.
|
26
|
-
expect(response).to be_success
|
27
|
-
expect(authorization_access_token).to_not be_revoked
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'The access token to revoke is the same than the authorization access token' do
|
32
|
-
let(:token_to_revoke) { authorization_access_token }
|
33
|
-
|
34
|
-
it 'client wants to revoke the given access token' do
|
35
|
-
post revocation_token_endpoint_url, { token: token_to_revoke.token }, headers
|
36
|
-
|
37
|
-
token_to_revoke.reload
|
38
|
-
authorization_access_token.reload
|
39
|
-
|
40
|
-
expect(response).to be_success
|
41
|
-
expect(token_to_revoke.revoked?).to be_truthy
|
42
|
-
expect(Doorkeeper::AccessToken.by_refresh_token(token_to_revoke.refresh_token).revoked?).to be_truthy
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'client wants to revoke the given access token using the POST query string' do
|
46
|
-
url_with_query_string = revocation_token_endpoint_url + '?' + Rack::Utils.build_query(token: token_to_revoke.token)
|
47
|
-
post url_with_query_string, {}, headers
|
48
|
-
|
49
|
-
token_to_revoke.reload
|
50
|
-
authorization_access_token.reload
|
51
|
-
|
52
|
-
expect(response).to be_success
|
53
|
-
expect(token_to_revoke.revoked?).to be_falsey
|
54
|
-
expect(Doorkeeper::AccessToken.by_refresh_token(token_to_revoke.refresh_token).revoked?).to be_falsey
|
55
|
-
expect(authorization_access_token.revoked?).to be_falsey
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
context 'The access token to revoke app and owners are the same than the authorization access token' do
|
60
|
-
let(:token_to_revoke) do
|
61
|
-
FactoryGirl.create(:access_token,
|
62
|
-
application: client_application,
|
63
|
-
resource_owner_id: resource_owner.id,
|
64
|
-
use_refresh_token: true)
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'client wants to revoke the given access token' do
|
68
|
-
post revocation_token_endpoint_url, { token: token_to_revoke.token }, headers
|
69
|
-
|
70
|
-
token_to_revoke.reload
|
71
|
-
authorization_access_token.reload
|
72
|
-
|
73
|
-
expect(response).to be_success
|
74
|
-
expect(token_to_revoke.revoked?).to be_truthy
|
75
|
-
expect(Doorkeeper::AccessToken.by_refresh_token(token_to_revoke.refresh_token).revoked?).to be_truthy
|
76
|
-
expect(authorization_access_token.revoked?).to be_falsey
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
context 'The access token to revoke authorization owner is the same than the authorization access token' do
|
81
|
-
let(:other_client_application) { FactoryGirl.create :application }
|
82
|
-
let(:token_to_revoke) do
|
83
|
-
FactoryGirl.create(:access_token,
|
84
|
-
application: other_client_application,
|
85
|
-
resource_owner_id: resource_owner.id,
|
86
|
-
use_refresh_token: true)
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'client wants to revoke the given access token' do
|
90
|
-
post revocation_token_endpoint_url, { token: token_to_revoke.token }, headers
|
91
|
-
|
92
|
-
token_to_revoke.reload
|
93
|
-
authorization_access_token.reload
|
94
|
-
|
95
|
-
expect(response).to be_success
|
96
|
-
expect(token_to_revoke.revoked?).to be_falsey
|
97
|
-
expect(Doorkeeper::AccessToken.by_refresh_token(token_to_revoke.refresh_token).revoked?).to be_falsey
|
98
|
-
expect(authorization_access_token.revoked?).to be_falsey
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
context 'The access token to revoke app is the same than the authorization access token' do
|
103
|
-
let(:other_resource_owner) { User.create!(name: 'Matheo', password: 'pareto') }
|
104
|
-
let(:token_to_revoke) do
|
105
|
-
FactoryGirl.create(:access_token,
|
106
|
-
application: client_application,
|
107
|
-
resource_owner_id: other_resource_owner.id,
|
108
|
-
use_refresh_token: true)
|
109
|
-
end
|
110
|
-
|
111
|
-
it 'client wants to revoke the given access token' do
|
112
|
-
post revocation_token_endpoint_url, { token: token_to_revoke.token }, headers
|
113
|
-
|
114
|
-
token_to_revoke.reload
|
115
|
-
authorization_access_token.reload
|
116
|
-
|
117
|
-
expect(response).to be_success
|
118
|
-
expect(token_to_revoke.revoked?).to be_falsey
|
119
|
-
expect(Doorkeeper::AccessToken.by_refresh_token(token_to_revoke.refresh_token).revoked?).to be_falsey
|
120
|
-
expect(authorization_access_token.revoked?).to be_falsey
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
context 'With valid refresh token to revoke' do
|
125
|
-
let(:token_to_revoke) do
|
126
|
-
FactoryGirl.create(:access_token,
|
127
|
-
application: client_application,
|
128
|
-
resource_owner_id: resource_owner.id,
|
129
|
-
use_refresh_token: true)
|
130
|
-
end
|
131
|
-
|
132
|
-
it 'client wants to revoke the given refresh token' do
|
133
|
-
post revocation_token_endpoint_url, { token: token_to_revoke.refresh_token, token_type_hint: 'refresh_token' }, headers
|
134
|
-
authorization_access_token.reload
|
135
|
-
token_to_revoke.reload
|
136
|
-
|
137
|
-
expect(response).to be_success
|
138
|
-
expect(Doorkeeper::AccessToken.by_refresh_token(token_to_revoke.refresh_token).revoked?).to be_truthy
|
139
|
-
expect(authorization_access_token).to_not be_revoked
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'spec_helper_integration'
|
2
|
-
|
3
|
-
feature 'Skip authorization form' do
|
4
|
-
background do
|
5
|
-
config_is_set(:authenticate_resource_owner) { User.first || redirect_to('/sign_in') }
|
6
|
-
client_exists
|
7
|
-
default_scopes_exist :public
|
8
|
-
optional_scopes_exist :write
|
9
|
-
end
|
10
|
-
|
11
|
-
context 'for previously authorized clients' do
|
12
|
-
background do
|
13
|
-
create_resource_owner
|
14
|
-
sign_in
|
15
|
-
end
|
16
|
-
|
17
|
-
scenario 'skips the authorization and return a new grant code' do
|
18
|
-
client_is_authorized(@client, @resource_owner, scopes: 'public')
|
19
|
-
visit authorization_endpoint_url(client: @client)
|
20
|
-
|
21
|
-
i_should_not_see 'Authorize'
|
22
|
-
client_should_be_authorized @client
|
23
|
-
i_should_be_on_client_callback @client
|
24
|
-
url_should_have_param 'code', Doorkeeper::AccessGrant.first.token
|
25
|
-
end
|
26
|
-
|
27
|
-
scenario 'does not skip authorization when scopes differ (new request has fewer scopes)' do
|
28
|
-
client_is_authorized(@client, @resource_owner, scopes: 'public write')
|
29
|
-
visit authorization_endpoint_url(client: @client, scope: 'public')
|
30
|
-
i_should_see 'Authorize'
|
31
|
-
end
|
32
|
-
|
33
|
-
scenario 'does not skip authorization when scopes differ (new request has more scopes)' do
|
34
|
-
client_is_authorized(@client, @resource_owner, scopes: 'public write')
|
35
|
-
visit authorization_endpoint_url(client: @client, scopes: 'public write email')
|
36
|
-
i_should_see 'Authorize'
|
37
|
-
end
|
38
|
-
|
39
|
-
scenario 'creates grant with new scope when scopes differ' do
|
40
|
-
client_is_authorized(@client, @resource_owner, scopes: 'public write')
|
41
|
-
visit authorization_endpoint_url(client: @client, scope: 'public')
|
42
|
-
click_on 'Authorize'
|
43
|
-
access_grant_should_have_scopes :public
|
44
|
-
end
|
45
|
-
|
46
|
-
scenario 'doesn not skip authorization when scopes are greater' do
|
47
|
-
client_is_authorized(@client, @resource_owner, scopes: 'public')
|
48
|
-
visit authorization_endpoint_url(client: @client, scope: 'public write')
|
49
|
-
i_should_see 'Authorize'
|
50
|
-
end
|
51
|
-
|
52
|
-
scenario 'creates grant with new scope when scopes are greater' do
|
53
|
-
client_is_authorized(@client, @resource_owner, scopes: 'public')
|
54
|
-
visit authorization_endpoint_url(client: @client, scope: 'public write')
|
55
|
-
click_on 'Authorize'
|
56
|
-
access_grant_should_have_scopes :public, :write
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'spec_helper_integration'
|
2
|
-
|
3
|
-
describe 'ActionController::Metal API' do
|
4
|
-
before do
|
5
|
-
@client = FactoryGirl.create(:application)
|
6
|
-
@resource = User.create!(name: 'Joe', password: 'sekret')
|
7
|
-
@token = client_is_authorized(@client, @resource)
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'client requests protected resource with valid token' do
|
11
|
-
get "/metal.json?access_token=#{@token.token}"
|
12
|
-
should_have_json 'ok', true
|
13
|
-
end
|
14
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
require 'spec_helper_integration'
|
2
|
-
|
3
|
-
feature 'Private API' do
|
4
|
-
background do
|
5
|
-
@client = FactoryGirl.create(:application)
|
6
|
-
@resource = User.create!(name: 'Joe', password: 'sekret')
|
7
|
-
@token = client_is_authorized(@client, @resource)
|
8
|
-
end
|
9
|
-
|
10
|
-
scenario 'client requests protected resource with valid token' do
|
11
|
-
with_access_token_header @token.token
|
12
|
-
visit '/full_protected_resources'
|
13
|
-
expect(page.body).to have_content('index')
|
14
|
-
end
|
15
|
-
|
16
|
-
scenario 'client requests protected resource with disabled header authentication' do
|
17
|
-
config_is_set :access_token_methods, [:from_access_token_param]
|
18
|
-
with_access_token_header @token.token
|
19
|
-
visit '/full_protected_resources'
|
20
|
-
response_status_should_be 401
|
21
|
-
end
|
22
|
-
|
23
|
-
scenario 'client attempts to request protected resource with invalid token' do
|
24
|
-
with_access_token_header 'invalid'
|
25
|
-
visit '/full_protected_resources'
|
26
|
-
response_status_should_be 401
|
27
|
-
end
|
28
|
-
|
29
|
-
scenario 'client attempts to request protected resource with expired token' do
|
30
|
-
@token.update_attribute :expires_in, -100 # expires token
|
31
|
-
with_access_token_header @token.token
|
32
|
-
visit '/full_protected_resources'
|
33
|
-
response_status_should_be 401
|
34
|
-
end
|
35
|
-
|
36
|
-
scenario 'client requests protected resource with permanent token' do
|
37
|
-
@token.update_attribute :expires_in, nil # never expires
|
38
|
-
with_access_token_header @token.token
|
39
|
-
visit '/full_protected_resources'
|
40
|
-
expect(page.body).to have_content('index')
|
41
|
-
end
|
42
|
-
|
43
|
-
scenario 'access token with no default scopes' do
|
44
|
-
Doorkeeper.configuration.instance_eval {
|
45
|
-
@default_scopes = Doorkeeper::OAuth::Scopes.from_array([:public])
|
46
|
-
@scopes = default_scopes + optional_scopes
|
47
|
-
}
|
48
|
-
@token.update_attribute :scopes, 'dummy'
|
49
|
-
with_access_token_header @token.token
|
50
|
-
visit '/full_protected_resources'
|
51
|
-
response_status_should_be 403
|
52
|
-
end
|
53
|
-
|
54
|
-
scenario 'access token with no allowed scopes' do
|
55
|
-
@token.update_attribute :scopes, nil
|
56
|
-
with_access_token_header @token.token
|
57
|
-
visit '/full_protected_resources/1.json'
|
58
|
-
response_status_should_be 403
|
59
|
-
end
|
60
|
-
|
61
|
-
scenario 'access token with one of allowed scopes' do
|
62
|
-
@token.update_attribute :scopes, 'admin'
|
63
|
-
with_access_token_header @token.token
|
64
|
-
visit '/full_protected_resources/1.json'
|
65
|
-
expect(page.body).to have_content('show')
|
66
|
-
end
|
67
|
-
|
68
|
-
scenario 'access token with another of allowed scopes' do
|
69
|
-
@token.update_attribute :scopes, 'write'
|
70
|
-
with_access_token_header @token.token
|
71
|
-
visit '/full_protected_resources/1.json'
|
72
|
-
expect(page.body).to have_content('show')
|
73
|
-
end
|
74
|
-
|
75
|
-
scenario 'access token with both allowed scopes' do
|
76
|
-
@token.update_attribute :scopes, 'write admin'
|
77
|
-
with_access_token_header @token.token
|
78
|
-
visit '/full_protected_resources/1.json'
|
79
|
-
expect(page.body).to have_content('show')
|
80
|
-
end
|
81
|
-
end
|
@@ -1,71 +0,0 @@
|
|
1
|
-
require 'spec_helper_integration'
|
2
|
-
|
3
|
-
describe 'Custom controller for routes' do
|
4
|
-
it 'GET /space/scope/authorize routes to custom authorizations controller' do
|
5
|
-
expect(get('/inner_space/scope/authorize')).to route_to('custom_authorizations#new')
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'POST /space/scope/authorize routes to custom authorizations controller' do
|
9
|
-
expect(post('/inner_space/scope/authorize')).to route_to('custom_authorizations#create')
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'DELETE /space/scope/authorize routes to custom authorizations controller' do
|
13
|
-
expect(delete('/inner_space/scope/authorize')).to route_to('custom_authorizations#destroy')
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'POST /space/scope/token routes to tokens controller' do
|
17
|
-
expect(post('/inner_space/scope/token')).to route_to('custom_authorizations#create')
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'GET /space/scope/applications routes to applications controller' do
|
21
|
-
expect(get('/inner_space/scope/applications')).to route_to('custom_authorizations#index')
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'GET /space/scope/token/info routes to the token_info controller' do
|
25
|
-
expect(get('/inner_space/scope/token/info')).to route_to('custom_authorizations#show')
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'GET /space/oauth/authorize routes to custom authorizations controller' do
|
29
|
-
expect(get('/space/oauth/authorize')).to route_to('custom_authorizations#new')
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'POST /space/oauth/authorize routes to custom authorizations controller' do
|
33
|
-
expect(post('/space/oauth/authorize')).to route_to('custom_authorizations#create')
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'DELETE /space/oauth/authorize routes to custom authorizations controller' do
|
37
|
-
expect(delete('/space/oauth/authorize')).to route_to('custom_authorizations#destroy')
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'POST /space/oauth/token routes to tokens controller' do
|
41
|
-
expect(post('/space/oauth/token')).to route_to('custom_authorizations#create')
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'POST /space/oauth/revoke routes to tokens controller' do
|
45
|
-
expect(post('/space/oauth/revoke')).to route_to('custom_authorizations#revoke')
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'GET /space/oauth/applications routes to applications controller' do
|
49
|
-
expect(get('/space/oauth/applications')).to route_to('custom_authorizations#index')
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'GET /space/oauth/token/info routes to the token_info controller' do
|
53
|
-
expect(get('/space/oauth/token/info')).to route_to('custom_authorizations#show')
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'POST /outer_space/oauth/token is not be routable' do
|
57
|
-
expect(post('/outer_space/oauth/token')).not_to be_routable
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'GET /outer_space/oauth/authorize routes to custom authorizations controller' do
|
61
|
-
expect(get('/outer_space/oauth/authorize')).to be_routable
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'GET /outer_space/oauth/applications is not routable' do
|
65
|
-
expect(get('/outer_space/oauth/applications')).not_to be_routable
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'GET /outer_space/oauth/token_info is not routable' do
|
69
|
-
expect(get('/outer_space/oauth/token/info')).not_to be_routable
|
70
|
-
end
|
71
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'spec_helper_integration'
|
2
|
-
|
3
|
-
describe 'Default routes' do
|
4
|
-
it 'GET /oauth/authorize routes to authorizations controller' do
|
5
|
-
expect(get('/oauth/authorize')).to route_to('doorkeeper/authorizations#new')
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'POST /oauth/authorize routes to authorizations controller' do
|
9
|
-
expect(post('/oauth/authorize')).to route_to('doorkeeper/authorizations#create')
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'DELETE /oauth/authorize routes to authorizations controller' do
|
13
|
-
expect(delete('/oauth/authorize')).to route_to('doorkeeper/authorizations#destroy')
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'POST /oauth/token routes to tokens controller' do
|
17
|
-
expect(post('/oauth/token')).to route_to('doorkeeper/tokens#create')
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'POST /oauth/revoke routes to tokens controller' do
|
21
|
-
expect(post('/oauth/revoke')).to route_to('doorkeeper/tokens#revoke')
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'GET /oauth/applications routes to applications controller' do
|
25
|
-
expect(get('/oauth/applications')).to route_to('doorkeeper/applications#index')
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'GET /oauth/authorized_applications routes to authorized applications controller' do
|
29
|
-
expect(get('/oauth/authorized_applications')).to route_to('doorkeeper/authorized_applications#index')
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'GET /oauth/token/info route to authorzed tokeninfo controller' do
|
33
|
-
expect(get('/oauth/token/info')).to route_to('doorkeeper/token_info#show')
|
34
|
-
end
|
35
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'spec_helper_integration'
|
2
|
-
|
3
|
-
describe 'Scoped routes' do
|
4
|
-
it 'GET /scope/authorize routes to authorizations controller' do
|
5
|
-
expect(get('/scope/authorize')).to route_to('doorkeeper/authorizations#new')
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'POST /scope/authorize routes to authorizations controller' do
|
9
|
-
expect(post('/scope/authorize')).to route_to('doorkeeper/authorizations#create')
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'DELETE /scope/authorize routes to authorizations controller' do
|
13
|
-
expect(delete('/scope/authorize')).to route_to('doorkeeper/authorizations#destroy')
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'POST /scope/token routes to tokens controller' do
|
17
|
-
expect(post('/scope/token')).to route_to('doorkeeper/tokens#create')
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'GET /scope/applications routes to applications controller' do
|
21
|
-
expect(get('/scope/applications')).to route_to('doorkeeper/applications#index')
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'GET /scope/authorized_applications routes to authorized applications controller' do
|
25
|
-
expect(get('/scope/authorized_applications')).to route_to('doorkeeper/authorized_applications#index')
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'GET /scope/token/info route to authorzed tokeninfo controller' do
|
29
|
-
expect(get('/scope/token/info')).to route_to('doorkeeper/token_info#show')
|
30
|
-
end
|
31
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
ENV['RAILS_ENV'] ||= 'test'
|
2
|
-
TABLE_NAME_PREFIX = ENV['table_name_prefix'] || nil
|
3
|
-
TABLE_NAME_SUFFIX = ENV['table_name_suffix'] || nil
|
4
|
-
|
5
|
-
orm = (ENV['BUNDLE_GEMFILE'] || '').match(/Gemfile\.(.+)\.rb/)
|
6
|
-
DOORKEEPER_ORM = (orm && orm[1] || :active_record).to_sym
|
7
|
-
|
8
|
-
$LOAD_PATH.unshift File.dirname(__FILE__)
|
9
|
-
|
10
|
-
require 'capybara/rspec'
|
11
|
-
require 'dummy/config/environment'
|
12
|
-
require 'rspec/rails'
|
13
|
-
require 'generator_spec/test_case'
|
14
|
-
require 'timecop'
|
15
|
-
require 'database_cleaner'
|
16
|
-
|
17
|
-
# Load JRuby SQLite3 if in that platform
|
18
|
-
begin
|
19
|
-
require 'jdbc/sqlite3'
|
20
|
-
Jdbc::SQLite3.load_driver
|
21
|
-
rescue LoadError
|
22
|
-
end
|
23
|
-
|
24
|
-
Rails.logger.info "====> Doorkeeper.orm = #{Doorkeeper.configuration.orm.inspect}"
|
25
|
-
if Doorkeeper.configuration.orm == :active_record
|
26
|
-
Rails.logger.info "======> active_record.table_name_prefix = #{Rails.configuration.active_record.table_name_prefix.inspect}"
|
27
|
-
Rails.logger.info "======> active_record.table_name_suffix = #{Rails.configuration.active_record.table_name_suffix.inspect}"
|
28
|
-
end
|
29
|
-
Rails.logger.info "====> Rails version: #{Rails.version}"
|
30
|
-
Rails.logger.info "====> Ruby version: #{RUBY_VERSION}"
|
31
|
-
|
32
|
-
require "support/orm/#{DOORKEEPER_ORM}"
|
33
|
-
|
34
|
-
ENGINE_RAILS_ROOT = File.join(File.dirname(__FILE__), '../')
|
35
|
-
|
36
|
-
Dir["#{File.dirname(__FILE__)}/support/{dependencies,helpers,shared}/*.rb"].each { |f| require f }
|
37
|
-
|
38
|
-
RSpec.configure do |config|
|
39
|
-
config.infer_spec_type_from_file_location!
|
40
|
-
config.mock_with :rspec
|
41
|
-
|
42
|
-
config.infer_base_class_for_anonymous_controllers = false
|
43
|
-
|
44
|
-
config.include RSpec::Rails::RequestExampleGroup, type: :request
|
45
|
-
|
46
|
-
config.before do
|
47
|
-
DatabaseCleaner.start
|
48
|
-
Doorkeeper.configure { orm DOORKEEPER_ORM }
|
49
|
-
end
|
50
|
-
|
51
|
-
config.after do
|
52
|
-
DatabaseCleaner.clean
|
53
|
-
end
|
54
|
-
|
55
|
-
config.order = 'random'
|
56
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
module AccessTokenRequestHelper
|
2
|
-
def client_is_authorized(client, resource_owner, access_token_attributes = {})
|
3
|
-
attributes = {
|
4
|
-
application: client,
|
5
|
-
resource_owner_id: resource_owner.id
|
6
|
-
}.merge(access_token_attributes)
|
7
|
-
FactoryGirl.create(:access_token, attributes)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
RSpec.configuration.send :include, AccessTokenRequestHelper
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module AuthorizationRequestHelper
|
2
|
-
def resource_owner_is_authenticated(resource_owner = nil)
|
3
|
-
resource_owner ||= User.create!(name: 'Joe', password: 'sekret')
|
4
|
-
Doorkeeper.configuration.instance_variable_set(:@authenticate_resource_owner, proc { resource_owner })
|
5
|
-
end
|
6
|
-
|
7
|
-
def resource_owner_is_not_authenticated
|
8
|
-
Doorkeeper.configuration.instance_variable_set(:@authenticate_resource_owner, proc { redirect_to('/sign_in') })
|
9
|
-
end
|
10
|
-
|
11
|
-
def default_scopes_exist(*scopes)
|
12
|
-
Doorkeeper.configuration.instance_variable_set(:@default_scopes, Doorkeeper::OAuth::Scopes.from_array(scopes))
|
13
|
-
end
|
14
|
-
|
15
|
-
def optional_scopes_exist(*scopes)
|
16
|
-
Doorkeeper.configuration.instance_variable_set(:@optional_scopes, Doorkeeper::OAuth::Scopes.from_array(scopes))
|
17
|
-
end
|
18
|
-
|
19
|
-
def client_should_be_authorized(client)
|
20
|
-
expect(client.access_grants.size).to eq(1)
|
21
|
-
end
|
22
|
-
|
23
|
-
def client_should_not_be_authorized(client)
|
24
|
-
expect(client.size).to eq(0)
|
25
|
-
end
|
26
|
-
|
27
|
-
def i_should_be_on_client_callback(client)
|
28
|
-
expect(client.redirect_uri).to eq("#{current_uri.scheme}://#{current_uri.host}#{current_uri.path}")
|
29
|
-
end
|
30
|
-
|
31
|
-
def allowing_forgery_protection(&block)
|
32
|
-
_original_value = ActionController::Base.allow_forgery_protection
|
33
|
-
ActionController::Base.allow_forgery_protection = true
|
34
|
-
|
35
|
-
block.call
|
36
|
-
ensure
|
37
|
-
ActionController::Base.allow_forgery_protection = _original_value
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
RSpec.configuration.send :include, AuthorizationRequestHelper
|
@@ -1,9 +0,0 @@
|
|
1
|
-
module ConfigHelper
|
2
|
-
def config_is_set(setting, value = nil, &block)
|
3
|
-
setting_ivar = "@#{setting}"
|
4
|
-
value = block_given? ? block : value
|
5
|
-
Doorkeeper.configuration.instance_variable_set(setting_ivar, value)
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
RSpec.configuration.send :include, ConfigHelper
|