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 |   34 ++++++++++++++++++++++++++++++++--
 1 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/app/api/__init__.py b/app/api/__init__.py
index 2a679e8..6cb4b05 100644
--- a/app/api/__init__.py
+++ b/app/api/__init__.py
@@ -1,9 +1,11 @@
 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, Header
+from fastapi import FastAPI, Depends, HTTPException, Header, Request
 from fastapi.security import OAuth2PasswordBearer
 from passlib.context import CryptContext
 from pydantic import BaseModel
@@ -11,8 +13,9 @@
 from starlette.websockets import WebSocket, WebSocketDisconnect
 
 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
+from app.models.user_model import UserModel, UserApiTokenModel
 from app.service.auth import SECRET_KEY, ALGORITHM
 from app.config.config import settings
 
@@ -35,6 +38,33 @@
     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:
         payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])

--
Gitblit v1.8.0