from dataclasses import dataclass
import jwt
import os
from auth.setting import settings
from auth.expreance import BadCredentialsException,UnableCredentialsException
@dataclass
class JsontoWebToken:
jwt_access_token: str
auth0_domain: str=f"{settings.AUTH0_DOMAIN}/"
auth0_audience: str=f"{settings.AUTH0_AUDIENCE}/"
algorithm: str=f"{settings.ALGORITHM}"
jwt_url=f"{auth0_domain}.well-known/jwks.json"
def verify_jwt(self):
try:
jwt_client=jwt.PyJWKClient(jwks_uri=self.jwt_url)
jwt_signingkey=jwt_client.get_signing_key_from_jwt(self.jwt_access_token).key
payload=jwt.decode(self.jwt_access_token,
jwt_signingkey,
algorithms=[self.algorithm],
audience=self.auth0_audience,
issuer=self.auth0_domain)
except jwt.exceptions.PyJWKClinetError:
raise UnableCredentialsException
except jwt.exceptions.PyJWTError:
raise BadCredentialsException
except jwt.exceptions.InvalidTokenError:
raise BadCredentialsException
return payload
def validate(self):
return self.verify_jwt()