From 9c275b214f9619a64cd2998596ce696610185eb4 Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期二, 19 十一月 2024 10:05:56 +0800 Subject: [PATCH] 增加删除 --- app/api/__init__.py | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 117 insertions(+), 1 deletions(-) diff --git a/app/api/__init__.py b/app/api/__init__.py index bcd5c2a..2f325c1 100644 --- a/app/api/__init__.py +++ b/app/api/__init__.py @@ -1,10 +1,126 @@ -from fastapi import FastAPI +import urllib +from urllib.parse import urlencode + +import jwt +from cryptography.fernet import Fernet +from fastapi import FastAPI, Depends, HTTPException +from fastapi.security import OAuth2PasswordBearer +from passlib.context import CryptContext from pydantic import BaseModel +from starlette import status +from starlette.websockets import WebSocket, WebSocketDisconnect + +from Log import logger +from app.models.app_model import AppRegisterModel +from app.models.user_model import UserModel +from app.service.auth import SECRET_KEY, ALGORITHM +from app.config.config import settings app = FastAPI() + +pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") +oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") +# cipher_suite = Fernet(settings.HASH_SUB_KEY) class Response(BaseModel): code: int = 200 msg: str = "" data: dict = {} + + +class ResponseList(BaseModel): + code: int = 200 + msg: str = "" + data: list[dict] = [] + + +def get_current_user(token: str = Depends(oauth2_scheme)): + try: + payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) + username: str = payload.get("sub") + if username is None: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="鏃犳硶楠岃瘉鍑瘉", + headers={"WWW-Authenticate": "Bearer"}, + ) + user = UserModel(username=username, id=payload.get("user_id")) + if user.id == 0: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="鐢ㄦ埛涓嶅瓨鍦�", + headers={"WWW-Authenticate": "Bearer"}, + ) + return user + except jwt.PyJWTError: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="浠ょ墝鏃犳晥鎴栧凡杩囨湡", + headers={"WWW-Authenticate": "Bearer"}, + ) + + +async def get_current_user_websocket(websocket: WebSocket): + token = websocket.query_params.get('token') + if token is None: + await websocket.close(code=1008) + raise WebSocketDisconnect(code=status.WS_1008_POLICY_VIOLATION) + try: + payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) + username: str = payload.get("sub") + if username is None: + await websocket.close(code=1008) + raise WebSocketDisconnect(code=status.WS_1008_POLICY_VIOLATION) + user = UserModel(username=username, id=payload.get("user_id")) + if user is None: + await websocket.close(code=1008) + raise WebSocketDisconnect(code=status.WS_1008_POLICY_VIOLATION) + return user + except jwt.PyJWTError as e: + print(e) + await websocket.close(code=1008) + raise WebSocketDisconnect(code=status.WS_1008_POLICY_VIOLATION) + + +def format_file_url(agent_id: str, file_url: str, doc_id: str = None, doc_name: str = None) -> str: + if file_url: + # 瀵� file_url 杩涜 URL 缂栫爜 + encoded_file_url = urllib.parse.quote(file_url, safe=':/') + return f"./api/files/download/?url={encoded_file_url}&agent_id={agent_id}" + + if doc_id: + # 瀵� doc_id 鍜� doc_name 杩涜 URL 缂栫爜 + encoded_doc_id = urllib.parse.quote(doc_id, safe='') + encoded_doc_name = urllib.parse.quote(doc_name, safe='') + return f"./api/files/download/?doc_id={encoded_doc_id}&doc_name={encoded_doc_name}&agent_id={agent_id}" + + return file_url + + +def process_files(files, agent_id): + """ + 澶勭悊鏂囦欢鍒楄〃锛屾牸寮忓寲姣忎釜鏂囦欢鐨� URL銆� + + :param files: 鏂囦欢鍒楄〃锛屾瘡涓枃浠舵槸涓�涓瓧鍏� + :param agent_id: 浠g悊 ID + """ + if not files: + return # 濡傛灉鏂囦欢鍒楄〃涓虹┖锛岀洿鎺ヨ繑鍥� + + for file in files: + if "file_url" in file and file["file_url"]: + try: + file["file_url"] = format_file_url(agent_id, file["file_url"]) + except Exception as e: + # 璁板綍寮傚父淇℃伅锛屼絾缁х画澶勭悊鍏朵粬鏂囦欢 + print(f"Error processing file URL: {e}") + + +if __name__=="__main__": + + files1 = [{"file_url": "aaa.com"}, {"file_url":"bbb.com"}] + print(files1) + + process_files(files1,11111) + print(files1) \ No newline at end of file -- Gitblit v1.8.0