Przeglądaj źródła

code improve

Apply fixes from StyleCI
兔姬桑 3 lat temu
rodzic
commit
f67bcf623d
45 zmienionych plików z 292 dodań i 377 usunięć
  1. 1 1
      LICENSE
  2. 8 11
      app/Components/Client/QuantumultX.php
  3. 4 5
      app/Components/Client/Surfboard.php
  4. 6 9
      app/Components/Client/Surge.php
  5. 2 3
      app/Components/DDNS/Aliyun.php
  6. 2 3
      app/Components/DDNS/CloudFlare.php
  7. 1 1
      app/Components/DDNS/DNSPod.php
  8. 2 2
      app/Components/DDNS/Namesilo.php
  9. 4 4
      app/Components/IP.php
  10. 3 1
      app/Console/Commands/AutoJob.php
  11. 2 3
      app/Exceptions/Handler.php
  12. 1 3
      app/Http/Controllers/Admin/CouponController.php
  13. 1 1
      app/Http/Controllers/Admin/LogsController.php
  14. 1 1
      app/Http/Controllers/Admin/ReportController.php
  15. 1 3
      app/Http/Controllers/Admin/ShopController.php
  16. 3 1
      app/Http/Controllers/Admin/SystemController.php
  17. 14 12
      app/Http/Controllers/Admin/ToolsController.php
  18. 4 2
      app/Http/Controllers/Admin/UserController.php
  19. 2 2
      app/Http/Controllers/Api/Client/V1Controller.php
  20. 5 5
      app/Http/Controllers/Api/WebApi/BaseController.php
  21. 1 1
      app/Http/Controllers/Api/WebApi/TrojanController.php
  22. 2 2
      app/Http/Controllers/Api/WebApi/V2RayController.php
  23. 5 5
      app/Http/Controllers/AuthController.php
  24. 1 2
      app/Http/Controllers/Gateway/AbstractPayment.php
  25. 1 1
      app/Http/Controllers/Gateway/EPay.php
  26. 1 1
      app/Http/Controllers/Gateway/Manual.php
  27. 0 1
      app/Http/Controllers/Gateway/PayBeaver.php
  28. 0 1
      app/Http/Controllers/Gateway/Stripe.php
  29. 0 1
      app/Http/Controllers/Gateway/THeadPay.php
  30. 1 1
      app/Http/Controllers/PaymentController.php
  31. 1 2
      app/Http/Controllers/User/AffiliateController.php
  32. 0 1
      app/Http/Controllers/User/SubscribeController.php
  33. 1 1
      app/Http/Controllers/UserController.php
  34. 1 0
      app/Http/Middleware/Permission.php
  35. 1 3
      app/Jobs/VNet/addUser.php
  36. 2 6
      app/Jobs/VNet/editUser.php
  37. 1 3
      app/Jobs/VNet/reloadNode.php
  38. 5 1
      app/Models/Node.php
  39. 7 3
      app/Models/Order.php
  40. 1 1
      app/Observers/UserObserver.php
  41. 1 1
      app/Providers/AuthServiceProvider.php
  42. 5 6
      app/Services/OrderService.php
  43. 179 256
      composer.lock
  44. 1 1
      config/common.php
  45. 7 3
      config/services.php

+ 1 - 1
LICENSE

@@ -1,7 +1,7 @@
                     GNU GENERAL PUBLIC LICENSE
                        Version 3, 29 June 2007
 
-Copyright (C) 2017-2020 Bretton Ye
+Copyright (C) 2017-2022 Bretton Ye
 Everyone is permitted to copy and distribute verbatim copies of this
 license document, but changing it is not allowed.
 

+ 8 - 11
app/Components/Client/QuantumultX.php

