Browse Source

update: support shadowsocks app subscribe

Tokumeikoi 4 years ago
parent
commit
6fd577d2c8

+ 5 - 2
app/Http/Controllers/Client/ClientController.php

@@ -44,7 +44,7 @@ class ClientController extends Controller
                     die($this->surge($user, $servers['vmess'], $servers['trojan']));
                 }
                 if (strpos($_SERVER['HTTP_USER_AGENT'], 'shadowrocket') !== false) {
-                    die($this->shadowrocket($user, $servers['vmess'], $servers['trojan']));
+                    die($this->shadowrocket($user, $servers['shadowsocks'], $servers['vmess'], $servers['trojan']));
                 }
             }
             die($this->origin($user, $servers['shadowsocks'], $servers['vmess'], $servers['trojan']));
@@ -71,7 +71,7 @@ class ClientController extends Controller
         return base64_encode($uri);
     }
 
-    private function shadowrocket($user, $vmess = [], $trojan = [])
+    private function shadowrocket($user, $shadowsocks = [], $vmess = [], $trojan = [])
     {
         $uri = '';
         //display remaining traffic and expire date
@@ -80,6 +80,9 @@ class ClientController extends Controller
         $totalTraffic = round($user->transfer_enable / (1024*1024*1024), 2);
         $expiredDate = date('Y-m-d', $user->expired_at);
         $uri .= "STATUS=🚀↑:{$upload}GB,↓:{$download}GB,TOT:{$totalTraffic}GB💡Expires:{$expiredDate}\r\n";
+        foreach ($shadowsocks as $item) {
+            $uri .= Shadowrocket::buildShadowsocks($user->uuid, $item);
+        }
         foreach ($vmess as $item) {
             $uri .= Shadowrocket::buildVmess($user->uuid, $item);
         }

+ 13 - 2
app/Utils/Shadowrocket.php

@@ -5,6 +5,17 @@ namespace App\Utils;
 
 class Shadowrocket
 {
+    public static function buildShadowsocks($password, $server)
+    {
+        $name = rawurlencode($server->name);
+        $str = str_replace(
+            ['+', '/', '='],
+            ['-', '_', ''],
+            base64_encode("{$server->cipher}:{$password}")
+        );
+        return "ss://{$str}@{$server->host}:{$server->port}#{$name}\r\n";
+    }
+
     public static function buildVmess($uuid, $server)
     {
         $userinfo = base64_encode('auto:' . $uuid . '@' . $server->host . ':' . $server->port);
@@ -31,12 +42,12 @@ class Shadowrocket
 
     public static function buildTrojan($password, $server)
     {
-        $server->name = rawurlencode($server->name);
+        $name = rawurlencode($server->name);
         $query = http_build_query([
             'allowInsecure' => $server->allow_insecure,
             'peer' => $server->server_name
         ]);
-        $uri = "trojan://{$password}@{$server->host}:{$server->port}?{$query}&tfo=1#{$server->name}";
+        $uri = "trojan://{$password}@{$server->host}:{$server->port}?{$query}&tfo=1#{$name}";
         $uri .= "\r\n";
         return $uri;
     }

+ 4 - 2
app/Utils/URLSchemes.php

@@ -10,12 +10,13 @@ class URLSchemes
 {
     public static function buildShadowsocks(ServerShadowsocks $server, User $user)
     {
+        $name = rawurlencode($server->name);
         $str = str_replace(
             ['+', '/', '='],
             ['-', '_', ''],
             base64_encode("{$server->cipher}:{$user->uuid}")
         );
-        return "ss://{$str}@{$server->host}:{$server->port}#{$server->name}\r\n";
+        return "ss://{$str}@{$server->host}:{$server->port}#{$name}\r\n";
     }
 
 
@@ -44,12 +45,13 @@ class URLSchemes
 
     public static function buildTrojan(ServerTrojan $server, User $user)
     {
+        $name = rawurlencode($server->name);
         $query = http_build_query([
             'allowInsecure' => $server->allow_insecure,
             'peer' => $server->server_name,
             'sni' => $server->server_name
         ]);
-        $uri = "trojan://{$user->uuid}@{$server->host}:{$server->port}?{$query}#{$server->name}";
+        $uri = "trojan://{$user->uuid}@{$server->host}:{$server->port}?{$query}#{$name}";
         $uri .= "\r\n";
         return $uri;
     }