update: add vless

This commit is contained in:
v2board
2023-07-17 15:40:08 +08:00
parent 1a30aa30ad
commit 4c865d0262
9 changed files with 247 additions and 16 deletions

View File

@ -0,0 +1,117 @@
<?php
namespace App\Http\Controllers\V1\Admin\Server;
use App\Http\Controllers\Controller;
use App\Models\ServerVless;
use Illuminate\Http\Request;
use ParagonIE_Sodium_Compat as SodiumCompat;
class VlessController extends Controller
{
public function save(Request $request)
{
$params = $request->validate([
'group_id' => 'required',
'route_id' => 'nullable|array',
'name' => 'required',
'parent_id' => 'nullable|integer',
'host' => 'required',
'port' => 'required',
'server_port' => 'required',
'tls' => 'required|in:0,1',
'tls_settings' => 'nullable|array',
'flow' => 'nullable',
'network' => 'required',
'network_settings' => 'nullable|array',
'tags' => 'nullable|array',
'rate' => 'required',
'show' => 'nullable|in:0,1',
'sort' => 'nullable'
]);
if ((int)$params['tls_settings']['reality']) {
$keyPair = SodiumCompat::crypto_box_keypair();
if (!isset($params['tls_settings']['public_key'])) {
$params['tls_settings']['public_key'] = base64_encode(SodiumCompat::crypto_box_publickey($keyPair));
}
if (!isset($params['tls_settings']['private_key'])) {
$params['tls_settings']['private_key'] = base64_encode(SodiumCompat::crypto_box_secretkey($keyPair));
}
}
if ($request->input('id')) {
$server = ServerVless::find($request->input('id'));
if (!$server) {
abort(500, '服务器不存在');
}
try {
$server->update($params);
} catch (\Exception $e) {
abort(500, '保存失败');
}
return response([
'data' => true
]);
}
if (!ServerVless::create($params)) {
abort(500, '创建失败');
}
return response([
'data' => true
]);
}
public function drop(Request $request)
{
if ($request->input('id')) {
$server = ServerVless::find($request->input('id'));
if (!$server) {
abort(500, '节点ID不存在');
}
}
return response([
'data' => $server->delete()
]);
}
public function update(Request $request)
{
$params = $request->validate([
'show' => 'nullable|in:0,1',
]);
$server = ServerVless::find($request->input('id'));
if (!$server) {
abort(500, '该服务器不存在');
}
try {
$server->update($params);
} catch (\Exception $e) {
abort(500, '保存失败');
}
return response([
'data' => true
]);
}
public function copy(Request $request)
{
$server = ServerVless::find($request->input('id'));
$server->show = 0;
if (!$server) {
abort(500, '服务器不存在');
}
if (!ServerVless::create($server->toArray())) {
abort(500, '复制失败');
}
return response([
'data' => true
]);
}
}

View File

@ -36,43 +36,42 @@ class AdminRoute
$router->group([
'prefix' => 'server/trojan'
], function ($router) {
$router->get ('fetch', 'V1\\Admin\\Server\\TrojanController@fetch');
$router->post('save', 'V1\\Admin\\Server\\TrojanController@save');
$router->post('drop', 'V1\\Admin\\Server\\TrojanController@drop');
$router->post('update', 'V1\\Admin\\Server\\TrojanController@update');
$router->post('copy', 'V1\\Admin\\Server\\TrojanController@copy');
$router->post('sort', 'V1\\Admin\\Server\\TrojanController@sort');
$router->post('viewConfig', 'V1\\Admin\\Server\\TrojanController@viewConfig');
});
$router->group([
'prefix' => 'server/vmess'
], function ($router) {
$router->get ('fetch', 'V1\\Admin\\Server\\VmessController@fetch');
$router->post('save', 'V1\\Admin\\Server\\VmessController@save');
$router->post('drop', 'V1\\Admin\\Server\\VmessController@drop');
$router->post('update', 'V1\\Admin\\Server\\VmessController@update');
$router->post('copy', 'V1\\Admin\\Server\\VmessController@copy');
$router->post('sort', 'V1\\Admin\\Server\\VmessController@sort');
});
$router->group([
'prefix' => 'server/shadowsocks'
], function ($router) {
$router->get ('fetch', 'V1\\Admin\\Server\\ShadowsocksController@fetch');
$router->post('save', 'V1\\Admin\\Server\\ShadowsocksController@save');
$router->post('drop', 'V1\\Admin\\Server\\ShadowsocksController@drop');
$router->post('update', 'V1\\Admin\\Server\\ShadowsocksController@update');
$router->post('copy', 'V1\\Admin\\Server\\ShadowsocksController@copy');
$router->post('sort', 'V1\\Admin\\Server\\ShadowsocksController@sort');
});
$router->group([
'prefix' => 'server/hysteria'
], function ($router) {
$router->get ('fetch', 'V1\\Admin\\Server\\HysteriaController@fetch');
$router->post('save', 'V1\\Admin\\Server\\HysteriaController@save');
$router->post('drop', 'V1\\Admin\\Server\\HysteriaController@drop');
$router->post('update', 'V1\\Admin\\Server\\HysteriaController@update');
$router->post('copy', 'V1\\Admin\\Server\\HysteriaController@copy');
$router->post('sort', 'V1\\Admin\\Server\\HysteriaController@sort');
});
$router->group([
'prefix' => 'server/vless'
], function ($router) {
$router->post('save', 'V1\\Admin\\Server\\VlessController@save');
$router->post('drop', 'V1\\Admin\\Server\\VlessController@drop');
$router->post('update', 'V1\\Admin\\Server\\VlessController@update');
$router->post('copy', 'V1\\Admin\\Server\\VlessController@copy');
});
// Order
$router->get ('/order/fetch', 'V1\\Admin\\OrderController@fetch');