From e98b340393ba8f7bca37ea8f6c3c240f7efd9ec8 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 30 Jun 2026 17:40:14 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B7=D0=B0=D0=B3=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=B4=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D1=85=20datacl?= =?UTF-8?q?ass=20Outbound?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/xray_manager/core/outbound.py | 33 ++++++++++++++++++++++++ src/xray_manager/core/outbound_fields.py | 29 +++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/xray_manager/core/outbound.py create mode 100644 src/xray_manager/core/outbound_fields.py diff --git a/src/xray_manager/core/outbound.py b/src/xray_manager/core/outbound.py new file mode 100644 index 0000000..7007541 --- /dev/null +++ b/src/xray_manager/core/outbound.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +import secrets +import uuid +from abc import ABC, abstractmethod +from collections import defaultdict +from dataclasses import dataclass, make_dataclass +from typing import TYPE_CHECKING, TypeVar +from urllib.parse import parse_qs, quote, unquote, urlencode, urlparse + +from .outbound_fields import OUTBOUND_FIELDS + + +class Outbound(ABC): + pass + + +_ShadowsocksFields = make_dataclass( + "_ShadowsocksFields", fields=OUTBOUND_FIELDS["shadowsocks"] +) + + +class ShadowsocksOutbound(_ShadowsocksFields, Outbound): + pass + + +_VlessFields = make_dataclass( + "_VlessFieldss", fields=OUTBOUND_FIELDS["vless"] +) + + +class VlessOutbound(_VlessFields, Outbound): + pass \ No newline at end of file diff --git a/src/xray_manager/core/outbound_fields.py b/src/xray_manager/core/outbound_fields.py new file mode 100644 index 0000000..d581614 --- /dev/null +++ b/src/xray_manager/core/outbound_fields.py @@ -0,0 +1,29 @@ +from dataclasses import field + + +_BASE_FIELDS = [ + ("host", str), + ("port", str), + ("target", str), +] + + +OUTBOUND_FIELDS = { + "shadowsocks": _BASE_FIELDS + [ + ("method", str), + ("server_password", str), + ("client_password", str), + ], + "vless": _BASE_FIELDS + [ + ("id", str), + ("security", str), + ("encryption", str), + ("public_key", str), + ("network_type", str), + ("sni", str), + ("short_id", str), + ("flow", str, field(default="xtls-rprx-vision")), + ("header_type", str, field(default="none")), + ("finger_print", str, field(default="chrome")) + ], +} \ No newline at end of file