Spaces:
Sleeping
Sleeping
import json | |
import base64 | |
from datetime import datetime | |
from typing import Optional | |
class JWTAnalyzer: | |
def analyze(self, AIModels, token, openai_api_token: Optional[str], bard_api_token: Optional[str], llama_api_token: Optional[str], llama_endpoint: Optional[str], AI: str): | |
try: | |
parts = token.split('.') | |
if len(parts) != 3: | |
raise ValueError("Invalid token format. Expected 3 parts.") | |
header = json.loads(base64.urlsafe_b64decode(parts[0] + '===').decode('utf-8', 'replace')) | |
payload = json.loads(base64.urlsafe_b64decode(parts[1] + '===').decode('utf-8', 'replace')) | |
algorithm_used = header.get('alg', 'Unknown Algorithm') | |
expiration_time = datetime.utcfromtimestamp(payload['exp']) if 'exp' in payload else None | |
analysis_result = { | |
'Algorithm Used': algorithm_used, | |
'Decoded Payload': payload, | |
'Claims': json.dumps(payload, indent=4), | |
'Expires At': expiration_time.strftime('%Y-%m-%d %H:%M:%S') if expiration_time else 'Not Expired' | |
} | |
response = "" | |
match AI: | |
case 'openai': | |
if openai_api_token is None: | |
raise ValueError("KeyNotFound: Key Not Provided") | |
response = AIModels.gpt_ai(openai_api_token, json.dumps(analysis_result)) | |
case 'bard': | |
if bard_api_token is None: | |
raise ValueError("KeyNotFound: Key Not Provided") | |
response = AIModels.BardAI(bard_api_token, json.dumps(analysis_result)) | |
case 'llama': | |
response = AIModels.llama_AI(json.dumps(analysis_result), "local", llama_api_token, llama_endpoint) | |
case 'llama-api': | |
response = AIModels.llama_AI(json.dumps(analysis_result), "runpod", llama_api_token, llama_endpoint) | |
except jwt.ExpiredSignatureError: | |
analysis_result = {'Error': 'Token has expired.'} | |
except jwt.InvalidTokenError as e: | |
analysis_result = {'Error': f'Invalid token: {e}'} | |
return response | |