From 634aba049d00dbb1f99dcd84b777736af750e51c Mon Sep 17 00:00:00 2001 From: BobCoderS9 <70191444+BobCoderS9@users.noreply.github.com> Date: Wed, 23 Jun 2021 12:06:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0v2rayN=E3=80=81v2rayN?= =?UTF-8?q?G=E3=80=81v2rayU=E5=AE=A2=E6=88=B7=E7=AB=AF=E8=AE=A2=E9=98=85?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=20(#180)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Components/Client/V2rayN.php | 44 +++++++++++++++++++++++ app/Http/Controllers/ClientController.php | 28 +++++++++++++++ resources/views/user/index.blade.php | 1 + 3 files changed, 73 insertions(+) create mode 100644 app/Components/Client/V2rayN.php diff --git a/app/Components/Client/V2rayN.php b/app/Components/Client/V2rayN.php new file mode 100644 index 00000000..c7137fcd --- /dev/null +++ b/app/Components/Client/V2rayN.php @@ -0,0 +1,44 @@ + '2', + 'ps' => $server['name'], + 'add' => $server['host'], + 'port' => $server['port'], + 'id' => $server['uuid'], + 'aid' => $server['v2_alter_id'], + 'net' => $server['v2_net'], + 'type' => $server['v2_type'], + 'host' => $server['v2_host'], + 'path' => $server['v2_path'], + 'tls' => $server['v2_tls'], + 'remark' => $server['name'], + ]; + + return 'vmess://'.base64_encode(json_encode($config)).PHP_EOL; + } + + public static function buildTrojan($server) + { + $name = rawurlencode($server['name']); + $query = ''; + if (array_key_exists('relay_server', $server)) { + $query = "?sni={$server['relay_server']}"; + } + + return "trojan://{$server['passwd']}@{$server['host']}:{$server['port']}{$query}#{$name}".PHP_EOL; + } +} diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index 3b53e620..041a3b4c 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -7,6 +7,7 @@ use App\Components\Client\QuantumultX; use App\Components\Client\Surfboard; use App\Components\Client\Surge; use App\Components\Client\URLSchemes; +use App\Components\Client\V2rayN; use App\Models\User; use File; use Symfony\Component\Yaml\Yaml; @@ -33,6 +34,15 @@ class ClientController extends Controller if (strpos($target, 'shadowrocket') !== false) { return $this->shadowrocket($user, $servers); } + if (strpos($target, 'v2rayn') !== false) { + return $this->v2rayN($servers); + } + if (strpos($target, 'v2rayng') !== false) { + return $this->v2rayN($servers); + } + if (strpos($target, 'v2rayu') !== false) { + return $this->v2rayN($servers); + } // if (strpos($target, 'shadowsocks') !== false) { // exit($this->shaodowsocksSIP008($servers)); // } @@ -222,4 +232,22 @@ class ClientController extends Controller return json_encode(['version' => 1, 'remark' => sysConfig('website_name'), 'servers' => $configs ?? []], JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); } + + private function v2rayN($servers) + { + $uri = ''; + foreach ($servers as $server) { + if ($server['type'] === 'shadowsocksr') { + $uri .= V2rayN::buildShadowsocksr($server); + } + if ($server['type'] === 'v2ray') { + $uri .= V2rayN::buildVmess($server); + } + if ($server['type'] === 'trojan') { + $uri .= V2rayN::buildTrojan($server); + } + } + + return base64_encode($uri); + } } diff --git a/resources/views/user/index.blade.php b/resources/views/user/index.blade.php index 0ab779b9..f6bd7a6c 100644 --- a/resources/views/user/index.blade.php +++ b/resources/views/user/index.blade.php @@ -170,6 +170,7 @@ + {{-- --}}