core/auth/jwtcodec.py

41 lines
1.2 KiB
Python
Raw Normal View History

from datetime import datetime
import jwt
2022-10-31 18:38:41 +00:00
from validations.auth import TokenPayload
from settings import JWT_ALGORITHM, JWT_SECRET_KEY
class JWTCodec:
2022-09-03 10:50:14 +00:00
@staticmethod
2022-10-31 18:38:41 +00:00
def encode(user_id: int, exp: datetime) -> str:
2022-09-03 10:50:14 +00:00
payload = {
2022-10-31 18:38:41 +00:00
"user_id": user_id,
# "user_email": user.email, # less secure
# "device": device, # no use cases
2022-09-03 10:50:14 +00:00
"exp": exp,
2022-10-31 18:02:06 +00:00
"iat": datetime.utcnow()
2022-09-03 10:50:14 +00:00
}
2022-10-23 09:33:28 +00:00
try:
2022-10-31 18:38:41 +00:00
return jwt.encode(payload, JWT_SECRET_KEY, JWT_ALGORITHM)
2022-10-23 09:33:28 +00:00
except Exception as e:
print('[jwtcodec] JWT encode error %r' % e)
2022-09-03 10:50:14 +00:00
@staticmethod
def decode(token: str, verify_exp: bool = True) -> TokenPayload:
2022-10-23 09:33:28 +00:00
try:
payload = jwt.decode(
token,
key=JWT_SECRET_KEY,
2022-10-31 19:53:48 +00:00
options={
"verify_exp": verify_exp,
"verify_signature": False
},
2022-10-23 09:33:28 +00:00
algorithms=[JWT_ALGORITHM],
)
2022-10-31 18:38:41 +00:00
r = TokenPayload(**payload)
print('[jwtcodec] debug payload %r' % r)
return r
2022-10-23 09:33:28 +00:00
except Exception as e:
print('[jwtcodec] JWT decode error %r' % e)