Pārlūkot izejas kodu

support trojan surge

Tokumeikoi 4 gadi atpakaļ
vecāks
revīzija
bf915214dd

+ 20 - 27
app/Http/Controllers/Client/ClientController.php

@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
 use App\Services\ServerService;
 use App\Utils\Clash;
 use App\Utils\QuantumultX;
+use App\Utils\Surge;
 use Illuminate\Http\Request;
 use App\Models\Server;
 use App\Utils\Helper;
@@ -24,20 +25,21 @@ class ClientController extends Controller
             $servers = $serverService->getAllServers($user);
         }
         if (isset($_SERVER['HTTP_USER_AGENT'])) {
-            if (strpos($_SERVER['HTTP_USER_AGENT'], 'Quantumult%20X') !== false) {
+            $_SERVER['HTTP_USER_AGENT'] = strtolower($_SERVER['HTTP_USER_AGENT']);
+            if (strpos($_SERVER['HTTP_USER_AGENT'], 'quantumult%20x') !== false) {
                 die($this->quantumultX($user, $servers['vmess'], $servers['trojan']));
             }
-            if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'clash') !== false) {
+            if (strpos($_SERVER['HTTP_USER_AGENT'], 'clash') !== false) {
                 die($this->clash($user, $servers['vmess'], $servers['trojan']));
             }
-            if (strpos($_SERVER['HTTP_USER_AGENT'], 'Surfboard') !== false) {
+            if (strpos($_SERVER['HTTP_USER_AGENT'], 'surfboard') !== false) {
                 die($this->surfboard($user, $servers['vmess']));
             }
-            if (strpos($_SERVER['HTTP_USER_AGENT'], 'Surge') !== false) {
-                die($this->surge($user, $servers['vmess']));
+            if (strpos($_SERVER['HTTP_USER_AGENT'], 'surge') !== false) {
+                die($this->surge($user, $servers['vmess'], $servers['trojan']));
             }
+            die($this->origin($user, $servers['vmess'], $servers['trojan']));
         }
-        die($this->origin($user, $servers['vmess'], $servers['trojan']));
     }
 
     private function quantumultX($user, $vmess = [], $trojan = [])
@@ -64,29 +66,20 @@ class ClientController extends Controller
         return base64_encode($uri);
     }
 
-    private function surge($user, $vmess = [])
+    private function surge($user, $vmess = [], $trojan = [])
     {
         $proxies = '';
         $proxyGroup = '';
         foreach ($vmess as $item) {
             // [Proxy]
-            $proxies .= $item->name . ' = vmess, ' . $item->host . ', ' . $item->port . ', username=' . $user->uuid . ', tfo=true';
-            if ($item->tls) {
-                $tlsSettings = json_decode($item->tlsSettings);
-                $proxies .= ', tls=' . ($item->tls ? "true" : "false");
-                if (isset($tlsSettings->allowInsecure)) {
-                  $proxies .= ', skip-cert-verify=' . ($tlsSettings->allowInsecure ? "true" : "false");
-                }
-            }
-            if ($item->network == 'ws') {
-                $proxies .= ', ws=true';
-                if ($item->networkSettings) {
-                    $wsSettings = json_decode($item->networkSettings);
-                    if (isset($wsSettings->path)) $proxies .= ', ws-path=' . $wsSettings->path;
-                    if (isset($wsSettings->headers->Host)) $proxies .= ', ws-headers=host:' . $wsSettings->headers->Host;
-                }
-            }
-            $proxies .= "\r\n";
+            $proxies .= Surge::buildVmess($user->uuid, $item);
+            // [Proxy Group]
+            $proxyGroup .= $item->name . ', ';
+        }
+
+        foreach ($trojan as $item) {
+            // [Proxy]
+            $proxies .= Surge::buildTrojan($user->uuid, $item);
             // [Proxy Group]
             $proxyGroup .= $item->name . ', ';
         }
@@ -111,9 +104,9 @@ class ClientController extends Controller
             $subsURL .= $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
         }
 
-        $config = str_replace('$subs_link',$subsURL,$config);
-        $config = str_replace('$proxies',$proxies,$config);
-        $config = str_replace('$proxy_group',rtrim($proxyGroup, ', '),$config);
+        $config = str_replace('$subs_link', $subsURL, $config);
+        $config = str_replace('$proxies', $proxies, $config);
+        $config = str_replace('$proxy_group', rtrim($proxyGroup, ', '), $config);
         return $config;
     }
 

+ 36 - 0
app/Utils/Surge.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace App\Utils;
+
+
+class Surge
+{
+    public static function buildVmess($uuid, $server)
+    {
+        $proxies = $server->name . ' = vmess, ' . $server->host . ', ' . $server->port . ', username=' . $uuid . ', tfo=true';
+        if ($server->tls) {
+            $tlsSettings = json_decode($server->tlsSettings);
+            $proxies .= ', tls=' . ($server->tls ? "true" : "false");
+            if (isset($tlsSettings->allowInsecure)) {
+                $proxies .= ', skip-cert-verify=' . ($tlsSettings->allowInsecure ? "true" : "false");
+            }
+        }
+        if ($server->network == 'ws') {
+            $proxies .= ', ws=true';
+            if ($server->networkSettings) {
+                $wsSettings = json_decode($server->networkSettings);
+                if (isset($wsSettings->path)) $proxies .= ', ws-path=' . $wsSettings->path;
+                if (isset($wsSettings->headers->Host)) $proxies .= ', ws-headers=host:' . $wsSettings->headers->Host;
+            }
+        }
+        $proxies .= "\r\n";
+        return $proxies;
+    }
+
+    public static function buildTrojan($password, $server)
+    {
+        $uri = "{$server->name} = trojan, {$server->host}, {$server->port}, password={$password}";
+        $uri .= "\r\n";
+        return $uri;
+    }
+}

+ 0 - 36
database/migrations/2014_10_12_000000_create_users_table.php

@@ -1,36 +0,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-class CreateUsersTable extends Migration
-{
-    /**
-     * Run the migrations.
-     *
-     * @return void
-     */
-    public function up()
-    {
-        Schema::create('users', function (Blueprint $table) {
-            $table->bigIncrements('id');
-            $table->string('name');
-            $table->string('email')->unique();
-            $table->timestamp('email_verified_at')->nullable();
-            $table->string('password');
-            $table->rememberToken();
-            $table->timestamps();
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     *
-     * @return void
-     */
-    public function down()
-    {
-        Schema::dropIfExists('users');
-    }
-}

+ 0 - 32
database/migrations/2014_10_12_100000_create_password_resets_table.php

@@ -1,32 +0,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-class CreatePasswordResetsTable extends Migration
-{
-    /**
-     * Run the migrations.
-     *
-     * @return void
-     */
-    public function up()
-    {
-        Schema::create('password_resets', function (Blueprint $table) {
-            $table->string('email')->index();
-            $table->string('token');
-            $table->timestamp('created_at')->nullable();
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     *
-     * @return void
-     */
-    public function down()
-    {
-        Schema::dropIfExists('password_resets');
-    }
-}