test/custom-admin-ui #3

Merged
orion merged 673 commits from test/custom-admin-ui into master 2026-06-05 17:20:58 +08:00
4 changed files with 9 additions and 6 deletions
Showing only changes of commit b9f9ce6f8c - Show all commits
+1
View File
@@ -12,6 +12,7 @@ from core.response import APIResponse
class IPRateLimit: class IPRateLimit:
def __init__(self, count, minutes): def __init__(self, count, minutes):
print(count, minutes)
self.ips = {} self.ips = {}
self.count = count self.count = count
self.minutes = minutes self.minutes = minutes
+3 -2
View File
@@ -9,6 +9,7 @@ from fastapi import UploadFile
from apps.base.depends import IPRateLimit from apps.base.depends import IPRateLimit
from apps.base.models import FileCodes from apps.base.models import FileCodes
from core.settings import settings
from core.utils import get_random_num, get_random_string from core.utils import get_random_num, get_random_string
@@ -73,6 +74,6 @@ async def get_random_code(style='num'):
# 错误IP限制器 # 错误IP限制器
error_ip_limit = IPRateLimit(1, 1) error_ip_limit = IPRateLimit(count=settings.errorCount, minutes=settings.errorMinute)
# 上传文件限制器 # 上传文件限制器
upload_ip_limit = IPRateLimit(10, 1) upload_ip_limit = IPRateLimit(count=settings.uploadCount, minutes=settings.errorMinute)
+5 -3
View File
@@ -8,7 +8,7 @@ from starlette.responses import FileResponse
from apps.admin.depends import admin_required from apps.admin.depends import admin_required
from apps.base.models import FileCodes from apps.base.models import FileCodes
from apps.base.pydantics import SelectFileModel from apps.base.pydantics import SelectFileModel
from apps.base.utils import get_expire_info, get_file_path_name, error_ip_limit from apps.base.utils import get_expire_info, get_file_path_name, error_ip_limit, upload_ip_limit
from core.response import APIResponse from core.response import APIResponse
from core.settings import settings from core.settings import settings
from core.storage import file_storage from core.storage import file_storage
@@ -20,7 +20,7 @@ share_api = APIRouter(
@share_api.post('/text/', dependencies=[Depends(admin_required)]) @share_api.post('/text/', dependencies=[Depends(admin_required)])
async def share_text(text: str = Form(...), expire_value: int = Form(default=1, gt=0), expire_style: str = Form(default='day')): async def share_text(text: str = Form(...), expire_value: int = Form(default=1, gt=0), expire_style: str = Form(default='day'), ip: str = Depends(upload_ip_limit)):
expired_at, expired_count, used_count, code = await get_expire_info(expire_value, expire_style) expired_at, expired_count, used_count, code = await get_expire_info(expire_value, expire_style)
await FileCodes.create( await FileCodes.create(
code=code, code=code,
@@ -31,13 +31,14 @@ async def share_text(text: str = Form(...), expire_value: int = Form(default=1,
size=len(text), size=len(text),
prefix='文本分享' prefix='文本分享'
) )
upload_ip_limit.add_ip(ip)
return APIResponse(detail={ return APIResponse(detail={
'code': code, 'code': code,
}) })
@share_api.post('/file/', dependencies=[Depends(admin_required)]) @share_api.post('/file/', dependencies=[Depends(admin_required)])
async def share_file(expire_value: int = Form(default=1, gt=0), expire_style: str = Form(default='day'), file: UploadFile = File(...)): async def share_file(expire_value: int = Form(default=1, gt=0), expire_style: str = Form(default='day'), file: UploadFile = File(...), ip: str = Depends(upload_ip_limit)):
if file.size > settings.uploadSize: if file.size > settings.uploadSize:
raise HTTPException(status_code=403, detail=f'文件大小超过限制,最大为{settings.uploadSize}字节') raise HTTPException(status_code=403, detail=f'文件大小超过限制,最大为{settings.uploadSize}字节')
expired_at, expired_count, used_count, code = await get_expire_info(expire_value, expire_style) expired_at, expired_count, used_count, code = await get_expire_info(expire_value, expire_style)
@@ -54,6 +55,7 @@ async def share_file(expire_value: int = Form(default=1, gt=0), expire_style: st
expired_count=expired_count, expired_count=expired_count,
used_count=used_count, used_count=used_count,
) )
upload_ip_limit.add_ip(ip)
return APIResponse(detail={ return APIResponse(detail={
'code': code, 'code': code,
'name': file.filename, 'name': file.filename,
-1
View File
@@ -44,7 +44,6 @@ class Settings:
if value.isdigit(): if value.isdigit():
value = int(value) value = int(value)
default_value[key] = value default_value[key] = value
# 更新self # 更新self
for key, value in default_value.items(): for key, value in default_value.items():
self.__setattr__(key, value) self.__setattr__(key, value)