Skip to content

Commit 44410b1

Browse files
author
zhangjiangbin
committed
自动释放端口
1 parent 3852d40 commit 44410b1

File tree

13 files changed

+123
-74
lines changed

13 files changed

+123
-74
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/config/database.php
12
/public/upload
23
/storage/framework
34
/storage/logs
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
namespace App\Console\Commands;
4+
5+
use App\Http\Models\User;
6+
use Illuminate\Console\Command;
7+
use App\Http\Models\Config;
8+
use Log;
9+
10+
class AutoReleasePortJob extends Command
11+
{
12+
protected $signature = 'command:autoReleasePortJob';
13+
protected $description = '自动释放端口';
14+
15+
public function __construct()
16+
{
17+
parent::__construct();
18+
}
19+
20+
public function handle()
21+
{
22+
$config = $this->systemConfig();
23+
24+
if ($config['auto_release_port']) {
25+
$userList = User::query()->where('status', '<', 0)->get();
26+
if (!$userList->isEmpty()) {
27+
foreach ($userList as $user) {
28+
User::query()->where('id', $user->id)->update(['port' => 0]);
29+
}
30+
}
31+
}
32+
33+
Log::info('定时任务:' . $this->description);
34+
}
35+
36+
// 系统配置
37+
private function systemConfig()
38+
{
39+
$config = Config::query()->get();
40+
$data = [];
41+
foreach ($config as $vo) {
42+
$data[$vo->name] = $vo->value;
43+
}
44+
45+
return $data;
46+
}
47+
}

app/Console/Kernel.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class Kernel extends ConsoleKernel
2222
\App\Console\Commands\AutoDisableUserJob::class,
2323
\App\Console\Commands\AutoExpireCouponJob::class,
2424
\App\Console\Commands\AutoExpireInviteJob::class,
25+
\App\Console\Commands\AutoReleasePortJob::class,
2526
\App\Console\Commands\AutoReopenUserJob::class,
2627
\App\Console\Commands\AutoResetUserTrafficJob::class,
2728
\App\Console\Commands\AutoStatisticsNodeDailyTrafficJob::class,
@@ -49,6 +50,7 @@ protected function schedule(Schedule $schedule)
4950
$schedule->command('command:autoDisableUserJob')->everyMinute();
5051
$schedule->command('command:autoExpireCouponJob')->everyThirtyMinutes();
5152
$schedule->command('command:autoExpireInviteJob')->everyThirtyMinutes();
53+
$schedule->command('command:autoReleasePortJob')->daily();
5254
$schedule->command('command:autoReopenUserJob')->everyMinute();
5355
$schedule->command('command:autoResetUserTrafficJob')->everyFiveMinutes();
5456
$schedule->command('command:autoStatisticsNodeDailyTrafficJob')->dailyAt('04:30');

app/Http/Controllers/AdminController.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ public function addUser(Request $request)
195195
// 生成一个可用端口
196196
$last_user = User::query()->orderBy('id', 'desc')->first();
197197
$view['last_port'] = self::$config['is_rand_port'] ? $this->getRandPort() : $last_user->port + 1;
198-
198+
$view['is_rand_port'] = self::$config['is_rand_port'];
199199
$view['method_list'] = $this->methodList();
200200
$view['protocol_list'] = $this->protocolList();
201201
$view['obfs_list'] = $this->obfsList();
@@ -217,7 +217,7 @@ public function batchAddUsers(Request $request)
217217
$port = self::$config['is_rand_port'] ? $this->getRandPort() : $last_user->port + 1;
218218

219219
$user = new User();
220-
$user->username = '批量生成-' . $this->makeRandStr(6);
220+
$user->username = '批量生成-' . $this->makeRandStr();
221221
$user->password = md5($this->makeRandStr());
222222
$user->enable = 1;
223223
$user->port = $port;
@@ -1231,6 +1231,15 @@ public function userMonitor(Request $request)
12311231
return Response::view('admin/userMonitor', $view);
12321232
}
12331233

