Files
dcalc/backend/api/dp.py
T
2025-03-15 11:13:34 +08:00

49 lines
1.7 KiB
Python

import time
from typing import Annotated, Optional
from redis import Redis
from sqlalchemy.orm import Session
from fastapi import Depends, Header
from api.core.exception import ResponseException
from database.connect import get_db, get_redis
from api.core.Auth import AlterState
import base64
import json
SessionDep = Annotated[Session, Depends(get_db)]
RedisDep = Annotated[Redis, Depends(get_redis)]
def alterToken(alter_token: Optional[str] = Header(None)):
if alter_token is not None:
try:
decoded_bytes = base64.b64decode(alter_token)
decoded_str = decoded_bytes.decode('utf-8')
alter = json.loads(decoded_str)
# 时间判断 后面再加
if (int(time.time() * 1000) - alter['time']) / (60 * 60 * 1000) > 6:
raise ResponseException('登录过期或无效Token,请刷新后重试')
return AlterState(alter['alter'], alter_token, {}, alter['equVersion'], alter['time'])
except (base64.binascii.Error, json.JSONDecodeError):
raise ResponseException('登录过期或无效Token,请刷新后重试')
else:
raise ResponseException('登录过期或无效Token,请刷新后重试')
pass
AltersDep = Annotated[AlterState, Depends(alterToken)]
# def authorize(redis:RedisDep, access_token: Optional[str] = Header(None)):
# if access_token is not None:
# info = readToken(access_token, redis)
# return info
# else:
# raise ResponseException('登录过期或无效Token,请刷新后重试')
# def unauthorize(redis:RedisDep, access_token: Optional[str] = Header(None)):
# if access_token is not None:
# return deleteToken(access_token, redis)
# TokenDep = Annotated[AlterState, Depends(authorize)]