mirror of
https://github.com/v2board/v2board.git
synced 2024-11-10 17:49:11 +08:00
update: server sort
This commit is contained in:
parent
9fa53efc0c
commit
5b79ea569c
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,36 +30,37 @@ 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) {
|
||||||
|
if ($item['type'] === 'v2ray') {
|
||||||
$str = '';
|
$str = '';
|
||||||
$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 .= $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');
|
||||||
if ($item->network === 'ws') {
|
if ($item->network === 'ws') {
|
||||||
@ -72,10 +73,11 @@ class ClientController extends Controller
|
|||||||
}
|
}
|
||||||
$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,74 +86,80 @@ 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) {
|
||||||
|
if ($item['type'] === 'shadowsocks') {
|
||||||
$uri .= Shadowrocket::buildShadowsocks($user->uuid, $item);
|
$uri .= Shadowrocket::buildShadowsocks($user->uuid, $item);
|
||||||
}
|
}
|
||||||
foreach ($vmess as $item) {
|
if ($item['type'] === 'v2ray') {
|
||||||
$uri .= Shadowrocket::buildVmess($user->uuid, $item);
|
$uri .= Shadowrocket::buildVmess($user->uuid, $item);
|
||||||
}
|
}
|
||||||
foreach ($trojan as $item) {
|
if ($item['type'] === 'trojan') {
|
||||||
$uri .= Shadowrocket::buildTrojan($user->uuid, $item);
|
$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) {
|
||||||
|
if ($item['type'] === 'shadowsocks') {
|
||||||
$uri .= QuantumultX::buildShadowsocks($user->uuid, $item);
|
$uri .= QuantumultX::buildShadowsocks($user->uuid, $item);
|
||||||
}
|
}
|
||||||
foreach ($vmess as $item) {
|
if ($item['type'] === 'v2ray') {
|
||||||
$uri .= QuantumultX::buildVmess($user->uuid, $item);
|
$uri .= QuantumultX::buildVmess($user->uuid, $item);
|
||||||
}
|
}
|
||||||
foreach ($trojan as $item) {
|
if ($item['type'] === 'trojan') {
|
||||||
$uri .= QuantumultX::buildTrojan($user->uuid, $item);
|
$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) {
|
||||||
|
if ($item['type'] === 'shadowsocks') {
|
||||||
$uri .= URLSchemes::buildShadowsocks($item, $user);
|
$uri .= URLSchemes::buildShadowsocks($item, $user);
|
||||||
}
|
}
|
||||||
foreach ($vmess as $item) {
|
if ($item['type'] === 'v2ray') {
|
||||||
$uri .= URLSchemes::buildVmess($item, $user);
|
$uri .= URLSchemes::buildVmess($item, $user);
|
||||||
}
|
}
|
||||||
foreach ($trojan as $item) {
|
if ($item['type'] === 'trojan') {
|
||||||
$uri .= URLSchemes::buildTrojan($item, $user);
|
$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) {
|
||||||
|
if ($item['type'] === 'shadowsocks') {
|
||||||
// [Proxy]
|
// [Proxy]
|
||||||
$proxies .= Surge::buildShadowsocks($user->uuid, $item);
|
$proxies .= Surge::buildShadowsocks($user->uuid, $item);
|
||||||
// [Proxy Group]
|
// [Proxy Group]
|
||||||
$proxyGroup .= $item->name . ', ';
|
$proxyGroup .= $item->name . ', ';
|
||||||
}
|
}
|
||||||
|
if ($item['type'] === 'v2ray') {
|
||||||
foreach ($vmess as $item) {
|
|
||||||
// [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';
|
||||||
$customConfig = base_path() . '/resources/rules/custom.surge.conf';
|
$customConfig = base_path() . '/resources/rules/custom.surge.conf';
|
||||||
@ -170,24 +178,25 @@ 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) {
|
||||||
|
if ($item['type'] === 'shadowsocks') {
|
||||||
// [Proxy]
|
// [Proxy]
|
||||||
$proxies .= Surfboard::buildShadowsocks($user->uuid, $item);
|
$proxies .= Surfboard::buildShadowsocks($user->uuid, $item);
|
||||||
// [Proxy Group]
|
// [Proxy Group]
|
||||||
$proxyGroup .= $item->name . ', ';
|
$proxyGroup .= $item->name . ', ';
|
||||||
}
|
}
|
||||||
|
if ($item['type'] === 'v2ray') {
|
||||||
foreach ($vmess as $item) {
|
|
||||||
// [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';
|
||||||
$customConfig = base_path() . '/resources/rules/custom.surfboard.conf';
|
$customConfig = base_path() . '/resources/rules/custom.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,20 +227,20 @@ class ClientController extends Controller
|
|||||||
$proxy = [];
|
$proxy = [];
|
||||||
$proxies = [];
|
$proxies = [];
|
||||||
|
|
||||||
foreach ($shadowsocks as $item) {
|
foreach ($servers as $item) {
|
||||||
|
if ($item['type'] === 'shadowsocks') {
|
||||||
array_push($proxy, Clash::buildShadowsocks($user->uuid, $item));
|
array_push($proxy, Clash::buildShadowsocks($user->uuid, $item));
|
||||||
array_push($proxies, $item->name);
|
array_push($proxies, $item->name);
|
||||||
}
|
}
|
||||||
|
if ($item['type'] === 'v2ray') {
|
||||||
foreach ($vmess as $item) {
|
|
||||||
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);
|
||||||
foreach ($config['proxy-groups'] as $k => $v) {
|
foreach ($config['proxy-groups'] as $k => $v) {
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user