Update asgi_app.py

This commit is contained in:
saidsurucu
2025-07-09 17:44:34 +03:00
parent 0a302bb13b
commit a17853b918
+11 -27
View File
@@ -130,35 +130,19 @@ async def mcp_protocol_handler(request: Request):
from clerk_backend_api import Clerk
clerk = Clerk(bearer_auth=os.getenv("CLERK_SECRET_KEY"))
# Validate Clerk JWT token using authenticate_request
import httpx
from clerk_backend_api.security import authenticate_request
from clerk_backend_api.security.types import AuthenticateRequestOptions
# Validate Clerk JWT token directly
jwt_claims = clerk.jwt_templates.verify_token(token)
user_id = jwt_claims.get("sub")
# Create a mock request with the Bearer token
mock_request = httpx.Request(
method="POST",
url="https://api.yargimcp.com/mock",
headers={"Authorization": f"Bearer {token}"}
)
request_state = clerk.authenticate_request(
mock_request,
AuthenticateRequestOptions()
)
if request_state.is_signed_in:
# Get user info from token payload
payload = getattr(request_state, 'payload', {})
if user_id:
# Extract user information from JWT payload
user_email = payload.get('email') # Primary identifier
user_name = payload.get('name')
user_plan = payload.get('plan', 'free') # Default to free plan
scopes = payload.get('scopes', ['yargi.read'])
user_email = jwt_claims.get('email') # Primary identifier
user_name = jwt_claims.get('name')
user_plan = jwt_claims.get('plan', 'free') # Default to free plan
scopes = jwt_claims.get('scopes', ['yargi.read'])
# Use email as primary user identifier
user_id = user_email or request_state.user_id
# Use email as primary user identifier if available
user_id = user_email or user_id
logger.info(f"Clerk JWT token validated successfully")
logger.info(f"User: {user_email}")
@@ -172,7 +156,7 @@ async def mcp_protocol_handler(request: Request):
request.state.user_plan = user_plan
request.state.token_scopes = scopes
else:
logger.warning(f"Clerk JWT token validation failed. Reason: {getattr(request_state, 'reason', 'UNKNOWN')}")
logger.warning(f"Clerk JWT token validation failed - no user_id in claims")
user_id = None
except Exception as e:
logger.warning(f"Clerk Bearer token validation failed: {str(e)}")