Răsfoiți Sursa

refactor: server side pagination

M1Screw 1 an în urmă
părinte
comite
6cc0ec289b

+ 18 - 19
app/routes.php

@@ -46,9 +46,8 @@ return static function (Slim\App $app): void {
         // 动态倍率
         // 动态倍率
         $group->get('/rate', App\Controllers\User\RateController::class . ':index');
         $group->get('/rate', App\Controllers\User\RateController::class . ':index');
         $group->post('/rate', App\Controllers\User\RateController::class . ':ajax');
         $group->post('/rate', App\Controllers\User\RateController::class . ':ajax');
-        // 审计规则
+        // 审计
         $group->get('/detect', App\Controllers\User\DetectRuleController::class . ':index');
         $group->get('/detect', App\Controllers\User\DetectRuleController::class . ':index');
-        // 审计记录
         $group->get('/detect/log', App\Controllers\User\DetectLogController::class . ':index');
         $group->get('/detect/log', App\Controllers\User\DetectLogController::class . ':index');
         // 工单
         // 工单
         $group->get('/ticket', App\Controllers\User\TicketController::class . ':index');
         $group->get('/ticket', App\Controllers\User\TicketController::class . ':index');
@@ -180,7 +179,7 @@ return static function (Slim\App $app): void {
         $group->put('/docs/{id:[0-9]+}', App\Controllers\Admin\DocsController::class . ':update');
         $group->put('/docs/{id:[0-9]+}', App\Controllers\Admin\DocsController::class . ':update');
         $group->delete('/docs/{id:[0-9]+}', App\Controllers\Admin\DocsController::class . ':delete');
         $group->delete('/docs/{id:[0-9]+}', App\Controllers\Admin\DocsController::class . ':delete');
         $group->post('/docs/ajax', App\Controllers\Admin\DocsController::class . ':ajax');
         $group->post('/docs/ajax', App\Controllers\Admin\DocsController::class . ':ajax');
-        // 审计
+        // 审计规则
         $group->get('/detect', App\Controllers\Admin\DetectRuleController::class . ':index');
         $group->get('/detect', App\Controllers\Admin\DetectRuleController::class . ':index');
         $group->get('/detect/create', App\Controllers\Admin\DetectRuleController::class . ':create');
         $group->get('/detect/create', App\Controllers\Admin\DetectRuleController::class . ':create');
         $group->post('/detect/add', App\Controllers\Admin\DetectRuleController::class . ':add');
         $group->post('/detect/add', App\Controllers\Admin\DetectRuleController::class . ':add');
@@ -190,8 +189,8 @@ return static function (Slim\App $app): void {
         $group->get('/detect/log', App\Controllers\Admin\DetectLogController::class . ':index');
         $group->get('/detect/log', App\Controllers\Admin\DetectLogController::class . ':index');
         $group->post('/detect/log/ajax', App\Controllers\Admin\DetectLogController::class . ':ajax');
         $group->post('/detect/log/ajax', App\Controllers\Admin\DetectLogController::class . ':ajax');
         // 审计封禁日志
         // 审计封禁日志
-        $group->get('/detect/ban', App\Controllers\Admin\DetectBanController::class . ':index');
-        $group->post('/detect/ban/ajax', App\Controllers\Admin\DetectBanController::class . ':ajax');
+        $group->get('/detect/ban', App\Controllers\Admin\DetectBanLogController::class . ':index');
+        $group->post('/detect/ban/ajax', App\Controllers\Admin\DetectBanLogController::class . ':ajax');
         // User
         // User
         $group->get('/user', App\Controllers\Admin\UserController::class . ':index');
         $group->get('/user', App\Controllers\Admin\UserController::class . ':index');
         $group->get('/user/{id:[0-9]+}/edit', App\Controllers\Admin\UserController::class . ':edit');
         $group->get('/user/{id:[0-9]+}/edit', App\Controllers\Admin\UserController::class . ':edit');
@@ -296,6 +295,20 @@ return static function (Slim\App $app): void {
         $group->post('/invoice/ajax', App\Controllers\Admin\InvoiceController::class . ':ajax');
         $group->post('/invoice/ajax', App\Controllers\Admin\InvoiceController::class . ':ajax');
     })->add(new Admin());
     })->add(new Admin());
 
 
+    // WebAPI
+    $app->group('/mod_mu', static function (RouteCollectorProxy $group): void {
+        // 节点
+        $group->get('/nodes/{id:[0-9]+}/info', App\Controllers\WebAPI\NodeController::class . ':getInfo');
+        // 用户
+        $group->get('/users', App\Controllers\WebAPI\UserController::class . ':index');
+        $group->post('/users/traffic', App\Controllers\WebAPI\UserController::class . ':addTraffic');
+        $group->post('/users/aliveip', App\Controllers\WebAPI\UserController::class . ':addAliveIp');
+        $group->post('/users/detectlog', App\Controllers\WebAPI\UserController::class . ':addDetectLog');
+        // 审计 & 杂七杂八的功能
+        $group->get('/func/detect_rules', App\Controllers\WebAPI\FuncController::class . ':getDetectRules');
+        $group->get('/func/ping', App\Controllers\WebAPI\FuncController::class . ':ping');
+    })->add(new NodeToken());
+
     // Admin REST API
     // Admin REST API
     //$app->group('/admin/api/v1', function (RouteCollectorProxy $group): void {
     //$app->group('/admin/api/v1', function (RouteCollectorProxy $group): void {
     //    $group->post('/{action}', App\Controllers\Api\AdminApiV1Controller::class . ':actionHandler');
     //    $group->post('/{action}', App\Controllers\Api\AdminApiV1Controller::class . ':actionHandler');
@@ -316,18 +329,4 @@ return static function (Slim\App $app): void {
     //    $group->post('/user/online_ip', App\Controllers\Api\NodeApiV1Controller::class . ':addUserOnlineIp');
     //    $group->post('/user/online_ip', App\Controllers\Api\NodeApiV1Controller::class . ':addUserOnlineIp');
     //    $group->post('/user/detect_log', App\Controllers\Api\NodeApiV1Controller::class . ':addUserDetectLog');
     //    $group->post('/user/detect_log', App\Controllers\Api\NodeApiV1Controller::class . ':addUserDetectLog');
     //})->add(new NodeApi());
     //})->add(new NodeApi());
-
-    // WebAPI
-    $app->group('/mod_mu', static function (RouteCollectorProxy $group): void {
-        // 节点
-        $group->get('/nodes/{id:[0-9]+}/info', App\Controllers\WebAPI\NodeController::class . ':getInfo');
-        // 用户
-        $group->get('/users', App\Controllers\WebAPI\UserController::class . ':index');
-        $group->post('/users/traffic', App\Controllers\WebAPI\UserController::class . ':addTraffic');
-        $group->post('/users/aliveip', App\Controllers\WebAPI\UserController::class . ':addAliveIp');
-        $group->post('/users/detectlog', App\Controllers\WebAPI\UserController::class . ':addDetectLog');
-        // 审计 & 杂七杂八的功能
-        $group->get('/func/detect_rules', App\Controllers\WebAPI\FuncController::class . ':getDetectRules');
-        $group->get('/func/ping', App\Controllers\WebAPI\FuncController::class . ':ping');
-    })->add(new NodeToken());
 };
 };

+ 3 - 3
composer.json

@@ -25,7 +25,7 @@
         "lcobucci/jwt": "^5.2",
         "lcobucci/jwt": "^5.2",
         "league/omnipay": "^3.2.1",
         "league/omnipay": "^3.2.1",
         "mailgun/mailgun-php": "^4",
         "mailgun/mailgun-php": "^4",
-        "nikolaposa/rate-limit": "^3.0",
+        "nikolaposa/rate-limit": "^3",
         "openai-php/client": "^0",
         "openai-php/client": "^0",
         "ozdemir/datatables": "^2.3.7",
         "ozdemir/datatables": "^2.3.7",
         "phpmailer/phpmailer": "^6.9.1",
         "phpmailer/phpmailer": "^6.9.1",
@@ -34,8 +34,8 @@
         "sendgrid/sendgrid": "^8",
         "sendgrid/sendgrid": "^8",
         "sentry/sdk": "^4",
         "sentry/sdk": "^4",
         "slim/http": "^1.3",
         "slim/http": "^1.3",
-        "slim/slim": "^4.12",
-        "smarty/smarty": "^4.3.4",
+        "slim/slim": "^4",
+        "smarty/smarty": "^4",
         "srmklive/paypal": "^3",
         "srmklive/paypal": "^3",
         "stripe/stripe-php": "^13",
         "stripe/stripe-php": "^13",
         "symfony/http-client": "^7",
         "symfony/http-client": "^7",

+ 67 - 65
composer.lock

@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
         "This file is @generated automatically"
     ],
     ],
-    "content-hash": "78aff3db635bf71deded4ceb951ca79d",
+    "content-hash": "dc235d13929ac6d5d47538b637435d7a",
     "packages": [
     "packages": [
         {
         {
             "name": "anankke/omnipay-alipay",
             "name": "anankke/omnipay-alipay",
@@ -123,16 +123,16 @@
         },
         },
         {
         {
             "name": "aws/aws-sdk-php",
             "name": "aws/aws-sdk-php",
-            "version": "3.295.7",
+            "version": "3.295.9",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/aws/aws-sdk-php.git",
                 "url": "https://github.com/aws/aws-sdk-php.git",
-                "reference": "e3ba36c6e52dce373064fbb1741547828235425f"
+                "reference": "8a2710fe85f453ac2face59779e923bbe5b71385"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e3ba36c6e52dce373064fbb1741547828235425f",
-                "reference": "e3ba36c6e52dce373064fbb1741547828235425f",
+                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/8a2710fe85f453ac2face59779e923bbe5b71385",
+                "reference": "8a2710fe85f453ac2face59779e923bbe5b71385",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
@@ -212,9 +212,9 @@
             "support": {
             "support": {
                 "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
                 "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
                 "issues": "https://github.com/aws/aws-sdk-php/issues",
                 "issues": "https://github.com/aws/aws-sdk-php/issues",
-                "source": "https://github.com/aws/aws-sdk-php/tree/3.295.7"
+                "source": "https://github.com/aws/aws-sdk-php/tree/3.295.9"
             },
             },
-            "time": "2024-01-05T19:10:48+00:00"
+            "time": "2024-01-10T19:07:38+00:00"
         },
         },
         {
         {
             "name": "bacon/bacon-qr-code",
             "name": "bacon/bacon-qr-code",
@@ -746,16 +746,16 @@
         },
         },
         {
         {
             "name": "endroid/qr-code",
             "name": "endroid/qr-code",
-            "version": "4.8.5",
+            "version": "5.0.4",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/endroid/qr-code.git",
                 "url": "https://github.com/endroid/qr-code.git",
-                "reference": "0db25b506a8411a5e1644ebaa67123a6eb7b6a77"
+                "reference": "0efd071a3640af323e23c94122fe92cfd5199833"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/endroid/qr-code/zipball/0db25b506a8411a5e1644ebaa67123a6eb7b6a77",
-                "reference": "0db25b506a8411a5e1644ebaa67123a6eb7b6a77",
+                "url": "https://api.github.com/repos/endroid/qr-code/zipball/0efd071a3640af323e23c94122fe92cfd5199833",
+                "reference": "0efd071a3640af323e23c94122fe92cfd5199833",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
@@ -766,7 +766,7 @@
                 "khanamiryan/qrcode-detector-decoder": "^1.0.6"
                 "khanamiryan/qrcode-detector-decoder": "^1.0.6"
             },
             },
             "require-dev": {
             "require-dev": {
-                "endroid/quality": "dev-master",
+                "endroid/quality": "dev-main",
                 "ext-gd": "*",
                 "ext-gd": "*",
                 "khanamiryan/qrcode-detector-decoder": "^1.0.4||^2.0.2",
                 "khanamiryan/qrcode-detector-decoder": "^1.0.4||^2.0.2",
                 "setasign/fpdf": "^1.8.2"
                 "setasign/fpdf": "^1.8.2"
@@ -780,7 +780,7 @@
             "type": "library",
             "type": "library",
             "extra": {
             "extra": {
                 "branch-alias": {
                 "branch-alias": {
-                    "dev-master": "4.x-dev"
+                    "dev-main": "5.x-dev"
                 }
                 }
             },
             },
             "autoload": {
             "autoload": {
@@ -809,7 +809,7 @@
             ],
             ],
             "support": {
             "support": {
                 "issues": "https://github.com/endroid/qr-code/issues",
                 "issues": "https://github.com/endroid/qr-code/issues",
-                "source": "https://github.com/endroid/qr-code/tree/4.8.5"
+                "source": "https://github.com/endroid/qr-code/tree/5.0.4"
             },
             },
             "funding": [
             "funding": [
                 {
                 {
@@ -817,7 +817,7 @@
                     "type": "github"
                     "type": "github"
                 }
                 }
             ],
             ],
-            "time": "2023-09-29T14:03:20+00:00"
+            "time": "2023-12-24T13:47:07+00:00"
         },
         },
         {
         {
             "name": "geoip2/geoip2",
             "name": "geoip2/geoip2",
@@ -1200,16 +1200,16 @@
         },
         },
         {
         {
             "name": "illuminate/collections",
             "name": "illuminate/collections",
-            "version": "v10.39.0",
+            "version": "v10.40.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/illuminate/collections.git",
                 "url": "https://github.com/illuminate/collections.git",
-                "reference": "63fc240a047788fbc2ebe153de85cb72fce88440"
+                "reference": "82025fd7ac761cc50d5dbd9f9532ebf066821858"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/illuminate/collections/zipball/63fc240a047788fbc2ebe153de85cb72fce88440",
-                "reference": "63fc240a047788fbc2ebe153de85cb72fce88440",
+                "url": "https://api.github.com/repos/illuminate/collections/zipball/82025fd7ac761cc50d5dbd9f9532ebf066821858",
+                "reference": "82025fd7ac761cc50d5dbd9f9532ebf066821858",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
@@ -1251,11 +1251,11 @@
                 "issues": "https://github.com/laravel/framework/issues",
                 "issues": "https://github.com/laravel/framework/issues",
                 "source": "https://github.com/laravel/framework"
                 "source": "https://github.com/laravel/framework"
             },
             },
-            "time": "2023-12-21T14:17:35+00:00"
+            "time": "2024-01-01T15:17:18+00:00"
         },
         },
         {
         {
             "name": "illuminate/conditionable",
             "name": "illuminate/conditionable",
-            "version": "v10.39.0",
+            "version": "v10.40.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/illuminate/conditionable.git",
                 "url": "https://github.com/illuminate/conditionable.git",
@@ -1301,7 +1301,7 @@
         },
         },
         {
         {
             "name": "illuminate/container",
             "name": "illuminate/container",
-            "version": "v10.39.0",
+            "version": "v10.40.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/illuminate/container.git",
                 "url": "https://github.com/illuminate/container.git",
@@ -1352,16 +1352,16 @@
         },
         },
         {
         {
             "name": "illuminate/contracts",
             "name": "illuminate/contracts",
-            "version": "v10.39.0",
+            "version": "v10.40.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/illuminate/contracts.git",
                 "url": "https://github.com/illuminate/contracts.git",
-                "reference": "f6bf37a272fda164f6c451407c99f820eb1eb95b"
+                "reference": "0b26d49d4bb0986da1ca30bcc701d5c22722576b"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/illuminate/contracts/zipball/f6bf37a272fda164f6c451407c99f820eb1eb95b",
-                "reference": "f6bf37a272fda164f6c451407c99f820eb1eb95b",
+                "url": "https://api.github.com/repos/illuminate/contracts/zipball/0b26d49d4bb0986da1ca30bcc701d5c22722576b",
+                "reference": "0b26d49d4bb0986da1ca30bcc701d5c22722576b",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
@@ -1396,20 +1396,20 @@
                 "issues": "https://github.com/laravel/framework/issues",
                 "issues": "https://github.com/laravel/framework/issues",
                 "source": "https://github.com/laravel/framework"
                 "source": "https://github.com/laravel/framework"
             },
             },
-            "time": "2023-10-30T00:59:22+00:00"
+            "time": "2023-12-28T16:46:25+00:00"
         },
         },
         {
         {
             "name": "illuminate/database",
             "name": "illuminate/database",
-            "version": "v10.39.0",
+            "version": "v10.40.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/illuminate/database.git",
                 "url": "https://github.com/illuminate/database.git",
-                "reference": "f014850671278a8d1a0e9fd2f421aad5b487ab9e"
+                "reference": "d41a5b7b1dc67bf640f16bf50c376b29ba575da5"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/illuminate/database/zipball/f014850671278a8d1a0e9fd2f421aad5b487ab9e",
-                "reference": "f014850671278a8d1a0e9fd2f421aad5b487ab9e",
+                "url": "https://api.github.com/repos/illuminate/database/zipball/d41a5b7b1dc67bf640f16bf50c376b29ba575da5",
+                "reference": "d41a5b7b1dc67bf640f16bf50c376b29ba575da5",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
@@ -1469,11 +1469,11 @@
                 "issues": "https://github.com/laravel/framework/issues",
                 "issues": "https://github.com/laravel/framework/issues",
                 "source": "https://github.com/laravel/framework"
                 "source": "https://github.com/laravel/framework"
             },
             },
-            "time": "2023-12-21T01:49:42+00:00"
+            "time": "2024-01-07T15:44:56+00:00"
         },
         },
         {
         {
             "name": "illuminate/macroable",
             "name": "illuminate/macroable",
-            "version": "v10.39.0",
+            "version": "v10.40.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/illuminate/macroable.git",
                 "url": "https://github.com/illuminate/macroable.git",
@@ -1519,16 +1519,16 @@
         },
         },
         {
         {
             "name": "illuminate/pagination",
             "name": "illuminate/pagination",
-            "version": "v10.39.0",
+            "version": "v10.40.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/illuminate/pagination.git",
                 "url": "https://github.com/illuminate/pagination.git",
-                "reference": "2af69e712297cc38377593a72f00d430867e8bdc"
+                "reference": "7447caf65da6b183a3c247b78942c7633c059bd4"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/illuminate/pagination/zipball/2af69e712297cc38377593a72f00d430867e8bdc",
-                "reference": "2af69e712297cc38377593a72f00d430867e8bdc",
+                "url": "https://api.github.com/repos/illuminate/pagination/zipball/7447caf65da6b183a3c247b78942c7633c059bd4",
+                "reference": "7447caf65da6b183a3c247b78942c7633c059bd4",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
@@ -1565,20 +1565,20 @@
                 "issues": "https://github.com/laravel/framework/issues",
                 "issues": "https://github.com/laravel/framework/issues",
                 "source": "https://github.com/laravel/framework"
                 "source": "https://github.com/laravel/framework"
             },
             },
-            "time": "2023-04-17T16:01:53+00:00"
+            "time": "2024-01-03T22:51:06+00:00"
         },
         },
         {
         {
             "name": "illuminate/support",
             "name": "illuminate/support",
-            "version": "v10.39.0",
+            "version": "v10.40.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/illuminate/support.git",
                 "url": "https://github.com/illuminate/support.git",
-                "reference": "6705007f24091863fefdf1f9320ac2c121cf37f1"
+                "reference": "76a79337200b06b4b2a7fe93902aa770d6dcec03"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/illuminate/support/zipball/6705007f24091863fefdf1f9320ac2c121cf37f1",
-                "reference": "6705007f24091863fefdf1f9320ac2c121cf37f1",
+                "url": "https://api.github.com/repos/illuminate/support/zipball/76a79337200b06b4b2a7fe93902aa770d6dcec03",
+                "reference": "76a79337200b06b4b2a7fe93902aa770d6dcec03",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
@@ -1636,7 +1636,7 @@
                 "issues": "https://github.com/laravel/framework/issues",
                 "issues": "https://github.com/laravel/framework/issues",
                 "source": "https://github.com/laravel/framework"
                 "source": "https://github.com/laravel/framework"
             },
             },
