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