firewalls.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. from django.conf import settings
  2. from misago.admin import ADMIN_PATH
  3. from misago.views import error403, error404
  4. from misago.auth.views import signin
  5. class FirewallForum(object):
  6. """
  7. Firewall Abstraction
  8. """
  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. request.theme.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. else:
  31. return None