Browse Source

feature: add vmess global rules

Tokumeikoi 4 years ago
parent
commit
1cf0ccb865

+ 3 - 1
app/Http/Controllers/Admin/ConfigController.php

@@ -108,7 +108,9 @@ class ConfigController extends Controller
                 'server' => [
                     'server_token' => config('v2board.server_token'),
                     'server_license' => config('v2board.server_license'),
-                    'server_log_level' => config('v2board.server_log_level', 'none')
+                    'server_log_enable' => config('v2board.server_log_enable', 0),
+                    'server_v2ray_domain' => config('v2board.server_v2ray_domain'),
+                    'server_v2ray_protocol' => config('v2board.server_v2ray_protocol'),
                 ],
                 'tutorial' => [
                     'apple_id' => config('v2board.apple_id')

+ 3 - 1
app/Http/Requests/Admin/ConfigSave.php

@@ -42,7 +42,9 @@ class ConfigSave extends FormRequest
             // server
             'server_token' => 'nullable|min:16',
             'server_license' => 'nullable',
-            'server_log_level' => 'nullable|in:debug,info,warning,error,none',
+            'server_log_enable' => 'in:0,1',
+            'server_v2ray_domain' => '',
+            'server_v2ray_protocol' => '',
             // alipay
             'alipay_enable' => 'in:0,1',
             'alipay_appid' => 'nullable|integer|min:16',

+ 25 - 17
app/Services/ServerService.php

@@ -171,31 +171,39 @@ class ServerService
 
     private function setRule(Server $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) {
-            $rules = json_decode($server->ruleSettings);
+            $ruleSettings = json_decode($server->ruleSettings);
             // domain
-            if (isset($rules->domain)) {
-                $rules->domain = array_filter($rules->domain);
-                if (!empty($rules->domain)) {
-                    $domainObj = new \StdClass();
-                    $domainObj->type = 'field';
-                    $domainObj->domain = $rules->domain;
-                    $domainObj->outboundTag = 'block';
-                    array_push($json->routing->rules, $domainObj);
+            if (isset($ruleSettings->domain)) {
+                $ruleSettings->domain = array_filter($ruleSettings->domain);
+                if (!empty($ruleSettings->domain)) {
+                    $domainRules = array_merge($domainRules, $ruleSettings->domain);
                 }
             }
             // protocol
-            if (isset($rules->protocol)) {
-                $rules->protocol = array_filter($rules->protocol);
-                if (!empty($rules->protocol)) {
-                    $protocolObj = new \StdClass();
-                    $protocolObj->type = 'field';
-                    $protocolObj->protocol = $rules->protocol;
-                    $protocolObj->outboundTag = 'block';
-                    array_push($json->routing->rules, $protocolObj);
+            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);
+        }
     }
 
     private function setTls(Server $server, object $json)

File diff suppressed because it is too large
+ 0 - 0
public/assets/admin/umi.css


File diff suppressed because it is too large
+ 0 - 0
public/assets/admin/umi.js


Some files were not shown because too many files changed in this diff