diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-10-20 08:43:02 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-10-20 08:43:02 +0000 |
commit | d9ab72d6080f594d0b3cae15f14b3ef2c6c638cb (patch) | |
tree | 2341ef426af70ad1e289c38036737e04b0aa5007 /app/controllers/projects | |
parent | d6e514dd13db8947884cd58fe2a9c2a063400a9b (diff) | |
download | gitlab-ce-d9ab72d6080f594d0b3cae15f14b3ef2c6c638cb.tar.gz |
Add latest changes from gitlab-org/gitlab@14-4-stable-eev14.4.0-rc42
Diffstat (limited to 'app/controllers/projects')
21 files changed, 113 insertions, 31 deletions
diff --git a/app/controllers/projects/alerting/notifications_controller.rb b/app/controllers/projects/alerting/notifications_controller.rb index db5d91308db..95b403faf55 100644 --- a/app/controllers/projects/alerting/notifications_controller.rb +++ b/app/controllers/projects/alerting/notifications_controller.rb @@ -3,6 +3,8 @@ module Projects module Alerting class NotificationsController < Projects::ApplicationController + include ActionController::HttpAuthentication::Basic + respond_to :json skip_before_action :verify_authenticity_token @@ -27,9 +29,19 @@ module Projects end def extract_alert_manager_token(request) + extract_bearer_token(request) || extract_basic_auth_token(request) + end + + def extract_bearer_token(request) Doorkeeper::OAuth::Token.from_bearer_authorization(request) end + def extract_basic_auth_token(request) + _username, token = user_name_and_password(request) + + token + end + def notify_service notify_service_class.new(project, notification_payload) end diff --git a/app/controllers/projects/badges_controller.rb b/app/controllers/projects/badges_controller.rb index f75ab5cdbf2..0cd59c136e5 100644 --- a/app/controllers/projects/badges_controller.rb +++ b/app/controllers/projects/badges_controller.rb @@ -24,7 +24,10 @@ class Projects::BadgesController < Projects::ApplicationController .new(project, params[:ref], opts: { job: params[:job], key_text: params[:key_text], - key_width: params[:key_width] + key_width: params[:key_width], + min_good: params[:min_good], + min_acceptable: params[:min_acceptable], + min_medium: params[:min_medium] }) render_badge coverage_report diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb index acf6b6116b8..17fd28ee06a 100644 --- a/app/controllers/projects/blob_controller.rb +++ b/app/controllers/projects/blob_controller.rb @@ -43,6 +43,7 @@ class Projects::BlobController < Projects::ApplicationController before_action do push_frontend_feature_flag(:refactor_blob_viewer, @project, default_enabled: :yaml) + push_frontend_feature_flag(:refactor_text_viewer, @project, default_enabled: :yaml) push_frontend_feature_flag(:consolidated_edit_button, @project, default_enabled: :yaml) push_licensed_feature(:file_locks) if @project.licensed_feature_available?(:file_locks) end diff --git a/app/controllers/projects/boards_controller.rb b/app/controllers/projects/boards_controller.rb index 316582f3994..834e4baa7dd 100644 --- a/app/controllers/projects/boards_controller.rb +++ b/app/controllers/projects/boards_controller.rb @@ -11,6 +11,7 @@ class Projects::BoardsController < Projects::ApplicationController push_frontend_feature_flag(:issue_boards_filtered_search, project, default_enabled: :yaml) push_frontend_feature_flag(:board_multi_select, project, default_enabled: :yaml) push_frontend_feature_flag(:iteration_cadences, project&.group, default_enabled: :yaml) + push_frontend_feature_flag(:labels_widget, project, default_enabled: :yaml) end feature_category :boards diff --git a/app/controllers/projects/branches_controller.rb b/app/controllers/projects/branches_controller.rb index 3be10559e80..b75effc52d1 100644 --- a/app/controllers/projects/branches_controller.rb +++ b/app/controllers/projects/branches_controller.rb @@ -33,6 +33,11 @@ class Projects::BranchesController < Projects::ApplicationController Gitlab::GitalyClient.allow_n_plus_1_calls do render end + rescue Gitlab::Git::CommandError => e + Gitlab::ErrorTracking.track_exception(e) + + @gitaly_unavailable = true + render end format.json do branches = BranchesFinder.new(@repository, params).execute diff --git a/app/controllers/projects/ci/daily_build_group_report_results_controller.rb b/app/controllers/projects/ci/daily_build_group_report_results_controller.rb index fee216da492..b2b5e096105 100644 --- a/app/controllers/projects/ci/daily_build_group_report_results_controller.rb +++ b/app/controllers/projects/ci/daily_build_group_report_results_controller.rb @@ -4,7 +4,7 @@ class Projects::Ci::DailyBuildGroupReportResultsController < Projects::Applicati before_action :authorize_read_build_report_results! before_action :validate_param_type! - feature_category :continuous_integration + feature_category :code_testing def index respond_to do |format| diff --git a/app/controllers/projects/ci/pipeline_editor_controller.rb b/app/controllers/projects/ci/pipeline_editor_controller.rb index 550877548e1..22cd247644d 100644 --- a/app/controllers/projects/ci/pipeline_editor_controller.rb +++ b/app/controllers/projects/ci/pipeline_editor_controller.rb @@ -3,8 +3,7 @@ class Projects::Ci::PipelineEditorController < Projects::ApplicationController before_action :check_can_collaborate! before_action do - push_frontend_feature_flag(:pipeline_editor_empty_state_action, @project, default_enabled: :yaml) - push_frontend_feature_flag(:pipeline_editor_drawer, @project, default_enabled: :yaml) + push_frontend_feature_flag(:pipeline_editor_mini_graph, @project, default_enabled: :yaml) push_frontend_feature_flag(:schema_linting, @project, default_enabled: :yaml) end diff --git a/app/controllers/projects/cluster_agents_controller.rb b/app/controllers/projects/cluster_agents_controller.rb new file mode 100644 index 00000000000..e7fbe93131d --- /dev/null +++ b/app/controllers/projects/cluster_agents_controller.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class Projects::ClusterAgentsController < Projects::ApplicationController + before_action :authorize_can_read_cluster_agent! + + feature_category :kubernetes_management + + def show + @agent_name = params[:name] + end + + private + + def authorize_can_read_cluster_agent! + return if can?(current_user, :admin_cluster, project) + + access_denied! + end +end diff --git a/app/controllers/projects/google_cloud_controller.rb b/app/controllers/projects/google_cloud_controller.rb new file mode 100644 index 00000000000..d185457aeb3 --- /dev/null +++ b/app/controllers/projects/google_cloud_controller.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class Projects::GoogleCloudController < Projects::ApplicationController + before_action :authorize_can_manage_google_cloud_deployments! + + feature_category :release_orchestration + + def index + end + + private + + def authorize_can_manage_google_cloud_deployments! + access_denied! unless can?(current_user, :manage_project_google_cloud, project) + end +end diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index f885ff9b45b..fd508d5f127 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -37,7 +37,7 @@ class Projects::IssuesController < Projects::ApplicationController before_action :authorize_download_code!, only: [:related_branches] # Limit the amount of issues created per minute - before_action :create_rate_limit, only: [:create] + before_action :create_rate_limit, only: [:create], if: -> { Feature.disabled?('rate_limited_service_issues_create', project, default_enabled: :yaml) } before_action do push_frontend_feature_flag(:tribute_autocomplete, @project) diff --git a/app/controllers/projects/jobs_controller.rb b/app/controllers/projects/jobs_controller.rb index 778623a05c6..994be5c2b5c 100644 --- a/app/controllers/projects/jobs_controller.rb +++ b/app/controllers/projects/jobs_controller.rb @@ -44,7 +44,7 @@ class Projects::JobsController < Projects::ApplicationController render json: BuildSerializer .new(project: @project, current_user: @current_user) - .represent(@build, {}, BuildDetailsEntity) + .represent(@build.present(current_user: current_user), {}, BuildDetailsEntity) end end end @@ -120,7 +120,7 @@ class Projects::JobsController < Projects::ApplicationController def status render json: BuildSerializer .new(project: @project, current_user: @current_user) - .represent_status(@build) + .represent_status(@build.present(current_user: current_user)) end def erase @@ -225,7 +225,6 @@ class Projects::JobsController < Projects::ApplicationController def find_job_as_build @build = project.builds.find(params[:id]) - .present(current_user: current_user) end def find_job_as_processable diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index cb68aaf4583..46df514abcb 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -37,10 +37,10 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo push_frontend_feature_flag(:core_security_mr_widget_counts, @project) push_frontend_feature_flag(:paginated_notes, @project, default_enabled: :yaml) push_frontend_feature_flag(:confidential_notes, @project, default_enabled: :yaml) - push_frontend_feature_flag(:usage_data_i_testing_summary_widget_total, @project, default_enabled: :yaml) push_frontend_feature_flag(:improved_emoji_picker, project, default_enabled: :yaml) push_frontend_feature_flag(:diffs_virtual_scrolling, project, default_enabled: :yaml) push_frontend_feature_flag(:restructured_mr_widget, project, default_enabled: :yaml) + push_frontend_feature_flag(:mr_changes_fluid_layout, project, default_enabled: :yaml) # Usage data feature flags push_frontend_feature_flag(:users_expanding_widgets_usage_data, @project, default_enabled: :yaml) @@ -192,15 +192,17 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo Gitlab::PollingInterval.set_header(response, interval: 10_000) - render json: { - pipelines: PipelineSerializer - .new(project: @project, current_user: @current_user) - .with_pagination(request, response) - .represent(@pipelines), - count: { - all: @pipelines.count + ::Gitlab::Database.allow_cross_joins_across_databases(url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/336891') do + render json: { + pipelines: PipelineSerializer + .new(project: @project, current_user: @current_user) + .with_pagination(request, response) + .represent(@pipelines), + count: { + all: @pipelines.count + } } - } + end end def sast_reports diff --git a/app/controllers/projects/packages/packages_controller.rb b/app/controllers/projects/packages/packages_controller.rb index 5de71466c10..dd7c2ad3cbd 100644 --- a/app/controllers/projects/packages/packages_controller.rb +++ b/app/controllers/projects/packages/packages_controller.rb @@ -7,6 +7,10 @@ module Projects feature_category :package_registry + before_action do + push_frontend_feature_flag(:package_list_apollo, default_enabled: :yaml) + end + def show @package = project.packages.find(params[:id]) end diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb index b979276437c..e8074f7d793 100644 --- a/app/controllers/projects/project_members_controller.rb +++ b/app/controllers/projects/project_members_controller.rb @@ -19,16 +19,12 @@ class Projects::ProjectMembersController < Projects::ApplicationController @group_links = @project.project_group_links @group_links = @group_links.search(params[:search_groups]) if params[:search_groups].present? - project_members = MembersFinder - .new(@project, current_user, params: filter_params) - .execute(include_relations: requested_relations) - if can?(current_user, :admin_project_member, @project) - @invited_members = present_members(project_members.invite) + @invited_members = present_members(invited_members) @requesters = present_members(AccessRequestsFinder.new(@project).execute(current_user)) end - @project_members = present_members(project_members.non_invite.page(params[:page])) + @project_members = present_members(non_invited_members.page(params[:page])) @project_member = @project.project_members.new end @@ -55,6 +51,20 @@ class Projects::ProjectMembersController < Projects::ApplicationController private + def members + @members ||= MembersFinder + .new(@project, current_user, params: filter_params) + .execute(include_relations: requested_relations) + end + + def invited_members + members.invite.with_invited_user_state + end + + def non_invited_members + members.non_invite + end + def filter_params params.permit(:search).merge(sort: @sort) end diff --git a/app/controllers/projects/registry/repositories_controller.rb b/app/controllers/projects/registry/repositories_controller.rb index 8acebd89033..ad3b2bc98e7 100644 --- a/app/controllers/projects/registry/repositories_controller.rb +++ b/app/controllers/projects/registry/repositories_controller.rb @@ -4,6 +4,7 @@ module Projects module Registry class RepositoriesController < ::Projects::Registry::ApplicationController include PackagesHelper + include ::Registry::ConnectionErrorsHandler before_action :authorize_update_container_image!, only: [:destroy] @@ -48,8 +49,6 @@ module Projects repository.save! if repository.has_tags? end end - rescue ContainerRegistry::Path::InvalidRegistryPathError - @character_error = true end end end diff --git a/app/controllers/projects/security/configuration_controller.rb b/app/controllers/projects/security/configuration_controller.rb index 19de157357a..444f4783a19 100644 --- a/app/controllers/projects/security/configuration_controller.rb +++ b/app/controllers/projects/security/configuration_controller.rb @@ -5,7 +5,7 @@ module Projects class ConfigurationController < Projects::ApplicationController include SecurityAndCompliancePermissions - feature_category :static_application_security_testing + feature_category :static_application_security_testing, [:show] def show render_403 unless can?(current_user, :read_security_configuration, project) diff --git a/app/controllers/projects/serverless/functions_controller.rb b/app/controllers/projects/serverless/functions_controller.rb index 4168880001c..3fc379a135a 100644 --- a/app/controllers/projects/serverless/functions_controller.rb +++ b/app/controllers/projects/serverless/functions_controller.rb @@ -5,7 +5,7 @@ module Projects class FunctionsController < Projects::ApplicationController before_action :authorize_read_cluster! - feature_category :serverless + feature_category :not_owned def index respond_to do |format| diff --git a/app/controllers/projects/settings/ci_cd_controller.rb b/app/controllers/projects/settings/ci_cd_controller.rb index 960c0beb244..3033dac8246 100644 --- a/app/controllers/projects/settings/ci_cd_controller.rb +++ b/app/controllers/projects/settings/ci_cd_controller.rb @@ -25,6 +25,11 @@ module Projects @project.triggers, current_user: current_user, project: @project ).to_json end + + # @assignable_runners is using ci_owned_runners + ::Gitlab::Database.allow_cross_joins_across_databases(url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/336436') do + render + end end def update diff --git a/app/controllers/projects/tags_controller.rb b/app/controllers/projects/tags_controller.rb index 94b0473e1f3..02d36c3353d 100644 --- a/app/controllers/projects/tags_controller.rb +++ b/app/controllers/projects/tags_controller.rb @@ -18,17 +18,21 @@ class Projects::TagsController < Projects::ApplicationController params[:sort] = params[:sort].presence || sort_value_recently_updated @sort = params[:sort] - @tags = TagsFinder.new(@repository, params).execute - @tags = Kaminari.paginate_array(@tags).page(params[:page]) + @tags, @tags_loading_error = TagsFinder.new(@repository, params).execute + + @tags = Kaminari.paginate_array(@tags).page(params[:page]) tag_names = @tags.map(&:name) @tags_pipelines = @project.ci_pipelines.latest_successful_for_refs(tag_names) + @releases = project.releases.where(tag: tag_names) @tag_pipeline_statuses = Ci::CommitStatusesFinder.new(@project, @repository, current_user, @tags).execute respond_to do |format| - format.html - format.atom { render layout: 'xml.atom' } + status = @tags_loading_error ? :service_unavailable : :ok + + format.html { render status: status } + format.atom { render layout: 'xml.atom', status: status } end end # rubocop: enable CodeReuse/ActiveRecord diff --git a/app/controllers/projects/tree_controller.rb b/app/controllers/projects/tree_controller.rb index 6fd4c632dd3..a76d45411dd 100644 --- a/app/controllers/projects/tree_controller.rb +++ b/app/controllers/projects/tree_controller.rb @@ -16,7 +16,9 @@ class Projects::TreeController < Projects::ApplicationController before_action :authorize_edit_tree!, only: [:create_dir] before_action do + push_frontend_feature_flag(:lazy_load_commits, @project, default_enabled: :yaml) push_frontend_feature_flag(:paginated_tree_graphql_query, @project, default_enabled: :yaml) + push_frontend_feature_flag(:new_dir_modal, @project, default_enabled: :yaml) end feature_category :source_code_management diff --git a/app/controllers/projects/usage_quotas_controller.rb b/app/controllers/projects/usage_quotas_controller.rb index 179c7fc8db1..103e1cc596a 100644 --- a/app/controllers/projects/usage_quotas_controller.rb +++ b/app/controllers/projects/usage_quotas_controller.rb @@ -9,6 +9,7 @@ class Projects::UsageQuotasController < Projects::ApplicationController feature_category :utilization def index + @hide_search_settings = true @storage_app_data = { project_path: @project.full_path, usage_quotas_help_page_path: help_page_path('user/usage_quotas'), |