Spaces:
Running
Running
from uuid import UUID | |
from fastapi import APIRouter, Depends, HTTPException, Response | |
from langflow.api.utils import CurrentActiveUser, DbSession | |
from langflow.api.v1.schemas import ApiKeyCreateRequest, ApiKeysResponse | |
from langflow.services.auth import utils as auth_utils | |
# Assuming you have these methods in your service layer | |
from langflow.services.database.models.api_key.crud import create_api_key, delete_api_key, get_api_keys | |
from langflow.services.database.models.api_key.model import ApiKeyCreate, UnmaskedApiKeyRead | |
from langflow.services.deps import get_settings_service | |
router = APIRouter(tags=["APIKey"], prefix="/api_key") | |
async def get_api_keys_route( | |
db: DbSession, | |
current_user: CurrentActiveUser, | |
) -> ApiKeysResponse: | |
try: | |
user_id = current_user.id | |
keys = await get_api_keys(db, user_id) | |
return ApiKeysResponse(total_count=len(keys), user_id=user_id, api_keys=keys) | |
except Exception as exc: | |
raise HTTPException(status_code=400, detail=str(exc)) from exc | |
async def create_api_key_route( | |
req: ApiKeyCreate, | |
current_user: CurrentActiveUser, | |
db: DbSession, | |
) -> UnmaskedApiKeyRead: | |
try: | |
user_id = current_user.id | |
return await create_api_key(db, req, user_id=user_id) | |
except Exception as e: | |
raise HTTPException(status_code=400, detail=str(e)) from e | |
async def delete_api_key_route( | |
api_key_id: UUID, | |
db: DbSession, | |
): | |
try: | |
await delete_api_key(db, api_key_id) | |
except Exception as e: | |
raise HTTPException(status_code=400, detail=str(e)) from e | |
return {"detail": "API Key deleted"} | |
async def save_store_api_key( | |
api_key_request: ApiKeyCreateRequest, | |
response: Response, | |
current_user: CurrentActiveUser, | |
db: DbSession, | |
): | |
settings_service = get_settings_service() | |
auth_settings = settings_service.auth_settings | |
try: | |
api_key = api_key_request.api_key | |
# Encrypt the API key | |
encrypted = auth_utils.encrypt_api_key(api_key, settings_service=settings_service) | |
current_user.store_api_key = encrypted | |
db.add(current_user) | |
await db.commit() | |
response.set_cookie( | |
"apikey_tkn_lflw", | |
encrypted, | |
httponly=auth_settings.ACCESS_HTTPONLY, | |
samesite=auth_settings.ACCESS_SAME_SITE, | |
secure=auth_settings.ACCESS_SECURE, | |
expires=None, # Set to None to make it a session cookie | |
domain=auth_settings.COOKIE_DOMAIN, | |
) | |
except Exception as e: | |
raise HTTPException(status_code=400, detail=str(e)) from e | |
return {"detail": "API Key saved"} | |