errorpages.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from django.http import JsonResponse
  2. from django.shortcuts import render
  3. from django.utils.translation import ugettext as _
  4. from misago.core.utils import is_request_to_misago
  5. from misago.admin.views.errorpages import admin_error_page, admin_csrf_failure
  6. def _ajax_error(code=406, message=None):
  7. response_dict = {'is_error': True}
  8. if message:
  9. response_dict['message'] = unicode(message)
  10. return JsonResponse(response_dict, status=code)
  11. @admin_error_page
  12. def _error_page(request, code, message=None):
  13. response = render(request,
  14. 'misago/errorpages/%s.html' % code,
  15. {'message': message})
  16. response.status_code = code
  17. return response
  18. def permission_denied(request, message=None):
  19. if request.is_ajax():
  20. return _ajax_error(403, message)
  21. else:
  22. return _error_page(request, 403, message)
  23. def page_not_found(request):
  24. if request.is_ajax():
  25. return _ajax_error(404, _("Invalid API link."))
  26. else:
  27. return _error_page(request, 404)
  28. @admin_csrf_failure
  29. def csrf_failure(request, reason=""):
  30. if request.is_ajax():
  31. return _ajax_error(403, _("Request authentication is invalid."))
  32. else:
  33. response = render(request, 'misago/errorpages/csrf_failure.html')
  34. response.status_code = 403
  35. return response
  36. def not_allowed(request):
  37. response = render(request, 'misago/errorpages/405.html')
  38. response.status_code = 405
  39. return response
  40. # Decorators for custom error page handlers
  41. def shared_403_exception_handler(f):
  42. def page_decorator(request, *args, **kwargs):
  43. if is_request_to_misago(request):
  44. return permission_denied(request)
  45. else:
  46. return f(request, *args, **kwargs)
  47. return page_decorator
  48. def shared_404_exception_handler(f):
  49. def page_decorator(request, *args, **kwargs):
  50. if is_request_to_misago(request):
  51. return page_not_found(request)
  52. else:
  53. return f(request, *args, **kwargs)
  54. return page_decorator