django-misery / django_misery /

import logging
from random import randint
from time import sleep
from django.http import HttpResponseForbidden
from django.http import HttpResponse
from django.http import Http404
from django.core.exceptions import PermissionDenied
from django.contrib.auth import logout
from django.shortcuts import render_to_response

from django.db import models
from models import MiseryIP

from django.conf import settings

logger = logging.getLogger('django_misery')

slowBanStrength = getattr(settings, 'MISERY_SLOW_STRENGTH', '6')
logoutProbability = getattr(settings, 'MISERY_LOGOUT_PROBABILITY', '10')
e403Probability = getattr(settings, 'MISERY_403_PROBABILITY', '10')
e404Probability = getattr(settings, 'MISERY_404_PROBABILITY', '10')
whiteScreenProbability = getattr(settings, 'MISERY_WHITE_SCREEN_PROBABILITY', '20')
ASPdeathProbability = getattr(settings, 'MISERY_ASP_ERROR_PROBABILITY', '20')

class miserize(object):
    def process_request(self, request):
        user = request.user
        ip = request.META['REMOTE_ADDR']

        is_miserized = MiseryIP.objects.filter(ip=ip).count() > 0

        if is_miserized:
            # unleash the wrath
            sleep(randint(int(slowBanStrength), 2*int(slowBanStrength)))

            miserize.luck = randint(0, 100)
            def out_of_luck(probability):
                miserize.luck -= int(probability)
                return miserize.luck <= 0

            if out_of_luck(logoutProbability):
            elif out_of_luck(e403Probability):
                raise PermissionDenied
            elif out_of_luck(e404Probability):
                raise Http404
            elif out_of_luck(whiteScreenProbability):
                return HttpResponse("")
            elif out_of_luck(ASPdeathProbability):
                return render_to_response('django_misery/ASPerror.html')
            # else leave him alone, the poor pal
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.