1234+
// 生成SS端口
1235+
public function makePort(Request $request)
1236+
{
1237+
$last_user = User::query()->orderBy('id', 'desc')->first();
1238+
$last_port = self::$config['is_rand_port'] ? $this->getRandPort() : $last_user->port + 1;
1239+
echo $last_port;
1240+
exit;
1241+
}
1242+
12341243
// 生成SS密码
12351244
public function makePasswd(Request $request)
12361245
{
@@ -1668,7 +1677,7 @@ public function makeInvite(Request $request)
16681677
$obj = new Invite();
16691678
$obj->uid = $user['id'];
16701679
$obj->fuid = 0;
1671-
$obj->code = strtoupper(substr(md5(microtime() . $this->makeRandStr(6)), 8, 12));
1680+
$obj->code = strtoupper(substr(md5(microtime() . $this->makeRandStr()), 8, 12));
16721681
$obj->status = 0;
16731682
$obj->dateline = date('Y-m-d H:i:s', strtotime("+ 7days"));
16741683
$obj->save();

app/Http/Controllers/Controller.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class Controller extends BaseController
1818
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
1919

2020
// 生成SS密码
21-
public function makeRandStr($length = 6)
21+
public function makeRandStr($length = 8)
2222
{
2323
// 密码字符集,可任意添加你需要的字符
2424
$chars = 'abcdefghijkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789';

app/Http/Controllers/UserController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ public function makeInvite(Request $request)
412412
$obj = new Invite();
413413
$obj->uid = $user['id'];
414414
$obj->fuid = 0;
415-
$obj->code = strtoupper(mb_substr(md5(microtime() . $this->makeRandStr(6)), 8, 12));
415+
$obj->code = strtoupper(mb_substr(md5(microtime() . $this->makeRandStr()), 8, 12));
416416
$obj->status = 0;
417417
$obj->dateline = date('Y-m-d H:i:s', strtotime("+7 days"));
418418
$obj->save();

database/seeds/ConfigTableSeeder.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,6 @@ public function run()
5959
DB::insert("INSERT INTO `config` VALUES ('46', 'is_free_code', 0);");
6060
DB::insert("INSERT INTO `config` VALUES ('47', 'is_forbid_robot', 0);");
6161
DB::insert("INSERT INTO `config` VALUES ('48', 'subscribe_domain', '');");
62+
DB::insert("INSERT INTO `config` VALUES ('49', 'auto_release_port', 1);");
6263
}
6364
}

