Pārlūkot izejas kodu

code improve

Apply fixes from StyleCI
兔姬桑 3 gadi atpakaļ
vecāks
revīzija
f67bcf623d
45 mainītis faili ar 292 papildinājumiem un 377 dzēšanām
  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
                     GNU GENERAL PUBLIC LICENSE
                        Version 3, 29 June 2007
                        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
 Everyone is permitted to copy and distribute verbatim copies of this
 license document, but changing it is not allowed.
 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)
     public static function buildShadowsocks($server)
     {
     {
-        $config = [
+        $config = array_filter([
             "shadowsocks={$server['host']}:{$server['port']}",
             "shadowsocks={$server['host']}:{$server['port']}",
             "method={$server['method']}",
             "method={$server['method']}",
             "password={$server['passwd']}",
             "password={$server['passwd']}",
             'fast-open=true',
             'fast-open=true',
             "udp-relay={$server['udp']}",
             "udp-relay={$server['udp']}",
             "tag={$server['name']}",
             "tag={$server['name']}",
-        ];
-        $config = array_filter($config);
+        ]);
 
 
         return implode(',', $config).PHP_EOL;
         return implode(',', $config).PHP_EOL;
     }
     }
 
 
     public static function buildShadowsocksr($server)
     public static function buildShadowsocksr($server)
     {
     {
-        $config = [
+        $config = array_filter([
             "shadowsocks={$server['host']}:{$server['port']}",
             "shadowsocks={$server['host']}:{$server['port']}",
             "method={$server['method']}",
             "method={$server['method']}",
             "password={$server['passwd']}",
             "password={$server['passwd']}",
@@ -32,8 +31,7 @@ class QuantumultX
             'fast-open=true',
             'fast-open=true',
             "udp-relay={$server['udp']}",
             "udp-relay={$server['udp']}",
             "tag={$server['name']}",
             "tag={$server['name']}",
-        ];
-        $config = array_filter($config);
+        ]);
 
 
         return implode(',', $config).PHP_EOL;
         return implode(',', $config).PHP_EOL;
     }
     }
