diff --git a/doc/api/openapi/openapi_v2.yaml b/doc/api/openapi/openapi_v2.yaml index a8206c01ef19855c3b03f07f5405cd84fcc43a0a..cbd86d9621e142571c68db50c56f8b0ad526676e 100644 --- a/doc/api/openapi/openapi_v2.yaml +++ b/doc/api/openapi/openapi_v2.yaml @@ -44380,6 +44380,8 @@ definitions: type: string lock_duo_features_enabled: type: string + web_based_commit_signing_enabled: + type: string description: API_Entities_Group model API_Entities_Namespace_RootStorageStatistics: type: object @@ -44933,6 +44935,9 @@ definitions: type: boolean description: Indicates if the GitLab Duo features enabled setting is enforced for all subgroups + web_based_commit_signing_enabled: + type: boolean + description: Enable web based commit signing for this group description: Update a group. Available only for users who can administrate groups. API_Entities_GroupDetail: type: object @@ -45049,6 +45054,8 @@ definitions: type: string lock_duo_features_enabled: type: string + web_based_commit_signing_enabled: + type: string shared_with_groups: type: string runners_token: diff --git a/ee/lib/ee/api/entities/group.rb b/ee/lib/ee/api/entities/group.rb index e1463a04cc60f989d3a483001092cbcace0c537e..534501d8703df044205c24ed8d1d49029701523c 100644 --- a/ee/lib/ee/api/entities/group.rb +++ b/ee/lib/ee/api/entities/group.rb @@ -54,6 +54,11 @@ module Group group.licensed_ai_features_available? && Ability.allowed?(options[:current_user], :admin_group, group) } + expose :web_based_commit_signing_enabled, + if: ->(group, options) { + ::Gitlab::Saas.feature_available?(:repositories_web_based_commit_signing) && + Ability.allowed?(options[:current_user], :admin_group, group) + } end end end diff --git a/ee/lib/ee/api/helpers/groups_helpers.rb b/ee/lib/ee/api/helpers/groups_helpers.rb index d20cb403d557ca4b673164432e5a33044e76cf85..f34a8d57aac32fa72c0e16e64fc6855c2ae4c59c 100644 --- a/ee/lib/ee/api/helpers/groups_helpers.rb +++ b/ee/lib/ee/api/helpers/groups_helpers.rb @@ -64,6 +64,9 @@ module GroupsHelpers optional :lock_duo_features_enabled, type: ::Grape::API::Boolean, desc: "Indicates if the GitLab Duo features enabled setting is enforced for all subgroups" + optional :web_based_commit_signing_enabled, + type: ::Grape::API::Boolean, + desc: 'Enable web based commit signing for this group' end params :optional_projects_params_ee do diff --git a/ee/spec/lib/ee/api/entities/group_spec.rb b/ee/spec/lib/ee/api/entities/group_spec.rb index 1d9a71b6a4a0b6d69db5d74410c993b6b22db7b1..12052734a6bd285fc540217c2fedc03e295c05de 100644 --- a/ee/spec/lib/ee/api/entities/group_spec.rb +++ b/ee/spec/lib/ee/api/entities/group_spec.rb @@ -23,7 +23,8 @@ :file_template_project_id, :duo_core_features_enabled, :duo_features_enabled, - :lock_duo_features_enabled + :lock_duo_features_enabled, + :web_based_commit_signing_enabled ) end @@ -103,6 +104,18 @@ ) end end + + context 'and the repositories_web_based_commit_signing feature is available' do + before do + stub_saas_features(repositories_web_based_commit_signing: true) + end + + it 'returns expected data' do + expect(json.keys).to include( + :web_based_commit_signing_enabled + ) + end + end end end end diff --git a/ee/spec/requests/api/groups_spec.rb b/ee/spec/requests/api/groups_spec.rb index 4339fe403fac08905500e2caa0631564c1c6ef71..ab61d50309a4840ed3b0421630eecb07daa8644d 100644 --- a/ee/spec/requests/api/groups_spec.rb +++ b/ee/spec/requests/api/groups_spec.rb @@ -681,6 +681,36 @@ expect(response).to have_gitlab_http_status(:ok) end end + + context 'web_based_commit_signing_enabled' do + using RSpec::Parameterized::TableSyntax + context 'when authenticated as group owner' do + where(:feature_available, :feature_enabled, :result) do + true | false | false + true | true | true + false | true | nil + false | false | nil + end + + with_them do + let(:params) { { web_based_commit_signing_enabled: true } } + + before do + group.add_owner(user) + + stub_saas_features(repositories_web_based_commit_signing: feature_available) + stub_feature_flags(use_web_based_commit_signing_enabled: feature_enabled) + end + + it 'updates the attribute as expected' do + subject + + expect(response).to have_gitlab_http_status(:ok) + expect(json_response['web_based_commit_signing_enabled']).to eq(result) + end + end + end + end end describe "POST /groups" do