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:
Diffstat (limited to 'lib/gitlab/application_rate_limiter.rb')
-rw-r--r--lib/gitlab/application_rate_limiter.rb29
1 files changed, 4 insertions, 25 deletions
diff --git a/lib/gitlab/application_rate_limiter.rb b/lib/gitlab/application_rate_limiter.rb
index 12f1b15f820..d2a31938e89 100644
--- a/lib/gitlab/application_rate_limiter.rb
+++ b/lib/gitlab/application_rate_limiter.rb
@@ -1,37 +1,20 @@
# frozen_string_literal: true
module Gitlab
- # This class implements a simple rate limiter that can be used to throttle
+ # This module implements a simple rate limiter that can be used to throttle
# certain actions. Unlike Rack Attack and Rack::Throttle, which operate at
# the middleware level, this can be used at the controller or API level.
# See CheckRateLimit concern for usage.
- class ApplicationRateLimiter
+ module ApplicationRateLimiter
InvalidKeyError = Class.new(StandardError)
- def initialize(key, **options)
- @key = key
- @options = options
- end
-
- def throttled?
- self.class.throttled?(key, **options)
- end
-
- def threshold_value
- options[:threshold] || self.class.threshold(key)
- end
-
- def interval_value
- self.class.interval(key)
- end
-
class << self
# Application rate limits
#
# Threshold value can be either an Integer or a Proc
# in order to not evaluate it's value every time this method is called
# and only do that when it's needed.
- def rate_limits
+ def rate_limits # rubocop:disable Metrics/AbcSize
{
issues_create: { threshold: -> { application_settings.issues_create_limit }, interval: 1.minute },
notes_create: { threshold: -> { application_settings.notes_create_limit }, interval: 1.minute },
@@ -49,7 +32,7 @@ module Gitlab
group_testing_hook: { threshold: 5, interval: 1.minute },
profile_add_new_email: { threshold: 5, interval: 1.minute },
web_hook_calls: { interval: 1.minute },
- users_get_by_id: { threshold: 10, interval: 1.minute },
+ users_get_by_id: { threshold: -> { application_settings.users_get_by_id_limit }, interval: 10.minutes },
username_exists: { threshold: 20, interval: 1.minute },
user_sign_up: { threshold: 20, interval: 1.minute },
profile_resend_email_confirmation: { threshold: 5, interval: 1.minute },
@@ -201,9 +184,5 @@ module Gitlab
scoped_user.username.downcase.in?(users_allowlist)
end
end
-
- private
-
- attr_reader :key, :options
end
end