1# frozen_string_literal: true 2 3class Import::GitlabProjectsController < Import::BaseController 4 include WorkhorseAuthorization 5 6 before_action :disable_query_limiting, only: [:create] 7 before_action :verify_gitlab_project_import_enabled 8 9 def new 10 @namespace = Namespace.find(project_params[:namespace_id]) 11 return render_404 unless current_user.can?(:create_projects, @namespace) 12 13 @path = project_params[:path] 14 end 15 16 def create 17 unless file_is_valid?(project_params[:file]) 18 return redirect_back_or_default(options: { alert: _("You need to upload a GitLab project export archive (ending in .gz).") }) 19 end 20 21 @project = ::Projects::GitlabProjectsImportService.new(current_user, project_params).execute 22 23 if @project.saved? 24 redirect_to( 25 project_path(@project), 26 notice: _("Project '%{project_name}' is being imported.") % { project_name: @project.name } 27 ) 28 else 29 redirect_back_or_default(options: { alert: "Project could not be imported: #{@project.errors.full_messages.join(', ')}" }) 30 end 31 end 32 33 private 34 35 def verify_gitlab_project_import_enabled 36 render_404 unless gitlab_project_import_enabled? 37 end 38 39 def project_params 40 params.permit( 41 :path, :namespace_id, :file 42 ) 43 end 44 45 def disable_query_limiting 46 Gitlab::QueryLimiting.disable!('https://gitlab.com/gitlab-org/gitlab/-/issues/20823') 47 end 48 49 def uploader_class 50 ImportExportUploader 51 end 52 53 def maximum_size 54 Gitlab::CurrentSettings.max_import_size.megabytes 55 end 56end 57