"""
    csrf related views
    ~~~~~~~~~~~~~~~~~~


    debug_csrf_failure()
    ~~~~~~~~~~~~~~~~~~~~
    Display the normal debug page and not the minimal csrf debug page.

    usage: Add this to your settings:
    -----------------------------------------------------------------------
    CSRF_FAILURE_VIEW='django_tools.views.csrf.debug_csrf_failure'
    -----------------------------------------------------------------------


    :copyleft: 2012 by the django-tools team, see AUTHORS for more details.
    :license: GNU GPL v3 or above, see LICENSE for more details.
"""


from django.conf import settings
from django.views.csrf import csrf_failure


class CsrfFailure(Exception):
    pass


def debug_csrf_failure(request, reason=""):
    """
    raised own CsrfFailure() exception to get the normal debug page on
    Csrf failures.
    See also:
        https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#rejected-requests

    More Info: See DocString above.
    """
    if not settings.DEBUG:
        # Use original HttpResponseForbidden:
        return csrf_failure(request, reason)

    raise CsrfFailure(f"csrf failure debug: {reason!r}")
