Beispiel #1
0
    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}
Beispiel #2
0
    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)
        }
Beispiel #3
0
    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)
        }
Beispiel #4
0
    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)