Check Store API key (#1693)

* Update Dockerfiles to include user creation and use --user flag for pip install

* Add JavaScriptMIMETypeMiddleware to main.py

* Update constants.py and run.py files

* Update package versions in poetry.lock and pyproject.toml files

* Refactor Dockerfile to optimize image building process

* Fix import error in main.py

* Update Dockerfiles to use logspace/langflow image

* Fix decryption error handling in get_user_store_api_key function

* Add error logging to JavaScriptMIMETypeMiddleware in main.py

* Merge
This commit is contained in:
Gabriel Luiz Freitas Almeida 2024-04-12 17:08:41 -03:00 • committed by GitHub
commit 06ea4529df
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 17 additions and 5 deletions

View file

@ -2,6 +2,7 @@ from typing import Annotated, List, Optional, Union
from uuid import UUID from uuid import UUID
from fastapi import APIRouter, Depends, HTTPException, Query from fastapi import APIRouter, Depends, HTTPException, Query
from loguru import logger
from langflow.api.utils import check_langflow_version from langflow.api.utils import check_langflow_version
from langflow.services.auth import utils as auth_utils from langflow.services.auth import utils as auth_utils
@ -27,8 +28,11 @@ def get_user_store_api_key(
): ):
if not user.store_api_key: if not user.store_api_key:
raise HTTPException(status_code=400, detail="You must have a store API key set.") raise HTTPException(status_code=400, detail="You must have a store API key set.")
decrypted = auth_utils.decrypt_api_key(user.store_api_key, settings_service) try:
return decrypted decrypted = auth_utils.decrypt_api_key(user.store_api_key, settings_service)
return decrypted
except Exception as e:
raise HTTPException(status_code=500, detail="Failed to decrypt API key. Please set a new one.") from e
def get_optional_user_store_api_key( def get_optional_user_store_api_key(
@ -37,8 +41,12 @@ def get_optional_user_store_api_key(
): ):
if not user.store_api_key: if not user.store_api_key:
return None return None
decrypted = auth_utils.decrypt_api_key(user.store_api_key, settings_service) try:
return decrypted decrypted = auth_utils.decrypt_api_key(user.store_api_key, settings_service)
return decrypted
except Exception as e:
logger.error(f"Failed to decrypt API key: {e}")
return user.store_api_key
@router.get("/check/") @router.get("/check/")

View file

@ -23,7 +23,11 @@ from langflow.utils.logger import configure
class JavaScriptMIMETypeMiddleware(BaseHTTPMiddleware): class JavaScriptMIMETypeMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next): async def dispatch(self, request: Request, call_next):
response = await call_next(request) try:
response = await call_next(request)
except Exception as exc:
logger.error(exc)
raise exc
if "files/" not in request.url.path and request.url.path.endswith(".js") and response.status_code == 200: if "files/" not in request.url.path and request.url.path.endswith(".js") and response.status_code == 200:
response.headers["Content-Type"] = "text/javascript" response.headers["Content-Type"] = "text/javascript"
return response return response