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"} | |