From 07884b2a724be510b91d8983cff208e2ddf873df Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 16 Jul 2025 17:57:46 +0800 Subject: [PATCH] feat: User reset pwd api --- backend/apps/system/api/user.py | 12 +++++++++++- backend/apps/system/crud/assistant.py | 26 +++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/backend/apps/system/api/user.py b/backend/apps/system/api/user.py index 6544a30a..34f27518 100644 --- a/backend/apps/system/api/user.py +++ b/backend/apps/system/api/user.py @@ -9,7 +9,7 @@ from apps.system.schemas.system_schema import PwdEditor, UserCreator, UserEditor from common.core.deps import CurrentUser, SessionDep, Trans from common.core.pagination import Paginator from common.core.schemas import PaginatedResponse, PaginationParams -from common.core.security import md5pwd, verify_md5pwd +from common.core.security import default_md5_pwd, md5pwd, verify_md5pwd from common.core.sqlbot_cache import clear_cache router = APIRouter(tags=["user"], prefix="/user") @@ -132,6 +132,16 @@ async def langChange(session: SessionDep, current_user: CurrentUser, language: U db_user.language = lang session.add(db_user) session.commit() + +@router.patch("/pwd/{id}") +@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="id") +async def pwdReset(session: SessionDep, current_user: CurrentUser, id: int): + if not current_user.isAdmin: + raise RuntimeError('only for admin') + db_user: UserModel = get_db_user(session=session, user_id=id) + db_user.password = default_md5_pwd() + session.add(db_user) + session.commit() @router.put("/pwd") @clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="current_user.id") diff --git a/backend/apps/system/crud/assistant.py b/backend/apps/system/crud/assistant.py index c45336e7..6756b92e 100644 --- a/backend/apps/system/crud/assistant.py +++ b/backend/apps/system/crud/assistant.py @@ -33,8 +33,10 @@ def get_assistant_ds(*, session: Session, assistant: AssistantModel): db_ds_list = session.exec(stmt).all() # filter private ds if offline return db_ds_list - pass - + out_ds_instance: AssistantOutDs = AssistantOutDsFactory.get_instance(assistant) + dslist = out_ds_instance.get_ds_list() + # format? + return dslist def init_dynamic_cors(app: FastAPI): try: @@ -58,4 +60,22 @@ def init_dynamic_cors(app: FastAPI): updated_origins = list(set(settings.all_cors_origins + unique_domains)) cors_middleware.kwargs['allow_origins'] = updated_origins except Exception as e: - return False, e \ No newline at end of file + return False, e + + + +class AssistantOutDs: + assistant: AssistantModel + def get_ds_list(self): + config: dict[any] = json.loads(self.assistant.configuration) + url: str = config['url'] + return None + +class AssistantOutDsFactory: + _instance: AssistantOutDs = None + @staticmethod + def get_instance(cls, assistant: AssistantModel) -> AssistantOutDs: + if not cls._instance: + cls._instance = AssistantOutDs(assistant) + return cls._instance + \ No newline at end of file