Skip to content

Commit dea79c5

Browse files
Make Session class more reusable
1 parent 6b1fd61 commit dea79c5

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

src/microdot/session.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,7 @@ def get(self, request):
5656
if session is None:
5757
request.g._session = SessionDict(request, {})
5858
return request.g._session
59-
try:
60-
session = jwt.decode(session, self.secret_key,
61-
algorithms=['HS256'])
62-
except jwt.exceptions.PyJWTError: # pragma: no cover
63-
request.g._session = SessionDict(request, {})
64-
else:
65-
request.g._session = SessionDict(request, session)
59+
request.g._session = SessionDict(request, self.decode(session))
6660
return request.g._session
6761

6862
def update(self, request, session):
@@ -88,8 +82,7 @@ def index(request, session):
8882
if not self.secret_key:
8983
raise ValueError('The session secret key is not configured')
9084

91-
encoded_session = jwt.encode(session, self.secret_key,
92-
algorithm='HS256')
85+
encoded_session = self.encode(session)
9386

9487
@request.after_request
9588
def _update_session(request, response):
@@ -120,6 +113,18 @@ def _delete_session(request, response):
120113
expires='Thu, 01 Jan 1970 00:00:01 GMT')
121114
return response
122115

116+
def encode(self, payload, secret_key=None):
117+
return jwt.encode(payload, secret_key or self.secret_key,
118+
algorithm='HS256')
119+
120+
def decode(self, session, secret_key=None):
121+
try:
122+
payload = jwt.decode(session, secret_key or self.secret_key,
123+
algorithms=['HS256'])
124+
except jwt.exceptions.PyJWTError: # pragma: no cover
125+
return {}
126+
return payload
127+
123128

124129
def with_session(f):
125130
"""Decorator that passes the user session to the route handler.

0 commit comments

Comments
 (0)