bruteforce.py 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. from datetime import timedelta
  2. from django.utils import timezone
  3. from misago.conf import settings
  4. from misago.models import SignInAttempt
  5. class JamCache(object):
  6. def __init__(self):
  7. self.jammed = False
  8. self.expires = timezone.now()
  9. def check_for_updates(self, request):
  10. if self.expires < timezone.now():
  11. self.jammed = SignInAttempt.objects.is_jammed(request.session.get_ip(request))
  12. self.expires = timezone.now() + timedelta(minutes=settings.jams_lifetime)
  13. return True
  14. return False
  15. def is_jammed(self):
  16. return self.jammed
  17. class JamMiddleware(object):
  18. def process_request(self, request):
  19. if request.user.is_crawler():
  20. return None
  21. try:
  22. request.jam = request.session['jam']
  23. except KeyError:
  24. request.jam = JamCache()
  25. request.session['jam'] = request.jam
  26. if not request.firewall.admin:
  27. request.jam.check_for_updates(request)