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 @@
+
{{-- --}}