diff --git a/app/Http/Controllers/Server/DeepbworkController.php b/app/Http/Controllers/Server/DeepbworkController.php index d154b073..1754150d 100644 --- a/app/Http/Controllers/Server/DeepbworkController.php +++ b/app/Http/Controllers/Server/DeepbworkController.php @@ -20,6 +20,7 @@ use Illuminate\Support\Facades\Cache; */ class DeepbworkController extends Controller { + CONST V2RAY_CONFIG = '{"log":{"loglevel":"debug","access":"access.log","error":"error.log"},"api":{"services":["HandlerService","StatsService"],"tag":"api"},"dns":{},"stats":{},"inbounds":[{"port":443,"protocol":"vmess","settings":{"clients":[]},"sniffing":{"enabled":true,"destOverride":["http","tls"]},"streamSettings":{"network":"tcp"},"tag":"proxy"},{"listen":"127.0.0.1","port":23333,"protocol":"dokodemo-door","settings":{"address":"0.0.0.0"},"tag":"api"}],"outbounds":[{"protocol":"freedom","settings":{}},{"protocol":"blackhole","settings":{},"tag":"block"}],"routing":{"rules":[{"type":"field","inboundTag":"api","outboundTag":"api"}]},"policy":{"levels":{"0":{"handshake":4,"connIdle":300,"uplinkOnly":5,"downlinkOnly":30,"statsUserUplink":true,"statsUserDownlink":true}}}}'; public function __construct(Request $request) { $token = $request->input('token'); @@ -52,7 +53,6 @@ class DeepbworkController extends Controller "level" => 0, ]; unset($user['uuid']); - unset($user['email']); array_push($result, $user); } $eTag = sha1(json_encode($result)); @@ -101,13 +101,133 @@ class DeepbworkController extends Controller if (empty($nodeId) || empty($localPort)) { abort(500, '参数错误'); } - $serverService = new ServerService(); try { - $json = $serverService->getV2RayConfig($nodeId, $localPort); + $json = $this->getV2RayConfig($nodeId, $localPort); } catch (\Exception $e) { abort(500, $e->getMessage()); } die(json_encode($json, JSON_UNESCAPED_UNICODE)); } + + private function getV2RayConfig(int $nodeId, int $localPort) + { + $server = ServerV2ray::find($nodeId); + if (!$server) { + abort(500, '节点不存在'); + } + $json = json_decode(self::V2RAY_CONFIG); + $json->log->loglevel = (int)config('v2board.server_log_enable') ? 'debug' : 'none'; + $json->inbounds[1]->port = (int)$localPort; + $json->inbounds[0]->port = (int)$server->server_port; + $json->inbounds[0]->streamSettings->network = $server->network; + $this->setDns($server, $json); + $this->setNetwork($server, $json); + $this->setRule($server, $json); + $this->setTls($server, $json); + + return $json; + } + + private function setDns(ServerV2ray $server, object $json) + { + if ($server->dnsSettings) { + $dns = $server->dnsSettings; + if (isset($dns->servers)) { + array_push($dns->servers, '1.1.1.1'); + array_push($dns->servers, 'localhost'); + } + $json->dns = $dns; + $json->outbounds[0]->settings->domainStrategy = 'UseIP'; + } + } + + private function setNetwork(ServerV2ray $server, object $json) + { + if ($server->networkSettings) { + switch ($server->network) { + case 'tcp': + $json->inbounds[0]->streamSettings->tcpSettings = $server->networkSettings; + break; + case 'kcp': + $json->inbounds[0]->streamSettings->kcpSettings = $server->networkSettings; + break; + case 'ws': + $json->inbounds[0]->streamSettings->wsSettings = $server->networkSettings; + break; + case 'http': + $json->inbounds[0]->streamSettings->httpSettings = $server->networkSettings; + break; + case 'domainsocket': + $json->inbounds[0]->streamSettings->dsSettings = $server->networkSettings; + break; + case 'quic': + $json->inbounds[0]->streamSettings->quicSettings = $server->networkSettings; + break; + case 'grpc': + $json->inbounds[0]->streamSettings->grpcSettings = $server->networkSettings; + break; + } + } + } + + private function setRule(ServerV2ray $server, object $json) + { + $domainRules = array_filter(explode(PHP_EOL, config('v2board.server_v2ray_domain'))); + $protocolRules = array_filter(explode(PHP_EOL, config('v2board.server_v2ray_protocol'))); + if ($server->ruleSettings) { + $ruleSettings = $server->ruleSettings; + // domain + if (isset($ruleSettings->domain)) { + $ruleSettings->domain = array_filter($ruleSettings->domain); + if (!empty($ruleSettings->domain)) { + $domainRules = array_merge($domainRules, $ruleSettings->domain); + } + } + // protocol + if (isset($ruleSettings->protocol)) { + $ruleSettings->protocol = array_filter($ruleSettings->protocol); + if (!empty($ruleSettings->protocol)) { + $protocolRules = array_merge($protocolRules, $ruleSettings->protocol); + } + } + } + if (!empty($domainRules)) { + $domainObj = new \StdClass(); + $domainObj->type = 'field'; + $domainObj->domain = $domainRules; + $domainObj->outboundTag = 'block'; + array_push($json->routing->rules, $domainObj); + } + if (!empty($protocolRules)) { + $protocolObj = new \StdClass(); + $protocolObj->type = 'field'; + $protocolObj->protocol = $protocolRules; + $protocolObj->outboundTag = 'block'; + array_push($json->routing->rules, $protocolObj); + } + if (empty($domainRules) && empty($protocolRules)) { + $json->inbounds[0]->sniffing->enabled = false; + } + } + + private function setTls(ServerV2ray $server, object $json) + { + if ((int)$server->tls) { + $tlsSettings = $server->tlsSettings; + $json->inbounds[0]->streamSettings->security = 'tls'; + $tls = (object)[ + 'certificateFile' => '/root/.cert/server.crt', + 'keyFile' => '/root/.cert/server.key' + ]; + $json->inbounds[0]->streamSettings->tlsSettings = new \StdClass(); + if (isset($tlsSettings->serverName)) { + $json->inbounds[0]->streamSettings->tlsSettings->serverName = (string)$tlsSettings->serverName; + } + if (isset($tlsSettings->allowInsecure)) { + $json->inbounds[0]->streamSettings->tlsSettings->allowInsecure = (int)$tlsSettings->allowInsecure ? true : false; + } + $json->inbounds[0]->streamSettings->tlsSettings->certificates[0] = $tls; + } + } } diff --git a/app/Http/Controllers/Server/TrojanTidalabController.php b/app/Http/Controllers/Server/TrojanTidalabController.php index fb60606e..8209b7fd 100644 --- a/app/Http/Controllers/Server/TrojanTidalabController.php +++ b/app/Http/Controllers/Server/TrojanTidalabController.php @@ -20,6 +20,7 @@ use Illuminate\Support\Facades\Cache; */ class TrojanTidalabController extends Controller { + 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 __construct(Request $request) { $token = $request->input('token'); @@ -49,7 +50,6 @@ class TrojanTidalabController extends Controller "password" => $user->uuid, ]; unset($user['uuid']); - unset($user['email']); array_push($result, $user); } $eTag = sha1(json_encode($result)); @@ -98,13 +98,28 @@ class TrojanTidalabController extends Controller if (empty($nodeId) || empty($localPort)) { abort(500, '参数错误'); } - $serverService = new ServerService(); try { - $json = $serverService->getTrojanConfig($nodeId, $localPort); + $json = $this->getTrojanConfig($nodeId, $localPort); } catch (\Exception $e) { abort(500, $e->getMessage()); } die(json_encode($json, JSON_UNESCAPED_UNICODE)); } + + private function getTrojanConfig(int $nodeId, int $localPort) + { + $server = ServerTrojan::find($nodeId); + if (!$server) { + abort(500, '节点不存在'); + } + + $json = json_decode(self::TROJAN_CONFIG); + $json->local_port = $server->server_port; + $json->ssl->sni = $server->server_name ? $server->server_name : $server->host; + $json->ssl->cert = "/root/.cert/server.crt"; + $json->ssl->key = "/root/.cert/server.key"; + $json->api->api_port = $localPort; + return $json; + } } diff --git a/app/Services/ServerService.php b/app/Services/ServerService.php index 9ac550e6..55881ca2 100644 --- a/app/Services/ServerService.php +++ b/app/Services/ServerService.php @@ -14,8 +14,6 @@ use Illuminate\Support\Facades\Cache; class ServerService { - CONST V2RAY_CONFIG = '{"log":{"loglevel":"debug","access":"access.log","error":"error.log"},"api":{"services":["HandlerService","StatsService"],"tag":"api"},"dns":{},"stats":{},"inbounds":[{"port":443,"protocol":"vmess","settings":{"clients":[]},"sniffing":{"enabled":true,"destOverride":["http","tls"]},"streamSettings":{"network":"tcp"},"tag":"proxy"},{"listen":"127.0.0.1","port":23333,"protocol":"dokodemo-door","settings":{"address":"0.0.0.0"},"tag":"api"}],"outbounds":[{"protocol":"freedom","settings":{}},{"protocol":"blackhole","settings":{},"tag":"block"}],"routing":{"rules":[{"type":"field","inboundTag":"api","outboundTag":"api"}]},"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}}'; public function getV2ray(User $user, $all = false):array { $servers = []; @@ -117,153 +115,11 @@ class ServerService ->where('banned', 0) ->select([ 'id', - 'email', - 't', - 'u', - 'd', - 'transfer_enable', 'uuid' ]) ->get(); } - public function getV2RayConfig(int $nodeId, int $localPort) - { - $server = ServerV2ray::find($nodeId); - if (!$server) { - abort(500, '节点不存在'); - } - $json = json_decode(self::V2RAY_CONFIG); - $json->log->loglevel = (int)config('v2board.server_log_enable') ? 'debug' : 'none'; - $json->inbounds[1]->port = (int)$localPort; - $json->inbounds[0]->port = (int)$server->server_port; - $json->inbounds[0]->streamSettings->network = $server->network; - $this->setDns($server, $json); - $this->setNetwork($server, $json); - $this->setRule($server, $json); - $this->setTls($server, $json); - - return $json; - } - - public function getTrojanConfig(int $nodeId, int $localPort) - { - $server = ServerTrojan::find($nodeId); - if (!$server) { - abort(500, '节点不存在'); - } - - $json = json_decode(self::TROJAN_CONFIG); - $json->local_port = $server->server_port; - $json->ssl->sni = $server->server_name ? $server->server_name : $server->host; - $json->ssl->cert = "/root/.cert/server.crt"; - $json->ssl->key = "/root/.cert/server.key"; - $json->api->api_port = $localPort; - return $json; - } - - private function setDns(ServerV2ray $server, object $json) - { - if ($server->dnsSettings) { - $dns = $server->dnsSettings; - if (isset($dns->servers)) { - array_push($dns->servers, '1.1.1.1'); - array_push($dns->servers, 'localhost'); - } - $json->dns = $dns; - $json->outbounds[0]->settings->domainStrategy = 'UseIP'; - } - } - - private function setNetwork(ServerV2ray $server, object $json) - { - if ($server->networkSettings) { - switch ($server->network) { - case 'tcp': - $json->inbounds[0]->streamSettings->tcpSettings = $server->networkSettings; - break; - case 'kcp': - $json->inbounds[0]->streamSettings->kcpSettings = $server->networkSettings; - break; - case 'ws': - $json->inbounds[0]->streamSettings->wsSettings = $server->networkSettings; - break; - case 'http': - $json->inbounds[0]->streamSettings->httpSettings = $server->networkSettings; - break; - case 'domainsocket': - $json->inbounds[0]->streamSettings->dsSettings = $server->networkSettings; - break; - case 'quic': - $json->inbounds[0]->streamSettings->quicSettings = $server->networkSettings; - break; - case 'grpc': - $json->inbounds[0]->streamSettings->grpcSettings = $server->networkSettings; - break; - } - } - } - - private function setRule(ServerV2ray $server, object $json) - { - $domainRules = array_filter(explode(PHP_EOL, config('v2board.server_v2ray_domain'))); - $protocolRules = array_filter(explode(PHP_EOL, config('v2board.server_v2ray_protocol'))); - if ($server->ruleSettings) { - $ruleSettings = $server->ruleSettings; - // domain - if (isset($ruleSettings->domain)) { - $ruleSettings->domain = array_filter($ruleSettings->domain); - if (!empty($ruleSettings->domain)) { - $domainRules = array_merge($domainRules, $ruleSettings->domain); - } - } - // protocol - if (isset($ruleSettings->protocol)) { - $ruleSettings->protocol = array_filter($ruleSettings->protocol); - if (!empty($ruleSettings->protocol)) { - $protocolRules = array_merge($protocolRules, $ruleSettings->protocol); - } - } - } - if (!empty($domainRules)) { - $domainObj = new \StdClass(); - $domainObj->type = 'field'; - $domainObj->domain = $domainRules; - $domainObj->outboundTag = 'block'; - array_push($json->routing->rules, $domainObj); - } - if (!empty($protocolRules)) { - $protocolObj = new \StdClass(); - $protocolObj->type = 'field'; - $protocolObj->protocol = $protocolRules; - $protocolObj->outboundTag = 'block'; - array_push($json->routing->rules, $protocolObj); - } - if (empty($domainRules) && empty($protocolRules)) { - $json->inbounds[0]->sniffing->enabled = false; - } - } - - private function setTls(ServerV2ray $server, object $json) - { - if ((int)$server->tls) { - $tlsSettings = $server->tlsSettings; - $json->inbounds[0]->streamSettings->security = 'tls'; - $tls = (object)[ - 'certificateFile' => '/root/.cert/server.crt', - 'keyFile' => '/root/.cert/server.key' - ]; - $json->inbounds[0]->streamSettings->tlsSettings = new \StdClass(); - if (isset($tlsSettings->serverName)) { - $json->inbounds[0]->streamSettings->tlsSettings->serverName = (string)$tlsSettings->serverName; - } - if (isset($tlsSettings->allowInsecure)) { - $json->inbounds[0]->streamSettings->tlsSettings->allowInsecure = (int)$tlsSettings->allowInsecure ? true : false; - } - $json->inbounds[0]->streamSettings->tlsSettings->certificates[0] = $tls; - } - } - public function log(int $userId, int $serverId, int $u, int $d, float $rate, string $method) { if (($u + $d) < 10240) return true;