28 lines
		
	
	
		
			664 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			664 B
		
	
	
	
		
			Python
		
	
	
	
	
	
# dnsrecon-reduced/core/rate_limiter.py
 | 
						|
 | 
						|
import time
 | 
						|
 | 
						|
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 |