diff options
Diffstat (limited to 'app/services/import')
-rw-r--r-- | app/services/import/github/cancel_project_import_service.rb | 36 | ||||
-rw-r--r-- | app/services/import/github_service.rb | 28 |
2 files changed, 53 insertions, 11 deletions
diff --git a/app/services/import/github/cancel_project_import_service.rb b/app/services/import/github/cancel_project_import_service.rb new file mode 100644 index 00000000000..5dce5e73662 --- /dev/null +++ b/app/services/import/github/cancel_project_import_service.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +module Import + module Github + class CancelProjectImportService < ::BaseService + def execute + return error('Not Found', :not_found) unless authorized_to_read? + return error('Unauthorized access', :forbidden) unless authorized_to_cancel? + + if project.import_in_progress? + project.import_state.cancel + success(project: project) + else + error(cannot_cancel_error_message, :bad_request) + end + end + + private + + def authorized_to_read? + can?(current_user, :read_project, project) + end + + def authorized_to_cancel? + can?(current_user, :owner_access, project) + end + + def cannot_cancel_error_message + format( + _('The import cannot be canceled because it is %{project_status}'), + project_status: project.import_state.status + ) + end + end + end +end diff --git a/app/services/import/github_service.rb b/app/services/import/github_service.rb index 53297d2412c..a60963e28c7 100644 --- a/app/services/import/github_service.rb +++ b/app/services/import/github_service.rb @@ -9,21 +9,13 @@ module Import attr_reader :params, :current_user def execute(access_params, provider) - if blocked_url? - return log_and_return_error("Invalid URL: #{url}", _("Invalid URL: %{url}") % { url: url }, :bad_request) - end - - unless authorized? - return error(_('This namespace has already been taken! Please choose another one.'), :unprocessable_entity) - end - - if oversized? - return error(oversize_error_message, :unprocessable_entity) - end + context_error = validate_context + return context_error if context_error project = create_project(access_params, provider) if project.persisted? + store_import_settings(project) success(project) elsif project.errors[:import_source_disabled].present? error(project.errors[:import_source_disabled], :forbidden) @@ -108,6 +100,16 @@ module Import private + def validate_context + if blocked_url? + log_and_return_error("Invalid URL: #{url}", _("Invalid URL: %{url}") % { url: url }, :bad_request) + elsif !authorized? + error(_('This namespace has already been taken. Choose a different one.'), :unprocessable_entity) + elsif oversized? + error(oversize_error_message, :unprocessable_entity) + end + end + def log_error(exception) Gitlab::GithubImport::Logger.error( message: 'Import failed due to a GitHub error', @@ -126,6 +128,10 @@ module Import error(translated_message, http_status) end + + def store_import_settings(project) + Gitlab::GithubImport::Settings.new(project).write(params[:optional_stages]) + end end end |