61 lines
1.7 KiB
Ruby
61 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Groups
|
|
module ImportExport
|
|
class ImportService
|
|
attr_reader :current_user, :group, :params
|
|
|
|
def initialize(group:, user:)
|
|
@group = group
|
|
@current_user = user
|
|
@shared = Gitlab::ImportExport::Shared.new(@group)
|
|
end
|
|
|
|
def execute
|
|
validate_user_permissions
|
|
|
|
if import_file && restorer.restore
|
|
@group
|
|
else
|
|
raise StandardError.new(@shared.errors.to_sentence)
|
|
end
|
|
rescue => e
|
|
raise StandardError.new(e.message)
|
|
ensure
|
|
remove_import_file
|
|
end
|
|
|
|
private
|
|
|
|
def import_file
|
|
@import_file ||= Gitlab::ImportExport::FileImporter.import(importable: @group,
|
|
archive_file: nil,
|
|
shared: @shared)
|
|
end
|
|
|
|
def restorer
|
|
@restorer ||= Gitlab::ImportExport::GroupTreeRestorer.new(user: @current_user,
|
|
shared: @shared,
|
|
group: @group,
|
|
group_hash: nil)
|
|
end
|
|
|
|
def remove_import_file
|
|
upload = @group.import_export_upload
|
|
|
|
return unless upload&.import_file&.file
|
|
|
|
upload.remove_import_file!
|
|
upload.save!
|
|
end
|
|
|
|
def validate_user_permissions
|
|
unless current_user.can?(:admin_group, group)
|
|
raise ::Gitlab::ImportExport::Error.new(
|
|
"User with ID: %s does not have permission to Group %s with ID: %s." %
|
|
[current_user.id, group.name, group.id])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|