This commit is contained in:
2025-04-18 01:44:02 +08:00
parent 55057185c6
commit e99b91bcff
13 changed files with 737 additions and 530 deletions

View File

@@ -1,2 +1,3 @@
from . import admin
from . import session
from . import session
from . import object

View File

@@ -1,14 +1,15 @@
from nicegui import app
from fastapi import APIRouter
from typing import Annotated, Optional
from fastapi import Depends
from fastapi import HTTPException, status
from jwt import InvalidTokenError
import jwt, JWT
from model import database
from model import token as Token
from model.response import DefaultResponse
from model.items import Item
Router = APIRouter(prefix='/api/admin', tags=['admin'])
async def is_admin(token: Annotated[str, Depends(JWT.oauth2_scheme)]):
credentials_exception = HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
@@ -26,13 +27,13 @@ async def is_admin(token: Annotated[str, Depends(JWT.oauth2_scheme)]):
raise credentials_exception
return True
@app.get('/api/admin')
@Router.get('/')
async def is_admin(
is_admin: Annotated[str, Depends(is_admin)]
):
return is_admin
@app.get('/api/admin/items')
@Router.get('/items')
async def get_items(
is_admin: Annotated[str, Depends(is_admin)],
id: int = None,
@@ -62,7 +63,7 @@ async def get_items(
else:
return DefaultResponse(data=[])
@app.post('/api/admin/items')
@Router.post('/items')
async def add_items(
is_admin: Annotated[str, Depends(is_admin)],
key: str,
@@ -72,7 +73,7 @@ async def add_items(
await database.Database().add_object(
key=key, name=name, icon=icon, phone=phone)
@app.patch('/api/admin/items')
@Router.patch('/items')
async def update_items(
is_admin: Annotated[str, Depends(is_admin)],
id: int,
@@ -96,7 +97,7 @@ async def update_items(
else:
return DefaultResponse()
@app.delete('/api/admin/items')
@Router.delete('/items')
async def delete_items(
is_admin: Annotated[str, Depends(is_admin)],
id: int):

39
routes/backend/object.py Normal file
View File

@@ -0,0 +1,39 @@
import random
from fastapi import APIRouter, Request
from fastapi.responses import JSONResponse
from model.database import Database
from model.response import DefaultResponse
import asyncio
Router = APIRouter(prefix='/api/object', tags=['object'])
@Router.get('/{item_key}')
async def get_object(item_key: str, request: Request):
"""
获取物品信息 / Get object information
"""
db = Database()
await db.init_db()
object_data = await db.get_object(key=item_key)
if object_data:
if object_data[4] == 'lost':
# 物品已标记为丢失更新IP地址
await db.update_object(id=object_data[0], find_ip=str(request.client.host))
# 添加一些随机延迟类似JWT身份验证时根据延迟爆破引发的问题
await asyncio.sleep(random.uniform(0.10, 0.30))
else:
await asyncio.sleep(random.uniform(0.10, 0.30))
return DefaultResponse(
data=object_data
)
else: return JSONResponse(
status_code=404,
content=DefaultResponse(
code=404,
msg='物品不存在或出现异常'
).model_dump()
)