Skip to content

Commit

Permalink
fix: creation time difference in new tokens
Browse files Browse the repository at this point in the history
  • Loading branch information
SaintShit committed May 19, 2024
1 parent bbb24a6 commit 50d3d5c
Showing 1 changed file with 16 additions and 7 deletions.
23 changes: 16 additions & 7 deletions app/utils/jwt.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import time
from base64 import b64decode, b64encode
from datetime import datetime, timedelta
from math import ceil
from functools import lru_cache
from hashlib import sha256
from math import ceil
from typing import Union

from jose import JWTError, jwt

from config import JWT_ACCESS_TOKEN_EXPIRE_MINUTES

from hashlib import sha256
from base64 import b64encode, b64decode

@lru_cache(maxsize=None)
def get_secret_key():
Expand Down Expand Up @@ -44,9 +45,14 @@ def get_admin_payload(token: str) -> Union[dict, None]:


def create_subscription_token(username: str) -> str:
data = username + ',' + str(ceil(datetime.utcnow().timestamp()))
data = username + ',' + str(ceil(time.time()))
data_b64_str = b64encode(data.encode('utf-8'), altchars=b'-_').decode('utf-8').rstrip('=')
data_b64_sign = b64encode(sha256((data_b64_str+get_secret_key()).encode('utf-8')).digest(), altchars=b'-_').decode('utf-8')[:10]
data_b64_sign = b64encode(
sha256(
(data_b64_str+get_secret_key()).encode('utf-8')
).digest(),
altchars=b'-_'
).decode('utf-8')[:10]
data_final = data_b64_str + data_b64_sign
return data_final

Expand All @@ -66,11 +72,14 @@ def get_subscription_payload(token: str) -> Union[dict, None]:
u_token = token[:-10]
u_signature = token[-10:]
try:
u_token_dec = b64decode((u_token.encode('utf-8')+b'='*(-len(u_token.encode('utf-8'))%4)), altchars=b'-_', validate=True)
u_token_dec = b64decode(
(u_token.encode('utf-8') + b'=' * (-len(u_token.encode('utf-8')) % 4)),
altchars=b'-_', validate=True)
u_token_dec_str = u_token_dec.decode('utf-8')
except:
return
u_token_resign = b64encode(sha256((u_token+get_secret_key()).encode('utf-8')).digest(), altchars=b'-_').decode('utf-8')[:10]
u_token_resign = b64encode(sha256((u_token+get_secret_key()).encode('utf-8')
).digest(), altchars=b'-_').decode('utf-8')[:10]
if u_signature == u_token_resign:
u_username = u_token_dec_str.split(',')[0]
u_created_at = int(u_token_dec_str.split(',')[1])
Expand Down

0 comments on commit 50d3d5c

Please sign in to comment.