packages/blueprints/gen-ai-chatbot/static-assets/chatbot-genai-components/backend/python/app/dependencies.py (39 lines of code) (raw):
from app.auth import verify_token
from app.user import User
from fastapi import Depends, HTTPException, status
from fastapi.exceptions import RequestValidationError
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
from jose import JWTError
security = HTTPBearer()
def get_current_user(token: HTTPAuthorizationCredentials = Depends(security)):
try:
decoded = verify_token(token.credentials)
# Return user information
return User(
id=decoded["sub"],
name=decoded["cognito:username"],
groups=decoded.get("cognito:groups", []),
)
except (IndexError, JWTError):
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Could not validate credentials",
headers={"WWW-Authenticate": "Bearer"},
)
def check_admin(user: User = Depends(get_current_user)):
if not user.is_admin():
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Only admin can access this API.",
)
def check_creating_bot_allowed(user: User = Depends(get_current_user)):
if not user.is_creating_bot_allowed():
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="User is not allowed to create bot.",
)
def check_publish_allowed(user: User = Depends(get_current_user)):
if not user.is_publish_allowed():
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="User is not allowed to publish bot.",
)