decorators.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from django.core.exceptions import PermissionDenied
  2. from django.utils.translation import ugettext 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(_("This page is not available to signed in users."))
  10. else:
  11. return f(request, *args, **kwargs)
  12. return decorator
  13. def deny_guests(f):
  14. def decorator(request, *args, **kwargs):
  15. if request.user.is_anonymous:
  16. raise PermissionDenied(_("You have to sign in to access this page."))
  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. hydrated_ban = Ban(
  25. check_type=Ban.IP, user_message=ban['message'], expires_on=ban['expires_on']
  26. )
  27. raise Banned(hydrated_ban)
  28. else:
  29. return f(request, *args, **kwargs)
  30. return decorator