29 lines
677 B
Python
29 lines
677 B
Python
# dnsrecon-reduced/core/rate_limiter.py
|
|
|
|
import time
|
|
import redis
|
|
|
|
class GlobalRateLimiter:
|
|
def __init__(self, redis_client):
|
|
self.redis = redis_client
|
|
|
|
def is_rate_limited(self, key, limit, period):
|
|
"""
|
|
Check if a key is rate-limited.
|
|
"""
|
|
now = time.time()
|
|
key = f"rate_limit:{key}"
|
|
|
|
# Remove old timestamps
|
|
self.redis.zremrangebyscore(key, 0, now - period)
|
|
|
|
# Check the count
|
|
count = self.redis.zcard(key)
|
|
if count >= limit:
|
|
return True
|
|
|
|
# Add new timestamp
|
|
self.redis.zadd(key, {now: now})
|
|
self.redis.expire(key, period)
|
|
|
|
return False |