tt / components /jwt.py
enotkrutoy's picture
Upload 14 files
5e0ca0f verified
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