@@ -6,22 +6,21 @@ class QuantumultX
 {
     public static function buildShadowsocks($server)
     {
-        $config = [
+        $config = array_filter([
             "shadowsocks={$server['host']}:{$server['port']}",
             "method={$server['method']}",
             "password={$server['passwd']}",
             'fast-open=true',
             "udp-relay={$server['udp']}",
             "tag={$server['name']}",
-        ];
-        $config = array_filter($config);
+        ]);
 
         return implode(',', $config).PHP_EOL;
     }
 
     public static function buildShadowsocksr($server)
     {
-        $config = [
+        $config = array_filter([
             "shadowsocks={$server['host']}:{$server['port']}",
             "method={$server['method']}",
             "password={$server['passwd']}",
@@ -32,8 +31,7 @@ class QuantumultX
             'fast-open=true',
             "udp-relay={$server['udp']}",
             "tag={$server['name']}",
-        ];
-        $config = array_filter($config);
+        ]);
 
         return implode(',', $config).PHP_EOL;
     }
@@ -61,12 +59,12 @@ class QuantumultX
 
         if ($server['v2_tls']) {
             $config[] = 'tls-verification=true';
-            if (isset($server['v2_host']) && ! empty($server['v2_host'])) {
+            if (! empty($server['v2_host'])) {
                 $config[] = "tls-host={$server['v2_host']}";
             }
         }
 
-        if ($server['v2_type'] === 'ws' && isset($server['v2_path']) && ! empty($server['v2_path'])) {
+        if ($server['v2_type'] === 'ws' && ! empty($server['v2_path'])) {
             $config[] = "obfs-uri={$server['v2_path']}";
             $config[] = "obfs-host={$server['v2_host']}";
         }
@@ -76,7 +74,7 @@ class QuantumultX
 
     public static function buildTrojan($server)
     {
-        $config = [
+        $config = array_filter([
             "trojan={$server['host']}:{$server['port']}",
             "password={$server['passwd']}",
             'over-tls=true',
@@ -86,8 +84,7 @@ class QuantumultX
             'fast-open=true',
             'udp-relay=true',
             "tag={$server['name']}",
-        ];
-        $config = array_filter($config);
+        ]);
 
         return implode(',', $config).PHP_EOL;
     }

+ 4 - 5
app/Components/Client/Surfboard.php

@@ -6,7 +6,7 @@ class Surfboard
 {
     public static function buildShadowsocks($server)
     {
-        $config = [
+        $config = array_filter([
             "{$server['name']}=custom",
             $server['host'],
             $server['port'],
@@ -15,8 +15,7 @@ class Surfboard
             sysConfig('website_url').'/clients/SSEncrypt.module',
             'tfo=true',
             "udp-relay={$server['udp']}",
-        ];
-        $config = array_filter($config);
+        ]);
 
         return implode(',', $config).PHP_EOL;
     }
@@ -33,10 +32,10 @@ class Surfboard
         ];
 
         if ($server['v2_tls']) {
-            $config = array_merge($config, ['tls=true', "sni={$server['v2_host']}"]);
+            array_push($config, 'tls=true', "sni={$server['v2_host']}");
         }
         if ($server['v2_net'] === 'ws') {
-            $config = array_merge($config, ['ws=true', "ws-path={$server['v2_path']}", "ws-headers=Host:{$server['v2_host']}"]);
+            array_push($config, 'ws=true', "ws-path={$server['v2_path']}", "ws-headers=Host:{$server['v2_host']}");
         }
 
         return implode(',', $config).PHP_EOL;

+ 6 - 9
app/Components/Client/Surge.php

@@ -6,7 +6,7 @@ class Surge
 {
     public static function buildShadowsocks($server)
     {
-        $config = [
+        $config = array_filter([
             "{$server['name']}=ss",
             $server['host'],
             $server['port'],
@@ -14,8 +14,7 @@ class Surge
             "password={$server['passwd']}",
             'tfo=true',
             "udp-relay={$server['udp']}",
-        ];
-        $config = array_filter($config);
+        ]);
 
         return implode(',', $config).PHP_EOL;
     }
@@ -32,10 +31,10 @@ class Surge
         ];
 
         if ($server['v2_tls']) {
-            $config = array_merge($config, ['tls=true', "sni={$server['v2_host']}"]);
+            array_push($config, 'tls=true', "sni={$server['v2_host']}");
         }
         if ($server['v2_net'] === 'ws') {
-            $config = array_merge($config, ['ws=true', "ws-path={$server['v2_path']}", "ws-headers=Host:{$server['v2_host']}"]);
+            array_push($config, 'ws=true', "ws-path={$server['v2_path']}", "ws-headers=Host:{$server['v2_host']}");
         }
 
         return implode(',', $config).PHP_EOL;
@@ -43,7 +42,7 @@ class Surge
 
     public static function buildTrojan($server)
     {
-        $config = [
+        $config = array_filter([
             "{$server['name']}=trojan",
             $server['host'],
             $server['port'],
@@ -51,9 +50,7 @@ class Surge
             $server['sni'] ? "sni={$server['sni']}" : '',
             'tfo=true',
             "udp-relay={$server['udp']}",
-        ];
-
-        $config = array_filter($config);
+        ]);
 
         return implode(',', $config).PHP_EOL;
     }

+ 2 - 3
app/Components/DDNS/Aliyun.php

@@ -32,7 +32,7 @@ class Aliyun
         $domainList = $this->domainList();
         if ($domainList) {
             foreach ($domainList as $domain) {
-                if (strpos(self::$subDomain, $domain) !== false) {
+                if (str_contains(self::$subDomain, $domain)) {
                     return [$domain, rtrim(substr(self::$subDomain, 0, -(strlen($domain))), '.')];
                 }
             }
@@ -139,8 +139,7 @@ class Aliyun
         if ($records) {
             $count = 0;
             foreach ($records as $record) {
-                $result = $this->send('DeleteDomainRecord', ['RecordId' => $record]);
-                if ($result) {
+                if ($this->send('DeleteDomainRecord', ['RecordId' => $record])) {
                     $count++;
                 }
             }

+ 2 - 3
app/Components/DDNS/CloudFlare.php

@@ -24,9 +24,8 @@ class CloudFlare
     {
         $zoneInfo = $this->client->get(self::$apiHost.'zones')->json();
         if ($zoneInfo && Arr::has($zoneInfo, 'result.0.id')) {
-            $zones = $zoneInfo['result'];
-            foreach ($zones as $zone) {
-                if (strpos(self::$subDomain, $zone['name']) !== false) {
+            foreach ($zoneInfo['result'] as $zone) {
+                if (str_contains(self::$subDomain, $zone['name'])) {
                     return [$zone['name'], rtrim(substr(self::$subDomain, 0, -(strlen($zone['name']))), '.'), $zone['id']];
                 }
             }

+ 1 - 1
app/Components/DDNS/DNSPod.php

@@ -38,7 +38,7 @@ class DNSPod
         $domainList = $this->domainList();
         if ($domainList) {
             foreach ($domainList as $key => $domain) {
-                if (strpos(self::$subDomain, $domain) !== false) {
+                if (str_contains(self::$subDomain, $domain)) {
                     return [$domain, rtrim(substr(self::$subDomain, 0, -(strlen($domain))), '.'), $key];
                 }
             }

+ 2 - 2
app/Components/DDNS/Namesilo.php

@@ -37,11 +37,11 @@ class Namesilo
         if ($domainList) {
             if (is_array($domainList)) {
                 foreach ($domainList as $domain) {
-                    if (strpos(self::$subDomain, $domain) !== false) {
+                    if (str_contains(self::$subDomain, $domain)) {
                         return [$domain, rtrim(substr(self::$subDomain, 0, -(strlen($domain))), '.')];
                     }
                 }
-            } elseif (strpos(self::$subDomain, $domainList) !== false) {
+            } elseif (str_contains(self::$subDomain, $domainList)) {
                 return [$domainList, rtrim(substr(self::$subDomain, 0, -(strlen($domainList))), '.')];
             }
         }

+ 4 - 4
app/Components/IP.php

@@ -108,8 +108,8 @@ class IP
     // 通过ip.taobao.com查询IP地址的详细信息
     public static function TaoBao(string $ip)
     {
-        // 依据 http://ip.taobao.com/instructions 开发
-        $response = Http::timeout(15)->get('http://ip.taobao.com/outGetIpInfo?ip='.$ip.'&accessKey=alibaba-inc');
+        // 依据 https://ip.taobao.com/instructions 开发
+        $response = Http::timeout(15)->get('https://ip.taobao.com/outGetIpInfo?ip='.$ip.'&accessKey=alibaba-inc');
 
         if ($response->ok()) {
             $message = $response->json();
@@ -133,13 +133,13 @@ class IP
     // 通过api.map.baidu.com查询IP地址的详细信息
     public static function Baidu(string $ip)
     {
-        if (! env('BAIDU_APP_AK')) {
+        if (! config('services.baidu.app_ak')) {
             Log::error('【百度IP库】AK信息缺失');
 
             return false;
         }
         // 依据 http://lbsyun.baidu.com/index.php?title=webapi/ip-api 开发
-        $response = Http::timeout(15)->get('https://api.map.baidu.com/location/ip?ak='.env('BAIDU_APP_AK').'&'.$ip.'&coor=bd09ll');
+        $response = Http::timeout(15)->get('https://api.map.baidu.com/location/ip?ak='.config('services.baidu.app_ak').'&'.$ip.'&coor=bd09ll');
 
         if ($response->ok()) {
             $message = $response->json();

+ 3 - 1
app/Console/Commands/AutoJob.php

@@ -25,7 +25,9 @@ class AutoJob extends Command
     {
         $jobTime = microtime(true);
 
-        Order::recentUnPay()->update(['status' => -1]); // 关闭超时未支付本地订单
+        Order::recentUnPay()->chunk(config('tasks.chunk'), function ($orders) {
+            $orders->each->close();
+        }); // 关闭超时未支付本地订单
         $this->expireCode(); //过期验证码、优惠券、邀请码无效化
 
         if (sysConfig('is_subscribe_ban')) {

+ 2 - 3
app/Exceptions/Handler.php

@@ -50,10 +50,9 @@ class Handler extends ExceptionHandler
     public function report(Throwable $exception)
     {
         if (config('app.debug') || config('app.demo')) { // 调试模式下记录错误详情
-            Log::debug('来自链接:'.url()->full());
-            Log::debug($exception);
+            Log::debug('来源:'.url()->full().PHP_EOL.'访问者IP:'.IP::getClientIP().PHP_EOL.$exception);
         } else {
-            Log::error('异常来源:'.get_class($exception)); // 记录异常来源
+            Log::error('来源:'.url()->full().PHP_EOL.'访问者IP:'.IP::getClientIP().get_class($exception)); // 记录异常来源
         }
 
         parent::report($exception);

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

@@ -49,9 +49,7 @@ class CouponController extends Controller
         if ($request->hasFile('logo')) {
             $file = $request->file('logo');
             $fileName = Str::random(8).time().'.'.$file->getClientOriginalExtension();
-            $path = $file->storeAs('public', $fileName);
-
-            if (! $path) {
+            if (! $file->storeAs('public', $fileName)) {
                 return Redirect::back()->withInput()->withErrors('LOGO不合法');
             }
             $logo = 'upload/'.$fileName;

+ 1 - 1
app/Http/Controllers/Admin/LogsController.php

@@ -166,7 +166,7 @@ class LogsController extends Controller
         $onlineIPLogs = $query->groupBy('user_id', 'node_id')->latest()->paginate(20)->appends($request->except('page'));
         foreach ($onlineIPLogs as $log) {
             // 跳过上报多IP的
-            if ($log->ip === null || strpos($log->ip, ',') !== false) {
+            if ($log->ip === null || str_contains($log->ip, ',')) {
                 continue;
             }
             $ipInfo = IP::getIPInfo($log->ip);

+ 1 - 1
app/Http/Controllers/Admin/ReportController.php

@@ -32,7 +32,7 @@ class ReportController extends Controller
 
         $currentDays = date('j');
         $lastDays = date('t', strtotime('-1 months'));
-        $data['days'] = range(1, $currentDays > $lastDays ? $currentDays : $lastDays);
+        $data['days'] = range(1, max($currentDays, $lastDays));
         $data['years'] = range(1, 12);
 
         for ($i = 1; $i <= $currentDays; $i++) {

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

@@ -78,9 +78,7 @@ class ShopController extends Controller
     public function fileUpload(UploadedFile $file)
     {
         $fileName = Str::random(8).time().'.'.$file->getClientOriginalExtension();
-        $path = $file->storeAs('public', $fileName);
-
-        if (! $path) {
+        if (! $file->storeAs('public', $fileName)) {
             return Redirect::back()->withInput()->withErrors('Logo存储失败');
         }
 

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

@@ -95,7 +95,9 @@ class SystemController extends Controller
             }
 
             return redirect()->route('admin.system.index', '#other')->withErrors('更新失败');
-        } elseif ($request->hasAny(['alipay_qrcode', 'wechat_qrcode'])) {
+        }
+
+        if ($request->hasAny(['alipay_qrcode', 'wechat_qrcode'])) {
             if ($request->hasFile('alipay_qrcode')) {
                 $validator = validator()->make($request->all(), ['alipay_qrcode' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
 

+ 14 - 12
app/Http/Controllers/Admin/ToolsController.php

@@ -75,18 +75,18 @@ class ToolsController extends Controller
             $data = [];
             foreach ($content->port_password as $port => $passwd) {
                 $data[] = [
-                    'u' => 0,
-                    'd' => 0,
-                    'enable' => 1,
-                    'method' => $method,
-                    'obfs' => $obfs,
-                    'obfs_param' => empty($obfs_param) ? '' : $obfs_param,
-                    'passwd' => $passwd,
-                    'port' => $port,
-                    'protocol' => $protocol,
-                    'protocol_param' => empty($protocol_param) ? '' : $protocol_param,
+                    'u'               => 0,
+                    'd'               => 0,
+                    'enable'          => 1,
+                    'method'          => $method,
+                    'obfs'            => $obfs,
+                    'obfs_param'      => empty($obfs_param) ? '' : $obfs_param,
+                    'passwd'          => $passwd,
+                    'port'            => $port,
+                    'protocol'        => $protocol,
+                    'protocol_param'  => empty($protocol_param) ? '' : $protocol_param,
                     'transfer_enable' => $transfer_enable,
-                    'user' => date('Ymd').'_IMPORT_'.$port,
+                    'user'            => date('Ymd').'_IMPORT_'.$port,
                 ];
             }
 
@@ -234,7 +234,8 @@ class ToolsController extends Controller
         assert($n > 0);
         $pos = $n + 1;
         $lines = [];
-        while (count($lines) <= $n) {
+        $counts = 0;
+        while ($counts <= $n) {
             try {
                 fseek($fp, -$pos, SEEK_END);
             } catch (Exception $e) {
@@ -244,6 +245,7 @@ class ToolsController extends Controller
             $pos *= $base;
             while (! feof($fp)) {
                 array_unshift($lines, fgets($fp));
+                $counts++;
             }
         }
 

+ 4 - 2
app/Http/Controllers/Admin/UserController.php

@@ -117,7 +117,8 @@ class UserController extends Controller
 
         $roles = $request->input('roles');
         try {
-            if ($roles && (Auth::getUser()->can('give roles') || (in_array('Super Admin', $roles, true) && Auth::getUser()->hasRole('Super Admin')))) {
+            $adminUser = Auth::getUser();
+            if ($roles && ($adminUser->can('give roles') || (in_array('Super Admin', $roles, true) && $adminUser->hasRole('Super Admin')))) {
                 // 编辑用户权限
                 // 只有超级管理员才有赋予超级管理的权限
                 $user->assignRole($roles);
@@ -171,7 +172,8 @@ class UserController extends Controller
         $roles = $request->input('roles');
         try {
             if (isset($roles)) {
-                if (Auth::getUser()->can('give roles') || Auth::getUser()->hasRole('Super Admin')
+                $adminUser = Auth::getUser();
+                if ($adminUser->can('give roles') || $adminUser->hasRole('Super Admin')
                     || (in_array('Super Admin', $roles, true) && Auth::getUser()->hasRole('Super Admin'))) {
                     $user->syncRoles($roles);
                 }

+ 2 - 2
app/Http/Controllers/Api/Client/V1Controller.php

@@ -120,13 +120,13 @@ class V1Controller extends Controller
         $userInfo['subUrl'] = $user->subUrl();
         $totalTransfer = $user->transfer_enable;
         $usedTransfer = $user->used_traffic;
-        $unusedTraffic = $totalTransfer - $usedTransfer > 0 ? $totalTransfer - $usedTransfer : 0;
+        $unusedTraffic = max($totalTransfer - $usedTransfer, 0);
         $userInfo['unusedTraffic'] = flowAutoShow($unusedTraffic);
 
         return response()->json(['ret' => 1, 'data' => $userInfo]);
     }
 
-    public function nodeList(int $id = null)
+    public function nodeList()
     {
         return response()->json(['ret' => 1, 'data' => auth()->user()->nodes()->get()]);
     }

+ 5 - 5
app/Http/Controllers/Api/WebApi/BaseController.php

@@ -23,8 +23,8 @@ class BaseController
         $data = array_map('intval', $validator->validated());
 
         if ($node->heartbeats()->create([
-            'uptime' => $data['uptime'],
-            'load' => implode(' ', [$data['cpu'] / 100, $data['mem'] / 100, $data['disk'] / 100]),
+            'uptime'   => $data['uptime'],
+            'load'     => implode(' ', [$data['cpu'] / 100, $data['mem'] / 100, $data['disk'] / 100]),
             'log_time' => time(),
         ])) {
             return $this->returnData('上报节点心跳信息成功', 'success', 200);
@@ -56,7 +56,7 @@ class BaseController
         }
 
         $etag = sha1(json_encode($data));
-        if ($etag === $req->header('IF-NONE-MATCH')) {
+        if (! empty($req->header('IF-NONE-MATCH')) && hash_equals($etag, $req->header('IF-NONE-MATCH'))) {
             abort(304);
         }
 
@@ -125,8 +125,8 @@ class BaseController
         if ($ruleGroup = $node->ruleGroup) {
             foreach ($ruleGroup->rules as $rule) {
                 $data[] = [
-                    'id' => $rule->id,
-                    'type' => $rule->type_api_label,
+                    'id'      => $rule->id,
+                    'type'    => $rule->type_api_label,
                     'pattern' => $rule->pattern,
                 ];
             }

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

@@ -12,7 +12,7 @@ class TrojanController extends BaseController
     {
         return $this->returnData('获取节点信息成功', 'success', 200, [
             'id' => $node->id,
-            'is_udp' => $node->is_udp ? true : false,
+            'is_udp' => (bool) $node->is_udp,
             'speed_limit' => $node->getRawOriginal('speed_limit'),
             'client_limit' => $node->client_limit,
             'push_port' => $node->push_port,

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

@@ -19,7 +19,7 @@ class V2RayController extends BaseController
 
         return $this->returnData('获取节点信息成功', 'success', 200, [
             'id' => $node->id,
-            'is_udp' => $node->is_udp ? true : false,
+            'is_udp' => (bool) $node->is_udp,
             'speed_limit' => $node->getRawOriginal('speed_limit'),
             'client_limit' => $node->client_limit,
             'push_port' => $node->push_port,
@@ -35,7 +35,7 @@ class V2RayController extends BaseController
             'v2_type' => $node->v2_type,
             'v2_host' => $node->v2_host,
             'v2_path' => $node->v2_path,
-            'v2_tls' => $node->v2_tls ? true : false,
+            'v2_tls' => (bool) $node->v2_tls,
             'v2_tls_provider' => $tlsProvider,
         ]);
     }

+ 5 - 5
app/Http/Controllers/AuthController.php

@@ -373,11 +373,11 @@ class AuthController extends Controller
     {
         if (is_numeric($aff)) {
             return $aff;
-        } else {
-            $decode = (new Hashids(sysConfig('aff_salt'), 8))->decode($aff);
-            if (isset($decode)) {
-                return $decode[0];
-            }
+        }
+
+        $decode = (new Hashids(sysConfig('aff_salt'), 8))->decode($aff);
+        if ($decode) {
+            return $decode[0];
         }
 
         return false;

+ 1 - 2
app/Http/Controllers/Gateway/AbstractPayment.php

@@ -65,12 +65,11 @@ abstract class AbstractPayment
         }
 
         ksort($data, SORT_STRING); // 排序
-        reset($data);
 
         return md5(urldecode(http_build_query($data)).$key); // 拼接
     }
 
-    protected function paymentReceived(string $tradeNo)
+    protected function paymentReceived(string $tradeNo): bool
     {
         $payment = Payment::whereTradeNo($tradeNo)->with('order')->first();
         if ($payment) {

+ 1 - 1
app/Http/Controllers/Gateway/EPay.php

@@ -36,7 +36,7 @@ class EPay extends AbstractPayment
     public function notify(Request $request): void
     {
         if ($request->input('trade_status') === 'TRADE_SUCCESS' && $request->has('out_trade_no')
-            && $this->verify($request->all(), sysConfig('epay_key'), $request->input('sign'))) {
+            && $this->verify($request->except('method'), sysConfig('epay_key'), $request->input('sign'))) {
             if ($this->paymentReceived($request->input('out_trade_no'))) {
                 exit('SUCCESS');
             }

+ 1 - 1
app/Http/Controllers/Gateway/Manual.php

@@ -60,7 +60,7 @@ class Manual extends AbstractPayment
                 }
             }
 
-            return view('components.payment.detail', ['order' => $payment->order, 'user' => $payment->user]);
+            return view('components.payment.detail', ['order' => $payment->order->refresh(), 'user' => $payment->user->refresh()]);
         }
 
         return view('auth.error', ['message' => 'No enough information']);

+ 0 - 1
app/Http/Controllers/Gateway/PayBeaver.php

@@ -75,7 +75,6 @@ class PayBeaver extends AbstractPayment
             unset($params['sign']);
         }
         ksort($params, SORT_STRING);
-        reset($params);
 
         return strtolower(md5(http_build_query($params).$this->appSecret));
     }

+ 0 - 1
app/Http/Controllers/Gateway/Stripe.php

@@ -74,7 +74,6 @@ class Stripe extends AbstractPayment
     {
         $sigHeader = $_SERVER['HTTP_STRIPE_SIGNATURE'];
         $endpointSecret = sysConfig('stripe_signing_secret');
-        $event = null;
         $payload = @file_get_contents('php://input');
 
         try {

+ 0 - 1
app/Http/Controllers/Gateway/THeadPay.php

@@ -43,7 +43,6 @@ class THeadPay extends AbstractPayment
     {
         unset($params['sign']);
         ksort($params, SORT_STRING);
-        reset($params);
         $params['key'] = sysConfig('theadpay_key');
 
         return strtoupper(md5(http_build_query($params)));

+ 1 - 1
app/Http/Controllers/PaymentController.php

@@ -170,7 +170,7 @@ class PaymentController extends Controller
                 'user_id'       => auth()->id(),
                 'goods_id'      => $credit ? null : $goods_id,
                 'coupon_id'     => $coupon->id ?? null,
-                'origin_amount' => $credit ?: $goods->price ?? 0,
+                'origin_amount' => $credit ?: ($goods->price ?? 0),
                 'amount'        => $amount,
                 'pay_type'      => $pay_type,
                 'pay_way'       => self::$method,

+ 1 - 2
app/Http/Controllers/User/AffiliateController.php

@@ -49,8 +49,7 @@ class AffiliateController extends Controller
         }
 
         // 判断是否已存在申请
-        $referralApply = ReferralApply::uid()->whereIn('status', [0, 1])->first();
-        if ($referralApply) {
+        if (ReferralApply::uid()->whereIn('status', [0, 1])->first()) {
             return Response::json(['status' => 'fail', 'title' => trans('user.referral.failed'), 'message' => trans('user.referral.msg.appliedd')]);
         }
 

+ 0 - 1
app/Http/Controllers/User/SubscribeController.php

@@ -107,7 +107,6 @@ class SubscribeController extends Controller
 
     private function infoGenerator($text): string
     {
-        $result = null;
         switch ($this->subType) {
             case 2:
                 $result = 'vmess://'.base64url_encode(json_encode([

+ 1 - 1
app/Http/Controllers/UserController.php

@@ -41,7 +41,7 @@ class UserController extends Controller
         $user = auth()->user();
         $totalTransfer = $user->transfer_enable;
         $usedTransfer = $user->used_traffic;
-        $unusedTraffic = $totalTransfer - $usedTransfer > 0 ? $totalTransfer - $usedTransfer : 0;
+        $unusedTraffic = max($totalTransfer - $usedTransfer, 0);
         $expireTime = $user->expired_at;
 
         $nodes = $user->nodes()->get();

+ 1 - 0
app/Http/Middleware/Permission.php

@@ -13,6 +13,7 @@ class Permission
      *
      * @param  Request  $request
      * @param  Closure  $next
+     * @param  null  $guard
      * @return mixed
      */
     public function handle($request, Closure $next, $guard = null)

+ 1 - 3
app/Jobs/VNet/addUser.php

@@ -50,9 +50,7 @@ class addUser implements ShouldQueue
 
     private function send($host, $secret): void
     {
-        $request = Http::baseUrl($host)->timeout(20)->withHeaders(['secret' => $secret]);
-
-        $response = $request->post('api/v2/user/add/list', $this->data);
+        $response = Http::baseUrl($host)->timeout(20)->withHeaders(['secret' => $secret])->post('api/v2/user/add/list', $this->data);
         $message = $response->json();
         if ($message && Arr::has($message, ['success', 'content']) && $response->ok()) {
             if ($message['success'] === 'false') {

+ 2 - 6
app/Jobs/VNet/editUser.php

@@ -53,9 +53,7 @@ class editUser implements ShouldQueue
 
     private function list($host, $secret)
     {
-        $request = Http::baseUrl($host)->timeout(20)->withHeaders(['secret' => $secret]);
-
-        $response = $request->get('api/user/list');
+        $response = Http::baseUrl($host)->timeout(20)->withHeaders(['secret' => $secret])->get('api/user/list');
         $message = $response->json();
         if ($message && $response->ok()) {
             return Arr::pluck($message, 'uid');
@@ -68,9 +66,7 @@ class editUser implements ShouldQueue
 
     private function send($host, $secret): void
     {
-        $request = Http::baseUrl($host)->timeout(20)->withHeaders(['secret' => $secret]);
-
-        $response = $request->post('api/user/edit', $this->data);
+        $response = Http::baseUrl($host)->timeout(20)->withHeaders(['secret' => $secret])->post('api/user/edit', $this->data);
         $message = $response->json();
         if ($message && Arr::has($message, ['success', 'content']) && $response->ok()) {
             if ($message['success'] === 'false') {

+ 1 - 3
app/Jobs/VNet/reloadNode.php

@@ -62,9 +62,7 @@ class reloadNode implements ShouldQueue
 
     public function send($host, $secret, $data): bool
     {
-        $request = Http::baseUrl($host)->timeout(15)->withHeaders(['secret' => $secret]);
-
-        $response = $request->post('api/v2/node/reload', $data);
+        $response = Http::baseUrl($host)->timeout(15)->withHeaders(['secret' => $secret])->post('api/v2/node/reload', $data);
         $message = $response->json();
         if ($message && Arr::has($message, ['success', 'content']) && $response->ok()) {
             if ($message['success'] === 'false') {

+ 5 - 1
app/Models/Node.php

@@ -223,6 +223,10 @@ class Node extends Model
 
     public function getHostAttribute(): string
     {
-        return $this->is_relay ? $this->relay_server : ($this->server ?: $this->ip);
+        if ($this->is_relay) {
+            return $this->relay_server;
+        }
+
+        return $this->server ?: $this->ip;
     }
 }

+ 7 - 3
app/Models/Order.php

@@ -45,9 +45,13 @@ class Order extends Model
         return $query->whereUserId($uid ?: Auth::id());
     }
 
-    public function scopeRecentUnPay($query)
+    public function scopeRecentUnPay($query, int $minutes = 0)
     {
-        return $query->whereStatus(0)->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-'.config('tasks.close.order').' minutes')));
+        if (! $minutes) {
+            $minutes = config('tasks.close.order');
+        }
+
+        return $query->whereStatus(0)->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-'.$minutes.' minutes')));
     }
 
     public function scopeUserPrepay($query, $uid = null)
@@ -89,7 +93,7 @@ class Order extends Model
         return $this->update(['status' => -1]);
     }
 
-    public function paid() // 完成订单
+    public function paid() // 支付需要确认的订单
     {
         return $this->update(['status' => 1]);
     }

+ 1 - 1
app/Observers/UserObserver.php

@@ -17,7 +17,7 @@ class UserObserver
         $user->subscribe()->create(['code' => Helpers::makeSubscribeCode()]);
 
         $allowNodes = $user->nodes()->whereType(4)->get()->pluck('id');
-        if ($allowNodes) {
+        if (count($allowNodes)) {
             addUser::dispatch($user->id, $allowNodes);
         }
     }

+ 1 - 1
app/Providers/AuthServiceProvider.php

@@ -25,7 +25,7 @@ class AuthServiceProvider extends ServiceProvider
     {
         $this->registerPolicies();
 
-        Gate::before(function ($user) {
+        Gate::before(static function ($user) {
             return $user->hasRole('Super Admin') ? true : null;
         });
     }

+ 5 - 6
app/Services/OrderService.php

@@ -42,13 +42,13 @@ class OrderService
         $goods = self::$order->goods;
         switch ($goods->type) {// 商品为流量或者套餐
             case 1:// 流量包
-                $this->activatePackage();
+                $ret = $this->activatePackage();
                 break;
             case 2:// 套餐
                 if (Order::userActivePlan(self::$user->id)->where('id', '<>', self::$order->id)->exists()) {// 判断套餐是否直接激活
-                    $this->setPrepaidPlan();
+                    $ret = $this->setPrepaidPlan();
                 } else {
-                    $this->activatePlan();
+                    $ret = $this->activatePlan();
                 }
                 $this->setCommissionExpense(self::$user); // 返利
                 break;
@@ -56,7 +56,7 @@ class OrderService
                 Log::emergency('【处理订单】出现错误-未知套餐类型');
         }
 
-        return true;
+        return $ret ?? true;
     }
 
     // 余额充值
@@ -114,8 +114,7 @@ class OrderService
             $updateData['port'] = Helpers::getPort();
         }
 
-        $ret = self::$user->update(array_merge($this->resetTimeAndData(), $updateData));
-        if ($ret) {
+        if (self::$user->update(array_merge($this->resetTimeAndData(), $updateData))) {
             return Helpers::addUserTrafficModifyLog(
                 self::$order->user_id,
                 self::$order->id,

Plik diff jest za duży
+ 179 - 256
composer.lock


+ 1 - 1
config/common.php

@@ -52,7 +52,7 @@ return [
     ],
 
     'network_status' => [
-        1 => '✔️ 通讯正常',
+        1 => '✔️ 正常',
         2 => '🛑 海外阻断',
         3 => '🛑 国内阻断',
         4 => '❌ 断连',

+ 7 - 3
config/services.php

@@ -73,9 +73,13 @@ return [
     ],
 
     'telegram' => [
-        'bot' => env('TELEGRAM_BOT_NAME'),  // The bot's username
-        'client_id' => null,
+        'bot'           => env('TELEGRAM_BOT_NAME'),  // The bot's username
+        'client_id'     => null,
         'client_secret' => env('TELEGRAM_TOKEN'),
-        'redirect' => '/oauth/telegram/redirect',
+        'redirect'      => '/oauth/telegram/redirect',
+    ],
+
+    'baidu' => [
+        'app_ak' => env('BAIDU_APP_AK'),
     ],
 ];

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików