middleware.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from django.conf import settings
  2. from misago.security import get_random_string
  3. from misago.security.csrf import CSRFProtection
  4. from misago.security.firewalls import *
  5. from misago.security.models import JamCache
  6. from misago.themes.theme import Theme
  7. class FirewallMiddleware(object):
  8. firewall_admin = FirewallAdmin()
  9. firewall_forum = FirewallForum()
  10. def process_request(self, request):
  11. # Admin firewall test
  12. if settings.ADMIN_PATH and self.firewall_admin.behind_firewall(request.path_info):
  13. request.firewall = self.firewall_admin
  14. request.theme.set_theme('admin')
  15. else:
  16. request.firewall = self.firewall_forum
  17. def process_view(self, request, callback, callback_args, callback_kwargs):
  18. return request.firewall.process_view(request, callback, callback_args, callback_kwargs)
  19. class JamMiddleware(object):
  20. def process_request(self, request):
  21. if request.user.is_crawler():
  22. return None
  23. try:
  24. request.jam = request.session['jam']
  25. except KeyError:
  26. request.jam = JamCache()
  27. request.session['jam'] = request.jam
  28. if not request.firewall.admin:
  29. request.jam.check_for_updates(request)
  30. class CSRFMiddleware(object):
  31. def process_request(self, request):
  32. if request.user.is_crawler():
  33. return None
  34. if 'csrf_token' in request.session:
  35. csrf_token = request.session['csrf_token']
  36. else:
  37. csrf_token = get_random_string(16);
  38. request.session['csrf_token'] = csrf_token
  39. request.csrf = CSRFProtection(csrf_token)