diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-12-20 17:22:11 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-12-20 17:22:11 +0300 |
commit | 0c872e02b2c822e3397515ec324051ff540f0cd5 (patch) | |
tree | ce2fb6ce7030e4dad0f4118d21ab6453e5938cdd /app/controllers/import | |
parent | f7e05a6853b12f02911494c4b3fe53d9540d74fc (diff) |
Add latest changes from gitlab-org/gitlab@15-7-stable-eev15.7.0-rc42
Diffstat (limited to 'app/controllers/import')
-rw-r--r-- | app/controllers/import/bitbucket_controller.rb | 23 | ||||
-rw-r--r-- | app/controllers/import/bulk_imports_controller.rb | 2 | ||||
-rw-r--r-- | app/controllers/import/fogbugz_controller.rb | 4 | ||||
-rw-r--r-- | app/controllers/import/gitea_controller.rb | 26 | ||||
-rw-r--r-- | app/controllers/import/github_controller.rb | 48 |
5 files changed, 78 insertions, 25 deletions
diff --git a/app/controllers/import/bitbucket_controller.rb b/app/controllers/import/bitbucket_controller.rb index 75193309a4e..1d05cee02d4 100644 --- a/app/controllers/import/bitbucket_controller.rb +++ b/app/controllers/import/bitbucket_controller.rb @@ -49,6 +49,14 @@ class Import::BitbucketController < Import::BaseController namespace_path = params[:new_namespace].presence || repo_owner target_namespace = find_or_create_namespace(namespace_path, current_user) + Gitlab::Tracking.event( + self.class.name, + 'create', + label: 'import_access_level', + user: current_user, + extra: { user_role: user_role(current_user, target_namespace), import_type: 'bitbucket' } + ) + if current_user.can?(:create_projects, target_namespace) # The token in a session can be expired, we need to get most recent one because # Bitbucket::Connection class refreshes it. @@ -89,6 +97,21 @@ class Import::BitbucketController < Import::BaseController private + def user_role(user, namespace) + if current_user.id == namespace&.owner_id + Gitlab::Access.options_with_owner.key(Gitlab::Access::OWNER) + else + access_level = current_user&.group_members&.find_by(source_id: namespace&.id)&.access_level + + case access_level + when nil + 'Not a member' + else + Gitlab::Access.human_access(access_level) + end + end + end + def oauth_client @oauth_client ||= OAuth2::Client.new(provider.app_id, provider.app_secret, options) end diff --git a/app/controllers/import/bulk_imports_controller.rb b/app/controllers/import/bulk_imports_controller.rb index 655fc7854fe..9a7118ce498 100644 --- a/app/controllers/import/bulk_imports_controller.rb +++ b/app/controllers/import/bulk_imports_controller.rb @@ -135,7 +135,7 @@ class Import::BulkImportsController < ApplicationController session[url_key], allow_localhost: allow_local_requests?, allow_local_network: allow_local_requests?, - schemes: %w(http https) + schemes: %w[http https] ) rescue Gitlab::UrlBlocker::BlockedUrlError => e clear_session_data diff --git a/app/controllers/import/fogbugz_controller.rb b/app/controllers/import/fogbugz_controller.rb index 7b580234227..77043e174b4 100644 --- a/app/controllers/import/fogbugz_controller.rb +++ b/app/controllers/import/fogbugz_controller.rb @@ -114,7 +114,7 @@ class Import::FogbugzController < Import::BaseController end def user_map_params - params.permit(users: %w(name email gitlab_user)) + params.permit(users: %w[name email gitlab_user]) end def verify_fogbugz_import_enabled @@ -126,7 +126,7 @@ class Import::FogbugzController < Import::BaseController params[:uri], allow_localhost: allow_local_requests?, allow_local_network: allow_local_requests?, - schemes: %w(http https) + schemes: %w[http https] ) rescue Gitlab::UrlBlocker::BlockedUrlError => e redirect_to new_import_fogbugz_url, alert: _('Specified URL cannot be used: "%{reason}"') % { reason: e.message } diff --git a/app/controllers/import/gitea_controller.rb b/app/controllers/import/gitea_controller.rb index 4b4ac07b389..61e32650db3 100644 --- a/app/controllers/import/gitea_controller.rb +++ b/app/controllers/import/gitea_controller.rb @@ -16,12 +16,27 @@ class Import::GiteaController < Import::GithubController super end - # We need to re-expose controller's internal method 'status' as action. - # rubocop:disable Lint/UselessMethodDefinition def status - super + # Request repos to display error page if provider token is invalid + # Improving in https://gitlab.com/gitlab-org/gitlab/-/issues/25859 + client_repos + + respond_to do |format| + format.json do + render json: { imported_projects: serialized_imported_projects, + provider_repos: serialized_provider_repos, + incompatible_repos: serialized_incompatible_repos } + end + + format.html do + if params[:namespace_id].present? + @namespace = Namespace.find_by_id(params[:namespace_id]) + + render_404 unless current_user.can?(:create_projects, @namespace) + end + end + end end - # rubocop:enable Lint/UselessMethodDefinition protected @@ -61,7 +76,6 @@ class Import::GiteaController < Import::GithubController @client_repos ||= filtered(client.repos) end - override :client def client @client ||= Gitlab::LegacyGithubImport::Client.new(session[access_token_key], **client_options) end @@ -78,7 +92,7 @@ class Import::GiteaController < Import::GithubController provider_url, allow_localhost: allow_local_requests?, allow_local_network: allow_local_requests?, - schemes: %w(http https) + schemes: %w[http https] ) rescue Gitlab::UrlBlocker::BlockedUrlError => e session[access_token_key] = nil diff --git a/app/controllers/import/github_controller.rb b/app/controllers/import/github_controller.rb index 92763e09ba3..cb58b5974ca 100644 --- a/app/controllers/import/github_controller.rb +++ b/app/controllers/import/github_controller.rb @@ -15,6 +15,8 @@ class Import::GithubController < Import::BaseController rescue_from Octokit::TooManyRequests, with: :provider_rate_limit rescue_from Gitlab::GithubImport::RateLimitError, with: :rate_limit_threshold_exceeded + delegate :client, to: :client_proxy, private: true + PAGE_LENGTH = 25 def new @@ -46,7 +48,22 @@ class Import::GithubController < Import::BaseController # Improving in https://gitlab.com/gitlab-org/gitlab-foss/issues/55585 client_repos - super + respond_to do |format| + format.json do + render json: { imported_projects: serialized_imported_projects, + provider_repos: serialized_provider_repos, + incompatible_repos: serialized_incompatible_repos, + page_info: client_repos_response[:page_info] } + end + + format.html do + if params[:namespace_id].present? + @namespace = Namespace.find_by_id(params[:namespace_id]) + + render_404 unless current_user.can?(:create_projects, @namespace) + end + end + end end def create @@ -126,24 +143,18 @@ class Import::GithubController < Import::BaseController end end - def client - @client ||= if Feature.enabled?(:remove_legacy_github_client) - Gitlab::GithubImport::Client.new(session[access_token_key]) - else - Gitlab::LegacyGithubImport::Client.new(session[access_token_key], **client_options) - end + def client_proxy + @client_proxy ||= Gitlab::GithubImport::Clients::Proxy.new( + session[access_token_key], client_options + ) + end + + def client_repos_response + @client_repos_response ||= client_proxy.repos(sanitized_filter_param, pagination_options) end def client_repos - @client_repos ||= if Feature.enabled?(:remove_legacy_github_client) - if sanitized_filter_param - client.search_repos_by_name(sanitized_filter_param, pagination_options)[:items] - else - client.repos(pagination_options) - end - else - filtered(client.repos) - end + client_repos_response[:repos] end def sanitized_filter_param @@ -213,6 +224,11 @@ class Import::GithubController < Import::BaseController def pagination_options { + before: params[:before].presence, + after: params[:after].presence, + first: PAGE_LENGTH, + # TODO: remove after rollout FF github_client_fetch_repos_via_graphql + # https://gitlab.com/gitlab-org/gitlab/-/issues/385649 page: [1, params[:page].to_i].max, per_page: PAGE_LENGTH } |