소스 검색

Vnet Webapi完成! 节点页面js错误修复;统一网速计量;

兔姬桑 4 년 전
부모
커밋
d537d32516

+ 1 - 1
app/Http/Controllers/Api/WebApi/V2RayController.php

@@ -32,7 +32,7 @@ class V2RayController extends BaseController {
 			'v2_host'         => $node->v2_host,
 			'v2_path'         => $node->v2_path,
 			'v2_tls'          => $node->v2_tls? true : false,
-			'v2_tls_provider' => $node->tls_provider,
+			'v2_tls_provider' => Helpers::systemConfig()['v2ray_tls_provider']?: $node->tls_provider,
 		]);
 	}
 

+ 4 - 3
app/Http/Controllers/Api/WebApi/VNetController.php

@@ -16,14 +16,15 @@ class VNetController extends BaseController {
 			'method'       => $node->method,
 			'protocol'     => $node->protocol,
 			'obfs'         => $node->obfs,
-			'obfs_param'   => $node->obfs_param,
+			'obfs_param'   => $node->obfs_param?: '',
 			'is_udp'       => $node->is_udp,
 			'speed_limit'  => $node->speed_limit,
 			'client_limit' => $node->client_limit,
 			'single'       => $node->single,
-			'port'         => $node->port,
-			'passwd'       => $node->passwd,
+			'port'         => strval($node->port),
+			'passwd'       => $node->passwd?: '',
 			'push_port'    => $node->push_port,
+			'secret'       => $node->auth->secret
 		]);
 	}
 

+ 3 - 3
app/Http/Controllers/NodeController.php

