diff --git a/src/backend/langflow/api/v1/store.py b/src/backend/langflow/api/v1/store.py index 2a2c1118f..9acb0dfa7 100644 --- a/src/backend/langflow/api/v1/store.py +++ b/src/backend/langflow/api/v1/store.py @@ -52,6 +52,7 @@ def create_component( @router.get("/components/", response_model=List[ListComponentResponse]) def list_components( + filter_by_user: bool = Query(False), page: int = 1, limit: int = 10, store_service: StoreService = Depends(get_store_service), @@ -64,7 +65,9 @@ def list_components( decrypted = auth_utils.decrypt_api_key(store_api_Key, settings_service) else: decrypted = None - result = store_service.list_components(decrypted, page, limit, fields=fields) + result = store_service.list_components( + decrypted, page, limit, fields=fields, filter_by_user=filter_by_user + ) return result except Exception as exc: raise HTTPException(status_code=400, detail=str(exc)) @@ -73,7 +76,6 @@ def list_components( @router.get("/components/{component_id}", response_model=DownloadComponentResponse) def read_component( component_id: UUID, - filter_by_user: bool = Query(False), store_service: StoreService = Depends(get_store_service), store_api_Key: str = Depends(get_user_store_api_key), settings_service=Depends(get_settings_service), @@ -82,7 +84,7 @@ def read_component( try: decrypted = auth_utils.decrypt_api_key(store_api_Key, settings_service) - component = store_service.download(decrypted, component_id, filter_by_user) + component = store_service.download(decrypted, component_id) except Exception as exc: raise HTTPException(status_code=400, detail=str(exc)) from exc @@ -105,10 +107,12 @@ async def search_endpoint( fields: Optional[List[str]] = Query(None), store_service: "StoreService" = Depends(get_store_service), store_api_Key: str = Depends(get_optional_user_store_api_key), + settings_service=Depends(get_settings_service), ): try: + decrypted = auth_utils.decrypt_api_key(store_api_Key, settings_service) return store_service.search( - api_key=store_api_Key, + api_key=decrypted, query=query, page=page, limit=limit, diff --git a/src/backend/langflow/services/store/service.py b/src/backend/langflow/services/store/service.py index e827ad632..e1a195935 100644 --- a/src/backend/langflow/services/store/service.py +++ b/src/backend/langflow/services/store/service.py @@ -113,6 +113,7 @@ class StoreService(Service): page: int = 1, limit: int = 10, fields: Optional[List[str]] = None, + filter_by_user: bool = False, ) -> List[ListComponentResponse]: params = {"page": page, "limit": limit} # ?aggregate[count]=likes @@ -121,7 +122,19 @@ class StoreService(Service): if fields else ",".join(["id", "name", "description", "count(likes)", "is_component"]) ) + # Only public components or the ones created by the user + params["filter"] = json.dumps({"status": {"_eq": "public"}}) + if filter_by_user: + params["deep"] = json.dumps( + { + "components": { + "_filter": {"user_created": {"token": {"_eq": api_key}}} + } + } + ) + else: + params["filter"] = json.dumps({"status": {"_eq": "public"}}) results = self._get(self.components_url, api_key, params) return [ListComponentResponse(**component) for component in results] @@ -132,14 +145,7 @@ class StoreService(Service): params = { "fields": ",".join(["id", "name", "description", "data", "is_component"]) } - if filter_by_user: - params["deep"] = json.dumps( - { - "components": { - "_filter": {"user_created": {"token": {"_eq": api_key}}} - } - } - ) + component = self._get(url, api_key, params) self.call_webhook(api_key, self.webhook_url, component_id)