瀏覽代碼

User controller refactoring

Sergio Brighenti 5 年之前
父節點
當前提交
29dd38feb9
共有 3 個文件被更改,包括 39 次插入62 次删除
  1. 26 0
      app/Controllers/Controller.php
  2. 11 60
      app/Controllers/UserController.php
  3. 2 2
      resources/templates/dashboard/system.twig

+ 26 - 0
app/Controllers/Controller.php

@@ -11,6 +11,9 @@ use DI\NotFoundException;
 use League\Flysystem\FileNotFoundException;
 use League\Flysystem\FileNotFoundException;
 use League\Flysystem\Filesystem;
 use League\Flysystem\Filesystem;
 use Monolog\Logger;
 use Monolog\Logger;
+use Psr\Http\Message\ServerRequestInterface as Request;
+use Slim\Exception\HttpNotFoundException;
+use Slim\Exception\HttpUnauthorizedException;
 use Twig\Environment;
 use Twig\Environment;
 
 
 /**
 /**
@@ -68,4 +71,27 @@ abstract class Controller
 
 
         return $totalSize;
         return $totalSize;
     }
     }
+
+    /**
+     * @param  Request  $request
+     * @param $id
+     * @param  bool  $authorize
+     * @return mixed
+     * @throws HttpNotFoundException
+     * @throws HttpUnauthorizedException
+     */
+    protected function getUser(Request $request, $id, $authorize = false)
+    {
+        $user = $this->database->query('SELECT * FROM `users` WHERE `id` = ? LIMIT 1', $id)->fetch();
+
+        if (!$user) {
+            throw new HttpNotFoundException($request);
+        }
+
+        if ($authorize && $user->id !== $this->session->get('user_id') && !$this->session->get('admin', false)) {
+            throw new HttpUnauthorizedException($request);
+        }
+
+        return $user;
+    }
 }
 }

+ 11 - 60
app/Controllers/UserController.php

@@ -114,14 +114,11 @@ class UserController extends Controller
      * @throws \Twig\Error\LoaderError
      * @throws \Twig\Error\LoaderError
      * @throws \Twig\Error\RuntimeError
      * @throws \Twig\Error\RuntimeError
      * @throws \Twig\Error\SyntaxError
      * @throws \Twig\Error\SyntaxError
