decorators.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from django.core.exceptions import PermissionDenied
  2. from django.utils.translation import gettext as _
  3. from misago.core.exceptions import Banned
  4. from .bans import get_request_ip_ban
  5. from .models import Ban
  6. def deny_authenticated(f):
  7. def decorator(request, *args, **kwargs):
  8. if request.user.is_authenticated:
  9. raise PermissionDenied(
  10. _("This page is not available to signed in users."))
  11. else:
  12. return f(request, *args, **kwargs)
  13. return decorator
  14. def deny_guests(f):
  15. def decorator(request, *args, **kwargs):
  16. if request.user.is_anonymous:
  17. raise PermissionDenied(
  18. _("You have to sign in to access this page."))
  19. else:
  20. return f(request, *args, **kwargs)
  21. return decorator
  22. def deny_banned_ips(f):
  23. def decorator(request, *args, **kwargs):
  24. ban = get_request_ip_ban(request)
  25. if ban:
  26. hydrated_ban = Ban(
  27. check_type=Ban.IP,
  28. user_message=ban['message'],
  29. expires_on=ban['expires_on']
  30. )
  31. raise Banned(hydrated_ban)
  32. else:
  33. return f(request, *args, **kwargs)
  34. return decorator