-            "time": "2023-12-25T01:11:56+00:00"
+            "time": "2024-01-07T16:54:08+00:00"
         },
         },
         {
         {
             "name": "irazasyed/telegram-bot-sdk",
             "name": "irazasyed/telegram-bot-sdk",
@@ -1977,16 +1977,16 @@
         },
         },
         {
         {
             "name": "mailgun/mailgun-php",
             "name": "mailgun/mailgun-php",
-            "version": "v4.0",
+            "version": "v4.0.1",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/mailgun/mailgun-php.git",
                 "url": "https://github.com/mailgun/mailgun-php.git",
-                "reference": "454ab2bcfb8c585b5ea8fbaa70079b99fd25039e"
+                "reference": "c1832496b479708ca47276459268d454e557319d"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/mailgun/mailgun-php/zipball/454ab2bcfb8c585b5ea8fbaa70079b99fd25039e",
-                "reference": "454ab2bcfb8c585b5ea8fbaa70079b99fd25039e",
+                "url": "https://api.github.com/repos/mailgun/mailgun-php/zipball/c1832496b479708ca47276459268d454e557319d",
+                "reference": "c1832496b479708ca47276459268d454e557319d",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
@@ -2032,9 +2032,9 @@
             "description": "The Mailgun SDK provides methods for all API functions.",
             "description": "The Mailgun SDK provides methods for all API functions.",
             "support": {
             "support": {
                 "issues": "https://github.com/mailgun/mailgun-php/issues",
                 "issues": "https://github.com/mailgun/mailgun-php/issues",
-                "source": "https://github.com/mailgun/mailgun-php/tree/v4.0"
+                "source": "https://github.com/mailgun/mailgun-php/tree/v4.0.1"
             },
             },
-            "time": "2023-12-16T19:47:29+00:00"
+            "time": "2024-01-08T19:37:43+00:00"
         },
         },
         {
         {
             "name": "maxmind-db/reader",
             "name": "maxmind-db/reader",
@@ -6254,21 +6254,21 @@
         },
         },
         {
         {
             "name": "vectorface/googleauthenticator",
             "name": "vectorface/googleauthenticator",
-            "version": "v3.0",
+            "version": "v3.1",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/Vectorface/GoogleAuthenticator.git",
                 "url": "https://github.com/Vectorface/GoogleAuthenticator.git",
-                "reference": "bf6879959b69f7573038f4601d2c5b85dca8bb48"
+                "reference": "139fd0b6c28094f5d13f2ac8c71f9ff4f3e3d589"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/Vectorface/GoogleAuthenticator/zipball/bf6879959b69f7573038f4601d2c5b85dca8bb48",
-                "reference": "bf6879959b69f7573038f4601d2c5b85dca8bb48",
+                "url": "https://api.github.com/repos/Vectorface/GoogleAuthenticator/zipball/139fd0b6c28094f5d13f2ac8c71f9ff4f3e3d589",
+                "reference": "139fd0b6c28094f5d13f2ac8c71f9ff4f3e3d589",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
-                "endroid/qr-code": "^4.0.0",
-                "php": ">=7.3"
+                "endroid/qr-code": "^5.0.0",
+                "php": ">=8.1"
             },
             },
             "require-dev": {
             "require-dev": {
                 "phpunit/phpunit": "^9"
                 "phpunit/phpunit": "^9"
@@ -6307,7 +6307,7 @@
                 "issues": "https://github.com/Vectorface/GoogleAuthenticator/issues",
                 "issues": "https://github.com/Vectorface/GoogleAuthenticator/issues",
                 "source": "https://github.com/Vectorface/GoogleAuthenticator"
                 "source": "https://github.com/Vectorface/GoogleAuthenticator"
             },
             },
