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:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-09-09 15:09:09 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-09-09 15:09:09 +0300
commit7ce86c261b3f910cf17b0b47a4200847578947df (patch)
tree20665e6a2b836f9ab38ba86680fa39ba33a04f21 /lib/gitlab
parent54573816ab79fac6716d1a1eae8c0da602765774 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab')
-rw-r--r--lib/gitlab/ci/templates/Terraform/Base.gitlab-ci.yml1
-rw-r--r--lib/gitlab/ci/templates/Terraform/Base.latest.gitlab-ci.yml1
-rw-r--r--lib/gitlab/database/migration_helpers/cascading_namespace_settings.rb12
-rw-r--r--lib/gitlab/metrics/subscribers/rack_attack.rb3
-rw-r--r--lib/gitlab/rack_attack.rb12
-rw-r--r--lib/gitlab/rack_attack/request.rb21
-rw-r--r--lib/gitlab/throttle.rb14
-rw-r--r--lib/gitlab/tracking.rb2
-rw-r--r--lib/gitlab/usage_data_counters/known_events/common.yml1
9 files changed, 54 insertions, 13 deletions
diff --git a/lib/gitlab/ci/templates/Terraform/Base.gitlab-ci.yml b/lib/gitlab/ci/templates/Terraform/Base.gitlab-ci.yml
index 39c3374e534..e696c75253e 100644
--- a/lib/gitlab/ci/templates/Terraform/Base.gitlab-ci.yml
+++ b/lib/gitlab/ci/templates/Terraform/Base.gitlab-ci.yml
@@ -20,7 +20,6 @@ cache:
key: "${TF_ROOT}"
paths:
- ${TF_ROOT}/.terraform/
- - ${TF_ROOT}/.terraform.lock.hcl
.init: &init
stage: init
diff --git a/lib/gitlab/ci/templates/Terraform/Base.latest.gitlab-ci.yml b/lib/gitlab/ci/templates/Terraform/Base.latest.gitlab-ci.yml
index b3cbf6a0b85..3a70e6bc4b8 100644
--- a/lib/gitlab/ci/templates/Terraform/Base.latest.gitlab-ci.yml
+++ b/lib/gitlab/ci/templates/Terraform/Base.latest.gitlab-ci.yml
@@ -20,7 +20,6 @@ cache:
key: "${TF_ROOT}"
paths:
- ${TF_ROOT}/.terraform/
- - ${TF_ROOT}/.terraform.lock.hcl
.terraform:init: &terraform_init
stage: init
diff --git a/lib/gitlab/database/migration_helpers/cascading_namespace_settings.rb b/lib/gitlab/database/migration_helpers/cascading_namespace_settings.rb
index eecf96acb30..d9ef5ab462e 100644
--- a/lib/gitlab/database/migration_helpers/cascading_namespace_settings.rb
+++ b/lib/gitlab/database/migration_helpers/cascading_namespace_settings.rb
@@ -31,10 +31,8 @@ module Gitlab
namespace_options = options.merge(null: true, default: nil)
- with_lock_retries do
- add_column(:namespace_settings, setting_name, type, namespace_options)
- add_column(:namespace_settings, lock_column_name, :boolean, default: false, null: false)
- end
+ add_column(:namespace_settings, setting_name, type, namespace_options)
+ add_column(:namespace_settings, lock_column_name, :boolean, default: false, null: false)
add_column(:application_settings, setting_name, type, options)
add_column(:application_settings, lock_column_name, :boolean, default: false, null: false)
@@ -43,10 +41,8 @@ module Gitlab
def remove_cascading_namespace_setting(setting_name)
lock_column_name = "lock_#{setting_name}".to_sym
- with_lock_retries do
- remove_column(:namespace_settings, setting_name) if column_exists?(:namespace_settings, setting_name)
- remove_column(:namespace_settings, lock_column_name) if column_exists?(:namespace_settings, lock_column_name)
- end
+ remove_column(:namespace_settings, setting_name) if column_exists?(:namespace_settings, setting_name)
+ remove_column(:namespace_settings, lock_column_name) if column_exists?(:namespace_settings, lock_column_name)
remove_column(:application_settings, setting_name) if column_exists?(:application_settings, setting_name)
remove_column(:application_settings, lock_column_name) if column_exists?(:application_settings, lock_column_name)
diff --git a/lib/gitlab/metrics/subscribers/rack_attack.rb b/lib/gitlab/metrics/subscribers/rack_attack.rb
index 7ee6649a3f0..ebd0d1634e7 100644
--- a/lib/gitlab/metrics/subscribers/rack_attack.rb
+++ b/lib/gitlab/metrics/subscribers/rack_attack.rb
@@ -21,7 +21,8 @@ module Gitlab
:throttle_authenticated_protected_paths_api,
:throttle_authenticated_protected_paths_web,
:throttle_authenticated_packages_api,
- :throttle_authenticated_git_lfs
+ :throttle_authenticated_git_lfs,
+ :throttle_authenticated_files_api
].freeze
PAYLOAD_KEYS = [
diff --git a/lib/gitlab/rack_attack.rb b/lib/gitlab/rack_attack.rb
index e913a4d583c..7db7da03925 100644
--- a/lib/gitlab/rack_attack.rb
+++ b/lib/gitlab/rack_attack.rb
@@ -145,6 +145,18 @@ module Gitlab
end
end
+ throttle_or_track(rack_attack, 'throttle_unauthenticated_files_api', Gitlab::Throttle.unauthenticated_files_api_options) do |req|
+ if req.throttle_unauthenticated_files_api?
+ req.ip
+ end
+ end
+
+ throttle_or_track(rack_attack, 'throttle_authenticated_files_api', Gitlab::Throttle.authenticated_files_api_options) do |req|
+ if req.throttle_authenticated_files_api?
+ req.throttled_user_id([:api])
+ end
+ end
+
rack_attack.safelist('throttle_bypass_header') do |req|
Gitlab::Throttle.bypass_header.present? &&
req.get_header(Gitlab::Throttle.bypass_header) == '1'
diff --git a/lib/gitlab/rack_attack/request.rb b/lib/gitlab/rack_attack/request.rb
index cfe5b6ca4ee..2f48e71a5cd 100644
--- a/lib/gitlab/rack_attack/request.rb
+++ b/lib/gitlab/rack_attack/request.rb
@@ -3,6 +3,8 @@
module Gitlab
module RackAttack
module Request
+ FILES_PATH_REGEX = %r{^/api/v\d+/projects/[^/]+/repository/files/.+}.freeze
+
def unauthenticated?
!(authenticated_user_id([:api, :rss, :ics]) || authenticated_runner_id)
end
@@ -61,6 +63,7 @@ module Gitlab
def throttle_unauthenticated?
!should_be_skipped? &&
!throttle_unauthenticated_packages_api? &&
+ !throttle_unauthenticated_files_api? &&
Gitlab::Throttle.settings.throttle_unauthenticated_enabled &&
unauthenticated?
end
@@ -68,6 +71,7 @@ module Gitlab
def throttle_authenticated_api?
api_request? &&
!throttle_authenticated_packages_api? &&
+ !throttle_authenticated_files_api? &&
Gitlab::Throttle.settings.throttle_authenticated_api_enabled
end
@@ -115,6 +119,19 @@ module Gitlab
Gitlab::Throttle.settings.throttle_authenticated_git_lfs_enabled
end
+ def throttle_unauthenticated_files_api?
+ files_api_path? &&
+ Feature.enabled?(:files_api_throttling, default_enabled: :yaml) &&
+ Gitlab::Throttle.settings.throttle_unauthenticated_files_api_enabled &&
+ unauthenticated?
+ end
+
+ def throttle_authenticated_files_api?
+ files_api_path? &&
+ Feature.enabled?(:files_api_throttling, default_enabled: :yaml) &&
+ Gitlab::Throttle.settings.throttle_authenticated_files_api_enabled
+ end
+
private
def authenticated_user_id(request_formats)
@@ -140,6 +157,10 @@ module Gitlab
def git_lfs_path?
path =~ Gitlab::PathRegex.repository_git_lfs_route_regex
end
+
+ def files_api_path?
+ path =~ FILES_PATH_REGEX
+ end
end
end
end
diff --git a/lib/gitlab/throttle.rb b/lib/gitlab/throttle.rb
index df2b3fbc1af..f1acea80eaf 100644
--- a/lib/gitlab/throttle.rb
+++ b/lib/gitlab/throttle.rb
@@ -70,6 +70,20 @@ module Gitlab
{ limit: limit_proc, period: period_proc }
end
+ def self.unauthenticated_files_api_options
+ limit_proc = proc { |req| settings.throttle_unauthenticated_files_api_requests_per_period }
+ period_proc = proc { |req| settings.throttle_unauthenticated_files_api_period_in_seconds.seconds }
+
+ { limit: limit_proc, period: period_proc }
+ end
+
+ def self.authenticated_files_api_options
+ limit_proc = proc { |req| settings.throttle_authenticated_files_api_requests_per_period }
+ period_proc = proc { |req| settings.throttle_authenticated_files_api_period_in_seconds.seconds }
+
+ { limit: limit_proc, period: period_proc }
+ end
+
def self.rate_limiting_response_text
(settings.rate_limiting_response_text.presence || DEFAULT_RATE_LIMITING_RESPONSE_TEXT) + "\n"
end
diff --git a/lib/gitlab/tracking.rb b/lib/gitlab/tracking.rb
index 5fb360296b7..f4fbea50515 100644
--- a/lib/gitlab/tracking.rb
+++ b/lib/gitlab/tracking.rb
@@ -18,7 +18,7 @@ module Gitlab
Gitlab::ErrorTracking.track_and_raise_for_dev_exception(error, snowplow_category: category, snowplow_action: action)
end
- def snowplow_options(group)
+ def options(group)
additional_features = Feature.enabled?(:additional_snowplow_tracking, group)
{
namespace: SNOWPLOW_NAMESPACE,
diff --git a/lib/gitlab/usage_data_counters/known_events/common.yml b/lib/gitlab/usage_data_counters/known_events/common.yml
index b95c77c4607..261d3b37783 100644
--- a/lib/gitlab/usage_data_counters/known_events/common.yml
+++ b/lib/gitlab/usage_data_counters/known_events/common.yml
@@ -175,7 +175,6 @@
category: testing
redis_slot: testing
aggregation: weekly
- feature_flag: usage_data_i_testing_load_performance_widget_total
- name: i_testing_metrics_report_artifact_uploaders
category: testing
redis_slot: testing