diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-09 15:09:09 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-09 15:09:09 +0300 |
commit | 7ce86c261b3f910cf17b0b47a4200847578947df (patch) | |
tree | 20665e6a2b836f9ab38ba86680fa39ba33a04f21 /lib/gitlab | |
parent | 54573816ab79fac6716d1a1eae8c0da602765774 (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.yml | 1 | ||||
-rw-r--r-- | lib/gitlab/ci/templates/Terraform/Base.latest.gitlab-ci.yml | 1 | ||||
-rw-r--r-- | lib/gitlab/database/migration_helpers/cascading_namespace_settings.rb | 12 | ||||
-rw-r--r-- | lib/gitlab/metrics/subscribers/rack_attack.rb | 3 | ||||
-rw-r--r-- | lib/gitlab/rack_attack.rb | 12 | ||||
-rw-r--r-- | lib/gitlab/rack_attack/request.rb | 21 | ||||
-rw-r--r-- | lib/gitlab/throttle.rb | 14 | ||||
-rw-r--r-- | lib/gitlab/tracking.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/usage_data_counters/known_events/common.yml | 1 |
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 |