"""Вход в админку через deep-link из установленного Telegram.""" from __future__ import annotations from aiogram import Router from aiogram.filters import Command from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message from common.config import get_settings from common.repositories import admin_login_tokens_repo, admins_repo from common.texts import system router = Router(name="login") @router.message(Command("start")) async def start_handler(message: Message) -> None: """Обработать /start; payload ``login_`` подтверждает вход в админку.""" if message.chat.type != "private" or message.from_user is None: return parts = (message.text or "").split(maxsplit=1) payload = parts[1].strip() if len(parts) > 1 else "" if not payload.startswith("login_"): await message.answer(system.MSG_START) return admin = await admins_repo.get_admin(message.from_user.id) if admin is None or not admin["enabled"]: await message.answer(system.MSG_LOGIN_DENIED) return if not await admin_login_tokens_repo.confirm_token(payload[6:], message.from_user.id): await message.answer(system.MSG_LOGIN_INVALID) return settings = get_settings() markup = None if settings.admin_public_url.startswith(("http://", "https://")): markup = InlineKeyboardMarkup( inline_keyboard=[ [ InlineKeyboardButton( text="Вернуться в админку", url=settings.admin_public_url.rstrip("/") + "/login", ) ] ] ) await message.answer(system.MSG_LOGIN_CONFIRMED, reply_markup=markup)