From 30ff0afd5d76a3a5aa48058210ae411253574ada Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期四, 13 三月 2025 14:55:30 +0800 Subject: [PATCH] 增加文件多轮问答 --- app/api/__init__.py | 48 ++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 44 insertions(+), 4 deletions(-) diff --git a/app/api/__init__.py b/app/api/__init__.py index 2e317ce..6cb4b05 100644 --- a/app/api/__init__.py +++ b/app/api/__init__.py @@ -1,16 +1,21 @@ import urllib +from datetime import datetime +from typing import Callable, Any from urllib.parse import urlencode import jwt -from cryptography.fernet import Fernet -from fastapi import FastAPI, Depends, HTTPException +# from cryptography.fernet import Fernet +from fastapi import FastAPI, Depends, HTTPException, Header, Request 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 app.models.user_model import UserModel +from Log import logger +from app.models.base_model import SessionLocal +# from app.models.app_model import AppRegisterModel +from app.models.user_model import UserModel, UserApiTokenModel from app.service.auth import SECRET_KEY, ALGORITHM from app.config.config import settings @@ -18,7 +23,7 @@ pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") -cipher_suite = Fernet(settings.HASH_SUB_KEY) +# cipher_suite = Fernet(settings.HASH_SUB_KEY) class Response(BaseModel): @@ -32,6 +37,33 @@ msg: str = "" data: list[dict] = [] + +def verify_token(token: str) -> Any: + """ + 楠岃瘉 Token 鏄惁鏈夋晥 + """ + db = SessionLocal() + try: + db_token = db.query(UserApiTokenModel).filter(UserApiTokenModel.token == token, UserApiTokenModel.is_active == 1).first() + return db_token is not None and (db_token.expires_at is None or db_token.expires_at > datetime.now()) + finally: + db.close() + +def token_required()-> Callable: + def decorated_function(request: Request)-> Any: + authorization_str = request.headers.get("Authorization") + if not authorization_str: + raise HTTPException(status_code=401, detail="Authorization` can't be empty") + authorization_list = authorization_str.split() + if len(authorization_list) < 2: + raise HTTPException(status_code=401, detail="Invalid token") + token = authorization_list[1] + objs = verify_token(token) + if not objs: + raise HTTPException(status_code=401, detail="Invalid token") + user = UserModel(username="", id=objs.user_id) + return user + return decorated_function def get_current_user(token: str = Depends(oauth2_scheme)): try: @@ -113,6 +145,14 @@ except Exception as e: # 璁板綍寮傚父淇℃伅锛屼絾缁х画澶勭悊鍏朵粬鏂囦欢 print(f"Error processing file URL: {e}") + +def get_api_key(authorization: str = Header(...)): + if not authorization.startswith("Bearer "): + raise HTTPException(status_code=401, detail="Invalid Authorization header format.") + return authorization.split(" ")[1] + + + if __name__=="__main__": files1 = [{"file_url": "aaa.com"}, {"file_url":"bbb.com"}] -- Gitblit v1.8.0