-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflask_session.py
More file actions
98 lines (77 loc) · 2.85 KB
/
Copy pathflask_session.py
File metadata and controls
98 lines (77 loc) · 2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
""" Flask Session Cookie Decoder/Encoder """
__author__ = 'Wilson Sumanang'
# standard imports
import sys
import zlib
from itsdangerous import base64_decode
# external Imports
from flask.sessions import SecureCookieSessionInterface
class MockApp(object):
def __init__(self, secret_key):
self.secret_key = secret_key
def session_cookie_encoder(secret_key, session_cookie_structure):
""" Encode a Flask session cookie
Example:
cookie_structure = dict(
gplus_id = 1285135705050360459231,
email = john.doe@gmail.com,
user_info = dict(
full_name = john doe,
)
)
session_cookie_encoder(b'development key', cookie_structure)
Args:
secret_key (string): Flask App secret key
session_cookie_structure (dict): Flask session cookie structure
Return:
value (string): Flask session cookie
"""
try:
app = MockApp(secret_key)
session_cookie_structure = dict()
si = SecureCookieSessionInterface()
s = si.get_signing_serializer(app)
return s.dumps(session_cookie_structure)
except Exception as e:
return "[Encoding error]{}".format(e)
def session_cookie_decoder(session_cookie_value):
""" Decode a Flask cookie
Args:
session_cookie_value (string): Flask session cookie to decode
"""
try:
compressed = False
payload = session_cookie_value
if payload.startswith(b'.'):
compressed = True
payload = payload[1:]
data = payload.split(".")[0]
data = base64_decode(data)
if compressed:
data = zlib.decompress(data)
return data
except Exception as e:
return "[Decoding error]{}".format(e)
if __name__ == "__main__":
encoder_guide = "Usage: session_cookie_manager.py <encode> <secret_key> <session_cookie_structure>"
decoder_guide = "Usage: session_cookie_manager.py <decode> <session_cookie_value>"
print(sys.argv)
if len(sys.argv) == 3:
status, session_cookie_value = sys.argv[1:]
session_cookie_value='eyJwYXNzZWQiOjUsInVzZXJuYW1lIjoiZ3Vlc3QifQ.XBRmeQ.emSFcu2FPFCxah1OsC9iYRnH0vw'
if status.lower() == 'decode':
print(session_cookie_decoder(session_cookie_value))
else:
print(decoder_guide)
sys.exit(1)
elif len(sys.argv) == 4:
status, secret_key, session_cookie_structure = sys.argv[1:]
if status.lower() == 'encode':
print(session_cookie_encoder(secret_key, session_cookie_structure))
sys.exit(1)
else:
print(encoder_guide)
else:
print(decoder_guide)
print(encoder_guide)
sys.exit(1)