firewalls.py 1.4 KB

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