43 lines
1.9 KiB
Python
43 lines
1.9 KiB
Python
|
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}")
|
|||
|
|
|||
|
|