From b79b0ae69f05c92d66600cef0359c3a2efefbccd Mon Sep 17 00:00:00 2001 From: DIKER0K Date: Thu, 17 Jul 2025 02:38:24 +0500 Subject: [PATCH] feat: auto remove old skim user --- auth/app/auth.py | 42 ++++++++++++++++++++++++++++++++---------- auth/app/database.py | 6 ++++-- auth/app/utils.py | 8 ++++++-- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/auth/app/auth.py b/auth/app/auth.py index b0a9483..cb144fc 100644 --- a/auth/app/auth.py +++ b/auth/app/auth.py @@ -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 + # Создаем папку для скинов, если ее нет - import os 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)") - # Создаем папку для плащей, если ее нет - import os + # Удаляем старый плащ, если есть + 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": { diff --git a/auth/app/database.py b/auth/app/database.py index 9a52761..027fd4a 100644 --- a/auth/app/database.py +++ b/auth/app/database.py @@ -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) diff --git a/auth/app/utils.py b/auth/app/utils.py index 3897ce0..82db937 100644 --- a/auth/app/utils.py +++ b/auth/app/utils.py @@ -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 часа