12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- from django.http import JsonResponse
- from django.shortcuts import render
- from django.utils.translation import ugettext as _
- from misago.core.utils import is_request_to_misago
- from misago.admin.views.errorpages import admin_error_page, admin_csrf_failure
- def _ajax_error(code=406, message=None):
- return JsonResponse({'detail': message}, status=code)
- @admin_error_page
- def _error_page(request, code, message=None):
- response = render(request,
- 'misago/errorpages/%s.html' % code,
- {'message': message})
- response.status_code = code
- return response
- def permission_denied(request, message=None):
- if request.is_ajax():
- return _ajax_error(403, message or _("Permission denied."))
- else:
- return _error_page(request, 403, message)
- def page_not_found(request):
- if request.is_ajax():
- return _ajax_error(404, "Not found.")
- else:
- return _error_page(request, 404)
- @admin_csrf_failure
- def csrf_failure(request, reason=""):
- if request.is_ajax():
- print 'C> %s' % request.META.get("CSRF_COOKIE")
- print 'E> %s' % request.META.get('HTTP_X_CSRFTOKEN', '')
- return _ajax_error(403, _("Request authentication is invalid."))
- else:
- response = render(request, 'misago/errorpages/csrf_failure.html')
- response.status_code = 403
- return response
- def not_allowed(request):
- response = render(request, 'misago/errorpages/405.html')
- response.status_code = 405
- return response
- # Decorators for custom error page handlers
- def shared_403_exception_handler(f):
- def page_decorator(request, *args, **kwargs):
- if is_request_to_misago(request):
- return permission_denied(request)
- else:
- return f(request, *args, **kwargs)
- return page_decorator
- def shared_404_exception_handler(f):
- def page_decorator(request, *args, **kwargs):
- if is_request_to_misago(request):
- return page_not_found(request)
- else:
- return f(request, *args, **kwargs)
- return page_decorator
|