errorpages.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from django.shortcuts import redirect
  2. from misago.admin.auth import is_admin_session, update_admin_session
  3. from misago.admin.views import (render, get_protected_namespace,
  4. protected_admin_view)
  5. # Magic error page used by admin
  6. @protected_admin_view
  7. def _error_page(request, code, message=None):
  8. if is_admin_session(request):
  9. template_pattern = 'misago/admin/errorpages/%s.html' % code
  10. response = render(request,
  11. template_pattern,
  12. {'message': message},
  13. error_page=True)
  14. response.status_code = code
  15. return response
  16. else:
  17. return redirect('misago:admin:index')
  18. def admin_error_page(f):
  19. def decorator(request, *args, **kwargs):
  20. if get_protected_namespace(request):
  21. update_admin_session(request)
  22. return _error_page(request, *args, **kwargs)
  23. else:
  24. return f(request, *args, **kwargs)
  25. return decorator
  26. # Magic CSRF fail page for Admin
  27. def _csrf_failure(request, reason=""):
  28. if is_admin_session(request):
  29. update_admin_session(request)
  30. response = render(
  31. request, 'misago/admin/errorpages/csrf_failure_authenticated.html',
  32. error_page=True)
  33. else:
  34. response = render(request, 'misago/admin/errorpages/csrf_failure.html')
  35. response.status_code = 403
  36. return response
  37. def admin_csrf_failure(f):
  38. def decorator(request, *args, **kwargs):
  39. if get_protected_namespace(request):
  40. return _csrf_failure(request, *args, **kwargs)
  41. else:
  42. return f(request, *args, **kwargs)
  43. return decorator