+     * @throws HttpUnauthorizedException
      */
      */
     public function edit(Request $request, Response $response, int $id): Response
     public function edit(Request $request, Response $response, int $id): Response
     {
     {
-        $user = $this->database->query('SELECT * FROM `users` WHERE `id` = ? LIMIT 1', $id)->fetch();
-
-        if (!$user) {
-            throw new HttpNotFoundException($request);
-        }
+        $user = $this->getUser($request, $id, false);
 
 
         return view()->render($response, 'user/edit.twig', [
         return view()->render($response, 'user/edit.twig', [
             'profile' => false,
             'profile' => false,
@@ -135,14 +132,11 @@ class UserController extends Controller
      * @param  int  $id
      * @param  int  $id
      * @return Response
      * @return Response
      * @throws HttpNotFoundException
      * @throws HttpNotFoundException
+     * @throws HttpUnauthorizedException
      */
      */
     public function update(Request $request, Response $response, int $id): Response
     public function update(Request $request, Response $response, int $id): Response
     {
     {
-        $user = $this->database->query('SELECT * FROM `users` WHERE `id` = ? LIMIT 1', $id)->fetch();
-
-        if (!$user) {
-            throw new HttpNotFoundException($request);
-        }
+        $user = $this->getUser($request, $id, false);
 
 
         if (param($request, 'email') === null) {
         if (param($request, 'email') === null) {
             $this->session->alert(lang('email_required'), 'danger');
             $this->session->alert(lang('email_required'), 'danger');
@@ -204,14 +198,11 @@ class UserController extends Controller
      * @param  int  $id
      * @param  int  $id
      * @return Response
      * @return Response
      * @throws HttpNotFoundException
      * @throws HttpNotFoundException
+     * @throws HttpUnauthorizedException
      */
      */
     public function delete(Request $request, Response $response, int $id): Response
     public function delete(Request $request, Response $response, int $id): Response
     {
     {
-        $user = $this->database->query('SELECT * FROM `users` WHERE `id` = ? LIMIT 1', $id)->fetch();
-
-        if (!$user) {
-            throw new HttpNotFoundException($request, $response);
-        }
+        $user = $this->getUser($request, $id, false);
 
 
         if ($user->id === $this->session->get('user_id')) {
         if ($user->id === $this->session->get('user_id')) {
             $this->session->alert(lang('cannot_delete'), 'danger');
             $this->session->alert(lang('cannot_delete'), 'danger');
@@ -238,15 +229,7 @@ class UserController extends Controller
      */
      */
     public function profile(Request $request, Response $response): Response
     public function profile(Request $request, Response $response): Response
     {
     {
-        $user = $this->database->query('SELECT * FROM `users` WHERE `id` = ? LIMIT 1', $this->session->get('user_id'))->fetch();
-
-        if (!$user) {
-            throw new HttpNotFoundException($request);
-        }
-
-        if ($user->id !== $this->session->get('user_id') && !$this->session->get('admin', false)) {
-            throw new HttpUnauthorizedException($request);
-        }
+        $user = $this->getUser($request, $this->session->get('user_id'), true);
 
 
         return view()->render($response, 'user/edit.twig', [
         return view()->render($response, 'user/edit.twig', [
             'profile' => true,
             'profile' => true,
@@ -264,15 +247,7 @@ class UserController extends Controller
      */
      */
     public function profileEdit(Request $request, Response $response, int $id): Response
     public function profileEdit(Request $request, Response $response, int $id): Response
     {
     {
-        $user = $this->database->query('SELECT * FROM `users` WHERE `id` = ? LIMIT 1', $id)->fetch();
-
-        if (!$user) {
-            throw new HttpNotFoundException($request, $response);
-        }
-
-        if ($user->id !== $this->session->get('user_id') && !$this->session->get('admin', false)) {
-            throw new HttpUnauthorizedException($request);
-        }
+        $user = $this->getUser($request, $id, true);
 
 
         if (param($request, 'email') === null) {
         if (param($request, 'email') === null) {
             $this->session->alert(lang('email_required'), 'danger');
             $this->session->alert(lang('email_required'), 'danger');
@@ -313,15 +288,7 @@ class UserController extends Controller
      */
      */
     public function refreshToken(Request $request, Response $response, int $id): Response
     public function refreshToken(Request $request, Response $response, int $id): Response
     {
     {
-        $user = $this->database->query('SELECT * FROM `users` WHERE `id` = ? LIMIT 1', $id)->fetch();
-
-        if (!$user) {
-            throw new HttpNotFoundException($request, $response);
-        }
-
-        if ($user->id !== $this->session->get('user_id') && !$this->session->get('admin', false)) {
-            throw new HttpUnauthorizedException($request);
-        }
+        $user = $this->getUser($request, $id, true);
 
 
         $token = $this->generateNewToken();
         $token = $this->generateNewToken();
 
 
@@ -347,15 +314,7 @@ class UserController extends Controller
      */
      */
     public function getShareXconfigFile(Request $request, Response $response, int $id): Response
     public function getShareXconfigFile(Request $request, Response $response, int $id): Response
     {
     {
-        $user = $this->database->query('SELECT * FROM `users` WHERE `id` = ? LIMIT 1', $id)->fetch();
-
-        if (!$user) {
-            throw new HttpNotFoundException($request, $response);
-        }
-
-        if ($user->id !== $this->session->get('user_id') && !$this->session->get('admin', false)) {
-            throw new HttpUnauthorizedException($request);
-        }
+        $user = $this->getUser($request, $id, true);
 
 
         if ($user->token === null || $user->token === '') {
         if ($user->token === null || $user->token === '') {
             $this->session->alert(lang('no_upload_token'), 'danger');
             $this->session->alert(lang('no_upload_token'), 'danger');
@@ -393,15 +352,7 @@ class UserController extends Controller
      */
      */
     public function getUploaderScriptFile(Request $request, Response $response, int $id): Response
     public function getUploaderScriptFile(Request $request, Response $response, int $id): Response
     {
     {
-        $user = $this->database->query('SELECT * FROM `users` WHERE `id` = ? LIMIT 1', $id)->fetch();
-
-        if (!$user) {
-            throw new HttpNotFoundException($request, $response);
-        }
-
-        if ($user->id !== $this->session->get('user_id') && !$this->session->get('admin', false)) {
-            throw new HttpUnauthorizedException($request);
-        }
+        $user = $this->getUser($request, $id, true);
 
 
         if ($user->token === null || $user->token === '') {
         if ($user->token === null || $user->token === '') {
             $this->session->alert(lang('no_upload_token'), 'danger');
             $this->session->alert(lang('no_upload_token'), 'danger');

+ 2 - 2
resources/templates/dashboard/system.twig

@@ -53,9 +53,9 @@
             </div>
             </div>
         </div>
         </div>
         <div class="row">
         <div class="row">
-            <div class="col-md-8 mt-3">
+            <div class="col-md-8">
                 <div class="row same-height-container">
                 <div class="row same-height-container">
-                    <div class="col-md-6">
+                    <div class="col-md-6 mt-3">
                         <div class="card shadow-sm same-height">
                         <div class="card shadow-sm same-height">
                             <div class="card-header"><i class="fas fa-paint-brush fa-fw"></i> {{ lang('theme') }}</div>
                             <div class="card-header"><i class="fas fa-paint-brush fa-fw"></i> {{ lang('theme') }}</div>
                             <div class="card-body">
                             <div class="card-body">