123456789101112131415161718192021222324252627282930313233343536373839 |
- from django.conf import settings
- from django.utils.translation import ugettext_lazy as _
- from misago import messages
- from misago.admin import ADMIN_PATH
- from misago.template.theme import reset_theme
- from misago.apps.errors import error403, error404
- from misago.apps.signin.views import signin
- class FirewallForum(object):
- admin = False
- prefix = ''
- def behind_firewall(self, path):
- """
- Firewall test, it checks if requested path is behind firewall
- """
- return path[:len(self.prefix)] == self.prefix
- def process_view(self, request, callback, callback_args, callback_kwargs):
- return None
- class FirewallAdmin(FirewallForum):
- admin = True
- prefix = '/' + ADMIN_PATH
- def process_view(self, request, callback, callback_args, callback_kwargs):
- # Block all crawlers with 403
- if request.user.is_crawler():
- reset_theme()
- return error403(request)
- else:
- # If we are not authenticated or not admin, force us to sign in right way
- if not request.user.is_authenticated():
- return signin(request)
- elif not request.user.is_god() and not request.acl.acp.is_admin():
- request.messages.set_message(_("Your account does not have admin privileges"), messages.ERROR, 'security')
- return signin(request)
- return None
|