diff --git a/app/controllers/oauth/applications_controller.rb b/app/controllers/oauth/applications_controller.rb index a1fe02dc852..9e700f648f4 100644 --- a/app/controllers/oauth/applications_controller.rb +++ b/app/controllers/oauth/applications_controller.rb @@ -4,7 +4,7 @@ class Oauth::ApplicationsController < Doorkeeper::ApplicationsController include PageLayoutHelper include OauthApplications - before_action :verify_user_oauth_applications_enabled + before_action :verify_user_oauth_applications_enabled, except: :index before_action :authenticate_user! before_action :add_gon_variables before_action :load_scopes, only: [:index, :create, :edit] diff --git a/app/views/layouts/nav/sidebar/_profile.html.haml b/app/views/layouts/nav/sidebar/_profile.html.haml index d65f153b451..69167edb1df 100644 --- a/app/views/layouts/nav/sidebar/_profile.html.haml +++ b/app/views/layouts/nav/sidebar/_profile.html.haml @@ -28,18 +28,17 @@ = link_to profile_account_path do %strong.fly-out-top-item-name = _('Account') - - if Gitlab::CurrentSettings.user_oauth_applications? - = nav_link(controller: 'oauth/applications') do - = link_to applications_profile_path do - .nav-icon-container - = sprite_icon('applications') - %span.nav-item-name - = _('Applications') - %ul.sidebar-sub-level-items.is-fly-out-only - = nav_link(controller: 'oauth/applications', html_options: { class: "fly-out-top-item" } ) do - = link_to applications_profile_path do - %strong.fly-out-top-item-name - = _('Applications') + = nav_link(controller: 'oauth/applications') do + = link_to applications_profile_path do + .nav-icon-container + = sprite_icon('applications') + %span.nav-item-name + = _('Applications') + %ul.sidebar-sub-level-items.is-fly-out-only + = nav_link(controller: 'oauth/applications', html_options: { class: "fly-out-top-item" } ) do + = link_to applications_profile_path do + %strong.fly-out-top-item-name + = _('Applications') = nav_link(controller: :chat_names) do = link_to profile_chat_names_path do .nav-icon-container diff --git a/changelogs/unreleased/47398-user-is-unable-revoke-a-authorized-application-unless-user-oauth-applications-is-checked-in-admin-settings.yml b/changelogs/unreleased/47398-user-is-unable-revoke-a-authorized-application-unless-user-oauth-applications-is-checked-in-admin-settings.yml new file mode 100644 index 00000000000..e0dc26301d4 --- /dev/null +++ b/changelogs/unreleased/47398-user-is-unable-revoke-a-authorized-application-unless-user-oauth-applications-is-checked-in-admin-settings.yml @@ -0,0 +1,6 @@ +--- +title: Allow user to revoke an authorized application even if User OAuth applications + setting is disabled in admin settings +merge_request: 21835 +author: +type: changed diff --git a/spec/controllers/oauth/applications_controller_spec.rb b/spec/controllers/oauth/applications_controller_spec.rb index 1195f44f37d..9545815cb04 100644 --- a/spec/controllers/oauth/applications_controller_spec.rb +++ b/spec/controllers/oauth/applications_controller_spec.rb @@ -16,13 +16,43 @@ describe Oauth::ApplicationsController do end it 'redirects back to profile page if OAuth applications are disabled' do - allow(Gitlab::CurrentSettings.current_application_settings).to receive(:user_oauth_applications?).and_return(false) + disable_user_oauth get :index + expect(response).to have_gitlab_http_status(200) + end + end + + describe 'POST #create' do + it 'creates an application' do + post :create, oauth_params + + expect(response).to have_gitlab_http_status(302) + expect(response).to redirect_to(oauth_application_path(Doorkeeper::Application.last)) + end + + it 'redirects back to profile page if OAuth applications are disabled' do + disable_user_oauth + + post :create, oauth_params + expect(response).to have_gitlab_http_status(302) expect(response).to redirect_to(profile_path) end end end + + def disable_user_oauth + allow(Gitlab::CurrentSettings.current_application_settings).to receive(:user_oauth_applications?).and_return(false) + end + + def oauth_params + { + doorkeeper_application: { + name: 'foo', + redirect_uri: 'http://example.org' + } + } + end end