99 lines
2.9 KiB
Python
99 lines
2.9 KiB
Python
from ._compat import PY2
|
|
from ._compat import text_type
|
|
|
|
|
|
class BadData(Exception):
|
|
"""Raised if bad data of any sort was encountered. This is the base
|
|
for all exceptions that itsdangerous defines.
|
|
|
|
.. versionadded:: 0.15
|
|
"""
|
|
|
|
message = None
|
|
|
|
def __init__(self, message):
|
|
super(BadData, self).__init__(self, message)
|
|
self.message = message
|
|
|
|
def __str__(self):
|
|
return text_type(self.message)
|
|
|
|
if PY2:
|
|
__unicode__ = __str__
|
|
|
|
def __str__(self):
|
|
return self.__unicode__().encode("utf-8")
|
|
|
|
|
|
class BadSignature(BadData):
|
|
"""Raised if a signature does not match."""
|
|
|
|
def __init__(self, message, payload=None):
|
|
BadData.__init__(self, message)
|
|
|
|
#: The payload that failed the signature test. In some
|
|
#: situations you might still want to inspect this, even if
|
|
#: you know it was tampered with.
|
|
#:
|
|
#: .. versionadded:: 0.14
|
|
self.payload = payload
|
|
|
|
|
|
class BadTimeSignature(BadSignature):
|
|
"""Raised if a time-based signature is invalid. This is a subclass
|
|
of :class:`BadSignature`.
|
|
"""
|
|
|
|
def __init__(self, message, payload=None, date_signed=None):
|
|
BadSignature.__init__(self, message, payload)
|
|
|
|
#: If the signature expired this exposes the date of when the
|
|
#: signature was created. This can be helpful in order to
|
|
#: tell the user how long a link has been gone stale.
|
|
#:
|
|
#: .. versionadded:: 0.14
|
|
self.date_signed = date_signed
|
|
|
|
|
|
class SignatureExpired(BadTimeSignature):
|
|
"""Raised if a signature timestamp is older than ``max_age``. This
|
|
is a subclass of :exc:`BadTimeSignature`.
|
|
"""
|
|
|
|
|
|
class BadHeader(BadSignature):
|
|
"""Raised if a signed header is invalid in some form. This only
|
|
happens for serializers that have a header that goes with the
|
|
signature.
|
|
|
|
.. versionadded:: 0.24
|
|
"""
|
|
|
|
def __init__(self, message, payload=None, header=None, original_error=None):
|
|
BadSignature.__init__(self, message, payload)
|
|
|
|
#: If the header is actually available but just malformed it
|
|
#: might be stored here.
|
|
self.header = header
|
|
|
|
#: If available, the error that indicates why the payload was
|
|
#: not valid. This might be ``None``.
|
|
self.original_error = original_error
|
|
|
|
|
|
class BadPayload(BadData):
|
|
"""Raised if a payload is invalid. This could happen if the payload
|
|
is loaded despite an invalid signature, or if there is a mismatch
|
|
between the serializer and deserializer. The original exception
|
|
that occurred during loading is stored on as :attr:`original_error`.
|
|
|
|
.. versionadded:: 0.15
|
|
"""
|
|
|
|
def __init__(self, message, original_error=None):
|
|
BadData.__init__(self, message)
|
|
|
|
#: If available, the error that indicates why the payload was
|
|
#: not valid. This might be ``None``.
|
|
self.original_error = original_error
|