From 0650b889a36d9b9fd42415b9b9819676f839ae9b Mon Sep 17 00:00:00 2001
From: zhaoqingang <zhaoqg0118@163.com>
Date: 星期二, 08 四月 2025 09:54:09 +0800
Subject: [PATCH] 首页会话-模型修改
---
app/api/__init__.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 52 insertions(+), 4 deletions(-)
diff --git a/app/api/__init__.py b/app/api/__init__.py
index 2e317ce..de2282f 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):
@@ -33,9 +38,44 @@
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])
+ expired_time = payload.get("lex")
+ if not expired_time:
+ raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="浠ょ墝鏃犳晥鎴栧凡杩囨湡",
+ headers={"WWW-Authenticate": "Bearer"})
+ if datetime.strptime(expired_time, "%Y-%m-%d %H:%M:%S") < datetime.now():
+ raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="绯荤粺鎺堟潈宸茶繃鏈燂紒",
+ headers={"WWW-Authenticate": "Bearer"})
+
username: str = payload.get("sub")
if username is None:
raise HTTPException(
@@ -113,6 +153,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