- Created a new eveai_chat plugin to support the new dynamic possibilities of the Specialists. Currently only supports standard Rag retrievers (i.e. no extra arguments).

This commit is contained in:
Josako
2024-11-26 13:35:29 +01:00
parent 7702a6dfcc
commit 07d89d204f
42 changed files with 1771 additions and 989 deletions

View File

@@ -0,0 +1,60 @@
from dataclasses import dataclass
from typing import Optional
from datetime import datetime
from flask_jwt_extended import decode_token, verify_jwt_in_request
from flask import current_app
@dataclass
class TokenValidationResult:
"""Clean, simple validation result"""
is_valid: bool
tenant_id: Optional[int] = None
error_message: Optional[str] = None
class TokenValidator:
"""Simplified token validator focused on JWT validation"""
def validate_token(self, token: str) -> TokenValidationResult:
"""
Validate JWT token
Args:
token: The JWT token to validate
Returns:
TokenValidationResult with validation status and tenant_id if valid
"""
try:
# Decode and validate token
decoded_token = decode_token(token)
# Extract tenant_id from token subject
tenant_id = decoded_token.get('sub')
if not tenant_id:
return TokenValidationResult(
is_valid=False,
error_message="Missing tenant ID in token"
)
# Verify token timestamps
now = datetime.utcnow().timestamp()
if not (decoded_token.get('exp', 0) > now >= decoded_token.get('nbf', 0)):
return TokenValidationResult(
is_valid=False,
error_message="Token expired or not yet valid"
)
# Token is valid
return TokenValidationResult(
is_valid=True,
tenant_id=tenant_id
)
except Exception as e:
current_app.logger.error(f"Token validation error: {str(e)}")
return TokenValidationResult(
is_valid=False,
error_message=str(e)
)