83 lines
2.3 KiB
Python
83 lines
2.3 KiB
Python
import asyncio
|
|
import time
|
|
import uuid
|
|
|
|
from datetime import datetime, timedelta, timezone
|
|
|
|
import pytz
|
|
|
|
from aiogram import F, Router, types
|
|
from aiogram.exceptions import TelegramBadRequest
|
|
from aiogram.fsm.context import FSMContext
|
|
from aiogram.types import CallbackQuery, InlineKeyboardButton, Message
|
|
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from config import REMNAWAVE_LOGIN, REMNAWAVE_PASSWORD, REMNAWAVE_TOKEN_LOGIN_ENABLED, USE_COUNTRY_SELECTION
|
|
from core.bootstrap import MODES_CONFIG
|
|
from database import (
|
|
check_server_name_by_cluster,
|
|
delete_key,
|
|
delete_user_data,
|
|
get_active_tariffs_by_group_code,
|
|
get_key_by_email,
|
|
get_key_details,
|
|
get_keys,
|
|
get_server_names,
|
|
get_servers,
|
|
get_tariff_by_id,
|
|
get_tariffs_for_cluster,
|
|
mark_key_as_frozen,
|
|
mark_key_as_unfrozen,
|
|
save_admin_key_config,
|
|
update_key_expiry,
|
|
update_key_subscription_links,
|
|
)
|
|
from database.models import Key
|
|
from filters.admin import IsAdminFilter
|
|
from handlers.buttons import BACK
|
|
from handlers.utils import generate_random_email, handle_error
|
|
from hooks.hook_buttons import insert_hook_buttons
|
|
from hooks.processors import process_admin_key_edit_menu
|
|
from logger import logger
|
|
from middlewares.session import release_session_early
|
|
from panels.remnawave import RemnawaveAPI
|
|
from services.operations import (
|
|
create_key_on_cluster,
|
|
delete_key_from_cluster,
|
|
get_user_traffic,
|
|
renew_key_in_cluster,
|
|
reset_traffic_in_cluster,
|
|
toggle_client_on_cluster,
|
|
update_subscription,
|
|
)
|
|
from services.users_utils import resolve_admin_key
|
|
|
|
from ...panel.keyboard import AdminPanelCallback, build_admin_back_btn, build_admin_back_kb
|
|
from ..keyboard import (
|
|
AdminUserEditorCallback,
|
|
AdminUserKeyEditorCallback,
|
|
build_cluster_selection_kb,
|
|
build_editor_kb,
|
|
build_key_delete_kb,
|
|
build_key_edit_kb,
|
|
build_reissue_menu_kb,
|
|
build_user_delete_kb,
|
|
build_users_key_expiry_kb,
|
|
build_users_key_show_kb,
|
|
)
|
|
from ..users_states import RenewTariffState, UserEditorState
|
|
|
|
|
|
MOSCOW_TZ = pytz.timezone("Europe/Moscow")
|
|
|
|
router = Router()
|
|
|
|
|
|
async def resolve_callback_key(
|
|
session: AsyncSession,
|
|
tg_id: int,
|
|
key_ref: str | int | None,
|
|
) -> Key | None:
|
|
return await resolve_admin_key(session, tg_id, key_ref)
|