add support HWID
This commit is contained in:
@@ -13,6 +13,7 @@ from config import (
|
||||
CONNECT_PHONE_BUTTON,
|
||||
RENEWAL_PRICES,
|
||||
SUPPORT_CHAT_URL,
|
||||
DEFAULT_HWID_LIMIT
|
||||
)
|
||||
from database import (
|
||||
get_key_details,
|
||||
@@ -61,7 +62,17 @@ async def key_cluster_mode(
|
||||
|
||||
try:
|
||||
least_loaded_cluster = await get_least_loaded_cluster()
|
||||
await create_key_on_cluster(least_loaded_cluster, tg_id, client_id, email, expiry_timestamp, plan, session)
|
||||
await create_key_on_cluster(
|
||||
least_loaded_cluster,
|
||||
tg_id,
|
||||
client_id,
|
||||
email,
|
||||
expiry_timestamp,
|
||||
plan,
|
||||
session,
|
||||
hwid_limit=DEFAULT_HWID_LIMIT,
|
||||
)
|
||||
|
||||
logger.info(f"[Key Creation] Ключ создан на кластере {least_loaded_cluster} для пользователя {tg_id}")
|
||||
|
||||
key_record = await get_key_details(email, session)
|
||||
|
||||
@@ -23,6 +23,7 @@ from config import (
|
||||
REMNAWAVE_PASSWORD,
|
||||
RENEWAL_PRICES,
|
||||
SUPPORT_CHAT_URL,
|
||||
DEFAULT_HWID_LIMIT
|
||||
)
|
||||
from database import (
|
||||
add_user,
|
||||
@@ -352,6 +353,7 @@ async def finalize_key_creation(
|
||||
"expireAt": expire_at,
|
||||
"telegramId": tg_id,
|
||||
"activeUserInbounds": [server_info["inbound_id"]],
|
||||
"hwidDeviceLimit": DEFAULT_HWID_LIMIT,
|
||||
}
|
||||
result = await remna.create_user(user_data)
|
||||
if not result:
|
||||
|
||||
+11
-21
@@ -1,7 +1,7 @@
|
||||
import asyncio
|
||||
|
||||
from datetime import datetime, timezone
|
||||
from typing import Any
|
||||
from typing import Any, Optional
|
||||
|
||||
import asyncpg
|
||||
|
||||
@@ -14,6 +14,7 @@ from config import (
|
||||
REMNAWAVE_PASSWORD,
|
||||
SUPERNODE,
|
||||
TOTAL_GB,
|
||||
DEFAULT_HWID_LIMIT
|
||||
)
|
||||
from database import delete_notification, get_servers, store_key
|
||||
from handlers.utils import check_server_key_limit, get_least_loaded_cluster
|
||||
@@ -39,6 +40,7 @@ async def create_key_on_cluster(
|
||||
plan: int = None,
|
||||
session=None,
|
||||
remnawave_link: str = None,
|
||||
hwid_limit: Optional[int] = DEFAULT_HWID_LIMIT,
|
||||
):
|
||||
try:
|
||||
servers = await get_servers(include_enabled=True)
|
||||
@@ -65,13 +67,11 @@ async def create_key_on_cluster(
|
||||
async with asyncpg.create_pool(DATABASE_URL) as pool:
|
||||
async with pool.acquire() as conn:
|
||||
remnawave_servers = [
|
||||
s
|
||||
for s in enabled_servers
|
||||
s for s in enabled_servers
|
||||
if s.get("panel_type", "3x-ui").lower() == "remnawave" and await check_server_key_limit(s, conn)
|
||||
]
|
||||
xui_servers = [
|
||||
s
|
||||
for s in enabled_servers
|
||||
s for s in enabled_servers
|
||||
if s.get("panel_type", "3x-ui").lower() == "3x-ui" and await check_server_key_limit(s, conn)
|
||||
]
|
||||
|
||||
@@ -80,7 +80,6 @@ async def create_key_on_cluster(
|
||||
return
|
||||
|
||||
semaphore = asyncio.Semaphore(2)
|
||||
|
||||
remnawave_created = False
|
||||
remnawave_key = None
|
||||
remnawave_client_id = None
|
||||
@@ -113,6 +112,8 @@ async def create_key_on_cluster(
|
||||
|
||||
if short_uuid:
|
||||
user_data["shortUuid"] = short_uuid
|
||||
if hwid_limit is not None:
|
||||
user_data["hwidDeviceLimit"] = hwid_limit
|
||||
|
||||
result = await remna.create_user(user_data)
|
||||
if not result:
|
||||
@@ -130,25 +131,13 @@ async def create_key_on_cluster(
|
||||
if SUPERNODE:
|
||||
for server_info in xui_servers:
|
||||
await create_client_on_server(
|
||||
server_info,
|
||||
tg_id,
|
||||
final_client_id,
|
||||
email,
|
||||
expiry_timestamp,
|
||||
semaphore,
|
||||
plan=plan,
|
||||
server_info, tg_id, final_client_id, email, expiry_timestamp, semaphore, plan=plan
|
||||
)
|
||||
else:
|
||||
await asyncio.gather(
|
||||
*(
|
||||
create_client_on_server(
|
||||
server,
|
||||
tg_id,
|
||||
final_client_id,
|
||||
email,
|
||||
expiry_timestamp,
|
||||
semaphore,
|
||||
plan=plan,
|
||||
server, tg_id, final_client_id, email, expiry_timestamp, semaphore, plan=plan
|
||||
)
|
||||
for server in xui_servers
|
||||
),
|
||||
@@ -223,7 +212,7 @@ async def create_client_on_server(
|
||||
await asyncio.sleep(0.7)
|
||||
|
||||
|
||||
async def renew_key_in_cluster(cluster_id, email, client_id, new_expiry_time, total_gb):
|
||||
async def renew_key_in_cluster(cluster_id, email, client_id, new_expiry_time, total_gb, hwid_device_limit=DEFAULT_HWID_LIMIT):
|
||||
try:
|
||||
servers = await get_servers()
|
||||
cluster = servers.get(cluster_id)
|
||||
@@ -292,6 +281,7 @@ async def renew_key_in_cluster(cluster_id, email, client_id, new_expiry_time, to
|
||||
expire_at=expire_iso,
|
||||
active_user_inbounds=remnawave_inbound_ids,
|
||||
traffic_limit_bytes=total_gb,
|
||||
hwid_device_limit=DEFAULT_HWID_LIMIT,
|
||||
)
|
||||
if updated:
|
||||
logger.info(f"Подписка Remnawave {client_id} успешно продлена")
|
||||
|
||||
Reference in New Issue
Block a user