mirror of
				https://github.com/v2board/v2board.git
				synced 2025-10-31 09:21:46 +08:00 
			
		
		
		
	update: server sort
This commit is contained in:
		
							
								
								
									
										64
									
								
								app/Http/Controllers/Admin/Server/ManageController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								app/Http/Controllers/Admin/Server/ManageController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace App\Http\Controllers\Admin\Server; | ||||||
|  |  | ||||||
|  | use App\Http\Requests\Admin\ServerTrojanSort; | ||||||
|  | use App\Models\Plan; | ||||||
|  | use App\Models\Server; | ||||||
|  | use App\Models\ServerGroup; | ||||||
|  | use App\Models\ServerShadowsocks; | ||||||
|  | use App\Models\ServerTrojan; | ||||||
|  | use App\Models\User; | ||||||
|  | use App\Services\ServerService; | ||||||
|  | use Illuminate\Http\Request; | ||||||
|  | use App\Http\Controllers\Controller; | ||||||
|  | use Illuminate\Support\Facades\DB; | ||||||
|  |  | ||||||
|  | class ManageController extends Controller | ||||||
|  | { | ||||||
|  |     public function getNodes(Request $request) | ||||||
|  |     { | ||||||
|  |         $serverService = new ServerService(); | ||||||
|  |         $servers = array_merge( | ||||||
|  |             $serverService->getShadowsocksServers(), | ||||||
|  |             $serverService->getV2rayServers(), | ||||||
|  |             $serverService->getTrojanServers() | ||||||
|  |         ); | ||||||
|  |         $tmp = array_column($servers, 'sort'); | ||||||
|  |         array_multisort($tmp, SORT_ASC, $servers); | ||||||
|  |         return response([ | ||||||
|  |             'data' => $servers | ||||||
|  |         ]); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function sort(Request $request) | ||||||
|  |     { | ||||||
|  |         DB::beginTransaction(); | ||||||
|  |         foreach ($request->input('sorts') as $k => $v) { | ||||||
|  |             switch ($v['key']) { | ||||||
|  |                 case 'shadowsocks': | ||||||
|  |                     if (!ServerShadowsocks::find($v['value'])->update(['sort' => $k + 1])) { | ||||||
|  |                         DB::rollBack(); | ||||||
|  |                         abort(500, '保存失败'); | ||||||
|  |                     } | ||||||
|  |                     break; | ||||||
|  |                 case 'v2ray': | ||||||
|  |                     if (!Server::find($v['value'])->update(['sort' => $k + 1])) { | ||||||
|  |                         DB::rollBack(); | ||||||
|  |                         abort(500, '保存失败'); | ||||||
|  |                     } | ||||||
|  |                     break; | ||||||
|  |                 case 'trojan': | ||||||
|  |                     if (!ServerTrojan::find($v['value'])->update(['sort' => $k + 1])) { | ||||||
|  |                         DB::rollBack(); | ||||||
|  |                         abort(500, '保存失败'); | ||||||
|  |                     } | ||||||
|  |                     break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         DB::commit(); | ||||||
|  |         return response([ | ||||||
|  |             'data' => true | ||||||
|  |         ]); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -23,7 +23,7 @@ class AppController extends Controller | |||||||
|         $userService = new UserService(); |         $userService = new UserService(); | ||||||
|         if ($userService->isAvailable($user)) { |         if ($userService->isAvailable($user)) { | ||||||
|             $serverService = new ServerService(); |             $serverService = new ServerService(); | ||||||
|             $servers = $serverService->getAllServers($user); |             $servers = $serverService->getAvailableServers($user); | ||||||
|         } |         } | ||||||
|         $config = Yaml::parseFile(base_path() . '/resources/rules/app.clash.yaml'); |         $config = Yaml::parseFile(base_path() . '/resources/rules/app.clash.yaml'); | ||||||
|         $proxy = []; |         $proxy = []; | ||||||
|   | |||||||
| @@ -30,52 +30,54 @@ class ClientController extends Controller | |||||||
|         $userService = new UserService(); |         $userService = new UserService(); | ||||||
|         if ($userService->isAvailable($user)) { |         if ($userService->isAvailable($user)) { | ||||||
|             $serverService = new ServerService(); |             $serverService = new ServerService(); | ||||||
|             $servers = $serverService->getAllServers($user); |             $servers = $serverService->getAvailableServers($user); | ||||||
|             if ($flag) { |             if ($flag) { | ||||||
|                 if (strpos($flag, 'quantumult%20x') !== false) { |                 if (strpos($flag, 'quantumult%20x') !== false) { | ||||||
|                     die($this->quantumultX($user, $servers['shadowsocks'], $servers['vmess'], $servers['trojan'])); |                     die($this->quantumultX($user, $servers)); | ||||||
|                 } |                 } | ||||||
|                 if (strpos($flag, 'quantumult') !== false) { |                 if (strpos($flag, 'quantumult') !== false) { | ||||||
|                     die($this->quantumult($user, $servers['vmess'])); |                     die($this->quantumult($user, $servers)); | ||||||
|                 } |                 } | ||||||
|                 if (strpos($flag, 'clash') !== false) { |                 if (strpos($flag, 'clash') !== false) { | ||||||
|                     die($this->clash($user, $servers['shadowsocks'], $servers['vmess'], $servers['trojan'])); |                     die($this->clash($user, $servers)); | ||||||
|                 } |                 } | ||||||
|                 if (strpos($flag, 'surfboard') !== false) { |                 if (strpos($flag, 'surfboard') !== false) { | ||||||
|                     die($this->surfboard($user, $servers['shadowsocks'], $servers['vmess'])); |                     die($this->surfboard($user, $servers)); | ||||||
|                 } |                 } | ||||||
|                 if (strpos($flag, 'surge') !== false) { |                 if (strpos($flag, 'surge') !== false) { | ||||||
|                     die($this->surge($user, $servers['shadowsocks'], $servers['vmess'], $servers['trojan'])); |                     die($this->surge($user, $servers)); | ||||||
|                 } |                 } | ||||||
|                 if (strpos($flag, 'shadowrocket') !== false) { |                 if (strpos($flag, 'shadowrocket') !== false) { | ||||||
|                     die($this->shadowrocket($user, $servers['shadowsocks'], $servers['vmess'], $servers['trojan'])); |                     die($this->shadowrocket($user, $servers)); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             die($this->origin($user, $servers['shadowsocks'], $servers['vmess'], $servers['trojan'])); |             die($this->origin($user, $servers)); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     // TODO: Ready to stop support |     // TODO: Ready to stop support | ||||||
|     private function quantumult($user, $vmess = []) |     private function quantumult($user, $servers = []) | ||||||
|     { |     { | ||||||
|         $uri = ''; |         $uri = ''; | ||||||
|         header('subscription-userinfo: upload=' . $user->u . '; download=' . $user->d . ';total=' . $user->transfer_enable); |         header('subscription-userinfo: upload=' . $user->u . '; download=' . $user->d . ';total=' . $user->transfer_enable); | ||||||
|         foreach ($vmess as $item) { |         foreach ($servers as $item) { | ||||||
|             $str = ''; |             if ($item['type'] === 'v2ray') { | ||||||
|             $str .= $item->name . '= vmess, ' . $item->host . ', ' . $item->port . ', chacha20-ietf-poly1305, "' . $user->uuid . '", over-tls=' . ($item->tls ? "true" : "false") . ', certificate=0, group=' . config('v2board.app_name', 'V2Board'); |                 $str = ''; | ||||||
|             if ($item->network === 'ws') { |                 $str .= $item->name . '= vmess, ' . $item->host . ', ' . $item->port . ', chacha20-ietf-poly1305, "' . $user->uuid . '", over-tls=' . ($item->tls ? "true" : "false") . ', certificate=0, group=' . config('v2board.app_name', 'V2Board'); | ||||||
|                 $str .= ', obfs=ws'; |                 if ($item->network === 'ws') { | ||||||
|                 if ($item->networkSettings) { |                     $str .= ', obfs=ws'; | ||||||
|                     $wsSettings = json_decode($item->networkSettings); |                     if ($item->networkSettings) { | ||||||
|                     if (isset($wsSettings->path)) $str .= ', obfs-path="' . $wsSettings->path . '"'; |                         $wsSettings = json_decode($item->networkSettings); | ||||||
|                     if (isset($wsSettings->headers->Host)) $str .= ', obfs-header="Host:' . $wsSettings->headers->Host . '"'; |                         if (isset($wsSettings->path)) $str .= ', obfs-path="' . $wsSettings->path . '"'; | ||||||
|  |                         if (isset($wsSettings->headers->Host)) $str .= ', obfs-header="Host:' . $wsSettings->headers->Host . '"'; | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|  |                 $uri .= "vmess://" . base64_encode($str) . "\r\n"; | ||||||
|             } |             } | ||||||
|             $uri .= "vmess://" . base64_encode($str) . "\r\n"; |  | ||||||
|         } |         } | ||||||
|         return base64_encode($uri); |         return base64_encode($uri); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private function shadowrocket($user, $shadowsocks = [], $vmess = [], $trojan = []) |     private function shadowrocket($user, $servers = []) | ||||||
|     { |     { | ||||||
|         $uri = ''; |         $uri = ''; | ||||||
|         //display remaining traffic and expire date |         //display remaining traffic and expire date | ||||||
| @@ -84,73 +86,79 @@ class ClientController extends Controller | |||||||
|         $totalTraffic = round($user->transfer_enable / (1024*1024*1024), 2); |         $totalTraffic = round($user->transfer_enable / (1024*1024*1024), 2); | ||||||
|         $expiredDate = date('Y-m-d', $user->expired_at); |         $expiredDate = date('Y-m-d', $user->expired_at); | ||||||
|         $uri .= "STATUS=🚀↑:{$upload}GB,↓:{$download}GB,TOT:{$totalTraffic}GB💡Expires:{$expiredDate}\r\n"; |         $uri .= "STATUS=🚀↑:{$upload}GB,↓:{$download}GB,TOT:{$totalTraffic}GB💡Expires:{$expiredDate}\r\n"; | ||||||
|         foreach ($shadowsocks as $item) { |         foreach ($servers as $item) { | ||||||
|             $uri .= Shadowrocket::buildShadowsocks($user->uuid, $item); |             if ($item['type'] === 'shadowsocks') { | ||||||
|         } |                 $uri .= Shadowrocket::buildShadowsocks($user->uuid, $item); | ||||||
|         foreach ($vmess as $item) { |             } | ||||||
|             $uri .= Shadowrocket::buildVmess($user->uuid, $item); |             if ($item['type'] === 'v2ray') { | ||||||
|         } |                 $uri .= Shadowrocket::buildVmess($user->uuid, $item); | ||||||
|         foreach ($trojan as $item) { |             } | ||||||
|             $uri .= Shadowrocket::buildTrojan($user->uuid, $item); |             if ($item['type'] === 'trojan') { | ||||||
|  |                 $uri .= Shadowrocket::buildTrojan($user->uuid, $item); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         return base64_encode($uri); |         return base64_encode($uri); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private function quantumultX($user, $shadowsocks = [], $vmess = [], $trojan = []) |     private function quantumultX($user, $servers = []) | ||||||
|     { |     { | ||||||
|         $uri = ''; |         $uri = ''; | ||||||
|         header("subscription-userinfo: upload={$user->u}; download={$user->d}; total={$user->transfer_enable}; expire={$user->expired_at}"); |         header("subscription-userinfo: upload={$user->u}; download={$user->d}; total={$user->transfer_enable}; expire={$user->expired_at}"); | ||||||
|         foreach ($shadowsocks as $item) { |         foreach ($servers as $item) { | ||||||
|             $uri .= QuantumultX::buildShadowsocks($user->uuid, $item); |             if ($item['type'] === 'shadowsocks') { | ||||||
|         } |                 $uri .= QuantumultX::buildShadowsocks($user->uuid, $item); | ||||||
|         foreach ($vmess as $item) { |             } | ||||||
|             $uri .= QuantumultX::buildVmess($user->uuid, $item); |             if ($item['type'] === 'v2ray') { | ||||||
|         } |                 $uri .= QuantumultX::buildVmess($user->uuid, $item); | ||||||
|         foreach ($trojan as $item) { |             } | ||||||
|             $uri .= QuantumultX::buildTrojan($user->uuid, $item); |             if ($item['type'] === 'trojan') { | ||||||
|  |                 $uri .= QuantumultX::buildTrojan($user->uuid, $item); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         return base64_encode($uri); |         return base64_encode($uri); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private function origin($user, $shadowsocks = [], $vmess = [], $trojan = []) |     private function origin($user, $servers = []) | ||||||
|     { |     { | ||||||
|         $uri = ''; |         $uri = ''; | ||||||
|         foreach ($shadowsocks as $item) { |         foreach ($servers as $item) { | ||||||
|             $uri .= URLSchemes::buildShadowsocks($item, $user); |             if ($item['type'] === 'shadowsocks') { | ||||||
|         } |                 $uri .= URLSchemes::buildShadowsocks($item, $user); | ||||||
|         foreach ($vmess as $item) { |             } | ||||||
|             $uri .= URLSchemes::buildVmess($item, $user); |             if ($item['type'] === 'v2ray') { | ||||||
|         } |                 $uri .= URLSchemes::buildVmess($item, $user); | ||||||
|         foreach ($trojan as $item) { |             } | ||||||
|             $uri .= URLSchemes::buildTrojan($item, $user); |             if ($item['type'] === 'trojan') { | ||||||
|  |                 $uri .= URLSchemes::buildTrojan($item, $user); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         return base64_encode($uri); |         return base64_encode($uri); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private function surge($user, $shadowsocks = [], $vmess = [], $trojan = []) |     private function surge($user, $servers = []) | ||||||
|     { |     { | ||||||
|         $proxies = ''; |         $proxies = ''; | ||||||
|         $proxyGroup = ''; |         $proxyGroup = ''; | ||||||
|  |  | ||||||
|         foreach ($shadowsocks as $item) { |         foreach ($servers as $item) { | ||||||
|             // [Proxy] |             if ($item['type'] === 'shadowsocks') { | ||||||
|             $proxies .= Surge::buildShadowsocks($user->uuid, $item); |                 // [Proxy] | ||||||
|             // [Proxy Group] |                 $proxies .= Surge::buildShadowsocks($user->uuid, $item); | ||||||
|             $proxyGroup .= $item->name . ', '; |                 // [Proxy Group] | ||||||
|         } |                 $proxyGroup .= $item->name . ', '; | ||||||
|  |             } | ||||||
|         foreach ($vmess as $item) { |             if ($item['type'] === 'v2ray') { | ||||||
|             // [Proxy] |                 // [Proxy] | ||||||
|             $proxies .= Surge::buildVmess($user->uuid, $item); |                 $proxies .= Surge::buildVmess($user->uuid, $item); | ||||||
|             // [Proxy Group] |                 // [Proxy Group] | ||||||
|             $proxyGroup .= $item->name . ', '; |                 $proxyGroup .= $item->name . ', '; | ||||||
|         } |             } | ||||||
|  |             if ($item['type'] === 'trojan') { | ||||||
|         foreach ($trojan as $item) { |                 // [Proxy] | ||||||
|             // [Proxy] |                 $proxies .= Surge::buildTrojan($user->uuid, $item); | ||||||
|             $proxies .= Surge::buildTrojan($user->uuid, $item); |                 // [Proxy Group] | ||||||
|             // [Proxy Group] |                 $proxyGroup .= $item->name . ', '; | ||||||
|             $proxyGroup .= $item->name . ', '; |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         $defaultConfig = base_path() . '/resources/rules/default.surge.conf'; |         $defaultConfig = base_path() . '/resources/rules/default.surge.conf'; | ||||||
| @@ -170,23 +178,24 @@ class ClientController extends Controller | |||||||
|         return $config; |         return $config; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private function surfboard($user, $shadowsocks = [], $vmess = []) |     private function surfboard($user, $servers = []) | ||||||
|     { |     { | ||||||
|         $proxies = ''; |         $proxies = ''; | ||||||
|         $proxyGroup = ''; |         $proxyGroup = ''; | ||||||
|  |  | ||||||
|         foreach ($shadowsocks as $item) { |         foreach ($servers as $item) { | ||||||
|             // [Proxy] |             if ($item['type'] === 'shadowsocks') { | ||||||
|             $proxies .= Surfboard::buildShadowsocks($user->uuid, $item); |                 // [Proxy] | ||||||
|             // [Proxy Group] |                 $proxies .= Surfboard::buildShadowsocks($user->uuid, $item); | ||||||
|             $proxyGroup .= $item->name . ', '; |                 // [Proxy Group] | ||||||
|         } |                 $proxyGroup .= $item->name . ', '; | ||||||
|  |             } | ||||||
|         foreach ($vmess as $item) { |             if ($item['type'] === 'v2ray') { | ||||||
|             // [Proxy] |                 // [Proxy] | ||||||
|             $proxies .= Surfboard::buildVmess($user->uuid, $item); |                 $proxies .= Surfboard::buildVmess($user->uuid, $item); | ||||||
|             // [Proxy Group] |                 // [Proxy Group] | ||||||
|             $proxyGroup .= $item->name . ', '; |                 $proxyGroup .= $item->name . ', '; | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         $defaultConfig = base_path() . '/resources/rules/default.surfboard.conf'; |         $defaultConfig = base_path() . '/resources/rules/default.surfboard.conf'; | ||||||
| @@ -206,7 +215,7 @@ class ClientController extends Controller | |||||||
|         return $config; |         return $config; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private function clash($user, $shadowsocks = [], $vmess = [], $trojan = []) |     private function clash($user, $servers = []) | ||||||
|     { |     { | ||||||
|         $defaultConfig = base_path() . '/resources/rules/default.clash.yaml'; |         $defaultConfig = base_path() . '/resources/rules/default.clash.yaml'; | ||||||
|         $customConfig = base_path() . '/resources/rules/custom.clash.yaml'; |         $customConfig = base_path() . '/resources/rules/custom.clash.yaml'; | ||||||
| @@ -218,19 +227,19 @@ class ClientController extends Controller | |||||||
|         $proxy = []; |         $proxy = []; | ||||||
|         $proxies = []; |         $proxies = []; | ||||||
|  |  | ||||||
|         foreach ($shadowsocks as $item) { |         foreach ($servers as $item) { | ||||||
|             array_push($proxy, Clash::buildShadowsocks($user->uuid, $item)); |             if ($item['type'] === 'shadowsocks') { | ||||||
|             array_push($proxies, $item->name); |                 array_push($proxy, Clash::buildShadowsocks($user->uuid, $item)); | ||||||
|         } |                 array_push($proxies, $item->name); | ||||||
|  |             } | ||||||
|         foreach ($vmess as $item) { |             if ($item['type'] === 'v2ray') { | ||||||
|             array_push($proxy, Clash::buildVmess($user->uuid, $item)); |                 array_push($proxy, Clash::buildVmess($user->uuid, $item)); | ||||||
|             array_push($proxies, $item->name); |                 array_push($proxies, $item->name); | ||||||
|         } |             } | ||||||
|  |             if ($item['type'] === 'trojan') { | ||||||
|         foreach ($trojan as $item) { |                 array_push($proxy, Clash::buildTrojan($user->uuid, $item)); | ||||||
|             array_push($proxy, Clash::buildTrojan($user->uuid, $item)); |                 array_push($proxies, $item->name); | ||||||
|             array_push($proxies, $item->name); |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         $config['proxies'] = array_merge($config['proxies'] ? $config['proxies'] : [], $proxy); |         $config['proxies'] = array_merge($config['proxies'] ? $config['proxies'] : [], $proxy); | ||||||
|   | |||||||
| @@ -23,8 +23,7 @@ class ServerController extends Controller | |||||||
|         $userService = new UserService(); |         $userService = new UserService(); | ||||||
|         if ($userService->isAvailable($user)) { |         if ($userService->isAvailable($user)) { | ||||||
|             $serverService = new ServerService(); |             $serverService = new ServerService(); | ||||||
|             $servers = $serverService->getAllServers($user); |             $servers = $serverService->getAvailableServers($user); | ||||||
|             $servers = array_merge($servers['shadowsocks'], $servers['vmess'], $servers['trojan']); |  | ||||||
|         } |         } | ||||||
|         return response([ |         return response([ | ||||||
|             'data' => $servers |             'data' => $servers | ||||||
|   | |||||||
| @@ -26,6 +26,8 @@ class AdminRoute | |||||||
|             $router->get ('/server/group/fetch', 'Admin\\Server\\GroupController@fetch'); |             $router->get ('/server/group/fetch', 'Admin\\Server\\GroupController@fetch'); | ||||||
|             $router->post('/server/group/save', 'Admin\\Server\\GroupController@save'); |             $router->post('/server/group/save', 'Admin\\Server\\GroupController@save'); | ||||||
|             $router->post('/server/group/drop', 'Admin\\Server\\GroupController@drop'); |             $router->post('/server/group/drop', 'Admin\\Server\\GroupController@drop'); | ||||||
|  |             $router->get ('/server/manage/getNodes', 'Admin\\Server\\ManageController@getNodes'); | ||||||
|  |             $router->post('/server/manage/sort', 'Admin\\Server\\ManageController@sort'); | ||||||
|             $router->group([ |             $router->group([ | ||||||
|                 'prefix' => 'server/trojan' |                 'prefix' => 'server/trojan' | ||||||
|             ], function ($router) { |             ], function ($router) { | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ class ServerService | |||||||
|  |  | ||||||
|     CONST V2RAY_CONFIG = '{"api":{"services":["HandlerService","StatsService"],"tag":"api"},"dns":{},"stats":{},"inbound":{"port":443,"protocol":"vmess","settings":{"clients":[]},"sniffing":{"enabled":true,"destOverride":["http","tls"]},"streamSettings":{"network":"tcp"},"tag":"proxy"},"inboundDetour":[{"listen":"0.0.0.0","port":23333,"protocol":"dokodemo-door","settings":{"address":"0.0.0.0"},"tag":"api"}],"log":{"loglevel":"debug","access":"access.log","error":"error.log"},"outbound":{"protocol":"freedom","settings":{}},"outboundDetour":[{"protocol":"blackhole","settings":{},"tag":"block"}],"routing":{"rules":[{"inboundTag":"api","outboundTag":"api","type":"field"}]},"policy":{"levels":{"0":{"handshake":4,"connIdle":300,"uplinkOnly":5,"downlinkOnly":30,"statsUserUplink":true,"statsUserDownlink":true}}}}'; |     CONST V2RAY_CONFIG = '{"api":{"services":["HandlerService","StatsService"],"tag":"api"},"dns":{},"stats":{},"inbound":{"port":443,"protocol":"vmess","settings":{"clients":[]},"sniffing":{"enabled":true,"destOverride":["http","tls"]},"streamSettings":{"network":"tcp"},"tag":"proxy"},"inboundDetour":[{"listen":"0.0.0.0","port":23333,"protocol":"dokodemo-door","settings":{"address":"0.0.0.0"},"tag":"api"}],"log":{"loglevel":"debug","access":"access.log","error":"error.log"},"outbound":{"protocol":"freedom","settings":{}},"outboundDetour":[{"protocol":"blackhole","settings":{},"tag":"block"}],"routing":{"rules":[{"inboundTag":"api","outboundTag":"api","type":"field"}]},"policy":{"levels":{"0":{"handshake":4,"connIdle":300,"uplinkOnly":5,"downlinkOnly":30,"statsUserUplink":true,"statsUserDownlink":true}}}}'; | ||||||
|     CONST TROJAN_CONFIG = '{"run_type":"server","local_addr":"0.0.0.0","local_port":443,"remote_addr":"www.taobao.com","remote_port":80,"password":[],"ssl":{"cert":"server.crt","key":"server.key","sni":"domain.com"},"api":{"enabled":true,"api_addr":"127.0.0.1","api_port":10000}}'; |     CONST TROJAN_CONFIG = '{"run_type":"server","local_addr":"0.0.0.0","local_port":443,"remote_addr":"www.taobao.com","remote_port":80,"password":[],"ssl":{"cert":"server.crt","key":"server.key","sni":"domain.com"},"api":{"enabled":true,"api_addr":"127.0.0.1","api_port":10000}}'; | ||||||
|     public function getVmess(User $user, $all = false):array |     public function getV2ray(User $user, $all = false):array | ||||||
|     { |     { | ||||||
|         $vmess = []; |         $vmess = []; | ||||||
|         $model = Server::orderBy('sort', 'ASC'); |         $model = Server::orderBy('sort', 'ASC'); | ||||||
| @@ -26,7 +26,7 @@ class ServerService | |||||||
|         } |         } | ||||||
|         $vmesss = $model->get(); |         $vmesss = $model->get(); | ||||||
|         foreach ($vmesss as $k => $v) { |         foreach ($vmesss as $k => $v) { | ||||||
|             $vmesss[$k]['protocol_type'] = 'vmess'; |             $vmesss[$k]['type'] = 'v2ray'; | ||||||
|             $groupId = json_decode($vmesss[$k]['group_id']); |             $groupId = json_decode($vmesss[$k]['group_id']); | ||||||
|             if (in_array($user->group_id, $groupId)) { |             if (in_array($user->group_id, $groupId)) { | ||||||
|                 $vmesss[$k]['link'] = URLSchemes::buildVmess($vmesss[$k], $user); |                 $vmesss[$k]['link'] = URLSchemes::buildVmess($vmesss[$k], $user); | ||||||
| @@ -52,7 +52,7 @@ class ServerService | |||||||
|         } |         } | ||||||
|         $trojans = $model->get(); |         $trojans = $model->get(); | ||||||
|         foreach ($trojans as $k => $v) { |         foreach ($trojans as $k => $v) { | ||||||
|             $trojans[$k]['protocol_type'] = 'trojan'; |             $trojans[$k]['type'] = 'trojan'; | ||||||
|             $groupId = json_decode($trojans[$k]['group_id']); |             $groupId = json_decode($trojans[$k]['group_id']); | ||||||
|             $trojans[$k]['link'] = URLSchemes::buildTrojan($trojans[$k], $user); |             $trojans[$k]['link'] = URLSchemes::buildTrojan($trojans[$k], $user); | ||||||
|             if (in_array($user->group_id, $groupId)) { |             if (in_array($user->group_id, $groupId)) { | ||||||
| @@ -77,7 +77,7 @@ class ServerService | |||||||
|         } |         } | ||||||
|         $shadowsockss = $model->get(); |         $shadowsockss = $model->get(); | ||||||
|         foreach ($shadowsockss as $k => $v) { |         foreach ($shadowsockss as $k => $v) { | ||||||
|             $shadowsockss[$k]['protocol_type'] = 'shadowsocks'; |             $shadowsockss[$k]['type'] = 'shadowsocks'; | ||||||
|             $groupId = json_decode($shadowsockss[$k]['group_id']); |             $groupId = json_decode($shadowsockss[$k]['group_id']); | ||||||
|             $shadowsockss[$k]['link'] = URLSchemes::buildShadowsocks($shadowsockss[$k], $user); |             $shadowsockss[$k]['link'] = URLSchemes::buildShadowsocks($shadowsockss[$k], $user); | ||||||
|             if (in_array($user->group_id, $groupId)) { |             if (in_array($user->group_id, $groupId)) { | ||||||
| @@ -93,13 +93,16 @@ class ServerService | |||||||
|         return $shadowsocks; |         return $shadowsocks; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function getAllServers(User $user, $all = false) |     public function getAvailableServers(User $user, $all = false) | ||||||
|     { |     { | ||||||
|         return [ |         $servers = array_merge( | ||||||
|             'shadowsocks' => $this->getShadowsocks($user, $all), |             $this->getShadowsocks($user, $all), | ||||||
|             'vmess' => $this->getVmess($user, $all), |             $this->getV2ray($user, $all), | ||||||
|             'trojan' => $this->getTrojan($user, $all) |             $this->getTrojan($user, $all) | ||||||
|         ]; |         ); | ||||||
|  |         $tmp = array_column($servers, 'sort'); | ||||||
|  |         array_multisort($tmp, SORT_ASC, $servers); | ||||||
|  |         return $servers; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -288,4 +291,61 @@ class ServerService | |||||||
|             $serverLog->save(); |             $serverLog->save(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public function getShadowsocksServers() | ||||||
|  |     { | ||||||
|  |         $server = ServerShadowsocks::orderBy('sort', 'ASC')->get(); | ||||||
|  |         for ($i = 0; $i < count($server); $i++) { | ||||||
|  |             $server[$i]['type'] = 'shadowsocks'; | ||||||
|  |             if (!empty($server[$i]['tags'])) { | ||||||
|  |                 $server[$i]['tags'] = json_decode($server[$i]['tags']); | ||||||
|  |             } | ||||||
|  |             $server[$i]['group_id'] = json_decode($server[$i]['group_id']); | ||||||
|  |             $server[$i]['online'] = Cache::get(CacheKey::get('SERVER_SHADOWSOCKS_ONLINE_USER', $server[$i]['parent_id'] ? $server[$i]['parent_id'] : $server[$i]['id'])); | ||||||
|  |             if ($server[$i]['parent_id']) { | ||||||
|  |                 $server[$i]['last_check_at'] = Cache::get(CacheKey::get('SERVER_SHADOWSOCKS_LAST_CHECK_AT', $server[$i]['parent_id'])); | ||||||
|  |             } else { | ||||||
|  |                 $server[$i]['last_check_at'] = Cache::get(CacheKey::get('SERVER_SHADOWSOCKS_LAST_CHECK_AT', $server[$i]['id'])); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return $server->toArray(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function getV2rayServers() | ||||||
|  |     { | ||||||
|  |         $server = Server::orderBy('sort', 'ASC')->get(); | ||||||
|  |         for ($i = 0; $i < count($server); $i++) { | ||||||
|  |             $server[$i]['type'] = 'v2ray'; | ||||||
|  |             if (!empty($server[$i]['tags'])) { | ||||||
|  |                 $server[$i]['tags'] = json_decode($server[$i]['tags']); | ||||||
|  |             } | ||||||
|  |             $server[$i]['group_id'] = json_decode($server[$i]['group_id']); | ||||||
|  |             $server[$i]['online'] = Cache::get(CacheKey::get('SERVER_V2RAY_ONLINE_USER', $server[$i]['parent_id'] ? $server[$i]['parent_id'] : $server[$i]['id'])); | ||||||
|  |             if ($server[$i]['parent_id']) { | ||||||
|  |                 $server[$i]['last_check_at'] = Cache::get(CacheKey::get('SERVER_V2RAY_LAST_CHECK_AT', $server[$i]['parent_id'])); | ||||||
|  |             } else { | ||||||
|  |                 $server[$i]['last_check_at'] = Cache::get(CacheKey::get('SERVER_V2RAY_LAST_CHECK_AT', $server[$i]['id'])); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return $server->toArray(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function getTrojanServers() | ||||||
|  |     { | ||||||
|  |         $server = ServerTrojan::orderBy('sort', 'ASC')->get(); | ||||||
|  |         for ($i = 0; $i < count($server); $i++) { | ||||||
|  |             $server[$i]['type'] = 'trojan'; | ||||||
|  |             if (!empty($server[$i]['tags'])) { | ||||||
|  |                 $server[$i]['tags'] = json_decode($server[$i]['tags']); | ||||||
|  |             } | ||||||
|  |             $server[$i]['group_id'] = json_decode($server[$i]['group_id']); | ||||||
|  |             $server[$i]['online'] = Cache::get(CacheKey::get('SERVER_TROJAN_ONLINE_USER', $server[$i]['parent_id'] ? $server[$i]['parent_id'] : $server[$i]['id'])); | ||||||
|  |             if ($server[$i]['parent_id']) { | ||||||
|  |                 $server[$i]['last_check_at'] = Cache::get(CacheKey::get('SERVER_TROJAN_LAST_CHECK_AT', $server[$i]['parent_id'])); | ||||||
|  |             } else { | ||||||
|  |                 $server[$i]['last_check_at'] = Cache::get(CacheKey::get('SERVER_TROJAN_LAST_CHECK_AT', $server[$i]['id'])); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return $server->toArray(); | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user