firewalls.py 1.4 KB

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