mirror of
https://github.com/discourse/discourse.git
synced 2025-02-20 18:58:10 +00:00
small refactor of RateLimiter for clarity
This commit is contained in:
parent
c9fcee8490
commit
247a0b3ea1
@ -21,18 +21,11 @@ class RateLimiter
|
|||||||
end
|
end
|
||||||
|
|
||||||
def can_perform?
|
def can_perform?
|
||||||
return true if RateLimiter.disabled?
|
rate_unlimited? || is_under_limit?
|
||||||
return true if @user.staff?
|
|
||||||
|
|
||||||
result = $redis.get(@key)
|
|
||||||
return true if result.blank?
|
|
||||||
return true if result.to_i < @max
|
|
||||||
false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def performed!
|
def performed!
|
||||||
return if RateLimiter.disabled?
|
return if rate_unlimited?
|
||||||
return if @user.staff?
|
|
||||||
|
|
||||||
result = $redis.incr(@key).to_i
|
result = $redis.incr(@key).to_i
|
||||||
$redis.expire(@key, @secs) if result == 1
|
$redis.expire(@key, @secs) if result == 1
|
||||||
@ -50,4 +43,13 @@ class RateLimiter
|
|||||||
$redis.decr(@key)
|
$redis.decr(@key)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def is_under_limit?
|
||||||
|
$redis.get(@key).to_i < @max
|
||||||
|
end
|
||||||
|
|
||||||
|
def rate_unlimited?
|
||||||
|
!!(RateLimiter.disabled? || @user.staff?)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user