@@ -110,7 +110,7 @@ class NodeController extends Controller {
 				$node->relay_server = $request->input('relay_server');
 				$node->relay_port = $request->input('relay_port');
 				$node->level = $request->input('level');
-				$node->speed_limit = $request->input('speed_limit');
+				$node->speed_limit = intval($request->input('speed_limit')) * Mbps;
 				$node->client_limit = $request->input('client_limit');
 				$node->description = $request->input('description');
 				$node->method = $request->input('method');
@@ -187,7 +187,7 @@ class NodeController extends Controller {
 			'level'          => 'required|numeric|between:0,255',
 			'speed_limit'    => 'required|numeric|min:0',
 			'client_limit'   => 'required|numeric|min:0',
-			'port'           => 'numeric|between:0,65535',
+			'port'           => 'nullable|numeric|between:0,65535',
 			'ip'             => 'ipv4',
 			'ipv6'           => 'nullable|ipv6',
 			'relay_server'   => 'required_if:is_relay,1',
@@ -258,7 +258,7 @@ class NodeController extends Controller {
 					'relay_server'   => $request->input('relay_server'),
 					'relay_port'     => $request->input('relay_port'),
 					'level'          => $request->input('level'),
-					'speed_limit'    => $request->input('speed_limit'),
+					'speed_limit'    => intval($request->input('speed_limit')) * Mbps,
 					'client_limit'   => $request->input('client_limit'),
 					'description'    => $request->input('description'),
 					'method'         => $request->input('method'),

+ 8 - 5
app/helpers.php

@@ -12,6 +12,8 @@ define('Minute', 60);
 define('Hour', 3600);
 define('Day', 86400);
 
+define('Mbps', 125000);
+
 // 生成SS密码
 if(!function_exists('makeRandStr')){
 	function makeRandStr($length = 6, $isNumbers = false) {
@@ -48,15 +50,16 @@ if(!function_exists('base64url_decode')){
 // 根据流量值自动转换单位输出
 if(!function_exists('flowAutoShow')){
 	function flowAutoShow($value = 0) {
-		if(abs($value) >= PB){
+		$value = abs($value);
+		if($value >= PB){
 			return round($value / PB, 2)."PB";
-		}elseif(abs($value) >= TB){
+		}elseif($value >= TB){
 			return round($value / TB, 2)."TB";
-		}elseif(abs($value) >= GB){
+		}elseif($value >= GB){
 			return round($value / GB, 2)."GB";
-		}elseif(abs($value) >= MB){
+		}elseif($value >= MB){
 			return round($value / MB, 2)."MB";
-		}elseif(abs($value) >= KB){
+		}elseif($value >= KB){
 			return round($value / KB, 2)."KB";
 		}else{
 			return round($value, 2)."B";

+ 17 - 3
resources/views/admin/config/system.blade.php

@@ -457,13 +457,14 @@
 									</div>
 									<div class="form-group col-lg-6">
 										<div class="row">
-											<label class="col-md-3 col-form-label" for="vnet_license">Vnet授权</label>
+											<label class="col-md-3 col-form-label" for="web_api_url">授权域名</label>
 											<div class="col-md-7">
 												<div class="input-group">
-													<input type="text" class="form-control" id="vnet_license" value="{{$vnet_license}}"/>
+													<input type="text" class="form-control" id="web_api_url" value="{{$web_api_url}}"/>
 													<span class="input-group-append">
-														<button class="btn btn-primary" type="button" onclick="update('vnet_license')">修改</button>
+														<button class="btn btn-primary" type="button" onclick="update('web_api_url')">修改</button>
 													</span>
+													<span class="text-help offset-md-3"> 用于 VNet后端 授权,此域名需要解析A记录到面板,例:https://demo.proxypanel.ml</span>
 												</div>
 											</div>
 										</div>
@@ -494,6 +495,19 @@
 											</div>
 										</div>
 									</div>
+									<div class="form-group col-lg-6">
+										<div class="row">
+											<label class="col-md-3 col-form-label" for="v2ray_tls_provider">V2Ray TLS配置</label>
+											<div class="col-md-7">
+												<div class="input-group">
+													<input type="text" class="form-control" id="v2ray_tls_provider" value="{{$v2ray_tls_provider}}"/>
+													<span class="input-group-append">
+														<button class="btn btn-primary" type="button" onclick="update('v2ray_tls_provider')">修改</button>
+													</span>
+												</div>
+											</div>
+										</div>
+									</div>
 								</div>
 							</form>
 						</div>

+ 3 - 3
resources/views/admin/node/authList.blade.php

@@ -90,7 +90,7 @@
 								<div class="text-center red-700 mb-5">VNET-V2Ray</div>
 								(yum install curl 2> /dev/null || apt install curl 2> /dev/null) \<br>
 								&& curl -L -s https://bit.ly/2xoemF2 \<br>
-								| WEB_API="{{\App\Components\Helpers::systemConfig()['vnet_license'] ?: \App\Components\Helpers::systemConfig()['website_url']}}" \<br>
+								| WEB_API="{{\App\Components\Helpers::systemConfig()['web_api_url'] ?: \App\Components\Helpers::systemConfig()['website_url']}}" \<br>
 								NODE_ID={{$vl->node->id}} \<br>
 								NODE_KEY={{$vl->key}} \<br>
 								bash
@@ -115,7 +115,7 @@
 								<div class="text-center red-700 mb-5">V2Ray-Poseidon</div>
 								(yum install curl 2> /dev/null || apt install curl 2> /dev/null) \<br>
 								&& curl -L -s https://bit.ly/2VhvcPz \<br>
-								| WEB_API="{{\App\Components\Helpers::systemConfig()['vnet_license'] ?: \App\Components\Helpers::systemConfig()['website_url']}}" \<br>
+								| WEB_API="{{\App\Components\Helpers::systemConfig()['web_api_url'] ?: \App\Components\Helpers::systemConfig()['website_url']}}" \<br>
 								NODE_ID={{$vl->node->id}} \<br>
 								NODE_KEY={{$vl->key}} \<br>
 								bash
@@ -172,7 +172,7 @@
 								<div class="text-center red-700 mb-5">VNET</div>
 								(yum install curl 2> /dev/null || apt install curl 2> /dev/null) \<br>
 								&& curl -L -s https://bit.ly/2RNkPk7 \<br>
-								| WEB_API="{{\App\Components\Helpers::systemConfig()['vnet_license'] ?: \App\Components\Helpers::systemConfig()['website_url']}}" \<br>
+								| WEB_API="{{\App\Components\Helpers::systemConfig()['web_api_url'] ?: \App\Components\Helpers::systemConfig()['website_url']}}" \<br>
 								NODE_ID={{$vl->node->id}} \<br>
 								NODE_KEY={{$vl->key}} \<br>
 								bash

+ 25 - 10
resources/views/admin/node/nodeInfo.blade.php

@@ -80,7 +80,7 @@
 										<label for="speed_limit" class="col-md-3 col-form-label">节点限速</label>
 										<div class="col-md-4 input-group p-0">
 											<input type="number" class="form-control" id="speed_limit" name="speed_limit" value="1000" required>
-											<span class="input-group-text">M</span>
+											<span class="input-group-text">Mbps</span>
 										</div>
 									</div>
 									<div class="form-group row">
@@ -139,7 +139,7 @@
 											<li class="list-inline-item">
 												<div class="radio-custom radio-primary">
 													<input type="radio" id="shadowsocks" name="type" value="1" checked>
-													<label for="shadowsocks">Shadowsocks(R)</label>
+													<label for="shadowsocks">Shadowsocks(R) | VNET</label>
 												</div>
 											</li>
 											<li class="list-inline-item">
@@ -187,9 +187,9 @@
 												@endforeach
 											</select>
 										</div>
-										<div class="form-group row">
+										<div class="form-group row obfs_param">
 											<label for="obfs_param" class="col-md-3 col-form-label"> 混淆参数 </label>
-											<textarea class="form-control col-md-8" rows="5" name="obfs_param" id="obfs_param"></textarea>
+											<textarea class="form-control col-md-8" rows="5" name="obfs_param" id="obfs_param" placeholder="混淆不为 [plain] 时可填入参数进行流量伪装;&#13;&#10;混淆为 [http_simple] 时,建议端口为 80;&#13;&#10;混淆为 [tls] 时,建议端口为 443;"></textarea>
 										</div>
 										<div class="form-group row">
 											<label for="compatible" class="col-md-3 col-form-label">兼容SS</label>
@@ -215,8 +215,8 @@
 												<label for="single_port" class="col-md-3 col-form-label">[单] 端口</label>
 												<input type="number" class="form-control col-md-4" name="port" value="443" id="single_port"/>
 												<span class="text-help offset-md-3"> 推荐80或443,服务端需要配置 </span>
-												<span class="text-help offset-md-3"> 严格模式:用户的端口无法连接,只能通过以下指定的端口进行连接
-												                                     (<a href="javascript:showPortsOnlyConfig();">如何配置</a>)</span>
+												<span class="text-help offset-md-3">
+													严格模式:用户的端口无法连接,只能通过以下指定的端口进行连接 (<a href="javascript:showPortsOnlyConfig();">如何配置</a>)</span>
 											</div>
 											<div class="form-group row">
 												<label for="passwd" class="col-md-3 col-form-label">[单] 密码</label>
@@ -232,7 +232,7 @@
 										</div>
 										<div class="form-group row">
 											<label for="v2ray_port" class="col-md-3 col-form-label">连接端口</label>
-											<input type="number" class="form-control col-md-4" name="port" id="v2ray_port" value="443" required/>
+											<input type="number" class="form-control col-md-4" name="port" id="v2ray_port" value="443"/>
 										</div>
 										<div class="form-group row">
 											<label for="v2_port" class="col-md-3 col-form-label">服务端口</label>
@@ -302,7 +302,7 @@
 									<div class="trojan-setting hidden">
 										<div class="form-group row">
 											<label for="trojan_port" class="col-md-3 col-form-label">连接端口</label>
-											<input type="number" class="form-control col-md-4" name="port" id="trojan_port" value="443" required/>
+											<input type="number" class="form-control col-md-4" name="port" id="trojan_port" value="443"/>
 										</div>
 									</div>
 									<!-- 中转 设置部分 -->
@@ -394,7 +394,7 @@
 			$('#push_port').val('{{$node->push_port}}');
 			$('#traffic_rate').val('{{$node->traffic_rate}}');
 			$('#level').selectpicker('val', '{{$node->level}}');
-			$('#speed_limit').val('{{$node->speed_limit}}');
+			$('#speed_limit').val('{{$node->speed_limit/Mbps}}');
 			$('#client_limit').val('{{$node->client_limit}}');
 			$('#labels').selectpicker('val', {{$node->labels}});
 			$('#country_code').selectpicker('val', '{{$node->country_code}}');
@@ -422,7 +422,7 @@
 			$('#method').selectpicker('val', '{{$node->method}}');
 			$('#protocol').selectpicker('val', '{{$node->protocol}}');
 			$('#protocol_param').val('{{$node->protocol_param}}');
-			$('#obfs').val('{{$node->obfs}}');
+			$('#obfs').selectpicker('val', '{{$node->obfs}}');
 			$('#obfs_param').val('{{$node->obfs_param}}');
 			@if($node->compatible)
 			$('#compatible').click();
@@ -456,6 +456,9 @@
 			$('#is_subscribe').click();
 			v2_path.val('/' + string);
 			@endisset
+			if ($("#obfs").val() === 'plain') {
+				$('.obfs_param').hide();
+			}
 		});
 
 		// ajax同步提交
@@ -533,6 +536,8 @@
 					if (check) {
 						$(".single-setting").show();
 					} else {
+						$('#single_port').val('');
+						$('#passwd').val('');
 						$(".single-setting").hide();
 					}
 					break;
@@ -587,6 +592,16 @@
 			}
 		});
 
+		$("#obfs").on('changed.bs.select', function (e, clickedIndex, isSelected, previousValue) {
+			const obfs_param = $('.obfs_param');
+			if ($("#obfs").val() === 'plain') {
+				$("#obfs_param").val('');
+				obfs_param.hide();
+			} else {
+				obfs_param.show();
+			}
+		});
+
 		// 设置V2Ray详细设置
 		$("#v2_net").on('changed.bs.select', function (e, clickedIndex, isSelected, previousValue) {
 			const type = $('.v2_type');

+ 3 - 3
resources/views/admin/user/userInfo.blade.php

@@ -282,8 +282,8 @@
 								<label class="col-md-2 col-sm-3 col-form-label" for="speed_limit">用户限速</label>
 								<div class="col-xl-6 col-sm-8">
 									<div class="input-group">
-										<input type="number" class="form-control" name="speed_limit" id="speed_limit" value="10737418240"/>
-										<span class="input-group-text">Byte</span>
+										<input type="number" class="form-control" name="speed_limit" id="speed_limit" value="200"/>
+										<span class="input-group-text"> Mbps</span>
 									</div>
 									<span class="text-help">为 0 时不限速 </span>
 								</div>
@@ -352,7 +352,7 @@
 			$("input[name='enable'][value='{{$user->enable}}']").click()
 			$('#protocol').selectpicker('val', '{{$user->protocol}}')
 			$('#obfs').selectpicker('val', '{{$user->obfs}}')
-			$('#speed_limit').val('{{$user->speed_limit}}')
+			$('#speed_limit').val('{{$user->speed_limit/Mbps}}')
 			$('#uuid').val('{{$user->vmess_id}}')
 			@else
 			$('#level').selectpicker('val', '0')

+ 11 - 0
routes/api.php

@@ -1,6 +1,17 @@
 <?php
 // 后端WEBAPI
 Route::group(['namespace' => 'Api\WebApi', 'middleware' => ['webApi']], function() {
+	// VNet后端WEBAPI V1版
+	Route::group(['prefix' => 'web/v1'], function() {
+		Route::get('node/{id}', 'VNetController@getNodeInfo'); // 获取节点信息
+		Route::post('nodeStatus/{id}', 'BaseController@setNodeStatus'); // 上报节点心跳信息
+		Route::post('nodeOnline/{id}', 'BaseController@setNodeOnline'); // 上报节点在线人数
+		Route::get('userList/{id}', 'VNetController@getUserList'); // 获取节点可用的用户列表
+		Route::post('userTraffic/{id}', 'BaseController@setUserTraffic'); // 上报用户流量日志
+		Route::get('nodeRule/{id}', 'BaseController@getNodeRule'); // 获取节点的审计规则
+		Route::post('trigger/{id}', 'BaseController@addRuleLog'); // 上报用户触发的审计规则记录
+	});
+	
 	// VNet后端WEBAPI V2版
 	Route::group(['prefix' => 'vnet/v2'], function() {
 		Route::get('node/{id}', 'VNetController@getNodeInfo'); // 获取节点信息

+ 4 - 3
sql/db.sql

@@ -355,10 +355,10 @@ VALUES ('1', 'is_rand_port', 0),
        ('48', 'subscribe_domain', ''),
        ('49', 'auto_release_port', 1),
        ('50', 'website_callback_url', ''),
-       ('51', 'vnet_license', ''),
+       ('51', 'web_api_url', ''),
        ('52', 'v2ray_license', ''),
        ('53', 'trojan_license', ''),
-       ('54', 'initial_labels_for_user', ''),
+       ('54', 'v2ray_tls_provider', ''),
        ('55', 'website_analytics', ''),
        ('56', 'website_customer_service', ''),
        ('57', 'register_ip_limit', 5),
@@ -1299,7 +1299,8 @@ VALUES (1, '1', '360',
        (16, '1', '流媒体',
         '(.*\.||)(youtube|googlevideo|hulu|netflix|nflxvideo|akamai|nflximg|hbo|mtv|bbc|tvb)\.(org|club|com|net|tv)',
         '2019-11-19 15:04:11', '2019-11-19 15:04:11'),
-       (17, '1', '测速类', '(.*\.||)(fast|speedtest)\.(org|com|net|cn)', '2019-11-19 15:04:11', '2019-11-19 15:04:11');
+       (17, '1', '测速类', '(.*\.||)(fast|speedtest)\.(org|com|net|cn)', '2019-11-19 15:04:11', '2019-11-19 15:04:11'),
+       (17, '1', '涉洗钱', '(.*\.||)(metatrader4|metatrader5|mql5)\.(org|com|net)', '2020-7-9 14:25:11', '2020-7-9 14:25:11');
 
 -- ----------------------------
 -- Table structure for rule_group

+ 5 - 0
sql/mod/20200708.sql

@@ -0,0 +1,5 @@
+ALTER TABLE `ss_node`
+    CHANGE `client_limit` `client_limit` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 0 COMMENT '设备数限制';
+
+UPDATE `config` SET `name` = 'web_api_url' WHERE `config`.`id` = 51;
+UPDATE `config` SET `name` = 'v2ray_tls_provider' WHERE `config`.`id` = 54;