Jelajahi Sumber

整理代码、IDE 友好

GeekQuerxy 4 tahun lalu
induk
melakukan
0cb0cbc28a

+ 3 - 3
resources/views/material/auth/register.tpl

@@ -265,16 +265,16 @@ document.getElementById('passwd').addEventListener('input', checkStrong);
                         name: $$getValue('name'),
                         passwd: $$getValue('passwd'),
                         repasswd: $$getValue('repasswd'),
-                        
+
                         {if $recaptcha_sitekey != null}
                         recaptcha: grecaptcha.getResponse(),
                         {/if}
 
-                        {if $enable_reg_im == true}
+                        {if $config['enable_reg_im'] == true}
                         im_value: $$getValue('im_value'),
                         im_type: $$getValue('im_type'),
                         {/if}
-                        
+
                         code{if $enable_email_verify == true},
                         emailcode: $$getValue('email_code'){/if}{if $geetest_html != null},
                         geetest_challenge: validate.geetest_challenge,

+ 39 - 3
src/Controllers/Admin/AnnController.php

@@ -11,12 +11,19 @@ use App\Utils\{
     Telegram,
     DatatablesHelper
 };
-use App\Services\Mail;
 use Ozdemir\Datatables\Datatables;
-use Exception;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 class AnnController extends AdminController
 {
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function index($request, $response, $args)
     {
         $table_config['total_column'] = array('op' => '操作', 'id' => 'ID',
@@ -27,11 +34,21 @@ class AnnController extends AdminController
         return $this->view()->assign('table_config', $table_config)->display('admin/announcement/index.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function create($request, $response, $args)
     {
         return $this->view()->display('admin/announcement/create.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function add($request, $response, $args)
     {
         $issend = $request->getParam('issend');
@@ -99,6 +116,11 @@ class AnnController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function edit($request, $response, $args)
     {
         $id = $args['id'];
@@ -106,6 +128,11 @@ class AnnController extends AdminController
         return $this->view()->assign('ann', $ann)->display('admin/announcement/edit.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function update($request, $response, $args)
     {
         $id = $args['id'];
@@ -128,7 +155,11 @@ class AnnController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
-
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function delete($request, $response, $args)
     {
         $id = $request->getParam('id');
@@ -143,6 +174,11 @@ class AnnController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax($request, $response, $args)
     {
         $datatables = new Datatables(new DatatablesHelper());

+ 34 - 0
src/Controllers/Admin/CodeController.php

@@ -13,9 +13,18 @@ use App\Utils\{
 };
 use App\Services\Auth;
 use Ozdemir\Datatables\Datatables;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 class CodeController extends AdminController
 {
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function index($request, $response, $args)
     {
         $table_config['total_column'] = array(
@@ -32,16 +41,31 @@ class CodeController extends AdminController
         return $this->view()->assign('table_config', $table_config)->display('admin/code/index.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function create($request, $response, $args)
     {
         return $this->view()->display('admin/code/add.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function donate_create($request, $response, $args)
     {
         return $this->view()->display('admin/code/add_donate.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function add($request, $response, $args)
     {
         $n = $request->getParam('amount');
@@ -70,6 +94,11 @@ class CodeController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function donate_add($request, $response, $args)
     {
         $amount = $request->getParam('amount');
@@ -91,6 +120,11 @@ class CodeController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax_code($request, $response, $args)
     {
         $datatables = new Datatables(new DatatablesHelper());

+ 4 - 0
src/Controllers/Admin/DetectBanLogController.php

@@ -6,6 +6,10 @@ use App\Controllers\AdminController;
 use App\Utils\DatatablesHelper;
 use Ozdemir\Datatables\Datatables;
 use Psr\Http\Message\ResponseInterface;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 class DetectBanLogController extends AdminController
 {

+ 49 - 0
src/Controllers/Admin/DetectController.php

@@ -9,9 +9,18 @@ use App\Utils\{
     DatatablesHelper
 };
 use Ozdemir\Datatables\Datatables;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 class DetectController extends AdminController
 {
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function index($request, $response, $args)
     {
         $table_config['total_column'] = array(
@@ -27,6 +36,11 @@ class DetectController extends AdminController
         return $this->view()->assign('table_config', $table_config)->display('admin/detect/index.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function log($request, $response, $args)
     {
         $table_config['total_column'] = array(
@@ -45,11 +59,21 @@ class DetectController extends AdminController
         return $this->view()->assign('table_config', $table_config)->display('admin/detect/log.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function create($request, $response, $args)
     {
         return $this->view()->display('admin/detect/add.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function add($request, $response, $args)
     {
         $rule = new DetectRule();
@@ -71,6 +95,11 @@ class DetectController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function edit($request, $response, $args)
     {
         $id = $args['id'];
@@ -78,6 +107,11 @@ class DetectController extends AdminController
         return $this->view()->assign('rule', $rule)->display('admin/detect/edit.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function update($request, $response, $args)
     {
         $id = $args['id'];
@@ -101,6 +135,11 @@ class DetectController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function delete($request, $response, $args)
     {
         $id = $request->getParam('id');
@@ -115,6 +154,11 @@ class DetectController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax_rule($request, $response, $args)
     {
         $datatables = new Datatables(new DatatablesHelper());
@@ -133,6 +177,11 @@ class DetectController extends AdminController
         $body->write($datatables->generate());
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax_log($request, $response, $args)
     {
         $datatables = new Datatables(new DatatablesHelper());

+ 4 - 0
src/Controllers/Admin/GConfigController.php

@@ -5,6 +5,10 @@ namespace App\Controllers\Admin;
 use App\Controllers\AdminController;
 use App\Models\GConfig;
 use Psr\Http\Message\ResponseInterface;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 class GConfigController extends AdminController
 {

+ 50 - 1
src/Controllers/Admin/IpController.php

@@ -15,9 +15,18 @@ use App\Utils\{
 };
 use App\Services\Auth;
 use Ozdemir\Datatables\Datatables;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 class IpController extends AdminController
 {
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function index($request, $response, $args)
     {
         $table_config['total_column'] = array(
@@ -33,6 +42,11 @@ class IpController extends AdminController
         return $this->view()->assign('table_config', $table_config)->display('admin/ip/login.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function alive($request, $response, $args)
     {
         $table_config['total_column'] = array(
@@ -49,6 +63,11 @@ class IpController extends AdminController
         return $this->view()->assign('table_config', $table_config)->display('admin/ip/alive.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function block($request, $response, $args)
     {
         $table_config['total_column'] = array(
@@ -64,6 +83,11 @@ class IpController extends AdminController
         return $this->view()->assign('table_config', $table_config)->display('admin/ip/block.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function unblock($request, $response, $args)
     {
         $table_config['total_column'] = array(
@@ -79,6 +103,11 @@ class IpController extends AdminController
         return $this->view()->assign('table_config', $table_config)->display('admin/ip/unblock.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function doUnblock($request, $response, $args)
     {
         $ip = $request->getParam('ip');
@@ -97,9 +126,14 @@ class IpController extends AdminController
 
         $res['ret'] = 1;
         $res['msg'] = '发送解封命令解封 ' . $ip . ' 成功';
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax_block($request, $response, $args)
     {
         $datatables = new Datatables(new DatatablesHelper());
@@ -120,6 +154,11 @@ class IpController extends AdminController
         $body->write($datatables->generate());
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax_unblock($request, $response, $args)
     {
         $datatables = new Datatables(new DatatablesHelper());
@@ -140,6 +179,11 @@ class IpController extends AdminController
         $body->write($datatables->generate());
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax_login($request, $response, $args)
     {
         $datatables = new Datatables(new DatatablesHelper());
@@ -163,6 +207,11 @@ class IpController extends AdminController
         $body->write($datatables->generate());
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax_alive($request, $response, $args)
     {
         $datatables = new Datatables(new DatatablesHelper());

+ 54 - 0
src/Controllers/Admin/ShopController.php

@@ -9,9 +9,18 @@ use App\Models\{
 };
 use App\Utils\DatatablesHelper;
 use Ozdemir\Datatables\Datatables;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 class ShopController extends AdminController
 {
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function index($request, $response, $args)
     {
         $table_config['total_column'] = array(
@@ -28,11 +37,21 @@ class ShopController extends AdminController
         return $this->view()->assign('table_config', $table_config)->display('admin/shop/index.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function create($request, $response, $args)
     {
         return $this->view()->display('admin/shop/create.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function add($request, $response, $args)
     {
         $shop = new Shop();
@@ -94,6 +113,11 @@ class ShopController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function edit($request, $response, $args)
     {
         $id = $args['id'];
@@ -101,6 +125,11 @@ class ShopController extends AdminController
         return $this->view()->assign('shop', $shop)->display('admin/shop/edit.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function update($request, $response, $args)
     {
         $id = $args['id'];
@@ -175,6 +204,11 @@ class ShopController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function deleteGet($request, $response, $args)
     {
         $id = $request->getParam('id');
@@ -198,6 +232,11 @@ class ShopController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function bought($request, $response, $args)
     {
         $table_config['total_column'] = array(
@@ -215,6 +254,11 @@ class ShopController extends AdminController
         return $this->view()->assign('table_config', $table_config)->display('admin/shop/bought.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function deleteBoughtGet($request, $response, $args)
     {
         $id = $request->getParam('id');
@@ -230,6 +274,11 @@ class ShopController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax_shop($request, $response, $args)
     {
         $datatables = new Datatables(new DatatablesHelper());
@@ -278,6 +327,11 @@ class ShopController extends AdminController
         $body->write($datatables->generate());
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax_bought($request, $response, $args)
     {
         $datatables = new Datatables(new DatatablesHelper());

+ 4 - 0
src/Controllers/Admin/SubscribeLogController.php

@@ -9,6 +9,10 @@ use App\Utils\{
 };
 use Ozdemir\Datatables\Datatables;
 use Psr\Http\Message\ResponseInterface;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 class SubscribeLogController extends AdminController
 {

+ 27 - 3
src/Controllers/Admin/TicketController.php

@@ -12,9 +12,18 @@ use App\Utils\DatatablesHelper;
 use App\Utils\Tools;
 use voku\helper\AntiXSS;
 use Ozdemir\Datatables\Datatables;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 class TicketController extends AdminController
 {
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function index($request, $response, $args)
     {
         $table_config['total_column'] = array(
@@ -30,6 +39,11 @@ class TicketController extends AdminController
         return $this->view()->assign('table_config', $table_config)->display('admin/ticket/index.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function update($request, $response, $args)
     {
         $id = $args['id'];
@@ -39,13 +53,13 @@ class TicketController extends AdminController
         if ($content == '' || $status == '') {
             $res['ret'] = 0;
             $res['msg'] = '请填全';
-            return $this->echoJson($response, $res);
+            return $response->withJson($res);
         }
 
         if (strpos($content, 'admin') != false || strpos($content, 'user') != false) {
             $res['ret'] = 0;
             $res['msg'] = '请求中有不正当的词语。';
-            return $this->echoJson($response, $res);
+            return $response->withJson($res);
         }
 
         $ticket_main = Ticket::where('id', '=', $id)->where('rootid', '=', 0)->first();
@@ -80,9 +94,14 @@ class TicketController extends AdminController
 
         $res['ret'] = 1;
         $res['msg'] = '提交成功';
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function show($request, $response, $args)
     {
         $id = $args['id'];
@@ -101,6 +120,11 @@ class TicketController extends AdminController
             ->display('admin/ticket/view.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax($request, $response, $args)
     {
         $datatables = new Datatables(new DatatablesHelper());

+ 49 - 38
src/Controllers/Admin/UserController.php

@@ -25,9 +25,18 @@ use App\Utils\{
 use Exception;
 use App\Utils\DatatablesHelper;
 use Ramsey\Uuid\Uuid;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 class UserController extends AdminController
 {
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function index($request, $response, $args)
     {
         $table_config['total_column'] = array(
@@ -74,6 +83,11 @@ class UserController extends AdminController
             ->display('admin/user/index.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function createNewUser($request, $response, $args)
     {
         # 需要一个 userEmail
@@ -181,6 +195,11 @@ class UserController extends AdminController
         return $response->getBody()->write(json_encode($res));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function buy($request, $response, $args)
     {
         #shop 信息可以通过 App\Controllers\UserController:shop 获得
@@ -229,6 +248,11 @@ class UserController extends AdminController
         return $response->getBody()->write(json_encode($result));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function search($request, $response, $args)
     {
         $pageNum = 1;
@@ -266,44 +290,11 @@ class UserController extends AdminController
         return $this->view()->assign('users', $users)->assign('regloc', $regloc)->assign('useripcount', $useripcount)->assign('userip', $userip)->display('admin/user/index.tpl');
     }
 
-    public function sort($request, $response, $args)
-    {
-        $pageNum = 1;
-        $text = $args['text'];
-        $asc = $args['asc'];
-        if (isset($request->getQueryParams()['page'])) {
-            $pageNum = $request->getQueryParams()['page'];
-        }
-
-        $users->setPath('/admin/user/sort/' . $text . '/' . $asc);
-
-        //Ip::where("datetime","<",time()-90)->get()->delete();
-        $total = Ip::where('datetime', '>=', time() - 90)->orderBy('userid', 'desc')->get();
-
-        $userip = array();
-        $useripcount = array();
-        $regloc = array();
-
-        $iplocation = new QQWry();
-        foreach ($users as $user) {
-            $useripcount[$user->id] = 0;
-            $userip[$user->id] = array();
-
-            $location = $iplocation->getlocation($user->reg_ip);
-            $regloc[$user->id] = iconv('gbk', 'utf-8//IGNORE', $location['country'] . $location['area']);
-        }
-
-        foreach ($total as $single) {
-            if (isset($useripcount[$single->userid]) && !isset($userip[$single->userid][$single->ip])) {
-                ++$useripcount[$single->userid];
-                $location = $iplocation->getlocation($single->ip);
-                $userip[$single->userid][$single->ip] = iconv('gbk', 'utf-8//IGNORE', $location['country'] . $location['area']);
-            }
-        }
-
-        return $this->view()->assign('users', $users)->assign('regloc', $regloc)->assign('useripcount', $useripcount)->assign('userip', $userip)->display('admin/user/index.tpl');
-    }
-
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function edit($request, $response, $args)
     {
         $id = $args['id'];
@@ -311,6 +302,11 @@ class UserController extends AdminController
         return $this->view()->assign('edit_user', $user)->display('admin/user/edit.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function update($request, $response, $args)
     {
         $id = $args['id'];
@@ -389,6 +385,11 @@ class UserController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function delete($request, $response, $args)
     {
         $id = $request->getParam('id');
@@ -403,6 +404,11 @@ class UserController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function changetouser($request, $response, $args)
     {
         $userid     = $request->getParam('userid');
@@ -435,6 +441,11 @@ class UserController extends AdminController
         return $response->getBody()->write(json_encode($rs));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax($request, $response, $args)
     {
         //得到排序的方式

+ 55 - 1
src/Controllers/AdminController.php

@@ -15,29 +15,53 @@ use App\Services\{
     Analytics
 };
 use Ozdemir\Datatables\Datatables;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 /**
  *  Admin Controller
  */
 class AdminController extends UserController
 {
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function index($request, $response, $args)
     {
         $sts = new Analytics();
         return $this->view()->assign('sts', $sts)->display('admin/index.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function node($request, $response, $args)
     {
         $nodes = Node::all();
         return $this->view()->assign('nodes', $nodes)->display('admin/node.tpl');
     }
 
-    public function sys()
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
+    public function sys($request, $response, $args)
     {
         return $this->view()->display('admin/index.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function invite($request, $response, $args)
     {
         $table_config['total_column'] = array(
@@ -55,6 +79,11 @@ class AdminController extends UserController
         return $this->view()->assign('table_config', $table_config)->display('admin/invite.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function chgInvite($request, $response, $args)
     {
         $prefix = $request->getParam('prefix');
@@ -82,6 +111,11 @@ class AdminController extends UserController
         return $response->getBody()->write(json_encode($res));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function addInvite($request, $response, $args)
     {
         $num = $request->getParam('num');
@@ -116,6 +150,11 @@ class AdminController extends UserController
         return $response->getBody()->write(json_encode($res));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function coupon($request, $response, $args)
     {
         $table_config['total_column'] = array(
@@ -131,6 +170,11 @@ class AdminController extends UserController
         return $this->view()->assign('table_config', $table_config)->display('admin/coupon.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function addCoupon($request, $response, $args)
     {
         $code = new Coupon();
@@ -177,6 +221,11 @@ class AdminController extends UserController
         return $response->getBody()->write(json_encode($res));
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax_payback($request, $response, $args)
     {
         $datatables = new Datatables(new DatatablesHelper());
@@ -190,6 +239,11 @@ class AdminController extends UserController
         $body->write($datatables->generate());
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ajax_coupon($request, $response, $args)
     {
         $datatables = new Datatables(new DatatablesHelper());

+ 264 - 263
src/Controllers/AuthController.php

@@ -4,7 +4,6 @@ namespace App\Controllers;
 
 use App\Models\{
     User,
-    LoginIp,
     InviteCode,
     EmailVerify
 };
@@ -13,243 +12,198 @@ use App\Utils\{
     Hash,
     Check,
     Tools,
-    Geetest,
     TelegramSessionManager
 };
 use App\Services\{
     Auth,
+    Captcha,
     Mail,
     Config
 };
 use voku\helper\AntiXSS;
 use Exception;
 use Ramsey\Uuid\Uuid;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 /**
  *  AuthController
  */
 class AuthController extends BaseController
 {
-    public function login()
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
+    public function login($request, $response, $args)
     {
-        $GtSdk = null;
-        $recaptcha_sitekey = null;
-        if ($_ENV['enable_login_captcha'] === true) {
-            switch ($_ENV['captcha_provider']) {
-                case 'recaptcha':
-                    $recaptcha_sitekey = $_ENV['recaptcha_sitekey'];
-                    break;
-                case 'geetest':
-                    $uid = time() . random_int(1, 10000);
-                    $GtSdk = Geetest::get($uid);
-                    break;
-            }
-        }
+        $captcha = Captcha::generate();
 
         if ($_ENV['enable_telegram_login'] === true) {
-            $login_text = TelegramSessionManager::add_login_session();
-            $login = explode('|', $login_text);
-            $login_token = $login[0];
+            $login_text   = TelegramSessionManager::add_login_session();
+            $login        = explode('|', $login_text);
+            $login_token  = $login[0];
             $login_number = $login[1];
         } else {
-            $login_token = '';
+            $login_token  = '';
             $login_number = '';
         }
 
         return $this->view()
-            ->assign('geetest_html', $GtSdk)
+            ->assign('geetest_html', $captcha['geetest'])
             ->assign('login_token', $login_token)
             ->assign('login_number', $login_number)
             ->assign('telegram_bot', $_ENV['telegram_bot'])
             ->assign('base_url', $_ENV['baseUrl'])
-            ->assign('recaptcha_sitekey', $recaptcha_sitekey)
+            ->assign('recaptcha_sitekey', $captcha['recaptcha'])
             ->display('auth/login.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function getCaptcha($request, $response, $args)
     {
-        $GtSdk = null;
-        $recaptcha_sitekey = null;
-        if ($_ENV['captcha_provider'] != '') {
-            switch ($_ENV['captcha_provider']) {
-                case 'recaptcha':
-                    $recaptcha_sitekey = $_ENV['recaptcha_sitekey'];
-                    $res['recaptchaKey'] = $recaptcha_sitekey;
-                    break;
-                case 'geetest':
-                    $uid = time() . random_int(1, 10000);
-                    $GtSdk = Geetest::get($uid);
-                    $res['GtSdk'] = $GtSdk;
-                    break;
-            }
-        }
-
-        $res['respon'] = 1;
-        return $response->getBody()->write(json_encode($res));
+        $captcha = Captcha::generate();
+        return $response->withJson([
+            'recaptchaKey' => $captcha['recaptcha'],
+            'GtSdk'        => $captcha['geetest'],
+            'respon'       => 1,
+        ]);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function loginHandle($request, $response, $args)
     {
-        // $data = $request->post('sdf');
-        $email = $request->getParam('email');
-        $email = trim($email);
-        $email = strtolower($email);
-        $passwd = $request->getParam('passwd');
-        $code = $request->getParam('code');
+        $email      = trim($request->getParam('email'));
+        $email      = strtolower($email);
+        $passwd     = $request->getParam('passwd');
+        $code       = $request->getParam('code');
         $rememberMe = $request->getParam('remember_me');
 
         if ($_ENV['enable_login_captcha'] === true) {
-            switch ($_ENV['captcha_provider']) {
-                case 'recaptcha':
-                    $recaptcha = $request->getParam('recaptcha');
-                    if ($recaptcha == '') {
-                        $ret = false;
-                    } else {
-                        $json = file_get_contents('https://recaptcha.net/recaptcha/api/siteverify?secret=' . $_ENV['recaptcha_secret'] . '&response=' . $recaptcha);
-                        $ret = json_decode($json)->success;
-                    }
-                    break;
-                case 'geetest':
-                    $ret = Geetest::verify($request->getParam('geetest_challenge'), $request->getParam('geetest_validate'), $request->getParam('geetest_seccode'));
-                    break;
-            }
+            $ret = Captcha::verify($request->getParams());
             if (!$ret) {
-                $res['ret'] = 0;
-                $res['msg'] = '系统无法接受您的验证结果,请刷新页面后重试。';
-                return $response->getBody()->write(json_encode($res));
+                return $response->withJson([
+                    'ret' => 0,
+                    'msg' => '系统无法接受您的验证结果,请刷新页面后重试。'
+                ]);
             }
         }
 
-        // Handle Login
-        $user = User::where('email', '=', $email)->first();
-
+        $user = User::where('email', $email)->first();
         if ($user == null) {
-            $rs['ret'] = 0;
-            $rs['msg'] = '邮箱不存在';
-            return $response->getBody()->write(json_encode($rs));
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '邮箱不存在'
+            ]);
         }
 
         if (!Hash::checkPassword($user->pass, $passwd)) {
-            $rs['ret'] = 0;
-            $rs['msg'] = '邮箱或者密码错误';
-
-
-            $loginIP = new LoginIp();
-            $loginIP->ip = $_SERVER['REMOTE_ADDR'];
-            $loginIP->userid = $user->id;
-            $loginIP->datetime = time();
-            $loginIP->type = 1;
-            $loginIP->save();
-
-            return $response->getBody()->write(json_encode($rs));
-        }
-
-        $time = 3600 * 24;
-        if ($rememberMe) {
-            $time = 3600 * 24 * ($_ENV['rememberMeDuration'] ?: 7);
+            // 记录登录失败
+            $user->collectLoginIP($_SERVER['REMOTE_ADDR'], 1);
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '邮箱或者密码错误'
+            ]);
         }
 
         if ($user->ga_enable == 1) {
-            $ga = new GA();
+            $ga    = new GA();
             $rcode = $ga->verifyCode($user->ga_token, $code);
-
             if (!$rcode) {
-                $res['ret'] = 0;
-                $res['msg'] = '两步验证码错误,如果您是丢失了生成器或者错误地设置了这个选项,您可以尝试重置密码,即可取消这个选项。';
-                return $response->getBody()->write(json_encode($res));
+                return $response->withJson([
+                    'ret' => 0,
+                    'msg' => '两步验证码错误,如果您是丢失了生成器或者错误地设置了这个选项,您可以尝试重置密码,即可取消这个选项。'
+                ]);
             }
         }
 
-        Auth::login($user->id, $time);
-        $rs['ret'] = 1;
-        $rs['msg'] = '登录成功';
+        $time = 3600 * 24;
+        if ($rememberMe) {
+            $time = 3600 * 24 * ($_ENV['rememberMeDuration'] ?: 7);
+        }
 
-        $loginIP = new LoginIp();
-        $loginIP->ip = $_SERVER['REMOTE_ADDR'];
-        $loginIP->userid = $user->id;
-        $loginIP->datetime = time();
-        $loginIP->type = 0;
-        $loginIP->save();
+        Auth::login($user->id, $time);
+        // 记录登录成功
+        $user->collectLoginIP($_SERVER['REMOTE_ADDR']);
 
-        return $response->getBody()->write(json_encode($rs));
+        return $response->withJson([
+            'ret' => 1,
+            'msg' => '登录成功'
+        ]);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function qrcode_loginHandle($request, $response, $args)
     {
-        // $data = $request->post('sdf');
-        $token = $request->getParam('token');
+        $token  = $request->getParam('token');
         $number = $request->getParam('number');
 
         $ret = TelegramSessionManager::step2_verify_login_session($token, $number);
-        if (!$ret) {
-            $res['ret'] = 0;
-            $res['msg'] = '此令牌无法被使用。';
-            return $response->getBody()->write(json_encode($res));
+        if ($ret === 0) {
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '此令牌无法被使用。'
+            ]);
         }
 
+        $user = User::find($ret);
 
-        // Handle Login
-        $user = User::where('id', '=', $ret)->first();
-        // @todo
-        $time = 3600 * 24;
-
-        Auth::login($user->id, $time);
-        $rs['ret'] = 1;
-        $rs['msg'] = '登录成功';
-
-        $this->logUserIp($user->id, $_SERVER['REMOTE_ADDR']);
-
-        return $response->getBody()->write(json_encode($rs));
-    }
+        Auth::login($user->id, 3600 * 24);
+        // 记录登录成功
+        $user->collectLoginIP($_SERVER['REMOTE_ADDR']);
 
-    private function logUserIp($id, $ip)
-    {
-        $loginip = new LoginIp();
-        $loginip->ip = $ip;
-        $loginip->userid = $id;
-        $loginip->datetime = time();
-        $loginip->type = 0;
-        $loginip->save();
+        return $response->withJson([
+            'ret' => 1,
+            'msg' => '登录成功'
+        ]);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function register($request, $response, $next)
     {
-        $ary = $request->getQueryParams();
+        $ary  = $request->getQueryParams();
         $code = '';
         if (isset($ary['code'])) {
             $antiXss = new AntiXSS();
-            $code = $antiXss->xss_clean($ary['code']);
+            $code    = $antiXss->xss_clean($ary['code']);
         }
 
-        $GtSdk = null;
-        $recaptcha_sitekey = null;
-        if ($_ENV['enable_reg_captcha'] === true) {
-            switch ($_ENV['captcha_provider']) {
-                case 'recaptcha':
-                    $recaptcha_sitekey = $_ENV['recaptcha_sitekey'];
-                    break;
-                case 'geetest':
-                    $uid = time() . random_int(1, 10000);
-                    $GtSdk = Geetest::get($uid);
-                    break;
-            }
-        }
+        $captcha = Captcha::generate();
 
         if ($_ENV['enable_telegram_login'] === true) {
-            $login_text = TelegramSessionManager::add_login_session();
-            $login = explode('|', $login_text);
-            $login_token = $login[0];
+            $login_text   = TelegramSessionManager::add_login_session();
+            $login        = explode('|', $login_text);
+            $login_token  = $login[0];
             $login_number = $login[1];
         } else {
-            $login_token = '';
+            $login_token  = '';
             $login_number = '';
         }
 
         return $this->view()
-            ->assign('geetest_html', $GtSdk)
+            ->assign('geetest_html', $captcha['geetest'])
             ->assign('enable_email_verify', Config::getconfig('Register.bool.Enable_email_verify'))
             ->assign('code', $code)
-            ->assign('recaptcha_sitekey', $recaptcha_sitekey)
+            ->assign('recaptcha_sitekey', $captcha['recaptcha'])
             ->assign('telegram_bot', $_ENV['telegram_bot'])
             ->assign('base_url', $_ENV['baseUrl'])
             ->assign('login_token', $login_token)
@@ -257,78 +211,90 @@ class AuthController extends BaseController
             ->display('auth/register.tpl');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function sendVerify($request, $response, $next)
     {
         if (Config::getconfig('Register.bool.Enable_email_verify')) {
-            $email = $request->getParam('email');
-            $email = trim($email);
-
+            $email = trim($request->getParam('email'));
+            $email = strtolower($email);
             if ($email == '') {
-                $res['ret'] = 0;
-                $res['msg'] = '未填写邮箱';
-                return $response->getBody()->write(json_encode($res));
+                return $response->withJson([
+                    'ret' => 0,
+                    'msg' => '未填写邮箱'
+                ]);
             }
-
             // check email format
             if (!Check::isEmailLegal($email)) {
-                $res['ret'] = 0;
-                $res['msg'] = '邮箱无效';
-                return $response->getBody()->write(json_encode($res));
+                return $response->withJson([
+                    'ret' => 0,
+                    'msg' => '邮箱无效'
+                ]);
             }
-
-            $user = User::where('email', '=', $email)->first();
+            $user = User::where('email', $email)->first();
             if ($user != null) {
-                $res['ret'] = 0;
-                $res['msg'] = '此邮箱已经注册';
-                return $response->getBody()->write(json_encode($res));
+                return $response->withJson([
+                    'ret' => 0,
+                    'msg' => '此邮箱已经注册'
+                ]);
             }
-
             $ipcount = EmailVerify::where('ip', '=', $_SERVER['REMOTE_ADDR'])->where('expire_in', '>', time())->count();
             if ($ipcount >= (int) Config::getconfig('Register.string.Email_verify_iplimit')) {
-                $res['ret'] = 0;
-                $res['msg'] = '此IP请求次数过多';
-                return $response->getBody()->write(json_encode($res));
+                return $response->withJson([
+                    'ret' => 0,
+                    'msg' => '此IP请求次数过多'
+                ]);
             }
-
-
             $mailcount = EmailVerify::where('email', '=', $email)->where('expire_in', '>', time())->count();
             if ($mailcount >= 3) {
-                $res['ret'] = 0;
-                $res['msg'] = '此邮箱请求次数过多';
-                return $response->getBody()->write(json_encode($res));
+                return $response->withJson([
+                    'ret' => 0,
+                    'msg' => '此邮箱请求次数过多'
+                ]);
             }
-
-            $code = Tools::genRandomNum(6);
-
-            $ev = new EmailVerify();
+            $code          = Tools::genRandomNum(6);
+            $ev            = new EmailVerify();
             $ev->expire_in = time() + (int) Config::getconfig('Register.string.Email_verify_ttl');
-            $ev->ip = $_SERVER['REMOTE_ADDR'];
-            $ev->email = $email;
-            $ev->code = $code;
+            $ev->ip        = $_SERVER['REMOTE_ADDR'];
+            $ev->email     = $email;
+            $ev->code      = $code;
             $ev->save();
-
-            $subject = $_ENV['appName'] . '- 验证邮件';
-
             try {
-                Mail::send($email, $subject, 'auth/verify.tpl', [
-                    'code' => $code, 'expire' => date('Y-m-d H:i:s', time() + (int) Config::getconfig('Register.string.Email_verify_ttl'))
-                ], [
-                    //BASE_PATH.'/public/assets/email/styles.css'
-                ]);
+                Mail::send(
+                    $email,
+                    $_ENV['appName'] . '- 验证邮件',
+                    'auth/verify.tpl',
+                    [
+                        'code' => $code,
+                        'expire' => date('Y-m-d H:i:s', time() + (int) Config::getconfig('Register.string.Email_verify_ttl'))
+                    ],
+                    []
+                );
             } catch (Exception $e) {
-                $res['ret'] = 1;
-                $res['msg'] = '邮件发送失败,请联系网站管理员。';
-                return $response->getBody()->write(json_encode($res));
+                return $response->withJson([
+                    'ret' => 0,
+                    'msg' => '邮件发送失败,请联系网站管理员。'
+                ]);
             }
-
-            $res['ret'] = 1;
-            $res['msg'] = '验证码发送成功,请查收邮件。';
-            return $response->getBody()->write(json_encode($res));
-        }
-        $res['ret'] = 0;
-        return $response->getBody()->write(json_encode($res));
+            return $response->withJson([
+                'ret' => 1,
+                'msg' => '验证码发送成功,请查收邮件。'
+            ]);
+        }
+        return $response->withJson([
+            'ret' => 0,
+            'msg' => ''
+        ]);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function register_helper($name, $email, $passwd, $code, $imtype, $imvalue, $telegram_id)
     {
         if (Config::getconfig('Register.string.Mode') === 'close') {
@@ -338,7 +304,7 @@ class AuthController extends BaseController
         }
 
         //dumplin:1、邀请人等级为0则邀请码不可用;2、邀请人invite_num为可邀请次数,填负数则为无限
-        if ($code != null){
+        if ($code != null) {
             $c = InviteCode::where('code', $code)->first();
         }
         if ($c == null) {
@@ -391,7 +357,7 @@ class AuthController extends BaseController
         $user->forbidden_port       = $_ENV['reg_forbidden_port'];
         $user->im_type              = $imtype;
         $user->im_value             = $antiXss->xss_clean($imvalue);
-        
+
         $user->transfer_enable      = Tools::toGB(Config::getconfig('Register.string.defaultTraffic'));
         $user->invite_num           = (int) Config::getconfig('Register.string.defaultInviteNum');
         $user->auto_reset_day       = $_ENV['reg_auto_reset_day'];
@@ -434,7 +400,9 @@ class AuthController extends BaseController
 
         if ($user->save()) {
             Auth::login($user->id, 3600);
-            $this->logUserIp($user->id, $_SERVER['REMOTE_ADDR']);
+
+            // 记录登录成功
+            $user->collectLoginIP($_SERVER['REMOTE_ADDR']);
 
             $res['ret'] = 1;
             $res['msg'] = '注册成功!正在进入登录界面';
@@ -446,12 +414,17 @@ class AuthController extends BaseController
         return $res;
     }
 
-    public function registerHandle($request, $response)
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
+    public function registerHandle($request, $response, $args)
     {
         if (Config::getconfig('Register.string.Mode') === 'close') {
             $res['ret'] = 0;
             $res['msg'] = '未开放注册。';
-            return $response->getBody()->write(json_encode($res));
+            return $response->withJson($res);
         }
 
         $name      = $request->getParam('name');
@@ -463,21 +436,22 @@ class AuthController extends BaseController
         $code      = trim($request->getParam('code'));
         $emailcode = $request->getParam('emailcode');
         $emailcode = trim($emailcode);
-        
+
         if ($_ENV['enable_reg_im'] == true) {
             $imtype  = $request->getParam('im_type');
             $imvalue = $request->getParam('im_value');
             if ($imtype == '' || $imvalue == '') {
-                $res['ret'] = 0;
-                $res['msg'] = '请填上你的联络方式';
-                return $response->getBody()->write(json_encode($res));
+                return $response->withJson([
+                    'ret' => 0,
+                    'msg' => '请填上你的联络方式'
+                ]);
             }
-    
             $user = User::where('im_value', $imvalue)->where('im_type', $imtype)->first();
             if ($user != null) {
-                $res['ret'] = 0;
-                $res['msg'] = '此联络方式已注册';
-                return $response->getBody()->write(json_encode($res));
+                return $response->withJson([
+                    'ret' => 0,
+                    'msg' => '此联络方式已注册'
+                ]);
             }
         } else {
             $imtype  = 1;
@@ -485,124 +459,151 @@ class AuthController extends BaseController
         }
 
         if ($_ENV['enable_reg_captcha'] === true) {
-            switch ($_ENV['captcha_provider']) {
-                case 'recaptcha':
-                    $recaptcha = $request->getParam('recaptcha');
-                    if ($recaptcha == '') {
-                        $ret = false;
-                    } else {
-                        $json = file_get_contents('https://recaptcha.net/recaptcha/api/siteverify?secret=' . $_ENV['recaptcha_secret'] . '&response=' . $recaptcha);
-                        $ret = json_decode($json)->success;
-                    }
-                    break;
-                case 'geetest':
-                    $ret = Geetest::verify($request->getParam('geetest_challenge'), $request->getParam('geetest_validate'), $request->getParam('geetest_seccode'));
-                    break;
-            }
+            $ret = Captcha::verify($request->getParams());
             if (!$ret) {
-                $res['ret'] = 0;
-                $res['msg'] = '系统无法接受您的验证结果,请刷新页面后重试。';
-                return $response->getBody()->write(json_encode($res));
+                return $response->withJson([
+                    'ret' => 0,
+                    'msg' => '系统无法接受您的验证结果,请刷新页面后重试。'
+                ]);
             }
         }
 
         // check email format
         if (!Check::isEmailLegal($email)) {
-            $res['ret'] = 0;
-            $res['msg'] = '邮箱无效';
-            return $response->getBody()->write(json_encode($res));
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '邮箱无效'
+            ]);
         }
         // check email
         $user = User::where('email', $email)->first();
         if ($user != null) {
-            $res['ret'] = 0;
-            $res['msg'] = '邮箱已经被注册了';
-            return $response->getBody()->write(json_encode($res));
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '邮箱已经被注册了'
+            ]);
         }
 
         if (Config::getconfig('Register.bool.Enable_email_verify')) {
             $mailcount = EmailVerify::where('email', '=', $email)->where('code', '=', $emailcode)->where('expire_in', '>', time())->first();
             if ($mailcount == null) {
-                $res['ret'] = 0;
-                $res['msg'] = '您的邮箱验证码不正确';
-                return $response->getBody()->write(json_encode($res));
+                return $response->withJson([
+                    'ret' => 0,
+                    'msg' => '您的邮箱验证码不正确'
+                ]);
             }
         }
 
         // check pwd length
         if (strlen($passwd) < 8) {
-            $res['ret'] = 0;
-            $res['msg'] = '密码请大于8位';
-            return $response->getBody()->write(json_encode($res));
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '密码请大于8位'
+            ]);
         }
 
         // check pwd re
         if ($passwd != $repasswd) {
-            $res['ret'] = 0;
-            $res['msg'] = '两次密码输入不符';
-            return $response->getBody()->write(json_encode($res));
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '两次密码输入不符'
+            ]);
         }
-        
+
         if (Config::getconfig('Register.bool.Enable_email_verify')) {
-            EmailVerify::where('email', '=', $email)->delete();
+            EmailVerify::where('email', $email)->delete();
         }
 
         $res = $this->register_helper($name, $email, $passwd, $code, $imtype, $imvalue, 0);
-        return $response->getBody()->write(json_encode($res));
+        return $response->withJson($res);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function logout($request, $response, $next)
     {
         Auth::logout();
         return $response->withStatus(302)->withHeader('Location', '/auth/login');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function qrcode_check($request, $response, $args)
     {
-        $token = $request->getParam('token');
+        $token  = $request->getParam('token');
         $number = $request->getParam('number');
-        $user = Auth::getUser();
+        $user   = Auth::getUser();
         if ($user->isLogin) {
-            $res['ret'] = 0;
-            return $response->getBody()->write(json_encode($res));
+            return $response->withJson([
+                'ret' => 0
+            ]);
         }
-
         if ($_ENV['enable_telegram_login'] === true) {
             $ret = TelegramSessionManager::check_login_session($token, $number);
             $res['ret'] = $ret;
-            return $response->getBody()->write(json_encode($res));
+            return $response->withJson($res);
         }
-
-        $res['ret'] = 0;
-        return $response->getBody()->write(json_encode($res));
+        return $response->withJson([
+            'ret' => 0
+        ]);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function telegram_oauth($request, $response, $args)
     {
         if ($_ENV['enable_telegram_login'] === true) {
             $auth_data = $request->getQueryParams();
             if ($this->telegram_oauth_check($auth_data) === true) { // Looks good, proceed.
                 $telegram_id = $auth_data['id'];
-                $user = User::query()->where('telegram_id', $telegram_id)->firstOrFail(); // Welcome Back :)
+                $user        = User::query()->where('telegram_id', $telegram_id)->firstOrFail(); // Welcome Back :)
                 if ($user == null) {
-                    return $this->view()->assign('title', '您需要先进行邮箱注册后绑定Telegram才能使用授权登录')->assign('message', '很抱歉带来的不便,请重新试试')->assign('redirect', '/auth/login')->display('telegram_error.tpl');
+                    return $this->view()
+                        ->assign('title', '您需要先进行邮箱注册后绑定Telegram才能使用授权登录')
+                        ->assign('message', '很抱歉带来的不便,请重新试试')
+                        ->assign('redirect', '/auth/login')
+                        ->display('telegram_error.tpl');
                 }
                 Auth::login($user->id, 3600);
-                $this->logUserIp($user->id, $_SERVER['REMOTE_ADDR']);
+
+                // 记录登录成功
+                $user->collectLoginIP($_SERVER['REMOTE_ADDR']);
 
                 // 登陆成功!
-                return $this->view()->assign('title', '登录成功')->assign('message', '正在前往仪表盘')->assign('redirect', '/user')->display('telegram_success.tpl');
+                return $this->view()
+                    ->assign('title', '登录成功')
+                    ->assign('message', '正在前往仪表盘')
+                    ->assign('redirect', '/user')
+                    ->display('telegram_success.tpl');
             }
             // 验证失败
-            return $this->view()->assign('title', '登陆超时或非法构造信息')->assign('message', '很抱歉带来的不便,请重新试试')->assign('redirect', '/auth/login')->display('telegram_error.tpl');
+            return $this->view()
+                ->assign('title', '登陆超时或非法构造信息')
+                ->assign('message', '很抱歉带来的不便,请重新试试')
+                ->assign('redirect', '/auth/login')
+                ->display('telegram_error.tpl');
         }
         return $response->withRedirect('/404');
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     private function telegram_oauth_check($auth_data)
     {
         $check_hash = $auth_data['hash'];
-        $bot_token = $_ENV['telegram_token'];
+        $bot_token  = $_ENV['telegram_token'];
         unset($auth_data['hash']);
         $data_check_arr = [];
         foreach ($auth_data as $key => $value) {
@@ -610,8 +611,8 @@ class AuthController extends BaseController
         }
         sort($data_check_arr);
         $data_check_string = implode("\n", $data_check_arr);
-        $secret_key = hash('sha256', $bot_token, true);
-        $hash = hash_hmac('sha256', $data_check_string, $secret_key);
+        $secret_key        = hash('sha256', $bot_token, true);
+        $hash              = hash_hmac('sha256', $data_check_string, $secret_key);
         if (strcmp($hash, $check_hash) !== 0) {
             return false; // Bad Data :(
         }

+ 0 - 16
src/Controllers/BaseController.php

@@ -7,8 +7,6 @@ use App\Services\{
     Auth,
     View
 };
-use Slim\Http\Response;
-use Psr\Http\Message\ResponseInterface;
 use Smarty;
 
 /**
@@ -44,18 +42,4 @@ class BaseController
     {
         return $this->view;
     }
-
-    // TODO: remove
-    /**
-     * Output JSON
-     *
-     * @param Response      $response
-     * @param array|object  $resource
-     *
-     * @return ResponseInterface
-     */
-    public function echoJson(Response $response, $resource)
-    {
-        return $response->withJson($resource);
-    }
 }

+ 2 - 2
src/Controllers/HomeController.php

@@ -137,7 +137,7 @@ class HomeController extends BaseController
         $type = trim($request->getParam('type'));
         $user = Auth::getUser();
         if (!$user->isLogin) {
-            return $msg = '!> ₍₍ ◝(・ω・)◟ ⁾⁾ 您没有登录噢,[点击此处登录](/auth/login \':ignore target=_blank\') 之后再刷新就阔以了啦';
+            return $response->write('!> ₍₍ ◝(・ω・)◟ ⁾⁾ 您没有登录噢,[点击此处登录](/auth/login \':ignore target=_blank\') 之后再刷新就阔以了啦');
         } else {
             $subInfo = LinkController::getSubinfo($user, 0);
             switch ($type) {
@@ -240,6 +240,6 @@ class HomeController extends BaseController
                     break;
             }
         }
-        return implode(PHP_EOL, $msg);
+        return $response->write(implode(PHP_EOL, $msg));
     }
 }

+ 5 - 4
src/Controllers/LinkController.php

@@ -13,6 +13,7 @@ use App\Utils\{
     URL,
     Tools,
     AppURI,
+    ConfGenerate,
     ConfRender
 };
 use voku\helper\AntiXSS;
@@ -374,7 +375,7 @@ class LinkController extends BaseController
      * 响应内容
      *
      * @param User   $user
-     * @param array  $response
+     * @param object $response
      * @param string $content  订阅内容
      * @param string $filename 文件名
      */
@@ -646,7 +647,7 @@ class LinkController extends BaseController
             $Profiles = ($surge == 2 ? $_ENV['Surge2_DefaultProfiles'] : $_ENV['Surge_DefaultProfiles']);
         }
 
-        return ConfController::getSurgeConfs($user, $All_Proxy, $Nodes, $_ENV[$variable][$Profiles]);
+        return ConfGenerate::getSurgeConfs($user, $All_Proxy, $Nodes, $_ENV[$variable][$Profiles]);
     }
 
     /**
@@ -763,7 +764,7 @@ class LinkController extends BaseController
             $Profiles = $_ENV['Surfboard_DefaultProfiles']; // 默认策略组
         }
 
-        return ConfController::getSurgeConfs($user, $All_Proxy, $Nodes, $_ENV['Surfboard_Profiles'][$Profiles]);
+        return ConfGenerate::getSurgeConfs($user, $All_Proxy, $Nodes, $_ENV['Surfboard_Profiles'][$Profiles]);
     }
 
     /**
@@ -795,7 +796,7 @@ class LinkController extends BaseController
             $Profiles = $_ENV['Clash_DefaultProfiles']; // 默认策略组
         }
 
-        return ConfController::getClashConfs($user, $Proxys, $_ENV['Clash_Profiles'][$Profiles]);
+        return ConfGenerate::getClashConfs($user, $Proxys, $_ENV['Clash_Profiles'][$Profiles]);
     }
 
     /**

+ 47 - 9
src/Controllers/Mod_Mu/FuncController.php

@@ -4,25 +4,38 @@ namespace App\Controllers\Mod_Mu;
 
 use App\Controllers\BaseController;
 use App\Models\{
-    Auto,
     Node,
     BlockIp,
     UnblockIp,
     Speedtest,
     DetectRule
 };
+use Slim\Http\{
+    Request,
+    Response
+};
 
 class FuncController extends BaseController
 {
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function ping($request, $response, $args)
     {
         $res = [
             'ret' => 1,
             'data' => 'pong'
         ];
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function get_detect_logs($request, $response, $args)
     {
         $rules = DetectRule::all();
@@ -31,9 +44,14 @@ class FuncController extends BaseController
             'ret' => 1,
             'data' => $rules
         ];
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function get_dis_node_info($nodeid)
     {
         $node = Node::where('id', $nodeid)->first();
@@ -44,6 +62,11 @@ class FuncController extends BaseController
         return $node;
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function get_blockip($request, $response, $args)
     {
         $block_ips = BlockIp::Where('datetime', '>', time() - 60)->get();
@@ -52,9 +75,14 @@ class FuncController extends BaseController
             'ret' => 1,
             'data' => $block_ips
         ];
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function get_unblockip($request, $response, $args)
     {
         $unblock_ips = UnblockIp::Where('datetime', '>', time() - 60)->get();
@@ -63,9 +91,14 @@ class FuncController extends BaseController
             'ret' => 1,
             'data' => $unblock_ips
         ];
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function addBlockIp($request, $response, $args)
     {
         $params = $request->getQueryParams();
@@ -81,7 +114,7 @@ class FuncController extends BaseController
             $res = [
                 'ret' => 0
             ];
-            return $this->echoJson($response, $res);
+            return $response->withJson($res);
         }
 
         if (count($data) > 0) {
@@ -106,9 +139,14 @@ class FuncController extends BaseController
             'ret' => 1,
             'data' => 'ok',
         ];
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function addSpeedtest($request, $response, $args)
     {
         $params = $request->getQueryParams();
@@ -124,7 +162,7 @@ class FuncController extends BaseController
             $res = [
                 'ret' => 0
             ];
-            return $this->echoJson($response, $res);
+            return $response->withJson($res);
         }
 
         if (count($data) > 0) {
@@ -152,6 +190,6 @@ class FuncController extends BaseController
             'ret' => 1,
             'data' => 'ok',
         ];
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 }

+ 30 - 6
src/Controllers/Mod_Mu/NodeController.php

@@ -9,9 +9,18 @@ use App\Models\{
     NodeInfoLog
 };
 use App\Services\Config;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 class NodeController extends BaseController
 {
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function info($request, $response, $args)
     {
         $node_id = $args['id'];
@@ -31,15 +40,20 @@ class NodeController extends BaseController
                 'ret' => 0,
                 'data' => 'update failed',
             ];
-            return $this->echoJson($response, $res);
+            return $response->withJson($res);
         }
         $res = [
             'ret' => 1,
             'data' => 'ok',
         ];
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function get_info($request, $response, $args)
     {
         $node_id = $args['id'];
@@ -52,7 +66,7 @@ class NodeController extends BaseController
             $res = [
                 'ret' => 0
             ];
-            return $this->echoJson($response, $res);
+            return $response->withJson($res);
         }
         if (in_array($node->sort, [0, 10])) {
             $node_explode = explode(';', $node->server);
@@ -74,9 +88,14 @@ class NodeController extends BaseController
                 'type' => 'SSPanel-UIM'
             ],
         ];
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function get_all_info($request, $response, $args)
     {
         $nodes = Node::where('node_ip', '<>', null)->where(
@@ -91,9 +110,14 @@ class NodeController extends BaseController
             'ret' => 1,
             'data' => $nodes
         ];
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function getConfig($request, $response, $args)
     {
         $data = $request->getParsedBody();
@@ -110,7 +134,7 @@ class NodeController extends BaseController
                 $webapiConfig = [];
                 #todo
         }
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
     private function getServerIP()

+ 29 - 11
src/Controllers/Mod_Mu/UserController.php

@@ -11,6 +11,10 @@ use App\Models\{
     NodeOnlineLog
 };
 use App\Utils\Tools;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 class UserController extends BaseController
 {
@@ -36,7 +40,7 @@ class UserController extends BaseController
                 $res = [
                     'ret' => 0
                 ];
-                return $this->echoJson($response, $res);
+                return $response->withJson($res);
             }
         }
         $node->node_heartbeat = time();
@@ -50,7 +54,7 @@ class UserController extends BaseController
                 'ret' => 1,
                 'data' => $users
             ];
-            return $this->echoJson($response, $res);
+            return $response->withJson($res);
         }
 
         if (in_array($node->sort, [0, 10]) && $node->mu_only != -1) {
@@ -120,10 +124,14 @@ class UserController extends BaseController
             'ret' => 1,
             'data' => $users
         ];
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
-    //   Update Traffic
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function addTraffic($request, $response, $args)
     {
         $params = $request->getQueryParams();
@@ -141,7 +149,7 @@ class UserController extends BaseController
             $res = [
                 'ret' => 0
             ];
-            return $this->echoJson($response, $res);
+            return $response->withJson($res);
         }
 
         if (count($data) > 0) {
@@ -165,7 +173,7 @@ class UserController extends BaseController
                         'ret' => 0,
                         'data' => 'update failed',
                     ];
-                    return $this->echoJson($response, $res);
+                    return $response->withJson($res);
                 }
             }
         }
@@ -183,9 +191,14 @@ class UserController extends BaseController
             'ret' => 1,
             'data' => 'ok',
         ];
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function addAliveIp($request, $response, $args)
     {
         $params = $request->getQueryParams();
@@ -202,7 +215,7 @@ class UserController extends BaseController
             $res = [
                 'ret' => 0
             ];
-            return $this->echoJson($response, $res);
+            return $response->withJson($res);
         }
         if (count($data) > 0) {
             foreach ($data as $log) {
@@ -223,9 +236,14 @@ class UserController extends BaseController
             'ret' => 1,
             'data' => 'ok',
         ];
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function addDetectLog($request, $response, $args)
     {
         $params = $request->getQueryParams();
@@ -242,7 +260,7 @@ class UserController extends BaseController
             $res = [
                 'ret' => 0
             ];
-            return $this->echoJson($response, $res);
+            return $response->withJson($res);
         }
 
         if (count($data) > 0) {
@@ -264,6 +282,6 @@ class UserController extends BaseController
             'ret' => 1,
             'data' => 'ok',
         ];
-        return $this->echoJson($response, $res);
+        return $response->withJson($res);
     }
 }

+ 64 - 34
src/Controllers/PasswordController.php

@@ -8,6 +8,10 @@ use App\Models\{
 };
 use App\Utils\Hash;
 use App\Services\Password;
+use Slim\Http\{
+    Request,
+    Response
+};
 
 /***
  * Class Password
@@ -16,38 +20,60 @@ use App\Services\Password;
  */
 class PasswordController extends BaseController
 {
-    public function reset()
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
+    public function reset($request, $response, $args)
     {
-        return $this->view()->display('password/reset.tpl');
+        return $response->write(
+            $this->view()->display('password/reset.tpl')
+        );
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function handleReset($request, $response, $args)
     {
-        $email = $request->getParam('email');
-        // check limit
-
-        // send email
-        $user = User::where('email', $email)->first();
+        $email = strtolower($request->getParam('email'));
+        $user  = User::where('email', $email)->first();
         if ($user == null) {
-            $rs['ret'] = 0;
-            $rs['msg'] = '此邮箱不存在.';
-            return $response->getBody()->write(json_encode($rs));
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '此邮箱不存在'
+            ]);
         }
-        $rs['ret'] = 1;
-        $rs['msg'] = '重置邮件已经发送,请检查邮箱.';
         if (Password::sendResetEmail($email)) {
-            $res['msg'] = '邮件发送失败,请联系网站管理员。';
+            $msg = '邮件发送失败,请联系网站管理员。';
         }
-
-        return $response->getBody()->write(json_encode($rs));
+        $msg = '重置邮件已经发送,请检查邮箱.';
+        return $response->withJson([
+            'ret' => 1,
+            'msg' => $msg
+        ]);
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function token($request, $response, $args)
     {
-        $token = $args['token'];
-        return $this->view()->assign('token', $token)->display('password/token.tpl');
+        return $response->write(
+            $this->view()->assign('token', $args['token'])->display('password/token.tpl')
+        );
     }
 
+    /**
+     * @param Request   $request
+     * @param Response  $response
+     * @param array     $args
+     */
     public function handleToken($request, $response, $args)
     {
         $tokenStr = $args['token'];
@@ -55,35 +81,39 @@ class PasswordController extends BaseController
         $repasswd = $request->getParam('repasswd');
 
         if ($password != $repasswd) {
-            $res['ret'] = 0;
-            $res['msg'] = '两次输入不符合';
-            return $response->getBody()->write(json_encode($res));
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '两次输入不符合'
+            ]);
         }
 
         if (strlen($password) < 8) {
-            $res['ret'] = 0;
-            $res['msg'] = '密码太短啦';
-            return $response->getBody()->write(json_encode($res));
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '密码太短啦'
+            ]);
         }
 
         // check token
         $token = PasswordReset::where('token', $tokenStr)->where('expire_time', '>', time())->orderBy('id', 'desc')->first();
         if ($token == null) {
-            $rs['ret'] = 0;
-            $rs['msg'] = '链接已经失效,请重新获取';
-            return $response->getBody()->write(json_encode($rs));
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '链接已经失效,请重新获取'
+            ]);
         }
-
-        $user = User::where('email', $token->email)->first();
+        /** @var PasswordReset $token */
+        $user = $token->getUser();
         if ($user == null) {
-            $rs['ret'] = 0;
-            $rs['msg'] = '链接已经失效,请重新获取';
-            return $response->getBody()->write(json_encode($rs));
+            return $response->withJson([
+                'ret' => 0,
+                'msg' => '链接已经失效,请重新获取'
+            ]);
         }
 
         // reset password
-        $hashPassword = Hash::passwordHash($password);
-        $user->pass = $hashPassword;
+        $hashPassword    = Hash::passwordHash($password);
+        $user->pass      = $hashPassword;
         $user->ga_enable = 0;
 
         if (!$user->save()) {
@@ -99,6 +129,6 @@ class PasswordController extends BaseController
             $token->save();
         }
 
-        return $response->write(json_encode($rs));
+        return $response->withJson($rs);
     }
 }

File diff ditekan karena terlalu besar
+ 359 - 211
src/Controllers/UserController.php


+ 8 - 0
src/Models/PasswordReset.php

@@ -6,4 +6,12 @@ class PasswordReset extends Model
 {
     protected $connection = 'default';
     protected $table = 'ss_password_reset';
+
+    /**
+     * 获取对应用户
+     */
+    public function getUser(): ?User
+    {
+        return User::where('email', $this->email)->first();
+    }
 }

+ 28 - 2
src/Models/User.php

@@ -2,6 +2,7 @@
 
 namespace App\Models;
 
+use App\Controllers\LinkController;
 use App\Utils\{
     Tools,
     Hash,
@@ -21,7 +22,6 @@ use Exception;
  * @property        bool    $expire_notified    If user is notified for expire
  * @property        bool    $traffic_notified   If user is noticed for low traffic
  */
-
 class User extends Model
 {
     protected $connection = 'default';
@@ -50,7 +50,8 @@ class User extends Model
         'is_admin'        => 'boolean',
         'is_multi_user'   => 'int',
         'node_speedlimit' => 'float',
-        'sendDailyMail'   => 'int'
+        'sendDailyMail'   => 'int',
+        'ref_by'          => 'int'
     ];
 
     /**
@@ -367,6 +368,14 @@ class User extends Model
         Link::where('userid', $this->id)->delete();
     }
 
+    /**
+     * 获取用户的订阅链接
+     */
+    public function getSublink()
+    {
+        return LinkController::GenerateSSRSubCode($this->id);
+    }
+
     /**
      * 删除用户的邀请码
      */
@@ -883,4 +892,21 @@ class User extends Model
                 break;
         }
     }
+
+    /**
+     * 记录登录 IP
+     *
+     * @param string $ip
+     * @param int    $type 登录失败为 1
+     */
+    public function collectLoginIP(string $ip, int $type = 0): bool
+    {
+        $loginip           = new LoginIp();
+        $loginip->ip       = $ip;
+        $loginip->userid   = $this->id;
+        $loginip->datetime = time();
+        $loginip->type     = $type;
+
+        return $loginip->save();
+    }
 }

+ 52 - 0
src/Services/Captcha.php

@@ -0,0 +1,52 @@
+<?php
+
+namespace App\Services;
+
+use App\Utils\Geetest;
+
+class Captcha
+{
+    public static function generate(): array
+    {
+        $geetest   = null;
+        $recaptcha = null;
+        if ($_ENV['captcha_provider'] != '') {
+            switch ($_ENV['captcha_provider']) {
+                case 'recaptcha':
+                    $recaptcha = $_ENV['recaptcha_sitekey'];
+                    break;
+                case 'geetest':
+                    $geetest = Geetest::get(time() . random_int(1, 10000));
+                    break;
+            }
+        }
+        return [
+            'geetest'   => $geetest,
+            'recaptcha' => $recaptcha
+        ];
+    }
+
+    /**
+     * 获取验证结果
+     */
+    public static function verify($param): bool
+    {
+        $result = false;
+        switch ($_ENV['captcha_provider']) {
+            case 'recaptcha':
+                if (isset($param['recaptcha'])) {
+                    if ($param['recaptcha'] != '') {
+                        $json   = file_get_contents('https://recaptcha.net/recaptcha/api/siteverify?secret=' . $_ENV['recaptcha_secret'] . '&response=' . $param['recaptcha']);
+                        $result = json_decode($json)->success;
+                    }
+                }
+                break;
+            case 'geetest':
+                if (isset($param['geetest_challenge']) && isset($param['geetest_validate']) && isset($param['geetest_seccode'])) {
+                    $result = Geetest::verify($param['geetest_challenge'], $param['geetest_validate'], $param['geetest_seccode']);
+                }
+                break;
+        }
+        return $result;
+    }
+}

+ 18 - 18
src/Services/Password.php

@@ -1,6 +1,5 @@
 <?php
 
-
 namespace App\Services;
 
 use App\Models\PasswordReset;
@@ -14,34 +13,35 @@ use Exception;
 class Password
 {
     /**
+     * 发送重置密码邮件
+     *
      * @param $email string
-     * @return bool
      */
-    public static function sendResetEmail($email)
+    public static function sendResetEmail($email): bool
     {
-        $pwdRst = new PasswordReset();
-        $pwdRst->email = $email;
-        $pwdRst->init_time = time();
-        $pwdRst->expire_time = time() + 3600 * 24; // @todo
-        $pwdRst->token = Tools::genRandomChar(64);
+        $pwdRst              = new PasswordReset();
+        $pwdRst->email       = $email;
+        $pwdRst->init_time   = time();
+        $pwdRst->expire_time = time() + 3600 * 24;
+        $pwdRst->token       = Tools::genRandomChar(64);
         if (!$pwdRst->save()) {
             return false;
         }
-        $subject = $_ENV['appName'] . '重置密码';
+        $subject  = $_ENV['appName'] . '重置密码';
         $resetUrl = $_ENV['baseUrl'] . '/password/token/' . $pwdRst->token;
         try {
-            Mail::send($email, $subject, 'password/reset.tpl', [
-                'resetUrl' => $resetUrl
-            ], [
-                //BASE_PATH.'/public/assets/email/styles.css'
-            ]);
+            Mail::send(
+                $email,
+                $subject,
+                'password/reset.tpl',
+                [
+                    'resetUrl' => $resetUrl
+                ],
+                []
+            );
         } catch (Exception $e) {
             return false;
         }
         return true;
     }
-
-    public static function resetBy($token, $password)
-    {
-    }
 }

+ 4 - 5
src/Controllers/ConfController.php → src/Utils/ConfGenerate.php

@@ -6,19 +6,18 @@
  * PHP version 7.2+
  */
 
-namespace App\Controllers;
+namespace App\Utils;
 
-use App\Utils\ConfRender;
 use Symfony\Component\Yaml\Yaml;
 use Symfony\Component\Yaml\Exception\ParseException;
 
 /**
- * ConfController
+ * ConfGenerate
  *
  * @category GeekQu
- * @package  App/Controllers/ConfController
+ * @package  App/Utils/ConfGenerate
  */
-class ConfController extends BaseController
+class ConfGenerate
 {
     /**
      * 获取匹配的节点

+ 2 - 5
src/Utils/URL.php

@@ -7,10 +7,7 @@ use App\Models\{
     Node
 };
 use App\Services\Config;
-use App\Controllers\{
-    LinkController,
-    ConfController
-};
+use App\Controllers\LinkController;
 
 class URL
 {
@@ -246,7 +243,7 @@ class URL
             if (isset($Rule['content']['regex']) && $Rule['content']['regex'] != '') {
                 // 节点名称筛选
                 if (
-                    ConfController::getMatchProxy(
+                    ConfGenerate::getMatchProxy(
                         [
                             'remark' => $node->name
                         ],

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini