bruteforce.py 1.0 KB

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