示例#1
0
def see_remaining_limits(request):
    usage=get_usage(request, fn=call_api, key='post:username', rate='5/m', method=['POST'])
    count=usage['count']
    res=300-count
    if res<0:
        res=0
    return HttpResponse(res)
示例#2
0
 def wrapper(request, *args, **kwargs):
     if not settings.DEBUG:
         block_info = get_usage(request,
                                key="ip",
                                fn=func,
                                rate="2/10s",
                                increment=True)
         print("Block_info: {}".format(block_info))
         if block_info['should_limit']:
             raise Ratelimited()
     tacking_info(request)
     return func(request, *args, **kwargs)
示例#3
0
    def get(self, request, format=None):

        model = models.Usercache
        auth = request.META['HTTP_AUTHORIZATION'][6:]

        #For first use of service or when hour limit has expired, create new hour limit cache
        if (models.Usercache.objects.filter(userkey=auth).exists() == False):
            new_entry = models.Usercache()
            new_entry.userkey = auth
            new_entry.limit = 5
            new_entry.hour_limit = 100
            new_entry.save()
            cache.set(auth, 100, 3600)

        #Get usage stats of the minute cache
        min = get_usage(request,
                        group='Rate.views.RandomGen',
                        fn=None,
                        key='header:http-authorization',
                        rate='5/m',
                        method='GET',
                        increment=True)
        print("Minutly usage", min)

        if (min['should_limit'] == False):
            catch = models.CacheTable.objects.filter(cache_key=auth).values()
            print(list(catch))
            if (list(catch)[0]['expires'] >= datetime.datetime.now(
                    datetime.timezone.utc)):
                #If cache has not expired
                userfield = models.Usercache.objects.get(userkey=auth)
                userlimit = userfield.hour_limit
                if (userlimit > 0):
                    newuserlimit = userlimit - 1
                    userfield.hour_limit = newuserlimit
                    userfield.save()
                    num = RandomGen.dorandomgen()
                    return HttpResponse(num['Random'])
                else:
                    return HttpResponse(
                        "Limit for the hour reached.Please try again later",
                        status=403)

            else:
                #If cache has expired
                models.Usercache.objects.filter(userkey=auth).delete()
                num = RandomGen.dorandomgen()
                return HttpResponse(num['Random'])
        else:
            return HttpResponse("Sorry, You have exceeded your burst limit",
                                status=403)
示例#4
0
def generate_rand_no(request):
    rand_no = random.randint(1, 9999)
    count = get_usage(request,
                      group=None,
                      fn=generate_rand_no,
                      key='post:username',
                      method='GET',
                      rate='5/m',
                      increment=True)
    request.session['limit'] = 5 - count['count']
    request.session['hits'] = count['count']
    if request.session['limit'] == 4:
        time = datetime.now()
        request.session['time'] = time.__str__()
        request.session['after'] = (time + timedelta(hours=1)).__str__()
    return render(request, 'random_no.html', {
        'randomnumber': rand_no,
    })
示例#5
0
 def test_get_usage_called_without_group_or_fn(self):
     with self.assertRaises(ImproperlyConfigured):
         get_usage(rf.get('/'), key='ip')
示例#6
0
 def test_get_usage_called_without_group_or_fn(self):
     with self.assertRaises(ImproperlyConfigured):
         get_usage(rf.get('/'), key='ip')