diff --git a/src/backend/langflow/api/v1/api_key.py b/src/backend/langflow/api/v1/api_key.py index 7de77389e..c804746fc 100644 --- a/src/backend/langflow/api/v1/api_key.py +++ b/src/backend/langflow/api/v1/api_key.py @@ -1,7 +1,8 @@ from uuid import UUID -from fastapi import APIRouter, HTTPException, Depends +from fastapi import APIRouter, HTTPException, Depends, Body +from httpx import get from langflow.api.v1.schemas import ApiKeysResponse -from langflow.services.auth.utils import get_current_active_user +from langflow.services.auth import utils as auth_utils from langflow.services.database.models.api_key.api_key import ( ApiKeyCreate, UnmaskedApiKeyRead, @@ -14,9 +15,19 @@ from langflow.services.database.models.api_key.crud import ( delete_api_key, ) from langflow.services.database.models.user.user import User -from langflow.services.deps import get_session +from langflow.services.deps import ( + get_store_service, + get_session, + get_settings_service, +) +from typing import TYPE_CHECKING + + from sqlmodel import Session +if TYPE_CHECKING: + from langflow.services.store.service import StoreService + from langflow.services.settings.service import SettingsService router = APIRouter(tags=["APIKey"], prefix="/api_key") @@ -24,7 +35,7 @@ router = APIRouter(tags=["APIKey"], prefix="/api_key") @router.get("/", response_model=ApiKeysResponse) def get_api_keys_route( db: Session = Depends(get_session), - current_user: User = Depends(get_current_active_user), + current_user: User = Depends(auth_utils.auth_utils.get_current_active_user), ): try: user_id = current_user.id @@ -38,7 +49,7 @@ def get_api_keys_route( @router.post("/", response_model=UnmaskedApiKeyRead) def create_api_key_route( req: ApiKeyCreate, - current_user: User = Depends(get_current_active_user), + current_user: User = Depends(auth_utils.get_current_active_user), db: Session = Depends(get_session), ): try: @@ -51,7 +62,7 @@ def create_api_key_route( @router.delete("/{api_key_id}") def delete_api_key_route( api_key_id: UUID, - current_user=Depends(get_current_active_user), + current_user=Depends(auth_utils.get_current_active_user), db: Session = Depends(get_session), ): try: @@ -59,3 +70,22 @@ def delete_api_key_route( return {"detail": "API Key deleted"} except Exception as e: raise HTTPException(status_code=400, detail=str(e)) from e + + +@router.post("/store") +def save_store_api_key( + api_key: Body(str, embed=True), + current_user: User = Depends(auth_utils.get_current_active_user), + db: Session = Depends(get_session), + settings_service=Depends(get_settings_service), +): + try: + # Encrypt the API key + encrypted = auth_utils.encrypt_api_key( + api_key, fernet=auth_utils.get_fernet(settings_service) + ) + current_user.store_api_key = encrypted + db.commit() + return {"detail": "API Key saved"} + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) from e