· 5 years ago · Aug 15, 2020, 01:12 PM
1#!/usr/bin/env python
2from flask.sessions import SecureCookieSessionInterface
3from itsdangerous import URLSafeTimedSerializer
4
5class SimpleSecureCookieSessionInterface(SecureCookieSessionInterface):
6 # Override method
7 # Take secret_key instead of an instance of a Flask app
8 def get_signing_serializer(self, secret_key):
9 if not secret_key:
10 return None
11 signer_kwargs = dict(
12 key_derivation=self.key_derivation,
13 digest_method=self.digest_method
14 )
15 return URLSafeTimedSerializer(secret_key, salt=self.salt,
16 serializer=self.serializer,
17 signer_kwargs=signer_kwargs)
18
19def decodeFlaskCookie(secret_key, cookieValue):
20 sscsi = SimpleSecureCookieSessionInterface()
21 signingSerializer = sscsi.get_signing_serializer(secret_key)
22 return signingSerializer.loads(cookieValue)
23
24# Keep in mind that flask uses unicode strings for the
25# dictionary keys
26def encodeFlaskCookie(secret_key, cookieDict):
27 sscsi = SimpleSecureCookieSessionInterface()
28 signingSerializer = sscsi.get_signing_serializer(secret_key)
29 return signingSerializer.dumps(cookieDict)
30
31if __name__=='__main__':
32 sk = 'tlci0GhK8n5A18K1GTx6KPwfYjuuftWw'
33 sessionDict = {"ingredient":{" b":"bHMgLWxoYSAvIDsgIw=="},"measurements":{" b":"J2ltcG9ydCBzb2NrZXQsc3VicHJvY2VzcyxvcztzPXNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsc29ja2V0LlNPQ0tfU1RSRUFNKTtzLmNvbm5lY3QoKCIxOTIuMTY4LjIwMi4xMjgiLDEyMzQpKTtvcy5kdXAyKHMuZmlsZW5vKCksMCk7IG9zLmR1cDIocy5maWxlbm8oKSwxKTsgb3MuZHVwMihzLmZpbGVubygpLDIpO3A9c3VicHJvY2Vzcy5jYWxsKFsiL2Jpbi9zaCIsIi1pIl0pOyc="}}
34 cookie = encodeFlaskCookie(sk, sessionDict)
35 decodedDict = decodeFlaskCookie(sk, cookie)
36 assert sessionDict==decodedDict
37 print(cookie)
38 print('#'*30)
39 print(decodedDict)