def get_cache_key(self, request, view): # Find the client ID associated with the access token. client_id, rate_limit_model = get_token_info(str(request.auth)) if client_id and rate_limit_model == self.applies_to_rate_limit_model: ident = client_id else: # Don't throttle invalid tokens; leave that to the anonymous # throttlers. Don't throttle enhanced rate limit tokens either. return None return self.cache_format % {'scope': self.scope, 'ident': ident}
def get_cache_key(self, request, view): # Do not throttle requests with a valid access token. if request.auth: client_id, _ = get_token_info(str(request.auth)) if client_id: return None return self.cache_format % { 'scope': self.scope, 'ident': self.get_ident(request) }
def get_cache_key(self, request, view): if _from_internal_network(self.get_ident(request)): return None # Do not throttle requests with a valid access token. if request.auth: client_id, _, verified = get_token_info(str(request.auth)) if client_id and verified: return None return self.cache_format % { 'scope': self.scope, 'ident': self.get_ident(request) }
def get(self, request, format=None): if not request.auth: return Response(status=403, data='Forbidden') access_token = str(request.auth) client_id, rate_limit_model, verified = get_token_info(access_token) if not client_id: return Response(status=403, data='Forbidden') throttle_type = rate_limit_model throttle_key = 'throttle_{scope}_{client_id}' if throttle_type == 'standard': sustained_throttle_key = throttle_key.format( scope='oauth2_client_credentials_sustained', client_id=client_id ) burst_throttle_key = throttle_key.format( scope='oauth2_client_credentials_burst', client_id=client_id ) elif throttle_type == 'enhanced': sustained_throttle_key = throttle_key.format( scope='enhanced_oauth2_client_credentials_sustained', client_id=client_id ) burst_throttle_key = throttle_key.format( scope='enhanced_oauth2_client_credentials_burst', client_id=client_id ) else: return Response(status=500, data='Unknown API key rate limit type') sustained_requests_list = cache.get(sustained_throttle_key) sustained_requests = \ len(sustained_requests_list) if sustained_requests_list else None burst_requests_list = cache.get(burst_throttle_key) burst_requests = \ len(burst_requests_list) if burst_requests_list else None response_data = { 'requests_this_minute': burst_requests, 'requests_today': sustained_requests, 'rate_limit_model': throttle_type, 'verified': verified } return Response(status=200, data=response_data)