diff --git a/app/Http/Controllers/Client/ClientController.php b/app/Http/Controllers/Client/ClientController.php index ee9db7e4..b1374ac0 100644 --- a/app/Http/Controllers/Client/ClientController.php +++ b/app/Http/Controllers/Client/ClientController.php @@ -50,6 +50,9 @@ class ClientController extends Controller if (strpos($flag, 'shadowrocket') !== false) { die($this->shadowrocket($user, $servers)); } + if (strpos($flag, 'shadowsocks') !== false) { + die($this->shaodowsocksSIP008($user, $servers)); + } } die($this->origin($user, $servers)); } @@ -135,6 +138,25 @@ class ClientController extends Controller return base64_encode($uri); } + private function shaodowsocksSIP008($user, $servers = []) + { + $configs = []; + $subs = []; + $subs['servers'] = []; + + foreach ($servers as $item) { + if ($item['type'] === 'shadowsocks') { + array_push($configs, URLSchemes::buildShadowsocksSIP008($item, $user)); + } + } + + $subs['version'] = 1; + $subs['remark'] = config('v2board.app_name', 'V2Board'); + $subs['servers'] = array_merge($subs['servers'] ? $subs['servers'] : [], $configs); + + return json_encode($subs, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT); + } + private function surge($user, $servers = []) { $proxies = ''; diff --git a/app/Utils/URLSchemes.php b/app/Utils/URLSchemes.php index e4ec1af0..c21f33ec 100644 --- a/app/Utils/URLSchemes.php +++ b/app/Utils/URLSchemes.php @@ -17,6 +17,18 @@ class URLSchemes return "ss://{$str}@{$server['host']}:{$server['port']}#{$name}\r\n"; } + public static function buildShadowsocksSIP008($server, User $user) + { + $config = [ + "id" => $server['id'], + "remark" => $server['name'], + "server" => $server['host'], + "server_port" => $server['port'], + "password" => $user['uuid'], + "method" => $server['cipher'] + ]; + return $config; + } public static function buildVmess($server, User $user) {