-            "time": "2021-04-20T19:40:40+00:00"
+            "time": "2024-01-10T21:14:16+00:00"
         },
         },
         {
         {
             "name": "voku/anti-xss",
             "name": "voku/anti-xss",
@@ -7294,25 +7294,27 @@
         },
         },
         {
         {
             "name": "nikic/php-parser",
             "name": "nikic/php-parser",
-            "version": "v4.18.0",
+            "version": "v5.0.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999"
+                "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999",
-                "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
+                "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
+                "ext-ctype": "*",
+                "ext-json": "*",
                 "ext-tokenizer": "*",
                 "ext-tokenizer": "*",
-                "php": ">=7.0"
+                "php": ">=7.4"
             },
             },
             "require-dev": {
             "require-dev": {
                 "ircmaxell/php-yacc": "^0.0.7",
                 "ircmaxell/php-yacc": "^0.0.7",
-                "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
             },
             },
             "bin": [
             "bin": [
                 "bin/php-parse"
                 "bin/php-parse"
@@ -7320,7 +7322,7 @@
             "type": "library",
             "type": "library",
             "extra": {
             "extra": {
                 "branch-alias": {
                 "branch-alias": {
-                    "dev-master": "4.9-dev"
+                    "dev-master": "5.0-dev"
                 }
                 }
             },
             },
             "autoload": {
             "autoload": {
@@ -7344,9 +7346,9 @@
             ],
             ],
             "support": {
             "support": {
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v4.18.0"
+                "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.0"
             },
             },
-            "time": "2023-12-10T21:03:43+00:00"
+            "time": "2024-01-07T17:17:35+00:00"
         },
         },
         {
         {
             "name": "nunomaduro/phpinsights",
             "name": "nunomaduro/phpinsights",

+ 1 - 1
db/migrations/2023020100-init.php

@@ -238,8 +238,8 @@ return new class() implements MigrationInterface {
                 `user_id` bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '用户ID',
                 `user_id` bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '用户ID',
                 `type` varchar(255) NOT NULL DEFAULT '' COMMENT '获取的订阅类型',
                 `type` varchar(255) NOT NULL DEFAULT '' COMMENT '获取的订阅类型',
                 `request_ip` varchar(255) NOT NULL DEFAULT '' COMMENT '请求IP',
                 `request_ip` varchar(255) NOT NULL DEFAULT '' COMMENT '请求IP',
-                `request_user_agent` varchar(255) NOT NULL DEFAULT '' COMMENT '请求UA',
                 `request_time` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '请求时间',
                 `request_time` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '请求时间',
+                `request_user_agent` varchar(255) NOT NULL DEFAULT '' COMMENT '请求UA',
                 PRIMARY KEY (`id`),
                 PRIMARY KEY (`id`),
                 KEY `user_id` (`user_id`)
                 KEY `user_id` (`user_id`)
             ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
             ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

+ 8 - 2
resources/views/tabler/admin/log/detect.tpl

@@ -40,8 +40,8 @@
     <script>
     <script>
         let table = new DataTable('#data-table', {
         let table = new DataTable('#data-table', {
             "serverSide": true,
             "serverSide": true,
-            "searching": false,
-            "ordering": false,
+            "searching": true,
+            "ordering": true,
             ajax: {
             ajax: {
                 url: '/admin/detect/log/ajax',
                 url: '/admin/detect/log/ajax',
                 type: 'POST',
                 type: 'POST',
@@ -60,6 +60,12 @@
                 },
                 },
                 {/foreach}
                 {/foreach}
             ],
             ],
+            columnDefs: [
+                {
+                    orderable: false,
+                    targets: [3, 5]
+                },
+            ],
             "dom": "<'row px-3 py-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
             "dom": "<'row px-3 py-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
                 "<'row'<'col-sm-12'tr>>" +
                 "<'row'<'col-sm-12'tr>>" +
                 "<'row card-footer d-flex d-flexalign-items-center'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
                 "<'row card-footer d-flex d-flexalign-items-center'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",

+ 8 - 2
resources/views/tabler/admin/log/detect_ban.tpl

@@ -40,8 +40,8 @@
     <script>
     <script>
         let table = new DataTable('#data-table', {
         let table = new DataTable('#data-table', {
             "serverSide": true,
             "serverSide": true,
-            "searching": false,
-            "ordering": false,
+            "searching": true,
+            "ordering": true,
             ajax: {
             ajax: {
                 url: '/admin/detect/ban/ajax',
                 url: '/admin/detect/ban/ajax',
                 type: 'POST',
                 type: 'POST',
@@ -60,6 +60,12 @@
                 },
                 },
                 {/foreach}
                 {/foreach}
             ],
             ],
+            columnDefs: [
+                {
+                    orderable: false,
+                    targets: [6]
+                },
+            ],
             "dom": "<'row px-3 py-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
             "dom": "<'row px-3 py-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
                 "<'row'<'col-sm-12'tr>>" +
                 "<'row'<'col-sm-12'tr>>" +
                 "<'row card-footer d-flex d-flexalign-items-center'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
                 "<'row card-footer d-flex d-flexalign-items-center'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",

+ 8 - 2
resources/views/tabler/admin/log/login.tpl

@@ -40,8 +40,8 @@
     <script>
     <script>
         let table = new DataTable('#data-table', {
         let table = new DataTable('#data-table', {
             "serverSide": true,
             "serverSide": true,
-            "searching": false,
-            "ordering": false,
+            "searching": true,
+            "ordering": true,
             ajax: {
             ajax: {
                 url: '/admin/login/ajax',
                 url: '/admin/login/ajax',
                 type: 'POST',
                 type: 'POST',
@@ -60,6 +60,12 @@
                 },
                 },
                 {/foreach}
                 {/foreach}
             ],
             ],
+            columnDefs: [
+                {
+                    orderable: false,
+                    targets: [3]
+                },
+            ],
             "dom": "<'row px-3 py-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
             "dom": "<'row px-3 py-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
                 "<'row'<'col-sm-12'tr>>" +
                 "<'row'<'col-sm-12'tr>>" +
                 "<'row card-footer d-flex d-flexalign-items-center'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
                 "<'row card-footer d-flex d-flexalign-items-center'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",

+ 8 - 2
resources/views/tabler/admin/log/online.tpl

@@ -40,8 +40,8 @@
     <script>
     <script>
         let table = new DataTable('#data-table', {
         let table = new DataTable('#data-table', {
             "serverSide": true,
             "serverSide": true,
-            "searching": false,
-            "ordering": false,
+            "searching": true,
+            "ordering": true,
             ajax: {
             ajax: {
                 url: '/admin/online/ajax',
                 url: '/admin/online/ajax',
                 type: 'POST',
                 type: 'POST',
@@ -60,6 +60,12 @@
                 },
                 },
                 {/foreach}
                 {/foreach}
             ],
             ],
+            columnDefs: [
+                {
+                    orderable: false,
+                    targets: [0, 3, 5]
+                },
+            ],
             "dom": "<'row px-3 py-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
             "dom": "<'row px-3 py-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
                 "<'row'<'col-sm-12'tr>>" +
                 "<'row'<'col-sm-12'tr>>" +
                 "<'row card-footer d-flex d-flexalign-items-center'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
                 "<'row card-footer d-flex d-flexalign-items-center'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",

+ 10 - 4
resources/views/tabler/admin/log/subscribe.tpl → resources/views/tabler/admin/log/sub.tpl

@@ -40,8 +40,8 @@
     <script>
     <script>
         let table = new DataTable('#data-table', {
         let table = new DataTable('#data-table', {
             "serverSide": true,
             "serverSide": true,
-            "searching": false,
-            "ordering": false,
+            "searching": true,
+            "ordering": true,
             ajax: {
             ajax: {
                 url: '/admin/subscribe/ajax',
                 url: '/admin/subscribe/ajax',
                 type: 'POST',
                 type: 'POST',
@@ -60,6 +60,12 @@
                 },
                 },
                 {/foreach}
                 {/foreach}
             ],
             ],
+            columnDefs: [
+                {
+                    orderable: false,
+                    targets: [4]
+                },
+            ],
             "dom": "<'row px-3 py-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
             "dom": "<'row px-3 py-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
                 "<'row'<'col-sm-12'tr>>" +
                 "<'row'<'col-sm-12'tr>>" +
                 "<'row card-footer d-flex d-flexalign-items-center'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
                 "<'row card-footer d-flex d-flexalign-items-center'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
@@ -67,9 +73,9 @@
                 "sProcessing": "处理中...",
                 "sProcessing": "处理中...",
                 "sLengthMenu": "显示 _MENU_ 条",
                 "sLengthMenu": "显示 _MENU_ 条",
                 "sZeroRecords": "没有匹配结果",
                 "sZeroRecords": "没有匹配结果",
-                "sInfo": "第 _START_ 至 _END_ 项结果,共 _TOTAL_项",
+                "sInfo": "第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
                 "sInfoEmpty": "第 0 至 0 项结果,共 0 项",
                 "sInfoEmpty": "第 0 至 0 项结果,共 0 项",
-                "sInfoFiltered": "(在 _MAX_ 项中查找)",
+                "sInfoFiltered": "(在 _MAX_ 项中查找)",
                 "sInfoPostFix": "",
                 "sInfoPostFix": "",
                 "sSearch": "<i class=\"ti ti-search\"></i> ",
                 "sSearch": "<i class=\"ti ti-search\"></i> ",
                 "sUrl": "",
                 "sUrl": "",

+ 2 - 2
resources/views/tabler/admin/log/traffic.tpl

@@ -40,8 +40,8 @@
     <script>
     <script>
         let table = new DataTable('#data-table', {
         let table = new DataTable('#data-table', {
             "serverSide": true,
             "serverSide": true,
-            "searching": false,
-            "ordering": false,
+            "searching": true,
+            "ordering": true,
             ajax: {
             ajax: {
                 url: '/admin/traffic/ajax',
                 url: '/admin/traffic/ajax',
                 type: 'POST',
                 type: 'POST',

+ 23 - 5
src/Controllers/Admin/DetectBanController.php → src/Controllers/Admin/DetectBanLogController.php

@@ -12,14 +12,13 @@ use Psr\Http\Message\ResponseInterface;
 use Slim\Http\Response;
 use Slim\Http\Response;
 use Slim\Http\ServerRequest;
 use Slim\Http\ServerRequest;
 
 
-final class DetectBanController extends BaseController
+final class DetectBanLogController extends BaseController
 {
 {
     private static array $details =
     private static array $details =
         [
         [
             'field' => [
             'field' => [
                 'id' => '事件ID',
                 'id' => '事件ID',
                 'user_id' => '用户ID',
                 'user_id' => '用户ID',
-                'user_name' => '用户名',
                 'detect_number' => '违规次数',
                 'detect_number' => '违规次数',
                 'ban_time' => '封禁时长(分钟)',
                 'ban_time' => '封禁时长(分钟)',
                 'start_time' => '统计开始时间',
                 'start_time' => '统计开始时间',
@@ -47,11 +46,30 @@ final class DetectBanController extends BaseController
         $page = $request->getParam('start') / $length + 1;
         $page = $request->getParam('start') / $length + 1;
         $draw = $request->getParam('draw');
         $draw = $request->getParam('draw');
 
 
-        $bans = (new DetectBanLog())->orderBy('id', 'desc')->paginate($length, '*', '', $page);
+        $detect_ban_log = DetectBanLog::query();
+
+        $search = $request->getParam('search')['value'];
+
+        if ($search !== '') {
+            $detect_ban_log->where('user_id', '=', $search);
+        }
+
+        $order = $request->getParam('order')[0]['dir'];
+
+        if ($request->getParam('order')[0]['column'] !== '0') {
+            $order_field = self::$details['field'][$request->getParam('order')[0]['column']];
+
+            $detect_ban_log->orderBy($order_field, $order)->orderBy('id', 'desc');
+        } else {
+            $detect_ban_log->orderBy('id', $order);
+        }
+
+        $filtered = $detect_ban_log->count();
         $total = (new DetectBanLog())->count();
         $total = (new DetectBanLog())->count();
 
 
+        $bans = $detect_ban_log->paginate($length, '*', '', $page);
+
         foreach ($bans as $ban) {
         foreach ($bans as $ban) {
-            $ban->user_name = $ban->userName();
             $ban->start_time = Tools::toDateTime((int) $ban->start_time);
             $ban->start_time = Tools::toDateTime((int) $ban->start_time);
             $ban->end_time = Tools::toDateTime((int) $ban->end_time);
             $ban->end_time = Tools::toDateTime((int) $ban->end_time);
             $ban->ban_end_time = $ban->banEndTime();
             $ban->ban_end_time = $ban->banEndTime();
@@ -60,7 +78,7 @@ final class DetectBanController extends BaseController
         return $response->withJson([
         return $response->withJson([
             'draw' => $draw,
             'draw' => $draw,
             'recordsTotal' => $total,
             'recordsTotal' => $total,
-            'recordsFiltered' => $total,
+            'recordsFiltered' => $filtered,
             'bans' => $bans,
             'bans' => $bans,
         ]);
         ]);
     }
     }

+ 24 - 10
src/Controllers/Admin/DetectLogController.php

@@ -19,14 +19,10 @@ final class DetectLogController extends BaseController
             'field' => [
             'field' => [
                 'id' => '事件ID',
                 'id' => '事件ID',
                 'user_id' => '用户ID',
                 'user_id' => '用户ID',
-                'user_name' => '用户名',
                 'node_id' => '节点ID',
                 'node_id' => '节点ID',
                 'node_name' => '节点名',
                 'node_name' => '节点名',
                 'list_id' => '规则ID',
                 'list_id' => '规则ID',
                 'rule_name' => '规则名',
                 'rule_name' => '规则名',
-                'rule_text' => '规则描述',
-                'rule_regex' => '规则正则表达式',
-                'rule_type' => '规则类型',
                 'datetime' => '时间',
                 'datetime' => '时间',
             ],
             ],
         ];
         ];
@@ -49,23 +45,41 @@ final class DetectLogController extends BaseController
         $page = $request->getParam('start') / $length + 1;
         $page = $request->getParam('start') / $length + 1;
         $draw = $request->getParam('draw');
         $draw = $request->getParam('draw');
 
 
-        $logs = (new DetectLog())->orderBy('id', 'desc')->paginate($length, '*', '', $page);
+        $detect_log = DetectLog::query();
+
+        $search = $request->getParam('search')['value'];
+
+        if ($search !== '') {
+            $detect_log->where('user_id', '=', $search)
+                ->orWhere('list_id', '=', $search)
+                ->orWhere('node_id', '=', $search);
+        }
+
+        $order = $request->getParam('order')[0]['dir'];
+
+        if ($request->getParam('order')[0]['column'] !== '0') {
+            $order_field = self::$details['field'][$request->getParam('order')[0]['column']];
+
+            $detect_log->orderBy($order_field, $order)->orderBy('id', 'desc');
+        } else {
+            $detect_log->orderBy('id', $order);
+        }
+
+        $filtered = $detect_log->count();
         $total = (new DetectLog())->count();
         $total = (new DetectLog())->count();
 
 
+        $logs = $detect_log->paginate($length, '*', '', $page);
+
         foreach ($logs as $log) {
         foreach ($logs as $log) {
-            $log->user_name = $log->userName();
             $log->node_name = $log->nodeName();
             $log->node_name = $log->nodeName();
             $log->rule_name = $log->ruleName();
             $log->rule_name = $log->ruleName();
-            $log->rule_text = $log->ruleText();
-            $log->rule_regex = $log->ruleRegex();
-            $log->rule_type = $log->ruleType();
             $log->datetime = Tools::toDateTime((int) $log->datetime);
             $log->datetime = Tools::toDateTime((int) $log->datetime);
         }
         }
 
 
         return $response->withJson([
         return $response->withJson([
             'draw' => $draw,
             'draw' => $draw,
             'recordsTotal' => $total,
             'recordsTotal' => $total,
-            'recordsFiltered' => $total,
+            'recordsFiltered' => $filtered,
             'logs' => $logs,
             'logs' => $logs,
         ]);
         ]);
     }
     }

+ 24 - 5
src/Controllers/Admin/LoginLogController.php

@@ -20,8 +20,7 @@ final class LoginLogController extends BaseController
             'field' => [
             'field' => [
                 'id' => '事件ID',
                 'id' => '事件ID',
                 'userid' => '用户ID',
                 'userid' => '用户ID',
-                'user_name' => '用户名',
-                'ip' => 'IP',
+                'ip' => '登录IP',
                 'location' => 'IP归属地',
                 'location' => 'IP归属地',
                 'datetime' => '时间',
                 'datetime' => '时间',
                 'type' => '类型',
                 'type' => '类型',
@@ -53,11 +52,31 @@ final class LoginLogController extends BaseController
         $page = $request->getParam('start') / $length + 1;
         $page = $request->getParam('start') / $length + 1;
         $draw = $request->getParam('draw');
         $draw = $request->getParam('draw');
 
 
-        $logins = (new LoginIp())->orderBy('id', 'desc')->paginate($length, '*', '', $page);
+        $login_log = LoginIp::query();
+
+        $search = $request->getParam('search')['value'];
+
+        if ($search !== '') {
+            $login_log->where('userid', '=', $search)
+                ->orWhere('ip', 'LIKE', "%{$search}%");
+        }
+
+        $order = $request->getParam('order')[0]['dir'];
+
+        if ($request->getParam('order')[0]['column'] !== '0') {
+            $order_by = $request->getParam('columns')[$request->getParam('order')[0]['column']]['data'];
+
+            $login_log->orderBy($order_by, $order)->orderBy('id', 'desc');
+        } else {
+            $login_log->orderBy('id', $order);
+        }
+
+        $filtered = $login_log->count();
         $total = (new LoginIp())->count();
         $total = (new LoginIp())->count();
 
 
+        $logins = $login_log->paginate($length, '*', '', $page);
+
         foreach ($logins as $login) {
         foreach ($logins as $login) {
-            $login->user_name = $login->userName();
             $login->location = Tools::getIpLocation($login->ip);
             $login->location = Tools::getIpLocation($login->ip);
             $login->datetime = Tools::toDateTime((int) $login->datetime);
             $login->datetime = Tools::toDateTime((int) $login->datetime);
             $login->type = $login->type();
             $login->type = $login->type();
@@ -66,7 +85,7 @@ final class LoginLogController extends BaseController
         return $response->withJson([
         return $response->withJson([
             'draw' => $draw,
             'draw' => $draw,
             'recordsTotal' => $total,
             'recordsTotal' => $total,
-            'recordsFiltered' => $total,
+            'recordsFiltered' => $filtered,
             'logins' => $logins,
             'logins' => $logins,
         ]);
         ]);
     }
     }

+ 25 - 5
src/Controllers/Admin/OnlineLogController.php

@@ -21,7 +21,6 @@ final class OnlineLogController extends BaseController
             'field' => [
             'field' => [
                 'id' => '事件ID',
                 'id' => '事件ID',
                 'user_id' => '用户ID',
                 'user_id' => '用户ID',
-                'user_name' => '用户名',
                 'node_id' => '节点ID',
                 'node_id' => '节点ID',
                 'node_name' => '节点名',
                 'node_name' => '节点名',
                 'ip' => 'IP',
                 'ip' => 'IP',
@@ -56,11 +55,32 @@ final class OnlineLogController extends BaseController
         $page = $request->getParam('start') / $length + 1;
         $page = $request->getParam('start') / $length + 1;
         $draw = $request->getParam('draw');
         $draw = $request->getParam('draw');
 
 
-        $onlines = (new OnlineLog())->where('last_time', '>', time() - 90)->orderByDesc('last_time')->paginate($length, '*', '', $page);
-        $total = (new OnlineLog())->where('last_time', '>', time() - 90)->count();
+        $online_log = OnlineLog::query()->where('last_time', '>', time() - 90);
+
+        $search = $request->getParam('search')['value'];
+
+        if ($search !== '') {
+            $online_log->where('user_id', '=', $search)
+                ->orWhere('ip', 'LIKE', "%{$search}%")
+                ->orWhere('node_id', '=', $search);
+        }
+
+        $order = $request->getParam('order')[0]['dir'];
+
+        if ($request->getParam('order')[0]['column'] !== '7') {
+            $order_by = $request->getParam('columns')[$request->getParam('order')[0]['column']]['data'];
+
+            $online_log->orderBy($order_by, $order)->orderBy('last_time', 'desc');
+        } else {
+            $online_log->orderBy('last_time', $order);
+        }
+
+        $filtered = $online_log->count();
+        $total = (new OnlineLog())->count();
+
+        $onlines = $online_log->paginate($length, '*', '', $page);
 
 
         foreach ($onlines as $online) {
         foreach ($onlines as $online) {
-            $online->user_name = $online->userName();
             $online->node_name = $online->nodeName();
             $online->node_name = $online->nodeName();
             $online->ip = $online->ip();
             $online->ip = $online->ip();
             $online->location = Tools::getIpLocation($online->ip);
             $online->location = Tools::getIpLocation($online->ip);
@@ -71,7 +91,7 @@ final class OnlineLogController extends BaseController
         return $response->withJson([
         return $response->withJson([
             'draw' => $draw,
             'draw' => $draw,
             'recordsTotal' => $total,
             'recordsTotal' => $total,
-            'recordsFiltered' => $total,
+            'recordsFiltered' => $filtered,
             'onlines' => $onlines,
             'onlines' => $onlines,
         ]);
         ]);
     }
     }

+ 26 - 3
src/Controllers/Admin/SubLogController.php

@@ -38,7 +38,7 @@ final class SubLogController extends BaseController
         return $response->write(
         return $response->write(
             $this->view()
             $this->view()
                 ->assign('details', self::$details)
                 ->assign('details', self::$details)
-                ->fetch('admin/log/subscribe.tpl')
+                ->fetch('admin/log/sub.tpl')
         );
         );
     }
     }
 
 
@@ -53,9 +53,32 @@ final class SubLogController extends BaseController
         $page = $request->getParam('start') / $length + 1;
         $page = $request->getParam('start') / $length + 1;
         $draw = $request->getParam('draw');
         $draw = $request->getParam('draw');
 
 
-        $subscribes = (new SubscribeLog())->orderBy('id', 'desc')->paginate($length, '*', '', $page);
+        $sub_log = SubscribeLog::query();
+
+        $search = $request->getParam('search')['value'];
+
+        if ($search !== '') {
+            $sub_log->where('user_id', '=', $search)
+                ->orWhere('type', 'LIKE', "%{$search}%")
+                ->orWhere('request_ip', 'LIKE', "%{$search}%")
+                ->orWhere('request_user_agent', 'LIKE', "%{$search}%");
+        }
+
+        $order = $request->getParam('order')[0]['dir'];
+
+        if ($request->getParam('order')[0]['column'] !== '0') {
+            $order_by = $request->getParam('columns')[$request->getParam('order')[0]['column']]['data'];
+
+            $sub_log->orderBy($order_by, $order)->orderBy('id', 'desc');
+        } else {
+            $sub_log->orderBy('id', $order);
+        }
+
+        $filtered = $sub_log->count();
         $total = (new SubscribeLog())->count();
         $total = (new SubscribeLog())->count();
 
 
+        $subscribes = $sub_log->paginate($length, '*', '', $page);
+
         foreach ($subscribes as $subscribe) {
         foreach ($subscribes as $subscribe) {
             $subscribe->request_time = Tools::toDateTime($subscribe->request_time);
             $subscribe->request_time = Tools::toDateTime($subscribe->request_time);
             $subscribe->location = $subscribe->getAttributes();
             $subscribe->location = $subscribe->getAttributes();
@@ -64,7 +87,7 @@ final class SubLogController extends BaseController
         return $response->withJson([
         return $response->withJson([
             'draw' => $draw,
             'draw' => $draw,
             'recordsTotal' => $total,
             'recordsTotal' => $total,
-            'recordsFiltered' => $total,
+            'recordsFiltered' => $filtered,
             'subscribes' => $subscribes,
             'subscribes' => $subscribes,
         ]);
         ]);
     }
     }

+ 24 - 5
src/Controllers/Admin/TrafficLogController.php

@@ -11,7 +11,6 @@ use Exception;
 use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\ResponseInterface;
 use Slim\Http\Response;
 use Slim\Http\Response;
 use Slim\Http\ServerRequest;
 use Slim\Http\ServerRequest;
-use function round;
 
 
 final class TrafficLogController extends BaseController
 final class TrafficLogController extends BaseController
 {
 {
@@ -49,19 +48,39 @@ final class TrafficLogController extends BaseController
         $page = $request->getParam('start') / $length + 1;
         $page = $request->getParam('start') / $length + 1;
         $draw = $request->getParam('draw');
         $draw = $request->getParam('draw');
 
 
-        $trafficlogs = (new UserHourlyUsage())->orderBy('id', 'desc')->paginate($length, '*', '', $page);
+        $traffic_log = UserHourlyUsage::query();
+
+        $search = $request->getParam('search')['value'];
+
+        if ($search !== '') {
+            $traffic_log->where('user_id', '=', $search);
+        }
+
+        $order = $request->getParam('order')[0]['dir'];
+
+        if ($request->getParam('order')[0]['column'] !== '0') {
+            $order_by = $request->getParam('columns')[$request->getParam('order')[0]['column']]['data'];
+
+            $traffic_log->orderBy($order_by, $order)->orderBy('id', 'desc');
+        } else {
+            $traffic_log->orderBy('id', $order);
+        }
+
+        $filtered = $traffic_log->count();
         $total = (new UserHourlyUsage())->count();
         $total = (new UserHourlyUsage())->count();
 
 
+        $trafficlogs = $traffic_log->paginate($length, '*', '', $page);
+
         foreach ($trafficlogs as $trafficlog) {
         foreach ($trafficlogs as $trafficlog) {
-            $trafficlog->traffic = round(Tools::flowToGB($trafficlog->traffic), 2);
-            $trafficlog->hourly_usage = round(Tools::flowToGB($trafficlog->hourly_usage), 2);
+            $trafficlog->traffic = Tools::flowToGB($trafficlog->traffic);
+            $trafficlog->hourly_usage = Tools::flowToGB($trafficlog->hourly_usage);
             $trafficlog->datetime = Tools::toDateTime((int) $trafficlog->datetime);
             $trafficlog->datetime = Tools::toDateTime((int) $trafficlog->datetime);
         }
         }
 
 
         return $response->withJson([
         return $response->withJson([
             'draw' => $draw,
             'draw' => $draw,
             'recordsTotal' => $total,
             'recordsTotal' => $total,
-            'recordsFiltered' => $total,
+            'recordsFiltered' => $filtered,
             'trafficlogs' => $trafficlogs,
             'trafficlogs' => $trafficlogs,
         ]);
         ]);
     }
     }

+ 1 - 1
src/Controllers/User/DetectLogController.php

@@ -26,7 +26,7 @@ final class DetectLogController extends BaseController
         foreach ($logs as $log) {
         foreach ($logs as $log) {
             $log->node_name = $log->nodeName();
             $log->node_name = $log->nodeName();
             $log->rule = $log->rule();
             $log->rule = $log->rule();
-            $log->rule->type = $log->ruleType();
+            $log->rule->type = $log->rule()->type();
             $log->datetime = Tools::toDateTime($log->datetime);
             $log->datetime = Tools::toDateTime($log->datetime);
         }
         }
 
 

+ 0 - 16
src/Models/DetectBanLog.php

@@ -23,22 +23,6 @@ final class DetectBanLog extends Model
     protected $connection = 'default';
     protected $connection = 'default';
     protected $table = 'detect_ban_log';
     protected $table = 'detect_ban_log';
 
 
-    /**
-     * 用户
-     */
-    public function user(): ?User
-    {
-        return (new User())->find($this->user_id);
-    }
-
-    /**
-     * 用户名
-     */
-    public function userName(): string
-    {
-        return $this->user() === null ? '用户不存在' : $this->user()->user_name;
-    }
-
     /**
     /**
      * 封禁结束时间
      * 封禁结束时间
      */
      */

+ 0 - 49
src/Models/DetectLog.php

@@ -4,7 +4,6 @@ declare(strict_types=1);
 
 
 namespace App\Models;
 namespace App\Models;
 
 
-use App\Utils\Tools;
 use Illuminate\Database\Query\Builder;
 use Illuminate\Database\Query\Builder;
 
 
 /**
 /**
@@ -22,22 +21,6 @@ final class DetectLog extends Model
     protected $connection = 'default';
     protected $connection = 'default';
     protected $table = 'detect_log';
     protected $table = 'detect_log';
 
 
-    /**
-     * 用户
-     */
-    public function user(): ?User
-    {
-        return (new User())->find($this->user_id);
-    }
-
-    /**
-     * 用户名
-     */
-    public function userName(): string
-    {
-        return $this->user() === null ? '用户不存在' : $this->user()->user_name;
-    }
-
     /**
     /**
      * 节点
      * 节点
      */
      */
@@ -69,36 +52,4 @@ final class DetectLog extends Model
     {
     {
         return $this->rule() === null ? '规则不存在' : $this->rule()->name;
         return $this->rule() === null ? '规则不存在' : $this->rule()->name;
     }
     }
-
-    /**
-     * 规则描述
-     */
-    public function ruleText(): string
-    {
-        return $this->rule() === null ? '规则不存在' : $this->rule()->text;
-    }
-
-    /**
-     * 规则正则表达式
-     */
-    public function ruleRegex(): string
-    {
-        return $this->rule() === null ? '规则已不存在' : $this->rule()->regex;
-    }
-
-    /**
-     * 规则类型
-     */
-    public function ruleType(): string
-    {
-        return $this->rule() === null ? '规则已不存在' : $this->rule()->type();
-    }
-
-    /**
-     * 时间
-     */
-    public function datetime(): string
-    {
-        return Tools::toDateTime($this->datetime);
-    }
 }
 }

+ 0 - 8
src/Models/LoginIp.php

@@ -34,14 +34,6 @@ final class LoginIp extends Model
         return (new User())->find($this->userid);
         return (new User())->find($this->userid);
     }
     }
 
 
-    /**
-     * 登录用户名
-     */
-    public function userName(): string
-    {
-        return $this->user() === null ? '用户不存在' : $this->user()->user_name;
-    }
-
     /**
     /**
      * 登录成功与否
      * 登录成功与否
      */
      */

+ 0 - 5
src/Models/OnlineLog.php

@@ -46,11 +46,6 @@ final class OnlineLog extends Model
         return $ip;
         return $ip;
     }
     }
 
 
-    public function userName(): string
-    {
-        return (new User())->where('id', $this->user_id)->value('user_name');
-    }
-
     public function nodeName(): string
     public function nodeName(): string
     {
     {
         return (new Node())->where('id', $this->node_id)->value('name');
         return (new Node())->where('id', $this->node_id)->value('name');