Spaces:
Runtime error
Runtime error
| import datetime | |
| import logging | |
| from fastapi import APIRouter, Depends, Query | |
| from src.config import settings | |
| from src.exceptions import DisabledException, ValidationException | |
| from src.security import ( | |
| JWTParams, | |
| create_jwt, | |
| require_auth, | |
| ) | |
| from src.utils.formatting import format_datetime_utc | |
| logger = logging.getLogger(__name__) | |
| router = APIRouter( | |
| prefix="/keys", | |
| tags=["keys"], | |
| dependencies=[Depends(require_auth(admin=True))], | |
| ) | |
| async def create_key( | |
| workspace_id: str | None = Query( | |
| None, description="ID of the workspace to scope the key to" | |
| ), | |
| peer_id: str | None = Query(None, description="ID of the peer to scope the key to"), | |
| session_id: str | None = Query( | |
| None, description="ID of the session to scope the key to" | |
| ), | |
| expires_at: datetime.datetime | None = None, | |
| ): | |
| """Create a new Key""" | |
| if not settings.AUTH.USE_AUTH: | |
| raise DisabledException() | |
| # Validate that at least one parameter is provided for proper scoping | |
| if not any([workspace_id, peer_id, session_id]): | |
| raise ValidationException( | |
| "At least one of workspace_id, peer_id, or session_id must be provided" | |
| ) | |
| key_str = create_jwt( | |
| JWTParams( | |
| exp=format_datetime_utc(expires_at) if expires_at else None, | |
| w=workspace_id, | |
| p=peer_id, | |
| s=session_id, | |
| ) | |
| ) | |
| return { | |
| "key": key_str, | |
| } | |