diff --git a/api/controllers/console/workspace/endpoint.py b/api/controllers/console/workspace/endpoint.py index 5fe9eeea68..6cafd15994 100644 --- a/api/controllers/console/workspace/endpoint.py +++ b/api/controllers/console/workspace/endpoint.py @@ -5,6 +5,7 @@ from werkzeug.exceptions import Forbidden from controllers.console import api from controllers.console.setup import setup_required from controllers.console.wraps import account_initialization_required +from core.model_runtime.utils.encoders import jsonable_encoder from libs.login import login_required from services.plugin.endpoint_service import EndpointService @@ -28,13 +29,15 @@ class EndpointCreateApi(Resource): settings = args["settings"] name = args["name"] - return EndpointService.create_endpoint( - tenant_id=user.current_tenant_id, - user_id=user.id, - plugin_unique_identifier=plugin_unique_identifier, - name=name, - settings=settings, - ) + return { + "success": EndpointService.create_endpoint( + tenant_id=user.current_tenant_id, + user_id=user.id, + plugin_unique_identifier=plugin_unique_identifier, + name=name, + settings=settings, + ) + } class EndpointListApi(Resource): @@ -44,9 +47,23 @@ class EndpointListApi(Resource): def get(self): user = current_user - return EndpointService.list_endpoints( - tenant_id=user.current_tenant_id, - user_id=user.id, + parser = reqparse.RequestParser() + parser.add_argument("page", type=int, required=True, location="args") + parser.add_argument("page_size", type=int, required=True, location="args") + args = parser.parse_args() + + page = args["page"] + page_size = args["page_size"] + + return jsonable_encoder( + { + "endpoints": EndpointService.list_endpoints( + tenant_id=user.current_tenant_id, + user_id=user.id, + page=page, + page_size=page_size, + ) + } ) @@ -61,11 +78,16 @@ class EndpointDeleteApi(Resource): parser.add_argument("endpoint_id", type=str, required=True) args = parser.parse_args() + if not user.is_admin_or_owner: + raise Forbidden() + endpoint_id = args["endpoint_id"] - return EndpointService.delete_endpoint( - tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id - ) + return { + "success": EndpointService.delete_endpoint( + tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id + ) + } class EndpointUpdateApi(Resource): @@ -85,13 +107,18 @@ class EndpointUpdateApi(Resource): settings = args["settings"] name = args["name"] - return EndpointService.update_endpoint( - tenant_id=user.current_tenant_id, - user_id=user.id, - endpoint_id=endpoint_id, - name=name, - settings=settings, - ) + if not user.is_admin_or_owner: + raise Forbidden() + + return { + "success": EndpointService.update_endpoint( + tenant_id=user.current_tenant_id, + user_id=user.id, + endpoint_id=endpoint_id, + name=name, + settings=settings, + ) + } class EndpointEnableApi(Resource): @@ -107,9 +134,14 @@ class EndpointEnableApi(Resource): endpoint_id = args["endpoint_id"] - return EndpointService.enable_endpoint( - tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id - ) + if not user.is_admin_or_owner: + raise Forbidden() + + return { + "success": EndpointService.enable_endpoint( + tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id + ) + } class EndpointDisableApi(Resource): @@ -125,9 +157,14 @@ class EndpointDisableApi(Resource): endpoint_id = args["endpoint_id"] - return EndpointService.disable_endpoint( - tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id - ) + if not user.is_admin_or_owner: + raise Forbidden() + + return { + "success": EndpointService.disable_endpoint( + tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id + ) + } api.add_resource(EndpointCreateApi, "/workspaces/current/endpoints/create") diff --git a/api/core/plugin/manager/endpoint.py b/api/core/plugin/manager/endpoint.py index 6112edb788..5d871e0925 100644 --- a/api/core/plugin/manager/endpoint.py +++ b/api/core/plugin/manager/endpoint.py @@ -3,16 +3,18 @@ from core.plugin.manager.base import BasePluginManager class PluginEndpointManager(BasePluginManager): - def create_endpoint(self, tenant_id: str, user_id: str, plugin_unique_identifier: str, name: str, settings: dict): + def create_endpoint( + self, tenant_id: str, user_id: str, plugin_unique_identifier: str, name: str, settings: dict + ) -> bool: """ Create an endpoint for the given plugin. Errors will be raised if any error occurs. """ - self._request_with_plugin_daemon_response( + return self._request_with_plugin_daemon_response( "POST", f"plugin/{tenant_id}/endpoint/setup", - dict, + bool, headers={ "Content-Type": "application/json", }, @@ -24,7 +26,7 @@ class PluginEndpointManager(BasePluginManager): }, ) - def list_endpoints(self, tenant_id: str, user_id: str): + def list_endpoints(self, tenant_id: str, user_id: str, page: int, page_size: int): """ List all endpoints for the given tenant and user. """ @@ -32,7 +34,7 @@ class PluginEndpointManager(BasePluginManager): "GET", f"plugin/{tenant_id}/endpoint/list", list[EndpointEntity], - params={"page": 1, "page_size": 256}, + params={"page": page, "page_size": page_size}, ) def list_plugin_endpoints(self, tenant_id: str, user_id: str, plugin_unique_identifier: str): @@ -55,53 +57,65 @@ class PluginEndpointManager(BasePluginManager): """ Update the settings of the given endpoint. """ - self._request_with_plugin_daemon_response( + return self._request_with_plugin_daemon_response( "POST", f"plugin/{tenant_id}/endpoint/update", - dict, + bool, data={ "user_id": user_id, "endpoint_id": endpoint_id, "name": name, "settings": settings, }, + headers={ + "Content-Type": "application/json", + }, ) def delete_endpoint(self, tenant_id: str, user_id: str, endpoint_id: str): """ Delete the given endpoint. """ - self._request_with_plugin_daemon_response( - "DELETE", + return self._request_with_plugin_daemon_response( + "POST", f"plugin/{tenant_id}/endpoint/remove", - dict, + bool, data={ "endpoint_id": endpoint_id, }, + headers={ + "Content-Type": "application/json", + }, ) def enable_endpoint(self, tenant_id: str, user_id: str, endpoint_id: str): """ Enable the given endpoint. """ - self._request_with_plugin_daemon_response( + return self._request_with_plugin_daemon_response( "POST", f"plugin/{tenant_id}/endpoint/enable", - dict, + bool, data={ "endpoint_id": endpoint_id, }, + headers={ + "Content-Type": "application/json", + }, ) def disable_endpoint(self, tenant_id: str, user_id: str, endpoint_id: str): """ Disable the given endpoint. """ - self._request_with_plugin_daemon_response( + return self._request_with_plugin_daemon_response( "POST", f"plugin/{tenant_id}/endpoint/disable", - dict, + bool, data={ "endpoint_id": endpoint_id, }, + headers={ + "Content-Type": "application/json", + }, ) diff --git a/api/services/plugin/endpoint_service.py b/api/services/plugin/endpoint_service.py index 9203b322aa..bd75e818a2 100644 --- a/api/services/plugin/endpoint_service.py +++ b/api/services/plugin/endpoint_service.py @@ -13,10 +13,12 @@ class EndpointService: ) @classmethod - def list_endpoints(cls, tenant_id: str, user_id: str): + def list_endpoints(cls, tenant_id: str, user_id: str, page: int, page_size: int): return PluginEndpointManager().list_endpoints( tenant_id=tenant_id, user_id=user_id, + page=page, + page_size=page_size, ) @classmethod