diff --git a/app/controllers/admin/impersonation_tokens_controller.rb b/app/controllers/admin/impersonation_tokens_controller.rb index ecacb81b8d46e78b75fea23134228d990bdde746..0ba04a3416aaf8b3ea15e21158d8893153e30e0f 100644 --- a/app/controllers/admin/impersonation_tokens_controller.rb +++ b/app/controllers/admin/impersonation_tokens_controller.rb @@ -84,6 +84,8 @@ def impersonation_token_params def set_index_vars @scopes = Gitlab::Auth.available_scopes_for(current_user) + @scopes = ::VirtualRegistries.filter_token_scopes(@scopes, current_user) + @impersonation_token ||= finder.build @active_impersonation_tokens = active_impersonation_tokens end diff --git a/app/controllers/concerns/access_tokens_actions.rb b/app/controllers/concerns/access_tokens_actions.rb index 7fcb3210ed401a3f6df639d96c65ce0eb61600aa..c9eb45424cbbb50f5318f0c7901f06004ad365b7 100644 --- a/app/controllers/concerns/access_tokens_actions.rb +++ b/app/controllers/concerns/access_tokens_actions.rb @@ -98,6 +98,9 @@ def set_index_vars resource.members.load @scopes = Gitlab::Auth.available_scopes_for(resource) + + @scopes = ::VirtualRegistries.filter_token_scopes(@scopes, current_user) + @active_access_tokens, @active_access_tokens_size = active_access_tokens @inactive_access_tokens_size = inactive_access_tokens.size end diff --git a/app/controllers/user_settings/personal_access_tokens_controller.rb b/app/controllers/user_settings/personal_access_tokens_controller.rb index d8f0975145cef89b25cbf8f50fc7395f951cba66..825e6878009f1b370552a2766d27f4ecd6d34c85 100644 --- a/app/controllers/user_settings/personal_access_tokens_controller.rb +++ b/app/controllers/user_settings/personal_access_tokens_controller.rb @@ -106,6 +106,9 @@ def personal_access_token_params def set_index_vars @scopes = Gitlab::Auth.available_scopes_for(current_user) + + @scopes = ::VirtualRegistries.filter_token_scopes(@scopes, current_user) + @active_access_tokens, @active_access_tokens_size = active_access_tokens end diff --git a/app/models/virtual_registries.rb b/app/models/virtual_registries.rb new file mode 100644 index 0000000000000000000000000000000000000000..ab4cafc4feb6726e80ba1e872b52e15b736c9642 --- /dev/null +++ b/app/models/virtual_registries.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +# Remove this file when virtual_registry_maven *and* dependency_proxy_read_write_scopes are removed +module VirtualRegistries + def self.filter_token_scopes(scopes, current_user) + return scopes if Feature.enabled?(:virtual_registry_maven, current_user) || + Feature.enabled?(:dependency_proxy_read_write_scopes, current_user) + + scopes - ::Gitlab::Auth.virtual_registry_scopes + end +end diff --git a/config/feature_flags/wip/dependency_proxy_read_write_scopes.yml b/config/feature_flags/wip/dependency_proxy_read_write_scopes.yml new file mode 100644 index 0000000000000000000000000000000000000000..c00229cc4007cf7cb42f1a1fa8089fc830590fa8 --- /dev/null +++ b/config/feature_flags/wip/dependency_proxy_read_write_scopes.yml @@ -0,0 +1,9 @@ +--- +name: dependency_proxy_read_write_scopes +feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/336800 +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/180333 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/517249 +milestone: '17.9' +group: group::container registry +type: wip +default_enabled: false diff --git a/spec/controllers/user_settings/personal_access_tokens_controller_spec.rb b/spec/controllers/user_settings/personal_access_tokens_controller_spec.rb index 5354585129ac5426c39422f5e53d25c591163aff..4997243b2a72f44296fcbd917fea2e55fd82eea7 100644 --- a/spec/controllers/user_settings/personal_access_tokens_controller_spec.rb +++ b/spec/controllers/user_settings/personal_access_tokens_controller_spec.rb @@ -141,5 +141,32 @@ def created_token it 'sets available scopes' do expect(assigns(:scopes)).to eq(Gitlab::Auth.available_scopes_for(access_token_user)) end + + context 'with feature flags virtual_registry_maven and dependency_proxy_read_write_scopes disabled' do + before do + stub_feature_flags(virtual_registry_maven: false, dependency_proxy_read_write_scopes: false) + stub_config(dependency_proxy: { enabled: true }) + + get :index + end + + it 'does not include the virtual registry scopes' do + expect(assigns(:scopes)).not_to include(Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE) + expect(assigns(:scopes)).not_to include(Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE) + end + + %i[virtual_registry_maven dependency_proxy_read_write_scopes].each do |feature_flag| + context "with feature flag #{feature_flag} enabled" do + before do + stub_feature_flags(feature_flag => true) + end + + it 'includes the virtual registry scopes' do + expect(assigns(:scopes)).not_to include(::Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE) + expect(assigns(:scopes)).not_to include(::Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE) + end + end + end + end end end diff --git a/spec/requests/admin/impersonation_tokens_controller_spec.rb b/spec/requests/admin/impersonation_tokens_controller_spec.rb index 51f17ad725afc8d9827d801c196f982c533b9d3c..9074ab3dc0664719d0f5ad8bfb577c8a5319d756 100644 --- a/spec/requests/admin/impersonation_tokens_controller_spec.rb +++ b/spec/requests/admin/impersonation_tokens_controller_spec.rb @@ -62,4 +62,39 @@ let(:token_attributes) { attributes_for(:personal_access_token, impersonation: true) } end end + + describe '#index', :with_current_organization do + it 'sets available scopes' do + get admin_user_impersonation_tokens_path(user_id: user.username) + + expect(assigns(:scopes)).to include(::Gitlab::Auth::API_SCOPE) + end + + context 'with feature flags virtual_registry_maven and dependency_proxy_read_write_scopes disabled' do + before do + stub_feature_flags(virtual_registry_maven: false, dependency_proxy_read_write_scopes: false) + stub_config(dependency_proxy: { enabled: true }) + + get admin_user_impersonation_tokens_path(user_id: user.username) + end + + it 'does not include the virtual registry scopes' do + expect(assigns(:scopes)).not_to include(Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE) + expect(assigns(:scopes)).not_to include(Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE) + end + + %i[virtual_registry_maven dependency_proxy_read_write_scopes].each do |feature_flag| + context "with feature flag #{feature_flag} enabled" do + before do + stub_feature_flags(feature_flag => true) + end + + it 'includes the virtual registry scopes' do + expect(assigns(:scopes)).not_to include(::Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE) + expect(assigns(:scopes)).not_to include(::Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE) + end + end + end + end + end end diff --git a/spec/requests/projects/settings/access_tokens_controller_spec.rb b/spec/requests/projects/settings/access_tokens_controller_spec.rb index d91e356167cbaf9022371e718284e6bc9fc507ec..de66d99b3d9e06dab2667b372706501f555e7b61 100644 --- a/spec/requests/projects/settings/access_tokens_controller_spec.rb +++ b/spec/requests/projects/settings/access_tokens_controller_spec.rb @@ -123,5 +123,32 @@ expect(assigns(:scopes)).to include(Gitlab::Auth::K8S_PROXY_SCOPE) expect(assigns(:scopes)).to include(Gitlab::Auth::SELF_ROTATE_SCOPE) end + + context 'with feature flags virtual_registry_maven and dependency_proxy_read_write_scopes disabled' do + before do + stub_feature_flags(virtual_registry_maven: false, dependency_proxy_read_write_scopes: false) + stub_config(dependency_proxy: { enabled: true }) + + get project_settings_access_tokens_path(resource) + end + + it 'does not include the virtual registry scopes' do + expect(assigns(:scopes)).not_to include(Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE) + expect(assigns(:scopes)).not_to include(Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE) + end + + %i[virtual_registry_maven dependency_proxy_read_write_scopes].each do |feature_flag| + context "with feature flag #{feature_flag} enabled" do + before do + stub_feature_flags(feature_flag => true) + end + + it 'includes the virtual registry scopes' do + expect(assigns(:scopes)).not_to include(::Gitlab::Auth::READ_VIRTUAL_REGISTRY_SCOPE) + expect(assigns(:scopes)).not_to include(::Gitlab::Auth::WRITE_VIRTUAL_REGISTRY_SCOPE) + end + end + end + end end end