Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/import')
-rw-r--r--app/controllers/import/base_controller.rb11
-rw-r--r--app/controllers/import/bitbucket_controller.rb17
-rw-r--r--app/controllers/import/bitbucket_server_controller.rb46
-rw-r--r--app/controllers/import/fogbugz_controller.rb18
-rw-r--r--app/controllers/import/gitea_controller.rb14
-rw-r--r--app/controllers/import/github_controller.rb99
-rw-r--r--app/controllers/import/gitlab_controller.rb20
7 files changed, 78 insertions, 147 deletions
diff --git a/app/controllers/import/base_controller.rb b/app/controllers/import/base_controller.rb
index afdea4f7c9d..bc05030f8af 100644
--- a/app/controllers/import/base_controller.rb
+++ b/app/controllers/import/base_controller.rb
@@ -30,7 +30,7 @@ class Import::BaseController < ApplicationController
end
def incompatible_repos
- []
+ raise NotImplementedError
end
def provider_name
@@ -87,15 +87,6 @@ class Import::BaseController < ApplicationController
end
# rubocop: enable CodeReuse/ActiveRecord
- # rubocop: disable CodeReuse/ActiveRecord
- def find_jobs(import_type)
- current_user.created_projects
- .with_import_state
- .where(import_type: import_type)
- .to_json(only: [:id], methods: [:import_status])
- end
- # rubocop: enable CodeReuse/ActiveRecord
-
# deprecated: being replaced by app/services/import/base_service.rb
def find_or_create_namespace(names, owner)
names = params[:target_namespace].presence || names
diff --git a/app/controllers/import/bitbucket_controller.rb b/app/controllers/import/bitbucket_controller.rb
index 4886aeb5e3f..0ffd9ef8bdd 100644
--- a/app/controllers/import/bitbucket_controller.rb
+++ b/app/controllers/import/bitbucket_controller.rb
@@ -22,23 +22,8 @@ class Import::BitbucketController < Import::BaseController
redirect_to status_import_bitbucket_url
end
- # rubocop: disable CodeReuse/ActiveRecord
def status
- return super if Feature.enabled?(:new_import_ui)
-
- bitbucket_client = Bitbucket::Client.new(credentials)
- repos = bitbucket_client.repos(filter: sanitized_filter_param)
- @repos, @incompatible_repos = repos.partition { |repo| repo.valid? }
-
- @already_added_projects = find_already_added_projects('bitbucket')
- already_added_projects_names = @already_added_projects.pluck(:import_source)
-
- @repos.to_a.reject! { |repo| already_added_projects_names.include?(repo.full_name) }
- end
- # rubocop: enable CodeReuse/ActiveRecord
-
- def jobs
- render json: find_jobs('bitbucket')
+ super
end
def realtime_changes
diff --git a/app/controllers/import/bitbucket_server_controller.rb b/app/controllers/import/bitbucket_server_controller.rb
index 9aa8110257d..bee78cb3283 100644
--- a/app/controllers/import/bitbucket_server_controller.rb
+++ b/app/controllers/import/bitbucket_server_controller.rb
@@ -7,6 +7,7 @@ class Import::BitbucketServerController < Import::BaseController
before_action :verify_bitbucket_server_import_enabled
before_action :bitbucket_auth, except: [:new, :configure]
+ before_action :normalize_import_params, only: [:create]
before_action :validate_import_params, only: [:create]
rescue_from BitbucketServer::Connection::ConnectionError, with: :bitbucket_connection_error
@@ -34,48 +35,25 @@ class Import::BitbucketServerController < Import::BaseController
return render json: { errors: _("Project %{project_repo} could not be found") % { project_repo: "#{@project_key}/#{@repo_slug}" } }, status: :unprocessable_entity
end
- project_name = params[:new_name].presence || repo.name
- namespace_path = params[:new_namespace].presence || current_user.username
- target_namespace = find_or_create_namespace(namespace_path, current_user)
+ result = Import::BitbucketServerService.new(client, current_user, params).execute(credentials)
- if current_user.can?(:create_projects, target_namespace)
- project = Gitlab::BitbucketServerImport::ProjectCreator.new(@project_key, @repo_slug, repo, project_name, target_namespace, current_user, credentials).execute
-
- if project.persisted?
- render json: ProjectSerializer.new.represent(project, serializer: :import)
- else
- render json: { errors: project_save_error(project) }, status: :unprocessable_entity
- end
+ if result[:status] == :success
+ render json: ProjectSerializer.new.represent(result[:project], serializer: :import)
else
- render json: { errors: _('This namespace has already been taken! Please choose another one.') }, status: :unprocessable_entity
+ render json: { errors: result[:message] }, status: result[:http_status]
end
end
def configure
session[personal_access_token_key] = params[:personal_access_token]
- session[bitbucket_server_username_key] = params[:bitbucket_username]
+ session[bitbucket_server_username_key] = params[:bitbucket_server_username]
session[bitbucket_server_url_key] = params[:bitbucket_server_url]
redirect_to status_import_bitbucket_server_path
end
- # rubocop: disable CodeReuse/ActiveRecord
def status
- return super if Feature.enabled?(:new_import_ui)
-
- @collection = client.repos(page_offset: page_offset, limit: limit_per_page, filter: sanitized_filter_param)
- @repos, @incompatible_repos = @collection.partition { |repo| repo.valid? }
-
- # Use the import URL to filter beyond what BaseService#find_already_added_projects
- @already_added_projects = filter_added_projects('bitbucket_server', @repos.map(&:browse_url))
- already_added_projects_names = @already_added_projects.pluck(:import_source)
-
- @repos.reject! { |repo| already_added_projects_names.include?(repo.browse_url) }
- end
- # rubocop: enable CodeReuse/ActiveRecord
-
- def jobs
- render json: find_jobs('bitbucket_server')
+ super
end
def realtime_changes
@@ -126,9 +104,15 @@ class Import::BitbucketServerController < Import::BaseController
@bitbucket_repos ||= client.repos(page_offset: page_offset, limit: limit_per_page, filter: sanitized_filter_param).to_a
end
+ def normalize_import_params
+ project_key, repo_slug = params[:repo_id].split('/')
+ params[:bitbucket_server_project] = project_key
+ params[:bitbucket_server_repo] = repo_slug
+ end
+
def validate_import_params
- @project_key = params[:project]
- @repo_slug = params[:repository]
+ @project_key = params[:bitbucket_server_project]
+ @repo_slug = params[:bitbucket_server_repo]
return render_validation_error('Missing project key') unless @project_key.present? && @repo_slug.present?
return render_validation_error('Missing repository slug') unless @repo_slug.present?
diff --git a/app/controllers/import/fogbugz_controller.rb b/app/controllers/import/fogbugz_controller.rb
index 91779a5d6cc..a34bc9c953f 100644
--- a/app/controllers/import/fogbugz_controller.rb
+++ b/app/controllers/import/fogbugz_controller.rb
@@ -50,14 +50,7 @@ class Import::FogbugzController < Import::BaseController
return redirect_to new_import_fogbugz_path
end
- return super if Feature.enabled?(:new_import_ui)
-
- @repos = client.repos
-
- @already_added_projects = find_already_added_projects('fogbugz')
- already_added_projects_names = @already_added_projects.pluck(:import_source)
-
- @repos.reject! { |repo| already_added_projects_names.include? repo.name }
+ super
end
# rubocop: enable CodeReuse/ActiveRecord
@@ -65,10 +58,6 @@ class Import::FogbugzController < Import::BaseController
super
end
- def jobs
- render json: find_jobs('fogbugz')
- end
-
def create
repo = client.repo(params[:repo_id])
fb_session = { uri: session[:fogbugz_uri], token: session[:fogbugz_token] }
@@ -96,6 +85,11 @@ class Import::FogbugzController < Import::BaseController
end
# rubocop: enable CodeReuse/ActiveRecord
+ override :incompatible_repos
+ def incompatible_repos
+ []
+ end
+
override :provider_name
def provider_name
:fogbugz
diff --git a/app/controllers/import/gitea_controller.rb b/app/controllers/import/gitea_controller.rb
index 42c23fb29a7..efeff8439e4 100644
--- a/app/controllers/import/gitea_controller.rb
+++ b/app/controllers/import/gitea_controller.rb
@@ -21,15 +21,17 @@ class Import::GiteaController < Import::GithubController
super
end
- private
+ protected
- def host_key
- :"#{provider}_host_url"
+ override :provider_name
+ def provider_name
+ :gitea
end
- override :provider
- def provider
- :gitea
+ private
+
+ def host_key
+ :"#{provider_name}_host_url"
end
override :provider_url
diff --git a/app/controllers/import/github_controller.rb b/app/controllers/import/github_controller.rb
index 097edcd6075..ac6b8c06d66 100644
--- a/app/controllers/import/github_controller.rb
+++ b/app/controllers/import/github_controller.rb
@@ -1,6 +1,8 @@
# frozen_string_literal: true
class Import::GithubController < Import::BaseController
+ extend ::Gitlab::Utils::Override
+
include ImportHelper
include ActionView::Helpers::SanitizeHelper
@@ -34,18 +36,11 @@ class Import::GithubController < Import::BaseController
# Improving in https://gitlab.com/gitlab-org/gitlab-foss/issues/55585
client_repos
- respond_to do |format|
- format.json do
- render json: { imported_projects: serialized_imported_projects,
- provider_repos: serialized_provider_repos,
- namespaces: serialized_namespaces }
- end
- format.html
- end
+ super
end
def create
- result = Import::GithubService.new(client, current_user, import_params).execute(access_params, provider)
+ result = Import::GithubService.new(client, current_user, import_params).execute(access_params, provider_name)
if result[:status] == :success
render json: serialized_imported_projects(result[:project])
@@ -55,44 +50,51 @@ class Import::GithubController < Import::BaseController
end
def realtime_changes
- Gitlab::PollingInterval.set_header(response, interval: 3_000)
-
- render json: already_added_projects.to_json(only: [:id], methods: [:import_status])
+ super
end
- private
+ protected
- def import_params
- params.permit(permitted_import_params)
- end
+ # rubocop: disable CodeReuse/ActiveRecord
+ override :importable_repos
+ def importable_repos
+ already_added_projects_names = already_added_projects.pluck(:import_source)
- def permitted_import_params
- [:repo_id, :new_name, :target_namespace]
+ client_repos.reject { |repo| already_added_projects_names.include?(repo.full_name) }
end
+ # rubocop: enable CodeReuse/ActiveRecord
- def serialized_imported_projects(projects = already_added_projects)
- ProjectSerializer.new.represent(projects, serializer: :import, provider_url: provider_url)
+ override :incompatible_repos
+ def incompatible_repos
+ []
end
- def serialized_provider_repos
- repos = client_repos.reject { |repo| already_added_project_names.include? repo.full_name }
- Import::ProviderRepoSerializer.new(current_user: current_user).represent(repos, provider: provider, provider_url: provider_url)
+ override :provider_name
+ def provider_name
+ :github
end
- def serialized_namespaces
- NamespaceSerializer.new.represent(namespaces)
+ override :provider_url
+ def provider_url
+ strong_memoize(:provider_url) do
+ provider = Gitlab::Auth::OAuth::Provider.config_for('github')
+
+ provider&.dig('url').presence || 'https://github.com'
+ end
end
- def already_added_projects
- @already_added_projects ||= filtered(find_already_added_projects(provider))
+ private
+
+ def import_params
+ params.permit(permitted_import_params)
end
- def already_added_project_names
- @already_added_projects_names ||= already_added_projects.pluck(:import_source) # rubocop:disable CodeReuse/ActiveRecord
+ def permitted_import_params
+ [:repo_id, :new_name, :target_namespace]
end
- def namespaces
- current_user.manageable_groups_with_routes
+ def serialized_imported_projects(projects = already_added_projects)
+ ProjectSerializer.new.represent(projects, serializer: :import, provider_url: provider_url)
end
def expire_etag_cache
@@ -118,29 +120,29 @@ class Import::GithubController < Import::BaseController
end
def import_enabled?
- __send__("#{provider}_import_enabled?") # rubocop:disable GitlabSecurity/PublicSend
+ __send__("#{provider_name}_import_enabled?") # rubocop:disable GitlabSecurity/PublicSend
end
def realtime_changes_path
- public_send("realtime_changes_import_#{provider}_path", format: :json) # rubocop:disable GitlabSecurity/PublicSend
+ public_send("realtime_changes_import_#{provider_name}_path", format: :json) # rubocop:disable GitlabSecurity/PublicSend
end
def new_import_url
- public_send("new_import_#{provider}_url", extra_import_params) # rubocop:disable GitlabSecurity/PublicSend
+ public_send("new_import_#{provider_name}_url", extra_import_params) # rubocop:disable GitlabSecurity/PublicSend
end
def status_import_url
- public_send("status_import_#{provider}_url", extra_import_params) # rubocop:disable GitlabSecurity/PublicSend
+ public_send("status_import_#{provider_name}_url", extra_import_params) # rubocop:disable GitlabSecurity/PublicSend
end
def callback_import_url
- public_send("users_import_#{provider}_callback_url", extra_import_params) # rubocop:disable GitlabSecurity/PublicSend
+ public_send("users_import_#{provider_name}_callback_url", extra_import_params) # rubocop:disable GitlabSecurity/PublicSend
end
def provider_unauthorized
session[access_token_key] = nil
redirect_to new_import_url,
- alert: "Access denied to your #{Gitlab::ImportSources.title(provider.to_s)} account."
+ alert: "Access denied to your #{Gitlab::ImportSources.title(provider_name.to_s)} account."
end
def provider_rate_limit(exception)
@@ -151,29 +153,16 @@ class Import::GithubController < Import::BaseController
end
def access_token_key
- :"#{provider}_access_token"
+ :"#{provider_name}_access_token"
end
def access_params
{ github_access_token: session[access_token_key] }
end
- # The following methods are overridden in subclasses
- def provider
- :github
- end
-
- def provider_url
- strong_memoize(:provider_url) do
- provider = Gitlab::Auth::OAuth::Provider.config_for('github')
-
- provider&.dig('url').presence || 'https://github.com'
- end
- end
-
# rubocop: disable CodeReuse/ActiveRecord
def logged_in_with_provider?
- current_user.identities.exists?(provider: provider)
+ current_user.identities.exists?(provider: provider_name)
end
# rubocop: enable CodeReuse/ActiveRecord
@@ -202,12 +191,6 @@ class Import::GithubController < Import::BaseController
def filter_attribute
:name
end
-
- def filtered(collection)
- return collection unless sanitized_filter_param
-
- collection.select { |item| item[filter_attribute].include?(sanitized_filter_param) }
- end
end
Import::GithubController.prepend_if_ee('EE::Import::GithubController')
diff --git a/app/controllers/import/gitlab_controller.rb b/app/controllers/import/gitlab_controller.rb
index a95a67e208c..cc68eb02741 100644
--- a/app/controllers/import/gitlab_controller.rb
+++ b/app/controllers/import/gitlab_controller.rb
@@ -16,21 +16,8 @@ class Import::GitlabController < Import::BaseController
redirect_to status_import_gitlab_url
end
- # rubocop: disable CodeReuse/ActiveRecord
def status
- return super if Feature.enabled?(:new_import_ui)
-
- @repos = client.projects(starting_page: 1, page_limit: MAX_PROJECT_PAGES, per_page: PER_PAGE_PROJECTS)
-
- @already_added_projects = find_already_added_projects('gitlab')
- already_added_projects_names = @already_added_projects.pluck(:import_source)
-
- @repos = @repos.to_a.reject { |repo| already_added_projects_names.include? repo["path_with_namespace"] }
- end
- # rubocop: enable CodeReuse/ActiveRecord
-
- def jobs
- render json: find_jobs('gitlab')
+ super
end
def create
@@ -63,6 +50,11 @@ class Import::GitlabController < Import::BaseController
end
# rubocop: enable CodeReuse/ActiveRecord
+ override :incompatible_repos
+ def incompatible_repos
+ []
+ end
+
override :provider_name
def provider_name
:gitlab