mirror of
https://github.com/discourse/discourse.git
synced 2025-01-08 03:34:15 +08:00
41 lines
1.0 KiB
Ruby
41 lines
1.0 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module RequestTracker
|
||
|
module RateLimiters
|
||
|
class Base
|
||
|
# :nodoc:
|
||
|
def initialize(request, cookie)
|
||
|
@request = request
|
||
|
@cookie = cookie
|
||
|
end
|
||
|
|
||
|
# This method is meant to be implemented in subclasses.
|
||
|
#
|
||
|
# @return [String] The key used to identify the rate limiter.
|
||
|
def rate_limit_key
|
||
|
raise NotImplementedError
|
||
|
end
|
||
|
|
||
|
# :nodoc:
|
||
|
def error_code_identifier
|
||
|
self.class.name.underscore.split("/").last
|
||
|
end
|
||
|
|
||
|
# This method is meant to be implemented in subclasses.
|
||
|
#
|
||
|
# @return [Boolean] Indicates if the rate limiter should be used for the request.
|
||
|
def active?
|
||
|
raise NotImplementedError
|
||
|
end
|
||
|
|
||
|
# This method is meant to be implemented in subclasses.
|
||
|
#
|
||
|
# @return [Boolean] Indicates whether the rate limit applies globally across all sites in the cluster or just for
|
||
|
# the current site.
|
||
|
def rate_limit_globally?
|
||
|
raise NotImplementedError
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|