From a25192012a88b5d0d63d8fb0d1505dd2efa4b7e6 Mon Sep 17 00:00:00 2001 From: zoffline Date: Wed, 30 Dec 2020 20:12:36 -0500 Subject: [PATCH] Support pyjwt >= 2.0.0 (Issue #108) Thanks @oldnapalm --- zwift_offline.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/zwift_offline.py b/zwift_offline.py index 113ed73..76ec48d 100644 --- a/zwift_offline.py +++ b/zwift_offline.py @@ -161,7 +161,7 @@ class User(UserMixin, db.Model): def get_token(self): dt = datetime.datetime.utcnow() + datetime.timedelta(minutes=30) - return jwt.encode({'user': self.player_id, 'exp': dt}, app.config['SECRET_KEY'], algorithm='HS256').decode('utf-8') + return jwt_encode({'user': self.player_id, 'exp': dt}, app.config['SECRET_KEY'], algorithm='HS256') @staticmethod def verify_token(token): @@ -213,16 +213,28 @@ courses_lookup = { 15: 'Paris' } + +def jwt_encode(payload, key, **kwargs): + # For pyjwt >= 2.0.0 compatibility (Issue #108) + if jwt.__version__[0] == '1': + return jwt.encode(payload, key, **kwargs).decode('utf-8') + else: + return jwt.encode(payload, key, **kwargs) + + def get_utc_date_time(): return datetime.datetime.utcnow() + def get_utc_seconds_from_date_time(dt): return (time.mktime(dt.timetuple()) * 1000.0 + dt.microsecond / 1000.0) / 1000 + def get_utc_time(): dt = get_utc_date_time() return get_utc_seconds_from_date_time(dt) + def get_online(): online_in_region = Online() for p_id in online: @@ -273,9 +285,11 @@ def get_partial_profile(player_id): else: return None return player_partial_profiles[player_id] + def get_course(state): return (state.f19 & 0xff0000) >> 16 + def is_nearby(player_state1, player_state2, range = 100000): try: if player_state1.watchingRiderId == player_state2.id or player_state2.watchingRiderId == player_state1.id: @@ -1593,14 +1607,14 @@ def launch_zwift(): def fake_refresh_token_with_session_cookie(session_cookie): refresh_token = jwt.decode(REFRESH_TOKEN, options=({'verify_signature': False, 'verify_aud': False})) refresh_token['session_cookie'] = session_cookie - refresh_token = jwt.encode(refresh_token, 'nosecret').decode('utf-8') + refresh_token = jwt_encode(refresh_token, 'nosecret') return refresh_token def fake_jwt_with_session_cookie(session_cookie): access_token = jwt.decode(ACCESS_TOKEN, options=({'verify_signature': False, 'verify_aud': False})) access_token['session_cookie'] = session_cookie - access_token = jwt.encode(access_token, 'nosecret').decode('utf-8') + access_token = jwt_encode(access_token, 'nosecret') refresh_token = fake_refresh_token_with_session_cookie(session_cookie)