mirror of
https://github.com/v2board/v2board.git
synced 2025-04-20 08:32:36 +08:00
update: new feature route manage
This commit is contained in:
parent
f9e2afe9d1
commit
16693b94bf
57
app/Http/Controllers/Admin/Server/RouteController.php
Normal file
57
app/Http/Controllers/Admin/Server/RouteController.php
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Admin\Server;
|
||||||
|
|
||||||
|
use App\Http\Requests\Admin\ServerShadowsocksSave;
|
||||||
|
use App\Http\Requests\Admin\ServerShadowsocksUpdate;
|
||||||
|
use App\Models\ServerRoute;
|
||||||
|
use App\Models\ServerShadowsocks;
|
||||||
|
use App\Services\ServerService;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
|
||||||
|
class RouteController extends Controller
|
||||||
|
{
|
||||||
|
public function fetch(Request $request)
|
||||||
|
{
|
||||||
|
$routes = ServerRoute::get();
|
||||||
|
return [
|
||||||
|
'data' => $routes
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function save(Request $request)
|
||||||
|
{
|
||||||
|
$params = $request->validate([
|
||||||
|
'remarks' => 'required',
|
||||||
|
'match' => 'required',
|
||||||
|
'action' => 'required',
|
||||||
|
'action_value' => 'nullable'
|
||||||
|
]);
|
||||||
|
if ($request->input('id')) {
|
||||||
|
try {
|
||||||
|
$route = ServerRoute::find($request->input('id'));
|
||||||
|
$route->update($params);
|
||||||
|
return [
|
||||||
|
'data' => true
|
||||||
|
];
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
abort(500, '保存失败');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!ServerRoute::create($params)) abort(500, '创建失败');
|
||||||
|
return [
|
||||||
|
'data' => true
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function drop(Request $request)
|
||||||
|
{
|
||||||
|
$route = ServerRoute::find($request->input('id'));
|
||||||
|
if (!$route) abort(500, '路由不存在');
|
||||||
|
if (!$route->delete()) abort(500, '删除失败');
|
||||||
|
return [
|
||||||
|
'data' => true
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@ -18,7 +18,7 @@ class UniProxyController extends Controller
|
|||||||
private $nodeType;
|
private $nodeType;
|
||||||
private $nodeInfo;
|
private $nodeInfo;
|
||||||
private $nodeId;
|
private $nodeId;
|
||||||
private $token;
|
private $serverService;
|
||||||
|
|
||||||
public function __construct(Request $request)
|
public function __construct(Request $request)
|
||||||
{
|
{
|
||||||
@ -29,25 +29,11 @@ class UniProxyController extends Controller
|
|||||||
if ($token !== config('v2board.server_token')) {
|
if ($token !== config('v2board.server_token')) {
|
||||||
abort(500, 'token is error');
|
abort(500, 'token is error');
|
||||||
}
|
}
|
||||||
$this->token = $token;
|
|
||||||
$this->nodeType = $request->input('node_type');
|
$this->nodeType = $request->input('node_type');
|
||||||
$this->nodeId = $request->input('node_id');
|
$this->nodeId = $request->input('node_id');
|
||||||
switch ($this->nodeType) {
|
$this->serverService = new ServerService();
|
||||||
case 'v2ray':
|
$this->nodeInfo = $this->serverService->getServer($this->nodeId, $this->nodeType);
|
||||||
$this->nodeInfo = ServerV2ray::find($this->nodeId);
|
if (!$this->nodeInfo) abort(500, 'server is not exist');
|
||||||
break;
|
|
||||||
case 'shadowsocks':
|
|
||||||
$this->nodeInfo = ServerShadowsocks::find($this->nodeId);
|
|
||||||
break;
|
|
||||||
case 'trojan':
|
|
||||||
$this->nodeInfo = ServerTrojan::find($this->nodeId);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (!$this->nodeInfo) {
|
|
||||||
abort(500, 'server not found');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 后端获取用户
|
// 后端获取用户
|
||||||
@ -55,8 +41,7 @@ class UniProxyController extends Controller
|
|||||||
{
|
{
|
||||||
ini_set('memory_limit', -1);
|
ini_set('memory_limit', -1);
|
||||||
Cache::put(CacheKey::get('SERVER_' . strtoupper($this->nodeType) . '_LAST_CHECK_AT', $this->nodeInfo->id), time(), 3600);
|
Cache::put(CacheKey::get('SERVER_' . strtoupper($this->nodeType) . '_LAST_CHECK_AT', $this->nodeInfo->id), time(), 3600);
|
||||||
$serverService = new ServerService();
|
$users = $this->serverService->getAvailableUsers($this->nodeInfo->group_id);
|
||||||
$users = $serverService->getAvailableUsers($this->nodeInfo->group_id);
|
|
||||||
$users = $users->toArray();
|
$users = $users->toArray();
|
||||||
|
|
||||||
$response['users'] = $users;
|
$response['users'] = $users;
|
||||||
@ -127,6 +112,7 @@ class UniProxyController extends Controller
|
|||||||
'push_interval' => 120,
|
'push_interval' => 120,
|
||||||
'pull_interval' => 120
|
'pull_interval' => 120
|
||||||
];
|
];
|
||||||
|
$response['routes'] = $this->serverService->getRoutes($this->nodeInfo['route_id']);
|
||||||
$eTag = sha1(json_encode($response));
|
$eTag = sha1(json_encode($response));
|
||||||
if (strpos($request->header('If-None-Match'), $eTag) !== false ) {
|
if (strpos($request->header('If-None-Match'), $eTag) !== false ) {
|
||||||
abort(304);
|
abort(304);
|
||||||
|
@ -18,6 +18,7 @@ class ServerShadowsocksSave extends FormRequest
|
|||||||
'name' => 'required',
|
'name' => 'required',
|
||||||
'group_id' => 'required|array',
|
'group_id' => 'required|array',
|
||||||
'parent_id' => 'nullable|integer',
|
'parent_id' => 'nullable|integer',
|
||||||
|
'route_id' => 'nullable|array',
|
||||||
'host' => 'required',
|
'host' => 'required',
|
||||||
'port' => 'required',
|
'port' => 'required',
|
||||||
'server_port' => 'required',
|
'server_port' => 'required',
|
||||||
@ -35,6 +36,7 @@ class ServerShadowsocksSave extends FormRequest
|
|||||||
'name.required' => '节点名称不能为空',
|
'name.required' => '节点名称不能为空',
|
||||||
'group_id.required' => '权限组不能为空',
|
'group_id.required' => '权限组不能为空',
|
||||||
'group_id.array' => '权限组格式不正确',
|
'group_id.array' => '权限组格式不正确',
|
||||||
|
'route_id.array' => '路由组格式不正确',
|
||||||
'parent_id.integer' => '父节点格式不正确',
|
'parent_id.integer' => '父节点格式不正确',
|
||||||
'host.required' => '节点地址不能为空',
|
'host.required' => '节点地址不能为空',
|
||||||
'port.required' => '连接端口不能为空',
|
'port.required' => '连接端口不能为空',
|
||||||
|
@ -17,6 +17,7 @@ class ServerTrojanSave extends FormRequest
|
|||||||
'show' => '',
|
'show' => '',
|
||||||
'name' => 'required',
|
'name' => 'required',
|
||||||
'group_id' => 'required|array',
|
'group_id' => 'required|array',
|
||||||
|
'route_id' => 'nullable|array',
|
||||||
'parent_id' => 'nullable|integer',
|
'parent_id' => 'nullable|integer',
|
||||||
'host' => 'required',
|
'host' => 'required',
|
||||||
'port' => 'required',
|
'port' => 'required',
|
||||||
@ -34,6 +35,7 @@ class ServerTrojanSave extends FormRequest
|
|||||||
'name.required' => '节点名称不能为空',
|
'name.required' => '节点名称不能为空',
|
||||||
'group_id.required' => '权限组不能为空',
|
'group_id.required' => '权限组不能为空',
|
||||||
'group_id.array' => '权限组格式不正确',
|
'group_id.array' => '权限组格式不正确',
|
||||||
|
'route_id.array' => '路由组格式不正确',
|
||||||
'parent_id.integer' => '父节点格式不正确',
|
'parent_id.integer' => '父节点格式不正确',
|
||||||
'host.required' => '节点地址不能为空',
|
'host.required' => '节点地址不能为空',
|
||||||
'port.required' => '连接端口不能为空',
|
'port.required' => '连接端口不能为空',
|
||||||
|
@ -17,6 +17,7 @@ class ServerV2raySave extends FormRequest
|
|||||||
'show' => '',
|
'show' => '',
|
||||||
'name' => 'required',
|
'name' => 'required',
|
||||||
'group_id' => 'required|array',
|
'group_id' => 'required|array',
|
||||||
|
'route_id' => 'nullable|array',
|
||||||
'parent_id' => 'nullable|integer',
|
'parent_id' => 'nullable|integer',
|
||||||
'host' => 'required',
|
'host' => 'required',
|
||||||
'port' => 'required',
|
'port' => 'required',
|
||||||
@ -38,6 +39,7 @@ class ServerV2raySave extends FormRequest
|
|||||||
'name.required' => '节点名称不能为空',
|
'name.required' => '节点名称不能为空',
|
||||||
'group_id.required' => '权限组不能为空',
|
'group_id.required' => '权限组不能为空',
|
||||||
'group_id.array' => '权限组格式不正确',
|
'group_id.array' => '权限组格式不正确',
|
||||||
|
'route_id.array' => '路由组格式不正确',
|
||||||
'parent_id.integer' => '父ID格式不正确',
|
'parent_id.integer' => '父ID格式不正确',
|
||||||
'host.required' => '节点地址不能为空',
|
'host.required' => '节点地址不能为空',
|
||||||
'port.required' => '连接端口不能为空',
|
'port.required' => '连接端口不能为空',
|
||||||
|
@ -28,6 +28,9 @@ 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/route/fetch', 'Admin\\Server\\RouteController@fetch');
|
||||||
|
$router->post('/server/route/save', 'Admin\\Server\\RouteController@save');
|
||||||
|
$router->post('/server/route/drop', 'Admin\\Server\\RouteController@drop');
|
||||||
$router->get ('/server/manage/getNodes', 'Admin\\Server\\ManageController@getNodes');
|
$router->get ('/server/manage/getNodes', 'Admin\\Server\\ManageController@getNodes');
|
||||||
$router->post('/server/manage/sort', 'Admin\\Server\\ManageController@sort');
|
$router->post('/server/manage/sort', 'Admin\\Server\\ManageController@sort');
|
||||||
$router->group([
|
$router->group([
|
||||||
|
16
app/Models/ServerRoute.php
Executable file
16
app/Models/ServerRoute.php
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class ServerRoute extends Model
|
||||||
|
{
|
||||||
|
protected $table = 'v2_server_route';
|
||||||
|
protected $dateFormat = 'U';
|
||||||
|
protected $guarded = ['id'];
|
||||||
|
protected $casts = [
|
||||||
|
'created_at' => 'timestamp',
|
||||||
|
'updated_at' => 'timestamp',
|
||||||
|
];
|
||||||
|
}
|
@ -13,6 +13,7 @@ class ServerShadowsocks extends Model
|
|||||||
'created_at' => 'timestamp',
|
'created_at' => 'timestamp',
|
||||||
'updated_at' => 'timestamp',
|
'updated_at' => 'timestamp',
|
||||||
'group_id' => 'array',
|
'group_id' => 'array',
|
||||||
|
'route_id' => 'array',
|
||||||
'tags' => 'array',
|
'tags' => 'array',
|
||||||
'obfs_settings' => 'array'
|
'obfs_settings' => 'array'
|
||||||
];
|
];
|
||||||
|
@ -13,6 +13,7 @@ class ServerTrojan extends Model
|
|||||||
'created_at' => 'timestamp',
|
'created_at' => 'timestamp',
|
||||||
'updated_at' => 'timestamp',
|
'updated_at' => 'timestamp',
|
||||||
'group_id' => 'array',
|
'group_id' => 'array',
|
||||||
|
'route_id' => 'array',
|
||||||
'tags' => 'array'
|
'tags' => 'array'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ class ServerV2ray extends Model
|
|||||||
'created_at' => 'timestamp',
|
'created_at' => 'timestamp',
|
||||||
'updated_at' => 'timestamp',
|
'updated_at' => 'timestamp',
|
||||||
'group_id' => 'array',
|
'group_id' => 'array',
|
||||||
|
'route_id' => 'array',
|
||||||
'tlsSettings' => 'array',
|
'tlsSettings' => 'array',
|
||||||
'networkSettings' => 'array',
|
'networkSettings' => 'array',
|
||||||
'dnsSettings' => 'array',
|
'dnsSettings' => 'array',
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace App\Services;
|
namespace App\Services;
|
||||||
|
|
||||||
use App\Models\ServerLog;
|
use App\Models\ServerLog;
|
||||||
|
use App\Models\ServerRoute;
|
||||||
use App\Models\ServerShadowsocks;
|
use App\Models\ServerShadowsocks;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Models\ServerV2ray;
|
use App\Models\ServerV2ray;
|
||||||
@ -107,7 +108,6 @@ class ServerService
|
|||||||
return $servers;
|
return $servers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function getAvailableUsers($groupId)
|
public function getAvailableUsers($groupId)
|
||||||
{
|
{
|
||||||
return User::whereIn('group_id', $groupId)
|
return User::whereIn('group_id', $groupId)
|
||||||
@ -183,7 +183,7 @@ class ServerService
|
|||||||
return $server->toArray();
|
return $server->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function mergeData(&$servers)
|
private function mergeData(&$servers)
|
||||||
{
|
{
|
||||||
foreach ($servers as $k => $v) {
|
foreach ($servers as $k => $v) {
|
||||||
$serverType = strtoupper($servers[$k]['type']);
|
$serverType = strtoupper($servers[$k]['type']);
|
||||||
@ -217,4 +217,23 @@ class ServerService
|
|||||||
array_multisort($tmp, SORT_ASC, $servers);
|
array_multisort($tmp, SORT_ASC, $servers);
|
||||||
return $servers;
|
return $servers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getRoutes(array $routeIds)
|
||||||
|
{
|
||||||
|
return ServerRoute::select(['id', 'match', 'action', 'action_value'])->whereIn('id', $routeIds)->get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getServer($serverId, $serverType)
|
||||||
|
{
|
||||||
|
switch ($serverType) {
|
||||||
|
case 'v2ray':
|
||||||
|
return ServerV2ray::find($serverId);
|
||||||
|
case 'shadowsocks':
|
||||||
|
return ServerShadowsocks::find($serverId);
|
||||||
|
case 'trojan':
|
||||||
|
return ServerTrojan::find($serverId);
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -194,10 +194,24 @@ CREATE TABLE `v2_server_group` (
|
|||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `v2_server_route`;
|
||||||
|
CREATE TABLE `v2_server_route` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`remarks` varchar(255) NOT NULL,
|
||||||
|
`match` varchar(255) NOT NULL,
|
||||||
|
`action` varchar(11) NOT NULL,
|
||||||
|
`action_value` varchar(255) DEFAULT NULL,
|
||||||
|
`created_at` int(11) NOT NULL,
|
||||||
|
`updated_at` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `v2_server_shadowsocks`;
|
DROP TABLE IF EXISTS `v2_server_shadowsocks`;
|
||||||
CREATE TABLE `v2_server_shadowsocks` (
|
CREATE TABLE `v2_server_shadowsocks` (
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
`group_id` varchar(255) NOT NULL,
|
`group_id` varchar(255) NOT NULL,
|
||||||
|
`route_id` varchar(255) DEFAULT NULL,
|
||||||
`parent_id` int(11) DEFAULT NULL,
|
`parent_id` int(11) DEFAULT NULL,
|
||||||
`tags` varchar(255) DEFAULT NULL,
|
`tags` varchar(255) DEFAULT NULL,
|
||||||
`name` varchar(255) NOT NULL,
|
`name` varchar(255) NOT NULL,
|
||||||
@ -220,6 +234,7 @@ DROP TABLE IF EXISTS `v2_server_trojan`;
|
|||||||
CREATE TABLE `v2_server_trojan` (
|
CREATE TABLE `v2_server_trojan` (
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '节点ID',
|
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '节点ID',
|
||||||
`group_id` varchar(255) NOT NULL COMMENT '节点组',
|
`group_id` varchar(255) NOT NULL COMMENT '节点组',
|
||||||
|
`route_id` varchar(255) DEFAULT NULL,
|
||||||
`parent_id` int(11) DEFAULT NULL COMMENT '父节点',
|
`parent_id` int(11) DEFAULT NULL COMMENT '父节点',
|
||||||
`tags` varchar(255) DEFAULT NULL COMMENT '节点标签',
|
`tags` varchar(255) DEFAULT NULL COMMENT '节点标签',
|
||||||
`name` varchar(255) NOT NULL COMMENT '节点名称',
|
`name` varchar(255) NOT NULL COMMENT '节点名称',
|
||||||
@ -241,7 +256,8 @@ DROP TABLE IF EXISTS `v2_server_v2ray`;
|
|||||||
CREATE TABLE `v2_server_v2ray` (
|
CREATE TABLE `v2_server_v2ray` (
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
`group_id` varchar(255) NOT NULL,
|
`group_id` varchar(255) NOT NULL,
|
||||||
`name` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
|
`route_id` varchar(255) DEFAULT NULL,
|
||||||
|
`name` varchar(255) NOT NULL,
|
||||||
`parent_id` int(11) DEFAULT NULL,
|
`parent_id` int(11) DEFAULT NULL,
|
||||||
`host` varchar(255) NOT NULL,
|
`host` varchar(255) NOT NULL,
|
||||||
`port` varchar(11) NOT NULL,
|
`port` varchar(11) NOT NULL,
|
||||||
@ -260,7 +276,7 @@ CREATE TABLE `v2_server_v2ray` (
|
|||||||
`created_at` int(11) NOT NULL,
|
`created_at` int(11) NOT NULL,
|
||||||
`updated_at` int(11) NOT NULL,
|
`updated_at` int(11) NOT NULL,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `v2_stat_order`;
|
DROP TABLE IF EXISTS `v2_stat_order`;
|
||||||
@ -381,4 +397,4 @@ CREATE TABLE `v2_user` (
|
|||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
|
||||||
-- 2022-11-21 20:03:16
|
-- 2022-11-27 07:09:04
|
||||||
|
@ -587,12 +587,6 @@ ALTER TABLE `v2_mail_log`
|
|||||||
CHANGE `template_name` `template_name` varchar(255) NOT NULL AFTER `subject`,
|
CHANGE `template_name` `template_name` varchar(255) NOT NULL AFTER `subject`,
|
||||||
CHANGE `error` `error` text NULL AFTER `template_name`;
|
CHANGE `error` `error` text NULL AFTER `template_name`;
|
||||||
|
|
||||||
ALTER TABLE `v2_plan`
|
|
||||||
ADD `inventory_limit` int(11) NULL AFTER `reset_traffic_method`;
|
|
||||||
|
|
||||||
ALTER TABLE `v2_plan`
|
|
||||||
CHANGE `inventory_limit` `capacity_limit` int(11) NULL AFTER `reset_traffic_method`;
|
|
||||||
|
|
||||||
ALTER TABLE `v2_user`
|
ALTER TABLE `v2_user`
|
||||||
ADD `speed_limit` int(11) NULL AFTER `plan_id`;
|
ADD `speed_limit` int(11) NULL AFTER `plan_id`;
|
||||||
|
|
||||||
@ -608,3 +602,29 @@ ALTER TABLE `v2_server_trojan`
|
|||||||
UPDATE `v2_stat_server` SET
|
UPDATE `v2_stat_server` SET
|
||||||
`server_type` = 'v2ray'
|
`server_type` = 'v2ray'
|
||||||
WHERE `server_type` = 'vmess';
|
WHERE `server_type` = 'vmess';
|
||||||
|
|
||||||
|
ALTER TABLE `v2_server_shadowsocks`
|
||||||
|
ADD `route_id` varchar(255) COLLATE 'utf8mb4_general_ci' NULL AFTER `group_id`;
|
||||||
|
|
||||||
|
ALTER TABLE `v2_server_trojan`
|
||||||
|
ADD `route_id` varchar(255) COLLATE 'utf8mb4_general_ci' NULL AFTER `group_id`;
|
||||||
|
|
||||||
|
ALTER TABLE `v2_server_v2ray`
|
||||||
|
COLLATE 'utf8mb4_general_ci';
|
||||||
|
|
||||||
|
ALTER TABLE `v2_server_v2ray`
|
||||||
|
CHANGE `group_id` `group_id` varchar(255) NOT NULL AFTER `id`,
|
||||||
|
CHANGE `route_id` `route_id` varchar(255) NULL AFTER `group_id`,
|
||||||
|
CHANGE `host` `host` varchar(255) NOT NULL AFTER `parent_id`,
|
||||||
|
CHANGE `port` `port` varchar(11) NOT NULL AFTER `host`,
|
||||||
|
CHANGE `tags` `tags` varchar(255) NULL AFTER `tls`,
|
||||||
|
CHANGE `rate` `rate` varchar(11) NOT NULL AFTER `tags`,
|
||||||
|
CHANGE `network` `network` text NOT NULL AFTER `rate`,
|
||||||
|
CHANGE `rules` `rules` text NULL AFTER `network`,
|
||||||
|
CHANGE `networkSettings` `networkSettings` text NULL AFTER `rules`,
|
||||||
|
CHANGE `tlsSettings` `tlsSettings` text NULL AFTER `networkSettings`,
|
||||||
|
CHANGE `ruleSettings` `ruleSettings` text NULL AFTER `tlsSettings`,
|
||||||
|
CHANGE `dnsSettings` `dnsSettings` text NULL AFTER `ruleSettings`;
|
||||||
|
|
||||||
|
ALTER TABLE `v2_server_v2ray`
|
||||||
|
ADD `route_id` varchar(255) COLLATE 'utf8mb4_general_ci' NULL AFTER `group_id`;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user