diff options
Diffstat (limited to 'itsdangerous.py')
-rw-r--r-- | itsdangerous.py | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/itsdangerous.py b/itsdangerous.py index 7b55a82..22c769e 100644 --- a/itsdangerous.py +++ b/itsdangerous.py @@ -494,22 +494,30 @@ class Serializer(object): .. versionadded:: 0.15 """ + return self._loads_unsafe_impl(s, salt) + + def _loads_unsafe_impl(self, s, salt, load_kwargs=None, + load_payload_kwargs=None): + """Lowlevel helper function to implement :meth:`loads_unsafe` in + serializer subclasses. + """ try: - return True, self.loads(s, salt=salt) + return True, self.loads(s, salt=salt, **(load_kwargs or {})) except BadSignature, e: if e.payload is None: return False, None try: - return False, self.load_payload(e.payload) + return False, self.load_payload(e.payload, + **(load_payload_kwargs or {})) except BadPayload: return False, None - def load_unsafe(self, f, salt=None): + def load_unsafe(self, f, *args, **kwargs): """Like :meth:`loads_unsafe` but loads from a file. .. versionadded:: 0.15 """ - return self.loads_unsafe(f.read(), salt=salt) + return self.loads_unsafe(f.read(), *args, **kwargs) class TimedSerializer(Serializer): @@ -534,6 +542,11 @@ class TimedSerializer(Serializer): return payload, timestamp return payload + def loads_unsafe(self, s, max_age=None, salt=None): + load_kwargs = {'max_age': max_age} + load_payload_kwargs = {} + return self._loads_unsafe_impl(s, salt, load_kwargs, load_payload_kwargs) + class JSONWebSignatureSerializer(Serializer): """This serializer implements JSON Web Signature (JWS) support. Only @@ -618,12 +631,16 @@ class JSONWebSignatureSerializer(Serializer): payload, header = self.load_payload( self.make_signer(salt, self.algorithm).unsign(s), return_header=True) - if header.pop('alg', None) != self.algorithm_name: + if header.get('alg') != self.algorithm_name: raise BadSignature('Algorithm mismatch') if return_header: return payload, header return payload + def loads_unsafe(self, s, salt=None, return_header=False): + kwargs = {'return_header': return_header} + return self._loads_unsafe_impl(s, salt, kwargs, kwargs) + class URLSafeSerializerMixin(object): """Mixed in with a regular serializer it will attempt to zlib compress |