pet-ai-models / backend /core /security.py
Mavithya's picture
Updated
e037217 verified
Raw
History Blame Contribute Delete
1.82 kB
from fastapi import Request, HTTPException, status
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from typing import Optional, Dict
import logging
try:
from chatbot.supabase_config import supabase
except ImportError:
supabase = None
logger = logging.getLogger(__name__)
security_scheme = HTTPBearer(auto_error=False)
def verify_supabase_jwt(token: str) -> Dict:
"""
Verify Supabase JWT token using the Supabase auth client.
Returns the user data dict if valid.
Raises HTTPException 401 if invalid/expired.
"""
if supabase is None:
raise HTTPException(
status_code=status.HTTP_501_NOT_IMPLEMENTED,
detail="Supabase integration not available on this instance"
)
try:
# get_user verifies the token against the Supabase Auth server
response = supabase.auth.get_user(token)
if not response or not response.user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid or expired authentication token"
)
user = response.user
# Convert user object to dictionary
user_data = {
"id": user.id,
"email": user.email,
"role": user.user_metadata.get("role", "owner") if user.user_metadata else "owner",
"phone": user.user_metadata.get("phone", "") if user.user_metadata else "",
"is_active": user.user_metadata.get("is_active", True) if user.user_metadata else True
}
return user_data
except Exception as e:
logger.error(f"JWT verification failed: {str(e)}")
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=f"Authentication failed: {str(e)}"
)