diff options
Diffstat (limited to 'app/controllers/import/base_controller.rb')
-rw-r--r-- | app/controllers/import/base_controller.rb | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/app/controllers/import/base_controller.rb b/app/controllers/import/base_controller.rb index 04919a4b9d0..afdea4f7c9d 100644 --- a/app/controllers/import/base_controller.rb +++ b/app/controllers/import/base_controller.rb @@ -1,10 +1,86 @@ # frozen_string_literal: true class Import::BaseController < ApplicationController + include ActionView::Helpers::SanitizeHelper + before_action :import_rate_limit, only: [:create] + def status + respond_to do |format| + format.json do + render json: { imported_projects: serialized_imported_projects, + provider_repos: serialized_provider_repos, + incompatible_repos: serialized_incompatible_repos, + namespaces: serialized_namespaces } + end + format.html + end + end + + def realtime_changes + Gitlab::PollingInterval.set_header(response, interval: 3_000) + + render json: already_added_projects.to_json(only: [:id], methods: [:import_status]) + end + + protected + + def importable_repos + raise NotImplementedError + end + + def incompatible_repos + [] + end + + def provider_name + raise NotImplementedError + end + + def provider_url + raise NotImplementedError + end + private + def filter_attribute + :name + end + + def sanitized_filter_param + @filter ||= sanitize(params[:filter]) + end + + def filtered(collection) + return collection unless sanitized_filter_param + + collection.select { |item| item[filter_attribute].include?(sanitized_filter_param) } + end + + def serialized_provider_repos + Import::ProviderRepoSerializer.new(current_user: current_user).represent(importable_repos, provider: provider_name, provider_url: provider_url) + end + + def serialized_incompatible_repos + Import::ProviderRepoSerializer.new(current_user: current_user).represent(incompatible_repos, provider: provider_name, provider_url: provider_url) + end + + def serialized_imported_projects + ProjectSerializer.new.represent(already_added_projects, serializer: :import, provider_url: provider_url) + end + + def already_added_projects + @already_added_projects ||= filtered(find_already_added_projects(provider_name)) + end + + def serialized_namespaces + NamespaceSerializer.new.represent(namespaces) + end + + def namespaces + current_user.manageable_groups_with_routes + end + # rubocop: disable CodeReuse/ActiveRecord def find_already_added_projects(import_type) current_user.created_projects.where(import_type: import_type).with_import_state |