decorators.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from django.utils.translation import ugettext as _
  2. from misago.acl.exceptions import ACLError403, ACLError404
  3. from misago.apps.errors import error403, error404, error_banned
  4. def acl_errors(f):
  5. def decorator(*args, **kwargs):
  6. try:
  7. return f(*args, **kwargs)
  8. except ACLError403 as e:
  9. return error403(args[0], e.message)
  10. except ACLError404 as e:
  11. return error404(args[0], e.message)
  12. return decorator
  13. def block_authenticated(f):
  14. def decorator(*args, **kwargs):
  15. request = args[0]
  16. if not request.firewall.admin and request.user.is_authenticated():
  17. return error403(request, _("%(username)s, this page is not available to signed in users.") % {'username': request.user.username})
  18. return f(*args, **kwargs)
  19. return decorator
  20. def block_banned(f):
  21. def decorator(*args, **kwargs):
  22. request = args[0]
  23. try:
  24. if request.ban.is_banned():
  25. return error_banned(request);
  26. return f(*args, **kwargs)
  27. except AttributeError:
  28. pass
  29. return f(*args, **kwargs)
  30. return decorator
  31. def block_crawlers(f):
  32. def decorator(*args, **kwargs):
  33. request = args[0]
  34. if request.user.is_crawler():
  35. return error403(request)
  36. return f(*args, **kwargs)
  37. return decorator
  38. def block_guest(f):
  39. def decorator(*args, **kwargs):
  40. request = args[0]
  41. if not request.user.is_authenticated():
  42. return error403(request, _("Dear Guest, only signed in members are allowed to access this page. Please sign in or register and try again."))
  43. return f(*args, **kwargs)
  44. return decorator
  45. def block_jammed(f):
  46. def decorator(*args, **kwargs):
  47. request = args[0]
  48. try:
  49. if not request.firewall.admin and request.jam.is_jammed():
  50. return error403(request, _("You have used up allowed attempts quota and we temporarily banned you from accessing this page."))
  51. except AttributeError:
  52. pass
  53. return f(*args, **kwargs)
  54. return decorator
  55. def check_csrf(f):
  56. def decorator(*args, **kwargs):
  57. request = args[0]
  58. if not request.csrf.request_secure(request):
  59. return error403(request, _("Request authorization is invalid. Please try again."))
  60. return f(*args, **kwargs)
  61. return decorator