From f3625ea970468df984ae14fe00225119bfce1fe4 Mon Sep 17 00:00:00 2001 From: Petro1990 Date: Wed, 26 Nov 2025 11:04:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BA=D0=BD?= =?UTF-8?q?=D0=BE=D0=BF=D0=BA=D1=83=20=D0=A4=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mihomo_editor.py | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/mihomo_editor.py b/mihomo_editor.py index eb172a7..9c5ff3a 100644 --- a/mihomo_editor.py +++ b/mihomo_editor.py @@ -124,6 +124,9 @@ def parse_wireguard(config_text): server, port = peer.get('Endpoint', ':').rsplit(':', 1) + # 3. `Address` из `.conf` файла должен быть разделен на `ip` и `prefix` + ip_address = interface.get("Address", "").split("/")[0] + y = [ f'- name: "{name}"', ' type: wireguard', @@ -131,12 +134,21 @@ def parse_wireguard(config_text): f' port: {port}', f' private-key: "{interface.get("PrivateKey")}"', f' public-key: "{peer.get("PublicKey")}"', - f' ip: "{interface.get("Address").split("/")[0]}"' + f' ip: {ip_address}' ] - + + # 2. Значения для `dns` и `allowed-ips` должны быть представлены в виде списков if interface.get('DNS'): dns_servers = [d.strip() for d in interface.get('DNS').split(',')] - y.append(f' dns: {dns_servers}') + y.append(' dns:') + for d in dns_servers: + y.append(f' - {d}') + + if peer.get('AllowedIPs'): + allowed_ips = [ip.strip() for ip in peer.get('AllowedIPs').split(',')] + y.append(' allowed-ips:') + for ip in allowed_ips: + y.append(f' - "{ip}"') if peer.get('PresharedKey'): y.append(f' preshared-key: "{peer.get("PresharedKey")}"') @@ -144,23 +156,14 @@ def parse_wireguard(config_text): if peer.get('PersistentKeepalive'): y.append(f' keep-alive: {peer.get("PersistentKeepalive")}') - amnezia_opts = { - 'Jc': interface.get('Jc'), - 'Jmin': interface.get('Jmin'), - 'Jmax': interface.get('Jmax'), - 'S1': interface.get('S1'), - 'S2': interface.get('S2'), - 'H1': interface.get('H1'), - 'H2': interface.get('H2'), - 'H3': interface.get('H3'), - 'H4': interface.get('H4') - } - - if any(v is not None for v in amnezia_opts.values()): - y.append(' amnezia-wg-opts:') + # 1. Параметры AmneziaWG должны быть сгруппированы во вложенном словаре + amnezia_keys = ['Jc', 'Jmin', 'Jmax', 'S1', 'S2', 'H1', 'H2', 'H3', 'H4'] + amnezia_opts = {key: interface.get(key) for key in amnezia_keys if interface.get(key) is not None} + + if amnezia_opts: + y.append(' amnezia-wg-option:') for key, value in amnezia_opts.items(): - if value is not None: - y.append(f' {key.lower()}: {value}') + y.append(f' {key}: {value}') return {"yaml": "\n".join(y), "name": name}, None