decorators.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from django.core.exceptions import PermissionDenied
  2. from django.utils.translation import gettext_lazy as _
  3. from misago.users.bans import get_request_ip_ban
  4. def deny_authenticated(f):
  5. def decorator(request, *args, **kwargs):
  6. if request.user.is_authenticated():
  7. raise PermissionDenied(
  8. _("This page is not available to signed in users."))
  9. else:
  10. return f(request, *args, **kwargs)
  11. return decorator
  12. def deny_guests(f):
  13. def decorator(request, *args, **kwargs):
  14. if request.user.is_anonymous():
  15. raise PermissionDenied(
  16. _("This page is not available to guests."))
  17. else:
  18. return f(request, *args, **kwargs)
  19. return decorator
  20. def deny_banned_ips(f):
  21. def decorator(request, *args, **kwargs):
  22. ban = get_request_ip_ban(request)
  23. if ban:
  24. default_message = _("Your IP address has been banned.")
  25. ban_message = ban.get('message') or default_message
  26. if ban.get('expires'):
  27. ban_expires = ban['formatted_expiration_date']
  28. expiration_message = _("This ban will end on %(date)s.")
  29. expiration_message = expiration_message % {'date': ban_expires}
  30. ban_message = '%s\n\n%s' % (ban_message, expiration_message)
  31. raise PermissionDenied(ban_message)
  32. else:
  33. return f(request, *args, **kwargs)
  34. return decorator