feat: auto remove old skim user

This commit is contained in:
2025-07-17 02:38:24 +05:00
parent df62efc692
commit b79b0ae69f
3 changed files with 42 additions and 14 deletions

View File

@ -16,9 +16,10 @@ from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding from cryptography.hazmat.primitives.asymmetric import padding
from dotenv import load_dotenv from dotenv import load_dotenv
import os import os
from pathlib import Path
load_dotenv() env_path = Path(__file__).parent.parent / ".env"
load_dotenv(dotenv_path=env_path)
FILES_URL = os.getenv("FILES_URL") FILES_URL = os.getenv("FILES_URL")
class AuthService: class AuthService:
@ -219,8 +220,22 @@ class AuthService:
if len(contents) > max_size: if len(contents) > max_size:
raise HTTPException(status_code=400, detail="File too large (max 2MB)") raise HTTPException(status_code=400, detail="File too large (max 2MB)")
# Создаем папку для скинов, если ее нет # Удаляем старый скин, если есть
user = await users_collection.find_one({"username": username})
if user and user.get("skin_url"):
from urllib.parse import urlparse
import os import os
old_url = user["skin_url"]
# Получаем имя файла из url
old_filename = os.path.basename(urlparse(old_url).path)
old_path = os.path.join("skins", old_filename)
if os.path.exists(old_path):
try:
os.remove(old_path)
except Exception:
pass
# Создаем папку для скинов, если ее нет
from pathlib import Path from pathlib import Path
skin_dir = Path("skins") skin_dir = Path("skins")
skin_dir.mkdir(exist_ok=True) skin_dir.mkdir(exist_ok=True)
@ -271,7 +286,6 @@ class AuthService:
async def set_cape(self, username: str, cape_file: UploadFile): async def set_cape(self, username: str, cape_file: UploadFile):
"""Установка или замена плаща через загрузку файла (PNG или GIF)""" """Установка или замена плаща через загрузку файла (PNG или GIF)"""
# Проверяем тип файла
if not cape_file.content_type.startswith('image/'): if not cape_file.content_type.startswith('image/'):
raise HTTPException(status_code=400, detail="File must be an image") raise HTTPException(status_code=400, detail="File must be an image")
@ -284,27 +298,35 @@ class AuthService:
else: else:
raise HTTPException(status_code=400, detail="Only PNG and GIF capes are supported") raise HTTPException(status_code=400, detail="Only PNG and GIF capes are supported")
# Проверяем размер файла (максимум 2MB)
max_size = 2 * 1024 * 1024 # 2MB max_size = 2 * 1024 * 1024 # 2MB
contents = await cape_file.read() contents = await cape_file.read()
if len(contents) > max_size: if len(contents) > max_size:
raise HTTPException(status_code=400, detail="File too large (max 2MB)") raise HTTPException(status_code=400, detail="File too large (max 2MB)")
# Создаем папку для плащей, если ее нет # Удаляем старый плащ, если есть
user = await users_collection.find_one({"username": username})
if user and user.get("cloak_url"):
from urllib.parse import urlparse
import os import os
old_url = user["cloak_url"]
old_filename = os.path.basename(urlparse(old_url).path)
old_path = os.path.join("capes", old_filename)
if os.path.exists(old_path):
try:
os.remove(old_path)
except Exception:
pass
from pathlib import Path from pathlib import Path
cape_dir = Path("capes") cape_dir = Path("capes")
cape_dir.mkdir(exist_ok=True) cape_dir.mkdir(exist_ok=True)
# Генерируем имя файла с правильным расширением
cape_filename = f"{username}_{int(datetime.now().timestamp())}.{ext}" cape_filename = f"{username}_{int(datetime.now().timestamp())}.{ext}"
cape_path = cape_dir / cape_filename cape_path = cape_dir / cape_filename
# Сохраняем файл
with open(cape_path, "wb") as f: with open(cape_path, "wb") as f:
f.write(contents) f.write(contents)
# Обновляем запись пользователя
result = await users_collection.update_one( result = await users_collection.update_one(
{"username": username}, {"username": username},
{"$set": { {"$set": {

View File

@ -1,10 +1,12 @@
from motor.motor_asyncio import AsyncIOMotorClient from motor.motor_asyncio import AsyncIOMotorClient
from dotenv import load_dotenv from dotenv import load_dotenv
import os import os
from pathlib import Path
load_dotenv() env_path = Path(__file__).parent.parent / ".env"
load_dotenv(dotenv_path=env_path)
MONGO_URI = os.getenv("MONGO_URI", "mongodb://localhost:32768") MONGO_URI = os.getenv("MONGO_URI")
DB_NAME = "minecraft_auth" DB_NAME = "minecraft_auth"
client = AsyncIOMotorClient(MONGO_URI) client = AsyncIOMotorClient(MONGO_URI)

View File

@ -2,9 +2,13 @@ from jose import jwt, JWTError
from passlib.context import CryptContext from passlib.context import CryptContext
from datetime import datetime, timedelta from datetime import datetime, timedelta
import os import os
from pathlib import Path
from dotenv import load_dotenv
# Настройки env_path = Path(__file__).parent.parent / ".env"
SECRET_KEY = os.getenv("SECRET_KEY", "secret") load_dotenv(dotenv_path=env_path)
SECRET_KEY = os.getenv("SECRET_KEY")
ALGORITHM = "HS256" ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 1440 # 24 часа ACCESS_TOKEN_EXPIRE_MINUTES = 1440 # 24 часа