From 1f4367637e4607d3776512d8a3a7c6aa37782c31 Mon Sep 17 00:00:00 2001 From: xboard Date: Mon, 20 Jan 2025 03:45:32 +0800 Subject: [PATCH] feat(subscribe): add vless support for loon --- app/Protocols/Loon.php | 53 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/app/Protocols/Loon.php b/app/Protocols/Loon.php index a30478a..bd21b44 100644 --- a/app/Protocols/Loon.php +++ b/app/Protocols/Loon.php @@ -154,6 +154,59 @@ class Loon implements ProtocolInterface return $uri; } + public static function buildVless($uuid, $server) + { + $protocol_settings = $server['protocol_settings']; + $config = [ + "{$server['name']}=vless", + $server['host'], + $server['port'], + $uuid, + 'fast-open=false', + 'udp=true', + 'alterId=0' + ]; + switch ((int) data_get($protocol_settings, 'tls')) { + case 1: + $config[] = 'over-tls=true'; + $tlsSettings = data_get($protocol_settings, 'tls_settings', []); + if ($tlsSettings) { + $config[] = 'skip-cert-verify=' . (data_get($tlsSettings, 'allow_insecure') ? 'true' : 'false'); + if ($serverName = data_get($tlsSettings, 'server_name')) { + $config[] = "tls-name={$serverName}"; + } + } + break; + case 2: + return ''; + } + $network_settings = data_get($protocol_settings, 'network_settings', []); + switch ((string) data_get($network_settings, 'network')) { + case 'tcp': + $config[] = 'transport=tcp'; + if ($headerType = data_get($network_settings, 'header.type')) { + $config = collect($config)->map(function ($item) use ($headerType) { + return $item === 'transport=tcp' ? "transport={$headerType}" : $item; + })->toArray(); + } + if ($paths = data_get($network_settings, 'header.request.path')) { + $config[] = 'path=' . $paths[array_rand($paths)]; + } + break; + case 'ws': + $config[] = 'transport=ws'; + if ($path = data_get($network_settings, 'path')) { + $config[] = "path={$path}"; + } + + if ($host = data_get($network_settings, 'headers.Host')) { + $config[] = "host={$host}"; + } + break; + } + return implode(',', $config) . "\r\n"; + } + public static function buildHysteria($password, $server, $user) { $protocol_settings = $server['protocol_settings'];