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 dotenv import load_dotenv
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")
class AuthService:
@ -219,8 +220,22 @@ class AuthService:
if len(contents) > max_size:
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
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
skin_dir = Path("skins")
skin_dir.mkdir(exist_ok=True)
@ -271,7 +286,6 @@ class AuthService:
async def set_cape(self, username: str, cape_file: UploadFile):
"""Установка или замена плаща через загрузку файла (PNG или GIF)"""
# Проверяем тип файла
if not cape_file.content_type.startswith('image/'):
raise HTTPException(status_code=400, detail="File must be an image")
@ -284,27 +298,35 @@ class AuthService:
else:
raise HTTPException(status_code=400, detail="Only PNG and GIF capes are supported")
# Проверяем размер файла (максимум 2MB)
max_size = 2 * 1024 * 1024 # 2MB
contents = await cape_file.read()
if len(contents) > max_size:
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
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
cape_dir = Path("capes")
cape_dir.mkdir(exist_ok=True)
# Генерируем имя файла с правильным расширением
cape_filename = f"{username}_{int(datetime.now().timestamp())}.{ext}"
cape_path = cape_dir / cape_filename
# Сохраняем файл
with open(cape_path, "wb") as f:
f.write(contents)
# Обновляем запись пользователя
result = await users_collection.update_one(
{"username": username},
{"$set": {

View File

@ -1,10 +1,12 @@
from motor.motor_asyncio import AsyncIOMotorClient
from dotenv import load_dotenv
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"
client = AsyncIOMotorClient(MONGO_URI)

View File

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