64 lines
1.5 KiB
Ruby
64 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Import
|
|
class BaseService < ::BaseService
|
|
def initialize(client, user, params)
|
|
@client = client
|
|
@current_user = user
|
|
@params = params
|
|
end
|
|
|
|
def authorized?
|
|
can?(current_user, :create_projects, target_namespace)
|
|
end
|
|
|
|
private
|
|
|
|
def find_or_create_namespace(namespace, owner)
|
|
namespace = params[:target_namespace].presence || namespace
|
|
|
|
return current_user.namespace if namespace == owner
|
|
|
|
group = Groups::NestedCreateService.new(current_user, group_path: namespace).execute
|
|
|
|
group.errors.any? ? current_user.namespace : group
|
|
rescue StandardError => e
|
|
Gitlab::AppLogger.error(e)
|
|
|
|
current_user.namespace
|
|
end
|
|
|
|
def project_save_error(project)
|
|
project.errors.full_messages.join(', ')
|
|
end
|
|
|
|
def success(project)
|
|
super().merge(project: project, status: :success)
|
|
end
|
|
|
|
def track_access_level(import_type)
|
|
Gitlab::Tracking.event(
|
|
self.class.name,
|
|
'create',
|
|
label: 'import_access_level',
|
|
user: current_user,
|
|
extra: { user_role: user_role, import_type: import_type }
|
|
)
|
|
end
|
|
|
|
def user_role
|
|
if current_user.id == target_namespace.owner_id
|
|
'Owner'
|
|
else
|
|
access_level = current_user&.group_members&.find_by(source_id: target_namespace.id)&.access_level
|
|
|
|
case access_level
|
|
when nil
|
|
'Not a member'
|
|
else
|
|
Gitlab::Access.human_access(access_level)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|