import aiohttp # Для выполнения HTTP-запросов from loguru import logger from database.db_main import User, session from datetime import datetime from .crypto import decrypt_password # Функция для отправки POST-запроса к API и получения токена async def get_token_from_api(email, password): url = "https://api.otask.ru/api/v1/auth/login" headers = { "Content-Type": "application/json", "Accept": "application/json" } body = { "email": email, "password": password } async with aiohttp.ClientSession() as session: async with session.post(url, headers=headers, json=body) as response: if response.status == 200: return await response.json() # Возвращаем токен, если запрос успешен else: logger.error(f"Failed to get token. Status code: {response.status}") return None # Функция для обновления токена async def update_token(user: User): # Выполняем запрос на обновление токена new_tokens = await get_token_from_api(user.name, decrypt_password(user.password)) # Получаем новый токен if new_tokens: user.token = new_tokens['token'] user.refresh_token = new_tokens['refresh_token'] user.expires_in = new_tokens['expires_in'] # Если у вас есть это поле в модели user.last_token_update = datetime.now() # Обновляем дату последнего обновления токена session.commit() logger.info(f"Токен обновлён для пользователя: {user.telegram_id}") else: logger.warning(f"Не удалось обновить токен для пользователя: {user.telegram_id}")