From b0cbf642539dac0db5f160a8d0622b868f947833 Mon Sep 17 00:00:00 2001 From: martsforever Date: Wed, 3 Dec 2025 22:44:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20add=5Fgeneral=5Finterceptor=5Fapi=5Fsec?= =?UTF-8?q?ret=E5=A4=84=E7=90=86=E7=A7=98=E9=92=A5=E7=9A=84=E7=94=9F?= =?UTF-8?q?=E6=88=90=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../add_general_interceptor_api_secret.py | 41 +++++++++++++++++++ app/main_app.py | 2 + app/model/ApiSecretModel.py | 3 ++ 3 files changed, 46 insertions(+) create mode 100644 app/general_interceptors/add_general_interceptor_api_secret.py diff --git a/app/general_interceptors/add_general_interceptor_api_secret.py b/app/general_interceptors/add_general_interceptor_api_secret.py new file mode 100644 index 0000000..084a5e1 --- /dev/null +++ b/app/general_interceptors/add_general_interceptor_api_secret.py @@ -0,0 +1,41 @@ +from datetime import timedelta + +from app.general.general_interceptors import add_general_interceptor, GeneralInterceptor +from app.model.ApiSecretModel import ApiSecretModel, ApiSecretService +from app.model.UserModel import UserServiceModel, UserService +from app.utils.CrpyUtils import CryptUtils +from app.utils.api_secret_utils import api_secret_utils + + +# 插入数据之前,查询当前用户信息,使用username生成一个access_token作为秘钥保存到 ApiSecretModel中 +async def before_insert(row, session, user): + user: UserServiceModel = await UserService.query_item(session, {"id": user.id}) + row["secret"] = CryptUtils.create_token(user.username, "api", timedelta(days=9999)) + + +# 删除ApiSecret凭据之前,先清理掉缓存中的秘钥信息 +async def before_delete(query_config, session, user): + row_cls: ApiSecretModel = await ApiSecretService.query_item(session, {"id": query_config.get("id")}) + await api_secret_utils.remove_secret(row_cls.secret) + + +# 更新ApiSecret凭据之前,先清理掉缓存中的秘钥信息 +async def before_update(row_dict, session): + row_cls: ApiSecretModel = await ApiSecretService.query_item(session, {"id": row_dict.get("id")}) + await api_secret_utils.remove_secret(row_cls.secret) + + +# 不允许批量处理ApiSecret凭据信息 +async def before_batch_method(row_dict_list, session): + raise Exception("秘钥不支持批量操作!") + + +def add_general_interceptor_api_secret(): + add_general_interceptor(GeneralInterceptor( + module="api_secret", + before_insert=before_insert, + before_delete=before_delete, + before_update=before_update, + before_batch_insert=before_batch_method, + before_batch_update=before_batch_method, + )) diff --git a/app/main_app.py b/app/main_app.py index 871978b..600dedb 100644 --- a/app/main_app.py +++ b/app/main_app.py @@ -29,6 +29,7 @@ from app.controller.test_sync import add_test_sync_route from app.controller.translate_controller import add_translate_route from app.create_app import create_app from app.general.add_general_route import add_general_route +from app.general_interceptors.add_general_interceptor_api_secret import add_general_interceptor_api_secret from app.general_interceptors.add_general_interceptor_knowledge_doc import add_general_interceptor_knowledge_doc from app.general_interceptors.add_general_interceptor_llm_user import add_general_interceptor_llm_user from app.general_interceptors.add_general_interceptor_module import add_general_interceptor_module @@ -154,3 +155,4 @@ ModuleService.add_route(app=app, path="/module") add_general_interceptor_llm_user() add_general_interceptor_knowledge_doc() add_general_interceptor_module() +add_general_interceptor_api_secret() diff --git a/app/model/ApiSecretModel.py b/app/model/ApiSecretModel.py index ef739d7..529efa2 100644 --- a/app/model/ApiSecretModel.py +++ b/app/model/ApiSecretModel.py @@ -21,18 +21,21 @@ class ApiSecretModel(BasicModel, table=True): async def before_insert(row_dict, session): user: UserServiceModel = await UserService.query_item(session, {"id": row_dict.get("created_by")}) row_dict["secret"] = CryptUtils.create_token(user.username, "api", timedelta(days=9999)) + raise Exception("ApiSecretModel service is desperate!") # 删除ApiSecret凭据之前,先清理掉缓存中的秘钥信息 async def before_delete(row_dict, session): row_cls: ApiSecretModel = await ApiSecretService.query_item(session, {"id": row_dict.get("id")}) await api_secret_utils.remove_secret(row_cls.secret) + raise Exception("ApiSecretModel service is desperate!") # 更新ApiSecret凭据之前,先清理掉缓存中的秘钥信息 async def before_update(row_dict, session): row_cls: ApiSecretModel = await ApiSecretService.query_item(session, {"id": row_dict.get("id")}) await api_secret_utils.remove_secret(row_cls.secret) + raise Exception("ApiSecretModel service is desperate!") # 不允许批量处理ApiSecret凭据信息