decorators.py 1.3 KB

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