firewalls.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. from django.conf import settings
  2. from django.utils.translation import ugettext_lazy as _
  3. from misago.admin import ADMIN_PATH
  4. from misago.messages import Message
  5. from misago.shared.views import error403, error404, signin
  6. class FirewallForum(object):
  7. admin = False
  8. prefix = ''
  9. def behind_firewall(self, path):
  10. """
  11. Firewall test, it checks if requested path is behind firewall
  12. """
  13. return path[:len(self.prefix)] == self.prefix
  14. def process_view(self, request, callback, callback_args, callback_kwargs):
  15. return None
  16. class FirewallAdmin(FirewallForum):
  17. admin = True
  18. prefix = '/' + ADMIN_PATH
  19. def process_view(self, request, callback, callback_args, callback_kwargs):
  20. # Block all crawlers with 403
  21. if request.user.is_crawler():
  22. request.theme.reset_theme()
  23. return error403(request)
  24. else:
  25. # If we are not authenticated or not admin, force us to sign in right way
  26. if not request.user.is_authenticated():
  27. return signin(request)
  28. elif not request.user.is_god() and not request.acl.admin.is_admin():
  29. request.messages.set_message(Message(_("Your account does not have admin privileges")), 'error', 'security')
  30. return signin(request)
  31. return None