@@ -61,12 +59,12 @@ class QuantumultX
 
 
         if ($server['v2_tls']) {
         if ($server['v2_tls']) {
             $config[] = 'tls-verification=true';
             $config[] = 'tls-verification=true';
-            if (isset($server['v2_host']) && ! empty($server['v2_host'])) {
+            if (! empty($server['v2_host'])) {
                 $config[] = "tls-host={$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-uri={$server['v2_path']}";
             $config[] = "obfs-host={$server['v2_host']}";
             $config[] = "obfs-host={$server['v2_host']}";
         }
         }
@@ -76,7 +74,7 @@ class QuantumultX
 
 
     public static function buildTrojan($server)
     public static function buildTrojan($server)
     {
     {
-        $config = [
+        $config = array_filter([
             "trojan={$server['host']}:{$server['port']}",
             "trojan={$server['host']}:{$server['port']}",
             "password={$server['passwd']}",
             "password={$server['passwd']}",
             'over-tls=true',
             'over-tls=true',
@@ -86,8 +84,7 @@ class QuantumultX
             'fast-open=true',
             'fast-open=true',
             'udp-relay=true',
             'udp-relay=true',
             "tag={$server['name']}",
             "tag={$server['name']}",
-        ];
-        $config = array_filter($config);
+        ]);
 
 
         return implode(',', $config).PHP_EOL;
         return implode(',', $config).PHP_EOL;
     }
     }

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

@@ -6,7 +6,7 @@ class Surfboard
 {
 {
     public static function buildShadowsocks($server)
     public static function buildShadowsocks($server)
     {
     {
-        $config = [
+        $config = array_filter([
             "{$server['name']}=custom",
             "{$server['name']}=custom",
             $server['host'],
             $server['host'],
             $server['port'],
             $server['port'],
@@ -15,8 +15,7 @@ class Surfboard
             sysConfig('website_url').'/clients/SSEncrypt.module',
             sysConfig('website_url').'/clients/SSEncrypt.module',
             'tfo=true',
             'tfo=true',
             "udp-relay={$server['udp']}",
             "udp-relay={$server['udp']}",
-        ];
-        $config = array_filter($config);
+        ]);
 
 
         return implode(',', $config).PHP_EOL;
         return implode(',', $config).PHP_EOL;
     }
     }
@@ -33,10 +32,10 @@ class Surfboard
         ];
         ];
 
 
         if ($server['v2_tls']) {
         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') {
         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;
         return implode(',', $config).PHP_EOL;

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

@@ -6,7 +6,7 @@ class Surge
 {
 {
     public static function buildShadowsocks($server)
     public static function buildShadowsocks($server)
     {
     {
-        $config = [
+        $config = array_filter([
             "{$server['name']}=ss",
             "{$server['name']}=ss",
             $server['host'],
             $server['host'],
             $server['port'],
             $server['port'],
@@ -14,8 +14,7 @@ class Surge
             "password={$server['passwd']}",
             "password={$server['passwd']}",
             'tfo=true',
             'tfo=true',
             "udp-relay={$server['udp']}",
             "udp-relay={$server['udp']}",
-        ];
-        $config = array_filter($config);
+        ]);
 
 
         return implode(',', $config).PHP_EOL;
         return implode(',', $config).PHP_EOL;
     }
     }
@@ -32,10 +31,10 @@ class Surge
         ];
         ];
 
 
         if ($server['v2_tls']) {
         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') {
         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;
         return implode(',', $config).PHP_EOL;
@@ -43,7 +42,7 @@ class Surge
 
 
     public static function buildTrojan($server)
     public static function buildTrojan($server)
     {
     {
-        $config = [
+        $config = array_filter([
             "{$server['name']}=trojan",
             "{$server['name']}=trojan",
             $server['host'],
             $server['host'],
             $server['port'],
             $server['port'],
@@ -51,9 +50,7 @@ class Surge
             $server['sni'] ? "sni={$server['sni']}" : '',
             $server['sni'] ? "sni={$server['sni']}" : '',
             'tfo=true',
             'tfo=true',
             "udp-relay={$server['udp']}",
             "udp-relay={$server['udp']}",
-        ];
-
-        $config = array_filter($config);
+        ]);
 
 
         return implode(',', $config).PHP_EOL;
         return implode(',', $config).PHP_EOL;
     }
     }

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

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

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

@@ -24,9 +24,8 @@ class CloudFlare
     {
     {
         $zoneInfo = $this->client->get(self::$apiHost.'zones')->json();
         $zoneInfo = $this->client->get(self::$apiHost.'zones')->json();
         if ($zoneInfo && Arr::has($zoneInfo, 'result.0.id')) {
         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']];
                     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();
         $domainList = $this->domainList();
         if ($domainList) {
         if ($domainList) {
             foreach ($domainList as $key => $domain) {
             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];
                     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 ($domainList) {
             if (is_array($domainList)) {
             if (is_array($domainList)) {
                 foreach ($domainList as $domain) {
                 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))), '.')];
                         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))), '.')];
                 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地址的详细信息
     // 通过ip.taobao.com查询IP地址的详细信息
     public static function TaoBao(string $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()) {
         if ($response->ok()) {
             $message = $response->json();
             $message = $response->json();
@@ -133,13 +133,13 @@ class IP
     // 通过api.map.baidu.com查询IP地址的详细信息
     // 通过api.map.baidu.com查询IP地址的详细信息
     public static function Baidu(string $ip)
     public static function Baidu(string $ip)
     {
     {
-        if (! env('BAIDU_APP_AK')) {
+        if (! config('services.baidu.app_ak')) {
             Log::error('【百度IP库】AK信息缺失');
             Log::error('【百度IP库】AK信息缺失');
 
 
             return false;
             return false;
         }
         }
         // 依据 http://lbsyun.baidu.com/index.php?title=webapi/ip-api 开发
         // 依据 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()) {
         if ($response->ok()) {
             $message = $response->json();
             $message = $response->json();

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

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

+ 2 - 3
app/Exceptions/Handler.php

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

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

@@ -49,9 +49,7 @@ class CouponController extends Controller
         if ($request->hasFile('logo')) {
         if ($request->hasFile('logo')) {
             $file = $request->file('logo');
             $file = $request->file('logo');
             $fileName = Str::random(8).time().'.'.$file->getClientOriginalExtension();
             $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不合法');
                 return Redirect::back()->withInput()->withErrors('LOGO不合法');
             }
             }
             $logo = 'upload/'.$fileName;
             $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'));
         $onlineIPLogs = $query->groupBy('user_id', 'node_id')->latest()->paginate(20)->appends($request->except('page'));
         foreach ($onlineIPLogs as $log) {
         foreach ($onlineIPLogs as $log) {
             // 跳过上报多IP的
             // 跳过上报多IP的
-            if ($log->ip === null || strpos($log->ip, ',') !== false) {
+            if ($log->ip === null || str_contains($log->ip, ',')) {
                 continue;
                 continue;
             }
             }
             $ipInfo = IP::getIPInfo($log->ip);
             $ipInfo = IP::getIPInfo($log->ip);

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

@@ -32,7 +32,7 @@ class ReportController extends Controller
 
 
         $currentDays = date('j');
         $currentDays = date('j');
         $lastDays = date('t', strtotime('-1 months'));
         $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);
         $data['years'] = range(1, 12);
 
 
         for ($i = 1; $i <= $currentDays; $i++) {
         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)
     public function fileUpload(UploadedFile $file)
     {
     {
         $fileName = Str::random(8).time().'.'.$file->getClientOriginalExtension();
         $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存储失败');
             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('更新失败');
             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')) {
             if ($request->hasFile('alipay_qrcode')) {
                 $validator = validator()->make($request->all(), ['alipay_qrcode' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048']);
                 $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 = [];
             $data = [];
             foreach ($content->port_password as $port => $passwd) {
             foreach ($content->port_password as $port => $passwd) {
                 $data[] = [
                 $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,
                     '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);
         assert($n > 0);
         $pos = $n + 1;
         $pos = $n + 1;
         $lines = [];
         $lines = [];
-        while (count($lines) <= $n) {
+        $counts = 0;
+        while ($counts <= $n) {
             try {
             try {
                 fseek($fp, -$pos, SEEK_END);
                 fseek($fp, -$pos, SEEK_END);
             } catch (Exception $e) {
             } catch (Exception $e) {
@@ -244,6 +245,7 @@ class ToolsController extends Controller
             $pos *= $base;
             $pos *= $base;
             while (! feof($fp)) {
             while (! feof($fp)) {
                 array_unshift($lines, fgets($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');
         $roles = $request->input('roles');
         try {
         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);
                 $user->assignRole($roles);
@@ -171,7 +172,8 @@ class UserController extends Controller
         $roles = $request->input('roles');
         $roles = $request->input('roles');
         try {
         try {
             if (isset($roles)) {
             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'))) {
                     || (in_array('Super Admin', $roles, true) && Auth::getUser()->hasRole('Super Admin'))) {
                     $user->syncRoles($roles);
                     $user->syncRoles($roles);
                 }
                 }

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

@@ -120,13 +120,13 @@ class V1Controller extends Controller
         $userInfo['subUrl'] = $user->subUrl();
         $userInfo['subUrl'] = $user->subUrl();
         $totalTransfer = $user->transfer_enable;
         $totalTransfer = $user->transfer_enable;
         $usedTransfer = $user->used_traffic;
         $usedTransfer = $user->used_traffic;
-        $unusedTraffic = $totalTransfer - $usedTransfer > 0 ? $totalTransfer - $usedTransfer : 0;
+        $unusedTraffic = max($totalTransfer - $usedTransfer, 0);
         $userInfo['unusedTraffic'] = flowAutoShow($unusedTraffic);
         $userInfo['unusedTraffic'] = flowAutoShow($unusedTraffic);
 
 
         return response()->json(['ret' => 1, 'data' => $userInfo]);
         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()]);
         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());
         $data = array_map('intval', $validator->validated());
 
 
         if ($node->heartbeats()->create([
         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(),
             'log_time' => time(),
         ])) {
         ])) {
             return $this->returnData('上报节点心跳信息成功', 'success', 200);
             return $this->returnData('上报节点心跳信息成功', 'success', 200);
@@ -56,7 +56,7 @@ class BaseController
         }
         }
 
 
         $etag = sha1(json_encode($data));
         $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);
             abort(304);
         }
         }
 
 
@@ -125,8 +125,8 @@ class BaseController
         if ($ruleGroup = $node->ruleGroup) {
         if ($ruleGroup = $node->ruleGroup) {
             foreach ($ruleGroup->rules as $rule) {
             foreach ($ruleGroup->rules as $rule) {
                 $data[] = [
                 $data[] = [
-                    'id' => $rule->id,
-                    'type' => $rule->type_api_label,
+                    'id'      => $rule->id,
+                    'type'    => $rule->type_api_label,
                     'pattern' => $rule->pattern,
                     '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, [
         return $this->returnData('获取节点信息成功', 'success', 200, [
             'id' => $node->id,
             'id' => $node->id,
-            'is_udp' => $node->is_udp ? true : false,
+            'is_udp' => (bool) $node->is_udp,
             'speed_limit' => $node->getRawOriginal('speed_limit'),
             'speed_limit' => $node->getRawOriginal('speed_limit'),
             'client_limit' => $node->client_limit,
             'client_limit' => $node->client_limit,
             'push_port' => $node->push_port,
             '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, [
         return $this->returnData('获取节点信息成功', 'success', 200, [
             'id' => $node->id,
             'id' => $node->id,
-            'is_udp' => $node->is_udp ? true : false,
+            'is_udp' => (bool) $node->is_udp,
             'speed_limit' => $node->getRawOriginal('speed_limit'),
             'speed_limit' => $node->getRawOriginal('speed_limit'),
             'client_limit' => $node->client_limit,
             'client_limit' => $node->client_limit,
             'push_port' => $node->push_port,
             'push_port' => $node->push_port,
@@ -35,7 +35,7 @@ class V2RayController extends BaseController
             'v2_type' => $node->v2_type,
             'v2_type' => $node->v2_type,
             'v2_host' => $node->v2_host,
             'v2_host' => $node->v2_host,
             'v2_path' => $node->v2_path,
             'v2_path' => $node->v2_path,
-            'v2_tls' => $node->v2_tls ? true : false,
+            'v2_tls' => (bool) $node->v2_tls,
             'v2_tls_provider' => $tlsProvider,
             'v2_tls_provider' => $tlsProvider,
         ]);
         ]);
     }
     }

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

@@ -373,11 +373,11 @@ class AuthController extends Controller
     {
     {
         if (is_numeric($aff)) {
         if (is_numeric($aff)) {
             return $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;
         return false;

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

@@ -65,12 +65,11 @@ abstract class AbstractPayment
         }
         }
 
 
         ksort($data, SORT_STRING); // 排序
         ksort($data, SORT_STRING); // 排序
-        reset($data);
 
 
         return md5(urldecode(http_build_query($data)).$key); // 拼接
         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();
         $payment = Payment::whereTradeNo($tradeNo)->with('order')->first();
         if ($payment) {
         if ($payment) {

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

@@ -36,7 +36,7 @@ class EPay extends AbstractPayment
     public function notify(Request $request): void
     public function notify(Request $request): void
     {
     {
         if ($request->input('trade_status') === 'TRADE_SUCCESS' && $request->has('out_trade_no')
         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'))) {
             if ($this->paymentReceived($request->input('out_trade_no'))) {
                 exit('SUCCESS');
                 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']);
         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']);
             unset($params['sign']);
         }
         }
         ksort($params, SORT_STRING);
         ksort($params, SORT_STRING);
-        reset($params);
 
 
         return strtolower(md5(http_build_query($params).$this->appSecret));
         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'];
         $sigHeader = $_SERVER['HTTP_STRIPE_SIGNATURE'];
         $endpointSecret = sysConfig('stripe_signing_secret');
         $endpointSecret = sysConfig('stripe_signing_secret');
-        $event = null;
         $payload = @file_get_contents('php://input');
         $payload = @file_get_contents('php://input');
 
 
         try {
         try {

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

@@ -43,7 +43,6 @@ class THeadPay extends AbstractPayment
     {
     {
         unset($params['sign']);
         unset($params['sign']);
         ksort($params, SORT_STRING);
         ksort($params, SORT_STRING);
-        reset($params);
         $params['key'] = sysConfig('theadpay_key');
         $params['key'] = sysConfig('theadpay_key');
 
 
         return strtoupper(md5(http_build_query($params)));
         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(),
                 'user_id'       => auth()->id(),
                 'goods_id'      => $credit ? null : $goods_id,
                 'goods_id'      => $credit ? null : $goods_id,
                 'coupon_id'     => $coupon->id ?? null,
                 'coupon_id'     => $coupon->id ?? null,
-                'origin_amount' => $credit ?: $goods->price ?? 0,
+                'origin_amount' => $credit ?: ($goods->price ?? 0),
                 'amount'        => $amount,
                 'amount'        => $amount,
                 'pay_type'      => $pay_type,
                 'pay_type'      => $pay_type,
                 'pay_way'       => self::$method,
                 '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')]);
             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
     private function infoGenerator($text): string
     {
     {
-        $result = null;
         switch ($this->subType) {
         switch ($this->subType) {
             case 2:
             case 2:
                 $result = 'vmess://'.base64url_encode(json_encode([
                 $result = 'vmess://'.base64url_encode(json_encode([

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

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

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

@@ -13,6 +13,7 @@ class Permission
      *
      *
      * @param  Request  $request
      * @param  Request  $request
      * @param  Closure  $next
      * @param  Closure  $next
+     * @param  null  $guard
      * @return mixed
      * @return mixed
      */
      */
     public function handle($request, Closure $next, $guard = null)
     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
     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();
         $message = $response->json();
         if ($message && Arr::has($message, ['success', 'content']) && $response->ok()) {
         if ($message && Arr::has($message, ['success', 'content']) && $response->ok()) {
             if ($message['success'] === 'false') {
             if ($message['success'] === 'false') {

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

@@ -53,9 +53,7 @@ class editUser implements ShouldQueue
 
 
     private function list($host, $secret)
     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();
         $message = $response->json();
         if ($message && $response->ok()) {
         if ($message && $response->ok()) {
             return Arr::pluck($message, 'uid');
             return Arr::pluck($message, 'uid');
@@ -68,9 +66,7 @@ class editUser implements ShouldQueue
 
 
     private function send($host, $secret): void
     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();
         $message = $response->json();
         if ($message && Arr::has($message, ['success', 'content']) && $response->ok()) {
         if ($message && Arr::has($message, ['success', 'content']) && $response->ok()) {
             if ($message['success'] === 'false') {
             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
     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();
         $message = $response->json();
         if ($message && Arr::has($message, ['success', 'content']) && $response->ok()) {
         if ($message && Arr::has($message, ['success', 'content']) && $response->ok()) {
             if ($message['success'] === 'false') {
             if ($message['success'] === 'false') {

+ 5 - 1
app/Models/Node.php

@@ -223,6 +223,10 @@ class Node extends Model
 
 
     public function getHostAttribute(): string
     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());
         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)
     public function scopeUserPrepay($query, $uid = null)
@@ -89,7 +93,7 @@ class Order extends Model
         return $this->update(['status' => -1]);
         return $this->update(['status' => -1]);
     }
     }
 
 
-    public function paid() // 完成订单
+    public function paid() // 支付需要确认的订单
     {
     {
         return $this->update(['status' => 1]);
         return $this->update(['status' => 1]);
     }
     }

+ 1 - 1
app/Observers/UserObserver.php

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

+ 1 - 1
app/Providers/AuthServiceProvider.php

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

+ 5 - 6
app/Services/OrderService.php

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

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 179 - 256
composer.lock


+ 1 - 1
config/common.php

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

+ 7 - 3
config/services.php

@@ -73,9 +73,13 @@ return [
     ],
     ],
 
 
     'telegram' => [
     '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'),
         'client_secret' => env('TELEGRAM_TOKEN'),
-        'redirect' => '/oauth/telegram/redirect',
+        'redirect'      => '/oauth/telegram/redirect',
+    ],
+
+    'baidu' => [
+        'app_ak' => env('BAIDU_APP_AK'),
     ],
     ],
 ];
 ];

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels