firewalls.py 1.4 KB

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