2020-09-30 23:09:55 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module NamespaceSettings
|
|
|
|
class UpdateService
|
|
|
|
include ::Gitlab::Allowable
|
|
|
|
|
|
|
|
attr_reader :current_user, :group, :settings_params
|
|
|
|
|
|
|
|
def initialize(current_user, group, settings)
|
|
|
|
@current_user = current_user
|
|
|
|
@group = group
|
|
|
|
@settings_params = settings
|
|
|
|
end
|
|
|
|
|
|
|
|
def execute
|
2021-04-05 23:09:02 -04:00
|
|
|
validate_resource_access_token_creation_allowed_param
|
2021-07-14 17:09:44 -04:00
|
|
|
|
|
|
|
validate_settings_param_for_root_group(
|
|
|
|
param_key: :prevent_sharing_groups_outside_hierarchy,
|
|
|
|
user_policy: :change_prevent_sharing_groups_outside_hierarchy
|
|
|
|
)
|
|
|
|
validate_settings_param_for_root_group(
|
|
|
|
param_key: :new_user_signups_cap,
|
|
|
|
user_policy: :change_new_user_signups_cap
|
|
|
|
)
|
2021-04-05 23:09:02 -04:00
|
|
|
|
2020-09-30 23:09:55 -04:00
|
|
|
if group.namespace_settings
|
|
|
|
group.namespace_settings.attributes = settings_params
|
|
|
|
else
|
|
|
|
group.build_namespace_settings(settings_params)
|
|
|
|
end
|
|
|
|
end
|
2021-04-05 23:09:02 -04:00
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def validate_resource_access_token_creation_allowed_param
|
|
|
|
return if settings_params[:resource_access_token_creation_allowed].nil?
|
|
|
|
|
|
|
|
unless can?(current_user, :admin_group, group)
|
|
|
|
settings_params.delete(:resource_access_token_creation_allowed)
|
|
|
|
group.namespace_settings.errors.add(:resource_access_token_creation_allowed, _('can only be changed by a group admin.'))
|
|
|
|
end
|
|
|
|
end
|
2021-06-14 20:10:11 -04:00
|
|
|
|
2021-07-14 17:09:44 -04:00
|
|
|
def validate_settings_param_for_root_group(param_key:, user_policy:)
|
|
|
|
return if settings_params[param_key].nil?
|
2021-06-14 20:10:11 -04:00
|
|
|
|
2021-07-14 17:09:44 -04:00
|
|
|
unless can?(current_user, user_policy, group)
|
|
|
|
settings_params.delete(param_key)
|
|
|
|
group.namespace_settings.errors.add(param_key, _('can only be changed by a group admin.'))
|
2021-06-14 20:10:11 -04:00
|
|
|
end
|
2021-06-23 08:07:58 -04:00
|
|
|
|
|
|
|
unless group.root?
|
2021-07-14 17:09:44 -04:00
|
|
|
settings_params.delete(param_key)
|
|
|
|
group.namespace_settings.errors.add(param_key, _('only available on top-level groups.'))
|
2021-06-23 08:07:58 -04:00
|
|
|
end
|
2021-06-14 20:10:11 -04:00
|
|
|
end
|
2020-09-30 23:09:55 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-05-11 17:10:21 -04:00
|
|
|
NamespaceSettings::UpdateService.prepend_mod_with('NamespaceSettings::UpdateService')
|