resources/views/admin/addUser.blade.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,17 @@
172172
<div class="form-group">
173173
<label for="port" class="col-md-3 control-label">端口</label>
174174
<div class="col-md-8">
175-
<input type="text" class="form-control" name="port" value="{{$last_port}}" id="port" placeholder="" aria-required="true" aria-invalid="true" aria-describedby="number-error" required>
175+
@if($is_rand_port)
176+
<div class="input-group">
177+
<input class="form-control" type="text" name="port" value="{{$last_port}}" id="port" />
178+
<span class="input-group-btn">
179+
<button class="btn btn-success" type="button" onclick="makePort()">
180+
<i class="fa fa-arrow-left fa-fw" /></i> 生成 </button>
181+
</span>
182+
</div>
183+
@else
184+
<input type="text" class="form-control" name="port" value="{{$last_port}}" id="port" placeholder="" aria-required="true" aria-invalid="true" aria-describedby="number-error" required>
185+
@endif
176186
</div>
177187
</div>
178188
<div class="form-group">
@@ -358,6 +368,13 @@ function do_submit() {
358368
return false;
359369
}
360370
371+
// 生成随机端口
372+
function makePort() {
373+
$.get("{{url('admin/makePort')}}", function(ret) {
374+
$("#port").val(ret);
375+
});
376+
}
377+
361378
// 生成随机密码
362379
function makePasswd() {
363380
$.get("{{url('admin/makePasswd')}}", function(ret) {

resources/views/admin/editUser.blade.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,13 @@
212212
<div class="form-group">
213213
<label for="port" class="col-md-3 control-label">端口</label>
214214
<div class="col-md-8">
215-
<input type="text" class="form-control" name="port" value="{{$user->port}}" id="port" placeholder="" aria-required="true" aria-invalid="true" aria-describedby="number-error" required>
215+
<div class="input-group">
216+
<input class="form-control" type="text" name="port" value="{{$user->port}}" id="port" />
217+
<span class="input-group-btn">
218+
<button class="btn btn-success" type="button" onclick="makePort()">
219+
<i class="fa fa-arrow-left fa-fw" /></i> {{$user->port ? '更换' : '生成'}} </button>
220+
</span>
221+
</div>
216222
</div>
217223
</div>
218224
<div class="form-group">
@@ -453,6 +459,13 @@ function do_submit() {
453459
return false;
454460
}
455461
462+
// 生成随机端口
463+
function makePort() {
464+
$.get("{{url('admin/makePort')}}", function(ret) {
465+
$("#port").val(ret);
466+
});
467+
}
468+
456469
// 生成随机密码
457470
function makePasswd() {
458471
$.get("{{url('admin/makePasswd')}}", function(ret) {

resources/views/admin/system.blade.php

Lines changed: 21 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -530,78 +530,18 @@
530530
<span class="help-block"> 触发流量异常导致用户被封禁的时长,到期后自动解封 </span>
531531
</div>
532532
</div>
533-
<div class="col-md-6"></div>
534-
</div>
535-
536-
</div>
537-
</form>
538-
</div>
539-
<!--
540-
<div class="tab-pane" id="tab_7">
541-
<form action="{{url('admin/setQrcode')}}" method="post" enctype="multipart/form-data" class="form-horizontal">
542-
<div class="form-body">
543-
<div class="portlet-body">
544-
<div class="form-group">
545-
<div class="col-md-6">
546-
<label class="control-label col-md-3">微信</label>
547-
<div class="col-md-9">
548-
<div class="fileinput fileinput-new" data-provides="fileinput">
549-
<div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">
550-
@if ($wechat_qrcode)
551-
<img src="{{$wechat_qrcode}}" alt="" />
552-
@else
553-
<img src="/assets/images/noimage.png" alt="" />
554-
@endif
555-
</div>
556-
<div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;"> </div>
557-
<div>
558-
<span class="btn default btn-file">
559-
<span class="fileinput-new"> 选择 </span>
560-
<span class="fileinput-exists"> 更换 </span>
561-
<input type="file" name="wechat_qrcode" id="wechat_qrcode">
562-
</span>
563-
<a href="javascript:;" class="btn red fileinput-exists" data-dismiss="fileinput"> 移除 </a>
564-
</div>
565-
</div>
566-
</div>
567-
</div>
568-
<div class="col-md-6">
569-
<label class="control-label col-md-3">支付宝</label>
570-
<div class="col-md-9">
571-
<div class="fileinput fileinput-new" data-provides="fileinput">
572-
<div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">
573-
@if ($alipay_qrcode)
574-
<img src="{{$alipay_qrcode}}" alt="" />
575-
@else
576-
<img src="/assets/images/noimage.png" alt="" />
577-
@endif
578-
</div>
579-
<div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;"> </div>
580-
<div>
581-
<span class="btn default btn-file">
582-
<span class="fileinput-new"> 选择 </span>
583-
<span class="fileinput-exists"> 更换 </span>
584-
<input type="file" name="alipay_qrcode" id="alipay_qrcode">
585-
</span>
586-
<a href="javascript:;" class="btn red fileinput-exists" data-dismiss="fileinput"> 移除 </a>
587-
</div>
588-
</div>
589-
</div>
533+
<div class="col-md-6">
534+
<label for="auto_release_port" class="col-md-3 control-label">端口释放</label>
535+
<div class="col-md-9">
536+
<input type="checkbox" class="make-switch" @if($auto_release_port) checked @endif id="auto_release_port" data-on-color="success" data-off-color="danger" data-on-text="启用" data-off-text="关闭">
537+
<span class="help-block"> (推荐)被禁用的用户端口自动释放,重新启用则需要手动分配端口 </span>
590538
</div>
591539
</div>
592540
</div>
593-
</div>
594-
<div class="form-actions">
595-
<div class="row">
596-
<div class="col-md-offset-6">
597-
<input type="hidden" name="_token" value="{{csrf_token()}}" />
598-
<button type="submit" class="btn green">提 交</button>
599-
</div>
600-
</div>
541+
601542
</div>
602543
</form>
603544
</div>
604-
-->
605545
<div class="tab-pane" id="tab_8">
606546
<form action="#" method="post" class="form-horizontal">
607547
<div class="portlet-body">
@@ -946,6 +886,21 @@
946886
}
947887
});
948888
889+
// 启用、禁用端口自动释放
890+
$('#auto_release_port').on({
891+
'switchChange.bootstrapSwitch': function(event, state) {
892+
var auto_release_port = state ? 1 : 0;
893+
894+
$.post("{{url('admin/setConfig')}}", {_token:'{{csrf_token()}}', name:'auto_release_port', value:auto_release_port}, function (ret) {
895+
layer.msg(ret.message, {time:1000}, function() {
896+
if (ret.status == 'fail') {
897+
window.location.reload();
898+
}
899+
});
900+
});
901+
}
902+
});
903+
949904
// 启用、禁用PayPal支付接口
950905
$('#paypal_status').on({
951906
'switchChange.bootstrapSwitch': function(event, state) {

0 commit comments

Comments
 (0)