1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
# frozen_string_literal: true
module Integrations
module Exclusions
class BaseService
include Gitlab::Utils::StrongMemoize
def initialize(current_user:, integration_name:, projects: [], groups: [])
@user = current_user
@integration_name = integration_name
@projects = projects
@groups = groups
end
private
attr_reader :user, :integration_name, :projects, :groups
def validate
return ServiceResponse.error(message: 'not authorized') unless allowed?
return ServiceResponse.error(message: 'not instance specific') unless instance_specific_integration?
ServiceResponse.success(payload: []) unless projects.present? || groups.present?
end
def allowed?
user.can?(:admin_all_resources)
end
def instance_specific_integration?
Integration.instance_specific_integration_names.include?(integration_name)
end
def instance_integration
integration_model.for_instance.first
end
strong_memoize_attr :instance_integration
def integration_model
Integration.integration_name_to_model(integration_name)
end
strong_memoize_attr :integration_model
def integration_type
Integration.integration_name_to_type(integration_name)
end
strong_memoize_attr :integration_type
end
end
end
|