65 lines
2.8 KiB
Python
65 lines
2.8 KiB
Python
|
|
import requests
|
|
from config import GET_INBOUNDS_URL, AUTH_URL, DOMEN
|
|
import json
|
|
|
|
def login_with_credentials(username, password):
|
|
auth_url = AUTH_URL
|
|
data = {
|
|
"username": username,
|
|
"password": password
|
|
}
|
|
response = requests.post(auth_url, json=data)
|
|
if response.status_code == 200:
|
|
session = requests.Session()
|
|
session.cookies.update(response.cookies)
|
|
return session
|
|
else:
|
|
raise Exception(f"Ошибка авторизации: {response.status_code}, {response.text}")
|
|
|
|
def get_clients(session):
|
|
response = session.get(GET_INBOUNDS_URL)
|
|
if response.status_code == 200:
|
|
return response.json() # Возвращает данные по инбаундам и клиентам
|
|
else:
|
|
raise Exception(f"Ошибка при получении клиентов: {response.status_code}, {response.text}")
|
|
|
|
def link(session, user_id: str):
|
|
"""
|
|
Получение ссылки для подключения по ID пользователя.
|
|
:param session: requests.Session - авторизованная сессия
|
|
:param user_id: str - идентификатор пользователя (email или другой параметр)
|
|
:return: str - ссылка для подключения
|
|
"""
|
|
client_id = ''
|
|
|
|
# Получаем список клиентов через API
|
|
response = get_clients(session)
|
|
|
|
if 'obj' not in response or len(response['obj']) == 0:
|
|
raise Exception("Не удалось получить данные клиентов.")
|
|
|
|
# Извлекаем данные клиента
|
|
inbounds = response['obj'][0] # Убедитесь, что это правильный индекс
|
|
settings = json.loads(inbounds['settings'])
|
|
|
|
# Ищем клиента по user_id
|
|
for client in settings["clients"]:
|
|
if client['email'] == user_id:
|
|
client_id = client["id"]
|
|
break
|
|
|
|
if not client_id:
|
|
raise Exception(f"Клиент с идентификатором {user_id} не найден.")
|
|
|
|
# Получаем streamSettings и генерируем ссылку
|
|
stream_settings = json.loads(inbounds['streamSettings'])
|
|
tcp = stream_settings.get('network', 'tcp') # Предположим, по умолчанию 'tcp'
|
|
reality = stream_settings.get('security', 'reality') # Предположим, по умолчанию 'reality'
|
|
flow = stream_settings.get('flow', 'xtls-rprx-vision') # Предположим, по умолчанию 'xtls-rprx-vision'
|
|
email = user_id
|
|
|
|
# Создание ссылки для подключения VLESS
|
|
val = f"vless://{client_id}@{DOMEN}?type={tcp}&security={reality}&fp=chrome&pbk=ZIMoEnEd8-qMJkReVU5JxbiEj8CCSrvpm_ckvJ-46TE&sni=yahoo.com&sid=0fb4b595&spx=%2F&flow={flow}#VPN_F-{email}"
|
|
|
|
return val |