diff --git a/src/App/Adapters/WebAppAdapter.php b/src/App/Adapters/WebAppAdapter.php index 6a08a0b18..57528cf0c 100644 --- a/src/App/Adapters/WebAppAdapter.php +++ b/src/App/Adapters/WebAppAdapter.php @@ -82,7 +82,8 @@ public function start(): ?int $this->logDebugInfo(); - [$request, $response] = (new MiddlewareManager($matchedRoute))->applyMiddlewares(request(), response()); + $response = (new MiddlewareManager($matchedRoute))->applyMiddlewares(request(), response()); + $request = request(); if ($this->setupViewCache()->serveCachedView(request()->getUri() ?? '', $response)) { stop(); diff --git a/src/Http/Helpers/http.php b/src/Http/Helpers/http.php index 2832d5db2..efb01fc51 100644 --- a/src/Http/Helpers/http.php +++ b/src/Http/Helpers/http.php @@ -12,7 +12,6 @@ * @since 3.0.0 */ -use Quantum\App\Exceptions\StopExecutionException; use Quantum\Config\Exceptions\ConfigException; use Quantum\App\Exceptions\BaseException; use Quantum\Di\Exceptions\DiException; @@ -25,7 +24,6 @@ /** * Gets the Request instance from DI - * @throws DiException|ReflectionException */ function request(): Request { @@ -38,7 +36,6 @@ function request(): Request /** * Gets the Response instance from DI - * @throws DiException|ReflectionException */ function response(): Response { @@ -70,11 +67,11 @@ function current_url(): string /** * Redirect - * @throws StopExecutionException|DiException|ReflectionException + * @throws DiException|ReflectionException */ -function redirect(string $url, int $code = StatusCode::FOUND): void +function redirect(string $url, int $code = StatusCode::FOUND): Response { - response()->redirect($url, $code); + return response()->redirect($url, $code); } /** @@ -82,10 +79,10 @@ function redirect(string $url, int $code = StatusCode::FOUND): void * @param array $data * @throws ConfigException|DiException|BaseException|ReflectionException */ -function redirectWith(string $url, array $data, int $code = StatusCode::FOUND): void +function redirectWith(string $url, array $data, int $code = StatusCode::FOUND): Response { session()->set(ReservedKeys::PREV_REQUEST, $data); - response()->redirect($url, $code); + return response()->redirect($url, $code); } /** diff --git a/src/Http/Traits/Response/Header.php b/src/Http/Traits/Response/Header.php index c0394be0d..ba29cf4ac 100644 --- a/src/Http/Traits/Response/Header.php +++ b/src/Http/Traits/Response/Header.php @@ -16,7 +16,6 @@ namespace Quantum\Http\Traits\Response; -use Quantum\App\Exceptions\StopExecutionException; use Quantum\Http\Enums\ContentType; /** @@ -93,12 +92,12 @@ public function getContentType(): string /** * Redirect - * @throws StopExecutionException + * @return self */ - public function redirect(string $url, int $code = 302): void + public function redirect(string $url, int $code = 302): self { $this->setStatusCode($code); $this->setHeader('Location', $url); - stop(); + return $this; } } diff --git a/src/Middleware/MiddlewareManager.php b/src/Middleware/MiddlewareManager.php index a01d96376..b37792a1e 100644 --- a/src/Middleware/MiddlewareManager.php +++ b/src/Middleware/MiddlewareManager.php @@ -50,23 +50,21 @@ public function __construct(MatchedRoute $matchedRoute) /** * Apply Middlewares - * @return array{0: Request, 1: Response} + * @return Response * @throws MiddlewareException|BaseException|ReflectionException */ - public function applyMiddlewares(Request $request, Response $response): array + public function applyMiddlewares(Request $request, Response $response): Response { if (!current($this->middlewares)) { - return [$request, $response]; + return $response; } $currentMiddleware = $this->getMiddleware($request, $response); + next($this->middlewares); - [$request, $response] = $currentMiddleware->apply($request, $response, function ($request, $response): array { - next($this->middlewares); - return [$request, $response]; + return $currentMiddleware->apply($request, $response, function (Request $request, Response $response): Response { + return $this->applyMiddlewares($request, $response); }); - - return $this->applyMiddlewares($request, $response); } /** diff --git a/src/Middleware/QtMiddleware.php b/src/Middleware/QtMiddleware.php index e199c6fd2..93e178f54 100644 --- a/src/Middleware/QtMiddleware.php +++ b/src/Middleware/QtMiddleware.php @@ -27,12 +27,8 @@ abstract class QtMiddleware { /** - * Apply - * * Applies the middleware - * - * @return mixed */ - abstract public function apply(Request $request, Response $response, Closure $next); + abstract public function apply(Request $request, Response $response, Closure $next): Response; } diff --git a/src/Module/Templates/DefaultApi/src/Controllers/MainController.php.tpl b/src/Module/Templates/DefaultApi/src/Controllers/MainController.php.tpl index d911852a2..f57608cbe 100644 --- a/src/Module/Templates/DefaultApi/src/Controllers/MainController.php.tpl +++ b/src/Module/Templates/DefaultApi/src/Controllers/MainController.php.tpl @@ -42,9 +42,9 @@ class MainController * Action - success response * @param Response $response */ - public function index(Response $response) + public function index(Response $response): Response { - $response->json([ + return $response->json([ 'status' => 'success', 'message' => '{{MODULE_NAME}} module.' ]); diff --git a/src/Module/Templates/DefaultWeb/src/Controllers/MainController.php.tpl b/src/Module/Templates/DefaultWeb/src/Controllers/MainController.php.tpl index a745f1f41..02936a4ec 100644 --- a/src/Module/Templates/DefaultWeb/src/Controllers/MainController.php.tpl +++ b/src/Module/Templates/DefaultWeb/src/Controllers/MainController.php.tpl @@ -47,12 +47,12 @@ class MainController * @param Response $response * @param ViewFactory $view */ - public function index(Response $response, ViewFactory $view) + public function index(Response $response, ViewFactory $view): Response { $view->setParams([ 'title' => config()->get('app.name'), ]); - $response->html($view->render('index')); + return $response->html($view->render('index')); } } \ No newline at end of file diff --git a/src/Module/Templates/DemoApi/src/Controllers/AccountController.php.tpl b/src/Module/Templates/DemoApi/src/Controllers/AccountController.php.tpl index 4e01801e2..b66c73e5b 100644 --- a/src/Module/Templates/DemoApi/src/Controllers/AccountController.php.tpl +++ b/src/Module/Templates/DemoApi/src/Controllers/AccountController.php.tpl @@ -46,7 +46,7 @@ class AccountController extends BaseController * @param Request $request * @param Response $response */ - public function update(Request $request, Response $response) + public function update(Request $request, Response $response): Response { try { $firstname = $request->get('firstname'); @@ -59,12 +59,12 @@ class AccountController extends BaseController auth()->refreshUser(auth()->user()->uuid); - $response->json([ + return $response->json([ 'status' => self::STATUS_SUCCESS, 'message' => t('common.updated_successfully') ]); } catch (AuthException $e) { - $response->json([ + return $response->json([ 'status' => self::STATUS_ERROR, 'message' => $e->getMessage() ]); @@ -76,7 +76,7 @@ class AccountController extends BaseController * @param Request $request * @param Response $response */ - public function updatePassword(Request $request, Response $response) + public function updatePassword(Request $request, Response $response): Response { try { $hasher = new Hasher(); @@ -87,12 +87,12 @@ class AccountController extends BaseController 'password' => $hasher->hash($newPassword) ]); - $response->json([ + return $response->json([ 'status' => self::STATUS_SUCCESS, 'message' => t('common.updated_successfully') ]); } catch (AuthException $e) { - $response->json([ + return $response->json([ 'status' => self::STATUS_ERROR, 'message' => $e->getMessage() ]); diff --git a/src/Module/Templates/DemoApi/src/Controllers/AuthController.php.tpl b/src/Module/Templates/DemoApi/src/Controllers/AuthController.php.tpl index aa1f7aacd..7a68098bc 100644 --- a/src/Module/Templates/DemoApi/src/Controllers/AuthController.php.tpl +++ b/src/Module/Templates/DemoApi/src/Controllers/AuthController.php.tpl @@ -32,8 +32,9 @@ class AuthController extends BaseController * Action - sign in * @param Request $request * @param Response $response + * @return Response */ - public function signin(Request $request, Response $response) + public function signin(Request $request, Response $response): Response { try { $code = auth()->signin($request->get('email'), $request->get('password')); @@ -42,11 +43,11 @@ class AuthController extends BaseController $response->set('code', $code); } - $response->json([ + return $response->json([ 'status' => self::STATUS_SUCCESS ]); } catch (AuthException $e) { - $response->json([ + return $response->json([ 'status' => self::STATUS_ERROR, 'message' => $e->getMessage() ], StatusCode::UNPROCESSABLE_ENTITY); @@ -56,10 +57,11 @@ class AuthController extends BaseController /** * Action - me * @param Response $response + * @return Response */ - public function me(Response $response) + public function me(Response $response): Response { - $response->json([ + return $response->json([ 'status' => self::STATUS_SUCCESS, 'data' => [ 'firstname' => auth()->user()->firstname, @@ -72,15 +74,16 @@ class AuthController extends BaseController /** * Action - sign out * @param Response $response + * @return Response */ - public function signout(Response $response) + public function signout(Response $response): Response { if (auth()->signout()) { - $response->json([ + return $response->json([ 'status' => self::STATUS_SUCCESS ]); } else { - $response->json([ + return $response->json([ 'status' => self::STATUS_ERROR, 'message' => t('validation.unauthorizedRequest') ], StatusCode::UNAUTHORIZED); @@ -91,14 +94,15 @@ class AuthController extends BaseController * Action - sign up * @param Request $request * @param Response $response + * @return Response */ - public function signup(Request $request, Response $response) + public function signup(Request $request, Response $response): Response { $userDto = UserDTO::fromRequest($request, Role::EDITOR, uuid_ordered()); auth()->signup($userDto->toArray()); - $response->json([ + return $response->json([ 'status' => self::STATUS_SUCCESS, 'message' => t('common.successfully_signed_up') ]); @@ -108,12 +112,13 @@ class AuthController extends BaseController * Action - activate * @param Request $request * @param Response $response + * @return Response */ - public function activate(Request $request, Response $response) + public function activate(Request $request, Response $response): Response { auth()->activate($request->get('activation_token')); - $response->json([ + return $response->json([ 'status' => self::STATUS_SUCCESS, 'message' => t('common.account_activated') ]); @@ -123,12 +128,13 @@ class AuthController extends BaseController * Action - forget * @param Request $request * @param Response $response + * @return Response */ - public function forget(Request $request, Response $response) + public function forget(Request $request, Response $response): Response { auth()->forget($request->get('email')); - $response->json([ + return $response->json([ 'status' => self::STATUS_SUCCESS, 'message' => t('common.check_email') ]); @@ -138,12 +144,13 @@ class AuthController extends BaseController * Action - reset * @param Request $request * @param Response $response + * @return Response */ - public function reset(Request $request, Response $response) + public function reset(Request $request, Response $response): Response { auth()->reset($request->get('reset_token'), $request->get('password')); - $response->json([ + return $response->json([ 'status' => self::STATUS_SUCCESS ]); } @@ -152,17 +159,18 @@ class AuthController extends BaseController * Action - Verify OTP * @param Request $request * @param Response $response + * @return Response */ - public function verify(Request $request, Response $response) + public function verify(Request $request, Response $response): Response { try { auth()->verifyOtp((int)$request->get('otp'), $request->get('code')); - $response->json([ + return $response->json([ 'status' => self::STATUS_SUCCESS ]); } catch (AuthException $e) { - $response->json([ + return $response->json([ 'status' => self::STATUS_ERROR, 'message' => $e->getMessage() ], StatusCode::UNAUTHORIZED); @@ -172,16 +180,17 @@ class AuthController extends BaseController /** * Action - Resend OTP * @param Response $response + * @return Response */ - public function resend(Response $response) + public function resend(Response $response): Response { try { - $response->json([ + return $response->json([ 'status' => self::STATUS_SUCCESS, 'code' => auth()->resendOtp(route_param('code')) ]); } catch (AuthException $e) { - $response->json([ + return $response->json([ 'status' => self::STATUS_ERROR, 'message' => $e->getMessage() ], StatusCode::UNAUTHORIZED); diff --git a/src/Module/Templates/DemoApi/src/Controllers/CommentController.php.tpl b/src/Module/Templates/DemoApi/src/Controllers/CommentController.php.tpl index d59430df9..f1d0b0307 100644 --- a/src/Module/Templates/DemoApi/src/Controllers/CommentController.php.tpl +++ b/src/Module/Templates/DemoApi/src/Controllers/CommentController.php.tpl @@ -43,13 +43,13 @@ class CommentController extends BaseController * @param string|null $lang * @param string $uuid */ - public function create(Request $request, Response $response, ?string $lang, string $uuid) + public function create(Request $request, Response $response, ?string $lang, string $uuid): Response { $commentDto = CommentDTO::fromRequest($request, $uuid, auth()->user()->uuid); $comment = $this->commentService->addComment($commentDto); - $response->json([ + return $response->json([ 'status' => 'success', 'message' => t('common.created_successfully'), 'data' => $comment @@ -62,11 +62,11 @@ class CommentController extends BaseController * @param string|null $lang * @param string $uuid */ - public function delete(Response $response, ?string $lang, string $uuid) + public function delete(Response $response, ?string $lang, string $uuid): Response { $this->commentService->deleteComment($uuid); - $response->json([ + return $response->json([ 'status' => 'success', 'message' => t('common.deleted_successfully'), ]); diff --git a/src/Module/Templates/DemoApi/src/Controllers/PostController.php.tpl b/src/Module/Templates/DemoApi/src/Controllers/PostController.php.tpl index 4b7258059..ae4fca8a9 100644 --- a/src/Module/Templates/DemoApi/src/Controllers/PostController.php.tpl +++ b/src/Module/Templates/DemoApi/src/Controllers/PostController.php.tpl @@ -54,8 +54,9 @@ class PostController extends BaseController * Action - get posts list * @param Request $request * @param Response $response + * @return Response */ - public function posts(Request $request, Response $response) + public function posts(Request $request, Response $response): Response { $perPage = $request->get('per_page', (string) self::POSTS_PER_PAGE); $currentPage = $request->get('page', (string) self::CURRENT_PAGE); @@ -63,7 +64,7 @@ class PostController extends BaseController $paginatedPosts = $this->postService->getPosts($perPage, $currentPage, $search); - $response->json([ + return $response->json([ 'status' => 'success', 'data' => $this->postService->transformData($paginatedPosts->data()->all()), 'pagination' => [ @@ -80,18 +81,17 @@ class PostController extends BaseController * @param Response $response * @param string|null $lang * @param string $postUuid + * @return Response */ - public function post(Response $response, ?string $lang, string $postUuid) + public function post(Response $response, ?string $lang, string $postUuid): Response { $post = $this->postService->getPost($postUuid); if ($post->isEmpty()) { - $response->json([ + return $response->json([ 'status' => 'error', 'message' => t('common.post_not_found') ], StatusCode::NOT_FOUND); - - stop(); } $postData = current($this->postService->transformData([$post])); @@ -104,7 +104,7 @@ class PostController extends BaseController $postData['comments'] = $commentsData; - $response->json([ + return $response->json([ 'status' => 'success', 'data' => $postData, ]); diff --git a/src/Module/Templates/DemoApi/src/Controllers/PostManagementController.php.tpl b/src/Module/Templates/DemoApi/src/Controllers/PostManagementController.php.tpl index 54f7116e2..3a2af8a5d 100644 --- a/src/Module/Templates/DemoApi/src/Controllers/PostManagementController.php.tpl +++ b/src/Module/Templates/DemoApi/src/Controllers/PostManagementController.php.tpl @@ -43,12 +43,13 @@ class PostManagementController extends BaseController /** * Action - get my posts * @param Response $response + * @return Response */ - public function myPosts(Response $response) + public function myPosts(Response $response): Response { $myPosts = $this->postService->getMyPosts(auth()->user()->uuid); - $response->json([ + return $response->json([ 'status' => 'success', 'data' => $this->postService->transformData($myPosts->all()) ]); @@ -58,8 +59,9 @@ class PostManagementController extends BaseController * Action - create post * @param Request $request * @param Response $response + * @return Response */ - public function create(Request $request, Response $response) + public function create(Request $request, Response $response): Response { $imageName = ''; @@ -75,7 +77,7 @@ class PostManagementController extends BaseController $post = $this->postService->addPost($postDto); - $response->json([ + return $response->json([ 'status' => 'success', 'message' => t('common.created_successfully'), 'data' => current($this->postService->transformData([$post])) @@ -88,8 +90,9 @@ class PostManagementController extends BaseController * @param Response $response * @param string|null $lang * @param string $postUuid + * @return Response */ - public function amend(Request $request, Response $response, ?string $lang, string $postUuid) + public function amend(Request $request, Response $response, ?string $lang, string $postUuid): Response { $post = $this->postService->getPost($postUuid); @@ -111,7 +114,7 @@ class PostManagementController extends BaseController $post = $this->postService->updatePost($postUuid, $postDto); - $response->json([ + return $response->json([ 'status' => 'success', 'message' => t('common.updated_successfully'), 'data' => current($this->postService->transformData([$post])) @@ -123,8 +126,9 @@ class PostManagementController extends BaseController * @param Response $response * @param string|null $lang * @param string $postUuid + * @return Response */ - public function delete(Response $response, ?string $lang, string $postUuid) + public function delete(Response $response, ?string $lang, string $postUuid): Response { $post = $this->postService->getPost($postUuid); @@ -134,7 +138,7 @@ class PostManagementController extends BaseController $this->postService->deletePost($postUuid); - $response->json([ + return $response->json([ 'status' => 'success', 'message' => t('common.deleted_successfully') ]); @@ -145,8 +149,9 @@ class PostManagementController extends BaseController * @param Response $response * @param string|null $lang * @param string $postUuid + * @return Response */ - public function deleteImage(Response $response, ?string $lang, string $postUuid) + public function deleteImage(Response $response, ?string $lang, string $postUuid): Response { $post = $this->postService->getPost($postUuid); @@ -163,7 +168,7 @@ class PostManagementController extends BaseController $this->postService->updatePost($postUuid, $postDto); - $response->json([ + return $response->json([ 'status' => 'success', 'message' => t('common.deleted_successfully') ]); diff --git a/src/Module/Templates/DemoApi/src/Middlewares/Activate.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/Activate.php.tpl index 943f9e18a..2a5bada92 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/Activate.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/Activate.php.tpl @@ -31,15 +31,17 @@ class Activate extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { $token = (string)route_param('token'); $request->set('token', $token); - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } $request->set('activation_token', $token); diff --git a/src/Module/Templates/DemoApi/src/Middlewares/Auth.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/Auth.php.tpl index e0e7ec93a..6507d3d6c 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/Auth.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/Auth.php.tpl @@ -30,9 +30,9 @@ class Auth extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if (!auth()->check()) { $this->respondWithError( diff --git a/src/Module/Templates/DemoApi/src/Middlewares/BaseMiddleware.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/BaseMiddleware.php.tpl index adcca4351..cdbea3d0b 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/BaseMiddleware.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/BaseMiddleware.php.tpl @@ -57,12 +57,15 @@ abstract class BaseMiddleware extends QtMiddleware * Validate the request and respond with error if invalid. * @param Request $request * @param Response $response + * @return Response|null */ - protected function validateRequest(Request $request, Response $response) + protected function validateRequest(Request $request, Response $response): ?Response { if (!$this->validator->isValid($request->all())) { - $this->respondWithError($request, $response, $this->validator->getErrors()); + return $this->respondWithError($request, $response, $this->validator->getErrors()); } + + return null; } /** @@ -71,19 +74,18 @@ abstract class BaseMiddleware extends QtMiddleware * @param Response $response * @param mixed $message * @param int $status + * @return Response */ protected function respondWithError( Request $request, Response $response, $message, int $status = StatusCode::UNPROCESSABLE_ENTITY - ) + ): Response { - $response->json([ + return $response->json([ 'status' => 'error', 'message' => $message, ], $status); - - stop(); } } diff --git a/src/Module/Templates/DemoApi/src/Middlewares/Comment.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/Comment.php.tpl index a59e3a58b..14f215f6f 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/Comment.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/Comment.php.tpl @@ -31,9 +31,12 @@ class Comment extends BaseMiddleware * @param Response $response * @param Closure $next */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } + return $next($request, $response); } diff --git a/src/Module/Templates/DemoApi/src/Middlewares/CommentOwner.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/CommentOwner.php.tpl index 74042752b..73b9602f3 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/CommentOwner.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/CommentOwner.php.tpl @@ -31,15 +31,17 @@ class CommentOwner extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { $uuid = (string)route_param('uuid'); $request->set('uuid', $uuid); - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } return $next($request, $response); } diff --git a/src/Module/Templates/DemoApi/src/Middlewares/Editor.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/Editor.php.tpl index da41bbe88..f780127ba 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/Editor.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/Editor.php.tpl @@ -46,12 +46,12 @@ class Editor extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if (!in_array(auth()->user()->role, self::ROLES)) { - $this->respondWithError( + return $this->respondWithError( $request, $response, t('validation.unauthorizedRequest'), @@ -60,7 +60,9 @@ class Editor extends BaseMiddleware } if ($request->isMethod('post') || $request->isMethod('put')) { - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } } return $next($request, $response); diff --git a/src/Module/Templates/DemoApi/src/Middlewares/Forget.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/Forget.php.tpl index c64c9cbf6..279194d95 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/Forget.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/Forget.php.tpl @@ -32,12 +32,14 @@ class Forget extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if ($request->isMethod('post')) { - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } } return $next($request, $response); diff --git a/src/Module/Templates/DemoApi/src/Middlewares/Password.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/Password.php.tpl index eb40ec0ef..f436ff100 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/Password.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/Password.php.tpl @@ -33,10 +33,12 @@ class Password extends BaseMiddleware * @param Response $response * @param Closure $next */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if ($request->isMethod('post')) { - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } } return $next($request, $response); diff --git a/src/Module/Templates/DemoApi/src/Middlewares/PostOwner.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/PostOwner.php.tpl index 4ccd417c6..9701d8a6d 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/PostOwner.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/PostOwner.php.tpl @@ -31,15 +31,17 @@ class PostOwner extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { $uuid = (string)route_param('uuid'); $request->set('uuid', $uuid); - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } return $next($request, $response); } diff --git a/src/Module/Templates/DemoApi/src/Middlewares/Resend.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/Resend.php.tpl index 8a1928321..3aa1bd888 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/Resend.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/Resend.php.tpl @@ -31,15 +31,17 @@ class Resend extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { $code = (string) route_param('code'); $request->set('code', $code); - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } return $next($request, $response); } diff --git a/src/Module/Templates/DemoApi/src/Middlewares/Reset.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/Reset.php.tpl index ca44813e3..6ecd9526c 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/Reset.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/Reset.php.tpl @@ -31,15 +31,17 @@ class Reset extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { $token = (string) route_param('token'); $request->set('token', $token); - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } $request->set('reset_token', $token); diff --git a/src/Module/Templates/DemoApi/src/Middlewares/Signout.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/Signout.php.tpl index 269f2cc82..5e1404492 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/Signout.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/Signout.php.tpl @@ -29,9 +29,9 @@ class Signout extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if (!$request->hasHeader('refresh_token')) { $this->respondWithError( diff --git a/src/Module/Templates/DemoApi/src/Middlewares/Signup.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/Signup.php.tpl index 3e9578d1b..1f2d41032 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/Signup.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/Signup.php.tpl @@ -32,11 +32,13 @@ class Signup extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } return $next($request, $response); } diff --git a/src/Module/Templates/DemoApi/src/Middlewares/Update.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/Update.php.tpl index 71dd6d648..6f3ca6e69 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/Update.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/Update.php.tpl @@ -32,10 +32,12 @@ class Update extends BaseMiddleware * @param Response $response * @param Closure $next */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if ($request->isMethod('post')) { - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } } return $next($request, $response); diff --git a/src/Module/Templates/DemoApi/src/Middlewares/Verify.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/Verify.php.tpl index e83c77748..ae237a2eb 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/Verify.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/Verify.php.tpl @@ -32,12 +32,14 @@ class Verify extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if ($request->isMethod('post')) { - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } } return $next($request, $response); diff --git a/src/Module/Templates/DemoWeb/src/Controllers/AccountController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/AccountController.php.tpl index 930e9202f..dca04a15e 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/AccountController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/AccountController.php.tpl @@ -45,21 +45,23 @@ class AccountController extends BaseController /** * Action - show user info * @param Response $response + * @return Response */ - public function form(Response $response) + public function form(Response $response): Response { $this->view->setParams([ 'title' => t('common.account_settings') . ' | ' . config()->get('app.name'), ]); - $response->html($this->view->render('account/form')); + return $response->html($this->view->render('account/form')); } /** * Action - update user info - * @param Request $request + * @param Request $request + * @return Response */ - public function update(Request $request) + public function update(Request $request): Response { $firstname = $request->get('firstname'); $lastname = $request->get('lastname'); @@ -71,14 +73,15 @@ class AccountController extends BaseController auth()->refreshUser(auth()->user()->uuid); - redirect(base_url(true) . '/' . current_lang() . '/account-settings#account_profile'); + return redirect(base_url(true) . '/' . current_lang() . '/account-settings#account_profile'); } /** * Action - update password - * @param Request $request + * @param Request $request + * @return Response */ - public function updatePassword(Request $request) + public function updatePassword(Request $request): Response { $hasher = new Hasher(); @@ -88,6 +91,6 @@ class AccountController extends BaseController 'password' => $hasher->hash($newPassword) ]); - redirect(base_url(true) . '/' . current_lang() . '/account-settings#account_password'); + return redirect(base_url(true) . '/' . current_lang() . '/account-settings#account_password'); } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Controllers/AuthController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/AuthController.php.tpl index 174c8c2eb..e043193c7 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/AuthController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/AuthController.php.tpl @@ -61,46 +61,49 @@ class AuthController extends BaseController * Action - sign in * @param Request $request * @param Response $response + * @return Response */ - public function signin(Request $request, Response $response) + public function signin(Request $request, Response $response): Response { if ($request->isMethod('post')) { try { $code = auth()->signin($request->get('email'), $request->get('password'), !!$request->get('remember')); if (filter_var(config()->get('auth.two_fa'), FILTER_VALIDATE_BOOLEAN)) { - redirect(base_url(true) . '/' . current_lang() . '/verify/' . $code); + return redirect(base_url(true) . '/' . current_lang() . '/verify/' . $code); } else { - redirect(base_url(true) . '/' . current_lang()); + return redirect(base_url(true) . '/' . current_lang()); } } catch (AuthException $e) { session()->setFlash('error', $e->getMessage()); - redirect(base_url(true) . '/' . current_lang() . '/signin'); + return redirect(base_url(true) . '/' . current_lang() . '/signin'); } } else { $this->view->setParams([ 'title' => t('common.signin') . ' | ' . config()->get('app.name'), ]); - $response->html($this->view->render(self::VIEW_SIGNIN)); + return $response->html($this->view->render(self::VIEW_SIGNIN)); } } /** * Action - sign out + * @return Response */ - public function signout() + public function signout(): Response { auth()->signout(); - redirect(base_url(true) . '/' . current_lang()); + return redirect(base_url(true) . '/' . current_lang()); } /** * Action - sign up * @param Request $request * @param Response $response + * @return Response */ - public function signup(Request $request, Response $response) + public function signup(Request $request, Response $response): Response { if ($request->isMethod('post')) { $userDto = UserDTO::fromRequest($request, Role::EDITOR, uuid_ordered()); @@ -108,44 +111,46 @@ class AuthController extends BaseController auth()->signup($userDto->toArray()); session()->setFlash('success', t('common.check_email_signup')); - redirect(base_url(true) . '/' . current_lang() . '/signup'); + return redirect(base_url(true) . '/' . current_lang() . '/signup'); } else { $this->view->setParams([ // 'captcha' => captcha(), 'title' => t('common.signup') . ' | ' . config()->get('app.name'), ]); - $response->html($this->view->render(self::VIEW_SIGNUP)); + return $response->html($this->view->render(self::VIEW_SIGNUP)); } } /** * Action - activate * @param Request $request + * @return Response */ - public function activate(Request $request) + public function activate(Request $request): Response { auth()->activate($request->get('activation_token')); - redirect(base_url(true) . '/' . current_lang() . '/signin'); + return redirect(base_url(true) . '/' . current_lang() . '/signin'); } /** * Action - forget * @param Request $request * @param Response $response + * @return Response */ - public function forget(Request $request, Response $response) + public function forget(Request $request, Response $response): Response { if ($request->isMethod('post')) { auth()->forget($request->get('email')); session()->setFlash('success', t('common.check_email')); - redirect(base_url(true) . '/' . current_lang() . '/forget'); + return redirect(base_url(true) . '/' . current_lang() . '/forget'); } else { $this->view->setParams([ 'title' => t('common.forget_password') . ' | ' . config()->get('app.name'), ]); - $response->html($this->view->render(self::VIEW_FORGET)); + return $response->html($this->view->render(self::VIEW_FORGET)); } } @@ -153,19 +158,20 @@ class AuthController extends BaseController * Action - reset * @param Request $request * @param Response $response + * @return Response */ - public function reset(Request $request, Response $response) + public function reset(Request $request, Response $response): Response { if ($request->isMethod('post')) { auth()->reset($request->get('reset_token'), $request->get('password')); - redirect(base_url(true) . '/' . current_lang() . '/signin'); + return redirect(base_url(true) . '/' . current_lang() . '/signin'); } else { $this->view->setParams([ 'title' => t('common.reset_password') . ' | ' . config()->get('app.name'), 'reset_token' => $request->get('reset_token') ]); - $response->html($this->view->render(self::VIEW_RESET)); + return $response->html($this->view->render(self::VIEW_RESET)); } } @@ -173,16 +179,17 @@ class AuthController extends BaseController * Action - Verify OTP * @param Request $request * @param Response $response + * @return Response */ - public function verify(Request $request, Response $response) + public function verify(Request $request, Response $response): Response { if ($request->isMethod('post')) { try { auth()->verifyOtp((int)$request->get('otp'), $request->get('code')); - redirect(base_url(true) . '/' . current_lang()); + return redirect(base_url(true) . '/' . current_lang()); } catch (AuthException $e) { session()->setFlash('error', $e->getMessage()); - redirect(base_url(true) . '/' . current_lang() . '/verify/' . $request->get('code')); + return redirect(base_url(true) . '/' . current_lang() . '/verify/' . $request->get('code')); } } else { $this->view->setParams([ @@ -190,20 +197,21 @@ class AuthController extends BaseController 'code' => route_param('code') ]); - $response->html($this->view->render(self::VIEW_VERIFY)); + return $response->html($this->view->render(self::VIEW_VERIFY)); } } /** * Action - Resend OTP + * @return Response */ - public function resend() + public function resend(): Response { try { $otpToken = auth()->resendOtp(route_param('code')); - redirect(base_url(true) . '/' . current_lang() . '/verify/' . $otpToken); + return redirect(base_url(true) . '/' . current_lang() . '/verify/' . $otpToken); } catch (AuthException $e) { - redirect(base_url(true) . '/' . current_lang() . '/signin'); + return redirect(base_url(true) . '/' . current_lang() . '/signin'); } } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Controllers/CommentController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/CommentController.php.tpl index b038919ec..5f0f8dd6e 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/CommentController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/CommentController.php.tpl @@ -48,27 +48,29 @@ class CommentController extends BaseController * @param Request $request * @param string|null $lang * @param string $uuid + * @return Response */ - public function create(Request $request, ?string $lang, string $uuid) + public function create(Request $request, ?string $lang, string $uuid): Response { $commentDto = CommentDTO::fromRequest($request, $uuid, auth()->user()->uuid); $this->commentService->addComment($commentDto); session()->setFlash('success', t('common.comment_added')); - redirect(get_referrer()); + return redirect(get_referrer() ?? base_url()); } /** * Action - delete comment * @param string|null $lang * @param string $uuid + * @return Response */ - public function delete(?string $lang, string $uuid) + public function delete(?string $lang, string $uuid): Response { $this->commentService->deleteComment($uuid); session()->setFlash('success', t('common.comment_deleted')); - redirect(get_referrer()); + return redirect(get_referrer() ?? base_url()); } } diff --git a/src/Module/Templates/DemoWeb/src/Controllers/PageController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/PageController.php.tpl index 7e4602a8d..0cc577580 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/PageController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/PageController.php.tpl @@ -33,20 +33,20 @@ class PageController extends BaseController * Action - display home page * @param Response $response */ - public function home(Response $response) + public function home(Response $response): Response { $this->view->setParams([ 'title' => config()->get('app.name'), ]); - $response->html($this->view->render('pages/index')); + return $response->html($this->view->render('pages/index')); } /** * Action - display about page * @param Response $response */ - public function about(Response $response) + public function about(Response $response): Response { $this->view->setParams([ 'title' => t('common.about') . ' | ' . config()->get('app.name'), @@ -54,6 +54,6 @@ class PageController extends BaseController $commands = service(CommandService::class)->getAllCommands(); - $response->html($this->view->render('pages/about', ['commands' => $commands])); + return $response->html($this->view->render('pages/about', ['commands' => $commands])); } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl index a00b87883..a3331aad6 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl @@ -59,8 +59,9 @@ class PostController extends BaseController * Action - get posts list * @param Request $request * @param Response $response + * @return Response */ - public function posts(Request $request, Response $response) + public function posts(Request $request, Response $response): Response { $perPage = $request->get('per_page', (string) self::POSTS_PER_PAGE); $currentPage = $request->get('page', (string) self::CURRENT_PAGE); @@ -75,7 +76,7 @@ class PostController extends BaseController 'referer' => nav_ref_encode(request()->getQuery()) ]); - $response->html($this->view->render('post/post')); + return $response->html($this->view->render('post/post')); } /** @@ -84,16 +85,16 @@ class PostController extends BaseController * @param Response $response * @param string|null $lang * @param string $postUuid + * @return Response */ - public function post(Request $request, Response $response, ?string $lang, string $postUuid) + public function post(Request $request, Response $response, ?string $lang, string $postUuid): Response { $ref = $request->get('ref', 'posts'); $post = $this->postService->getPost($postUuid); if ($post->isEmpty()) { - $response->html(partial('errors/404'), StatusCode::NOT_FOUND); - stop(); + return $response->html(partial('errors/404'), StatusCode::NOT_FOUND); } $commentService = service(CommentService::class); @@ -109,6 +110,6 @@ class PostController extends BaseController 'referer' => nav_ref_decode($ref), ]); - $response->html($this->view->render('post/single')); + return $response->html($this->view->render('post/single')); } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl index 3430b7af1..5bfdf9880 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl @@ -47,8 +47,9 @@ class PostManagementController extends BaseController * Action - get my posts * @param Request $request * @param Response $response + * @return Response */ - public function myPosts(Request $request, Response $response) + public function myPosts(Request $request, Response $response): Response { $myPosts = $this->postService->getMyPosts(auth()->user()->uuid); @@ -57,15 +58,16 @@ class PostManagementController extends BaseController 'posts' => $this->postService->transformData($myPosts->all()) ]); - $response->html($this->view->render('post/my-posts')); + return $response->html($this->view->render('post/my-posts')); } /** * Action - display form for creating a post * @param Request $request * @param Response $response + * @return Response */ - public function createFrom(Request $request, Response $response) + public function createFrom(Request $request, Response $response): Response { $ref = $request->get('ref', 'posts'); @@ -74,14 +76,15 @@ class PostManagementController extends BaseController 'referer' => $ref ]); - $response->html($this->view->render('post/form')); + return $response->html($this->view->render('post/form')); } /** * Action - create post * @param Request $request + * @return Response */ - public function create(Request $request) + public function create(Request $request): Response { $imageName = ''; @@ -97,7 +100,7 @@ class PostManagementController extends BaseController $this->postService->addPost($postDto); - redirect(base_url(true) . '/' . current_lang() . '/my-posts'); + return redirect(base_url(true) . '/' . current_lang() . '/my-posts'); } /** @@ -106,8 +109,9 @@ class PostManagementController extends BaseController * @param Response $response * @param string|null $lang * @param string $postUuid + * @return Response */ - public function amendForm(Request $request, Response $response, ?string $lang, string $postUuid) + public function amendForm(Request $request, Response $response, ?string $lang, string $postUuid): Response { $ref = $request->get('ref', 'posts'); @@ -119,7 +123,7 @@ class PostManagementController extends BaseController 'referer' => nav_ref_decode($ref) ]); - $response->html($this->view->render('post/form')); + return $response->html($this->view->render('post/form')); } /** @@ -127,8 +131,9 @@ class PostManagementController extends BaseController * @param Request $request * @param string|null $lang * @param string $postUuid + * @return Response */ - public function amend(Request $request, ?string $lang, string $postUuid) + public function amend(Request $request, ?string $lang, string $postUuid): Response { $post = $this->postService->getPost($postUuid); @@ -150,15 +155,16 @@ class PostManagementController extends BaseController $this->postService->updatePost($postUuid, $postDto); - redirect(base_url(true) . '/' . current_lang() . '/my-posts'); + return redirect(base_url(true) . '/' . current_lang() . '/my-posts'); } /** * Action - delete post * @param string|null $lang * @param string $postUuid + * @return Response */ - public function delete(?string $lang, string $postUuid) + public function delete(?string $lang, string $postUuid): Response { $post = $this->postService->getPost($postUuid); @@ -168,15 +174,16 @@ class PostManagementController extends BaseController $this->postService->deletePost($postUuid); - redirect(base_url(true) . '/' . current_lang() . '/my-posts'); + return redirect(base_url(true) . '/' . current_lang() . '/my-posts'); } /** * Action - delete image of the post * @param string|null $lang * @param string $postUuid + * @return Response */ - public function deleteImage(?string $lang, string $postUuid) + public function deleteImage(?string $lang, string $postUuid): Response { $post = $this->postService->getPost($postUuid); @@ -193,6 +200,6 @@ class PostManagementController extends BaseController $this->postService->updatePost($postUuid, $postDto); - redirect(base_url(true) . '/' . current_lang() . '/my-posts'); + return redirect(base_url(true) . '/' . current_lang() . '/my-posts'); } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/Activate.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/Activate.php.tpl index ac6d463fc..908c0ceab 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/Activate.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/Activate.php.tpl @@ -32,15 +32,17 @@ class Activate extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { $token = (string)route_param('token'); $request->set('token', $token); - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } $request->set('activation_token', $token); @@ -63,9 +65,8 @@ class Activate extends BaseMiddleware /** * @inheritDoc */ - protected function respondWithError(Request $request, Response $response, $message) + protected function respondWithError(Request $request, Response $response, $message): Response { - $response->html(partial('errors/404'), StatusCode::NOT_FOUND); - stop(); + return $response->html(partial('errors/404'), StatusCode::NOT_FOUND); } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/Auth.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/Auth.php.tpl index 47491fcf6..9e20255ed 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/Auth.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/Auth.php.tpl @@ -30,9 +30,9 @@ class Auth extends QtMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if (!auth()->check()) { redirect(base_url(true) . '/' . current_lang() . '/signin'); diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/BaseMiddleware.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/BaseMiddleware.php.tpl index e6f0dc480..043527a8c 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/BaseMiddleware.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/BaseMiddleware.php.tpl @@ -45,12 +45,15 @@ abstract class BaseMiddleware extends QtMiddleware /** * @param Request $request * @param Response $response + * @return Response|null */ - protected function validateRequest(Request $request, Response $response) + protected function validateRequest(Request $request, Response $response): ?Response { if (!$this->validator->isValid($request->all())) { - $this->respondWithError($request, $response, $this->validator->getErrors()); + return $this->respondWithError($request, $response, $this->validator->getErrors()); } + + return null; } /** @@ -67,9 +70,11 @@ abstract class BaseMiddleware extends QtMiddleware * @param Request $request * @param Response $response * @param mixed $message + * @return Response */ - protected function respondWithError(Request $request, Response $response, $message) + protected function respondWithError(Request $request, Response $response, $message): Response { // default no-op: subclasses override if needed + return $response; } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/Comment.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/Comment.php.tpl index 5138fb896..76040c80c 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/Comment.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/Comment.php.tpl @@ -31,9 +31,12 @@ class Comment extends BaseMiddleware * @param Response $response * @param Closure $next */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } + return $next($request, $response); } @@ -58,11 +61,11 @@ class Comment extends BaseMiddleware Request $request, Response $response, $message - ) + ): Response { $data = $request->all(); session()->setFlash('error', $this->validator->getErrors()); - redirectWith(get_referrer(), $data); + return redirectWith(get_referrer() ?? base_url(), $data); } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/CommentOwner.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/CommentOwner.php.tpl index 74042752b..73b9602f3 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/CommentOwner.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/CommentOwner.php.tpl @@ -31,15 +31,17 @@ class CommentOwner extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { $uuid = (string)route_param('uuid'); $request->set('uuid', $uuid); - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } return $next($request, $response); } diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/Editor.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/Editor.php.tpl index 0e4894ad3..4526e18f5 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/Editor.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/Editor.php.tpl @@ -45,16 +45,18 @@ class Editor extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if (!in_array(auth()->user()->role, self::ROLES)) { - redirect(base_url(true) . '/' . current_lang()); + return redirect(base_url(true) . '/' . current_lang()); } if ($request->isMethod('post') || $request->isMethod('put')) { - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } } return $next($request, $response); @@ -91,13 +93,13 @@ class Editor extends BaseMiddleware /** * @inheritDoc */ - protected function respondWithError(Request $request, Response $response, $message) + protected function respondWithError(Request $request, Response $response, $message): Response { $data = $request->all(); unset($data['image']); session()->setFlash('error', $this->validator->getErrors()); - redirectWith(get_referrer(), $data); + return redirectWith(get_referrer() ?? base_url(), $data); } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/Forget.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/Forget.php.tpl index e1095cac3..61d5d05a2 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/Forget.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/Forget.php.tpl @@ -32,12 +32,14 @@ class Forget extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if ($request->isMethod('post')) { - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } } return $next($request, $response); @@ -65,13 +67,13 @@ class Forget extends BaseMiddleware Request $request, Response $response, $message - ) + ): Response { $data = $request->all(); unset($data['image']); session()->setFlash('error', $message); - redirectWith(base_url(true) . '/' . current_lang() . '/forget', $data); + return redirectWith(base_url(true) . '/' . current_lang() . '/forget', $data); } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/Guest.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/Guest.php.tpl index 46dd3e03d..0933012f7 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/Guest.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/Guest.php.tpl @@ -30,12 +30,12 @@ class Guest extends QtMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if (auth()->check()) { - redirect(get_referrer() ?? base_url(true) . '/' . current_lang()); + return redirect(get_referrer() ?? base_url(true) . '/' . current_lang()); } return $next($request, $response); diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/Password.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/Password.php.tpl index 2694c4b27..3ec5b596f 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/Password.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/Password.php.tpl @@ -34,7 +34,7 @@ class Password extends BaseMiddleware * @param Response $response * @param Closure $next */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if ($request->isMethod('post')) { $this->validateRequest($request, $response); diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/PostOwner.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/PostOwner.php.tpl index 61e02a9f3..48269f5c0 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/PostOwner.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/PostOwner.php.tpl @@ -33,15 +33,17 @@ class PostOwner extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { $uuid = (string)route_param('uuid'); $request->set('uuid', $uuid); - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } return $next($request, $response); } @@ -64,10 +66,9 @@ class PostOwner extends BaseMiddleware /** * @inheritDoc */ - protected function respondWithError(Request $request, Response $response, $message = null) + protected function respondWithError(Request $request, Response $response, $message = null): Response { - $response->html(partial('errors/404'), StatusCode::NOT_FOUND); - stop(); + return $response->html(partial('errors/404'), StatusCode::NOT_FOUND); } /** diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/Resend.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/Resend.php.tpl index 976551399..3a78be12a 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/Resend.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/Resend.php.tpl @@ -31,15 +31,17 @@ class Resend extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { $code = (string) route_param('code'); $request->set('code', $code); - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } return $next($request, $response); } @@ -63,8 +65,8 @@ class Resend extends BaseMiddleware Request $request, Response $response, $message, - ): void { + ): Response { session()->setFlash('error', $message); - redirect(base_url(true) . '/' . current_lang() . '/signin'); + return redirect(base_url(true) . '/' . current_lang() . '/signin'); } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/Reset.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/Reset.php.tpl index c29e6e1db..b295d39bd 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/Reset.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/Reset.php.tpl @@ -32,15 +32,17 @@ class Reset extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { $token = (string) route_param('token'); $request->set('token', $token); - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } $request->set('reset_token', $token); @@ -77,14 +79,13 @@ class Reset extends BaseMiddleware /** * @inheritDoc */ - protected function respondWithError(Request $request, Response $response, $message) + protected function respondWithError(Request $request, Response $response, $message): Response { if ($request->isMethod('get') && isset($message['token'])) { - $response->html(partial('errors/404'), StatusCode::NOT_FOUND); - stop(); + return $response->html(partial('errors/404'), StatusCode::NOT_FOUND); } session()->setFlash('error', $message); - redirect(get_referrer()); + return redirect(get_referrer() ?? base_url()); } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/Signup.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/Signup.php.tpl index bcdc18287..db0f7b55f 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/Signup.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/Signup.php.tpl @@ -31,9 +31,9 @@ class Signup extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if ($request->isMethod('post')) { $captchaName = captcha()->getName(); @@ -43,7 +43,9 @@ class Signup extends BaseMiddleware $request->delete($captchaName . '-response'); } - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } $request->delete('captcha'); } @@ -82,9 +84,9 @@ class Signup extends BaseMiddleware /** * @inheritDoc */ - protected function respondWithError(Request $request, Response $response, $message) + protected function respondWithError(Request $request, Response $response, $message): Response { session()->setFlash('error', $message); - redirectWith(base_url(true) . '/' . current_lang() . '/signup', $request->all()); + return redirectWith(base_url(true) . '/' . current_lang() . '/signup', $request->all()); } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/Update.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/Update.php.tpl index 8a0a11474..08c106573 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/Update.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/Update.php.tpl @@ -32,10 +32,12 @@ class Update extends BaseMiddleware * @param Response $response * @param Closure $next */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { if ($request->isMethod('post')) { - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } } return $next($request, $response); @@ -63,9 +65,9 @@ class Update extends BaseMiddleware Request $request, Response $response, $message - ) + ): Response { session()->setFlash('error', $message); - redirectWith(base_url(true) . '/' . current_lang() . '/account-settings#account_profile', $request->all()); + return redirectWith(base_url(true) . '/' . current_lang() . '/account-settings#account_profile', $request->all()); } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/Verify.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/Verify.php.tpl index dabb62713..1c70fbc10 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/Verify.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/Verify.php.tpl @@ -32,15 +32,17 @@ class Verify extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { $code = (string) route_param('code'); $request->set('code', $code); - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } return $next($request, $response); } @@ -64,14 +66,13 @@ class Verify extends BaseMiddleware /** * @inheritDoc */ - protected function respondWithError(Request $request, Response $response, $message) + protected function respondWithError(Request $request, Response $response, $message): Response { if ($request->isMethod('get') && isset($message['code'])) { - $response->html(partial('errors/404'), StatusCode::NOT_FOUND); - stop(); + return $response->html(partial('errors/404'), StatusCode::NOT_FOUND); } session()->setFlash('error', $message); - redirectWith(base_url(true) . '/' . current_lang() . '/verify', $request->all()); + return redirectWith(base_url(true) . '/' . current_lang() . '/verify', $request->all()); } } \ No newline at end of file diff --git a/src/Module/Templates/Toolkit/src/Controllers/DashboardController.php.tpl b/src/Module/Templates/Toolkit/src/Controllers/DashboardController.php.tpl index 0c9acba2a..0cbee3db9 100644 --- a/src/Module/Templates/Toolkit/src/Controllers/DashboardController.php.tpl +++ b/src/Module/Templates/Toolkit/src/Controllers/DashboardController.php.tpl @@ -47,12 +47,12 @@ class DashboardController extends BaseController * @param Request $request * @param Response $response */ - public function index(Request $request, Response $response) + public function index(Request $request, Response $response): Response { $this->view->setParams([ 'title' => 'Dashboard', ]); - $response->html($this->view->render('pages/dashboard/index')); + return $response->html($this->view->render('pages/dashboard/index')); } } diff --git a/src/Module/Templates/Toolkit/src/Controllers/DatabaseController.php.tpl b/src/Module/Templates/Toolkit/src/Controllers/DatabaseController.php.tpl index b882e78c1..68a452000 100644 --- a/src/Module/Templates/Toolkit/src/Controllers/DatabaseController.php.tpl +++ b/src/Module/Templates/Toolkit/src/Controllers/DatabaseController.php.tpl @@ -42,8 +42,9 @@ class DatabaseController extends BaseController /** * @param Response $response + * @return Response */ - public function list(Response $response) + public function list(Response $response): Response { $tables = $this->databaseService->getTables(); @@ -52,7 +53,7 @@ class DatabaseController extends BaseController 'tables' => $tables, ]); - $response->html($this->view->render('pages/database/index')); + return $response->html($this->view->render('pages/database/index')); } /** @@ -60,7 +61,7 @@ class DatabaseController extends BaseController * @param Response $response * @throws DatabaseException */ - public function single(Request $request, Response $response) + public function single(Request $request, Response $response): Response { $tableName = $request->get('table'); $perPage = $request->get('per_page', self::ITEMS_PER_PAGE); @@ -78,13 +79,14 @@ class DatabaseController extends BaseController 'pagination' => $tableData['pagination'], ]); - $response->html($this->view->render('pages/database/table')); + return $response->html($this->view->render('pages/database/table')); } /** * @param Request $request + * @return Response */ - public function create(Request $request) + public function create(Request $request): Response { $tableName = $request->get('table'); @@ -92,13 +94,14 @@ class DatabaseController extends BaseController $this->databaseService->createTableRow($tableName, $newData); - redirect(get_referrer()); + return redirect(get_referrer() ?? base_url()); } /** * @param Request $request + * @return Response */ - public function update(Request $request) + public function update(Request $request): Response { $tableName = $request->get('table'); $id = $request->get('rowId'); @@ -106,19 +109,20 @@ class DatabaseController extends BaseController $this->databaseService->updateTable($tableName, (int)$id, $updatedData); - redirect(base_url(true) . '/database/view?table=' . $tableName); + return redirect(base_url(true) . '/database/view?table=' . $tableName); } /** * @param Request $request + * @return Response */ - public function delete(Request $request) + public function delete(Request $request): Response { $tableName = $request->get('tableName'); $id = $request->get('id'); $this->databaseService->deleteTableRow($tableName, $id); - redirect(base_url(true) . '/database/view?table=' . $tableName); + return redirect(base_url(true) . '/database/view?table=' . $tableName); } } diff --git a/src/Module/Templates/Toolkit/src/Controllers/EmailsController.php.tpl b/src/Module/Templates/Toolkit/src/Controllers/EmailsController.php.tpl index 08867a261..3076e2d84 100644 --- a/src/Module/Templates/Toolkit/src/Controllers/EmailsController.php.tpl +++ b/src/Module/Templates/Toolkit/src/Controllers/EmailsController.php.tpl @@ -47,7 +47,7 @@ class EmailsController extends BaseController * @param Request $request * @param Response $response */ - public function list(Request $request, Response $response) + public function list(Request $request, Response $response): Response { $perPage = $request->get('per_page', self::ITEMS_PER_PAGE); $currentPage = $request->get('page', self::CURRENT_PAGE); @@ -60,24 +60,24 @@ class EmailsController extends BaseController 'pagination' => $data ]); - $response->html($this->view->render('pages/email/index')); + return $response->html($this->view->render('pages/email/index')); } /** * @param Response $response * @param string $emailId */ - public function single(Response $response, string $emailId) + public function single(Response $response, string $emailId): Response { $email = $this->emailService->getEmail($emailId); - $response->html(quoted_printable_decode($email->getParsedBody())); + return $response->html(quoted_printable_decode($email->getParsedBody())); } /** * @param string $emailId */ - public function delete(string $emailId) + public function delete(string $emailId): Response { $this->emailService->deleteEmail($emailId); diff --git a/src/Module/Templates/Toolkit/src/Controllers/LogsController.php.tpl b/src/Module/Templates/Toolkit/src/Controllers/LogsController.php.tpl index 44d00ac1b..8383bec71 100644 --- a/src/Module/Templates/Toolkit/src/Controllers/LogsController.php.tpl +++ b/src/Module/Templates/Toolkit/src/Controllers/LogsController.php.tpl @@ -46,7 +46,7 @@ class LogsController extends BaseController /** * @param Response $response */ - public function list(Response $response) + public function list(Response $response): Response { $filteredLogFiles = $this->logsService->getLogFiles(); @@ -55,14 +55,14 @@ class LogsController extends BaseController 'logFiles' => $filteredLogFiles, ]); - $response->html($this->view->render('pages/logs/index')); + return $response->html($this->view->render('pages/logs/index')); } /** * @param Request $request * @param Response $response */ - public function single(Request $request, Response $response) + public function single(Request $request, Response $response): Response { $logFile = $request->get('logFile'); $perPage = $request->get('per_page', self::ITEMS_PER_PAGE); @@ -78,6 +78,6 @@ class LogsController extends BaseController 'pagination' => $parsedLogs, ]); - $response->html($this->view->render('pages/logs/log')); + return $response->html($this->view->render('pages/logs/log')); } } diff --git a/src/Module/Templates/Toolkit/src/Middlewares/BasicAuth.php.tpl b/src/Module/Templates/Toolkit/src/Middlewares/BasicAuth.php.tpl index 35025b52d..7a4d9ef80 100644 --- a/src/Module/Templates/Toolkit/src/Middlewares/BasicAuth.php.tpl +++ b/src/Module/Templates/Toolkit/src/Middlewares/BasicAuth.php.tpl @@ -30,14 +30,14 @@ class BasicAuth extends QtMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { $userCredentials = $request->getBasicAuthCredentials(); if (!$userCredentials || !$this->isValidCredentials($userCredentials)) { - $this->unauthorizedResponse($response); + return $this->unauthorizedResponse($response); } return $next($request, $response); @@ -61,11 +61,11 @@ class BasicAuth extends QtMiddleware /** * @param Response $response + * @return Response */ - private function unauthorizedResponse(Response $response): void + private function unauthorizedResponse(Response $response): Response { $response->setHeader('WWW-Authenticate', 'Basic realm="Quantum Toolkit"'); - $response->html(partial('errors' . DS . '401'), 401); - stop(); + return $response->html(partial('errors' . DS . '401'), 401); } } diff --git a/src/Module/Templates/Toolkit/src/Middlewares/CreateTable.php.tpl b/src/Module/Templates/Toolkit/src/Middlewares/CreateTable.php.tpl index 08e113808..77c831ed0 100644 --- a/src/Module/Templates/Toolkit/src/Middlewares/CreateTable.php.tpl +++ b/src/Module/Templates/Toolkit/src/Middlewares/CreateTable.php.tpl @@ -31,11 +31,13 @@ class CreateTable extends BaseMiddleware * @param Request $request * @param Response $response * @param Closure $next - * @return mixed + * @return Response */ - public function apply(Request $request, Response $response, Closure $next) + public function apply(Request $request, Response $response, Closure $next): Response { - $this->validateRequest($request, $response); + if ($errorResponse = $this->validateRequest($request, $response)) { + return $errorResponse; + } return $next($request, $response); } @@ -65,10 +67,10 @@ class CreateTable extends BaseMiddleware /** * @inheritDoc */ - protected function respondWithError(Request $request, Response $response, $message) + protected function respondWithError(Request $request, Response $response, $message): Response { session()->setFlash('error', $message); - redirect(get_referrer()); + return redirect(get_referrer() ?? base_url()); } /** diff --git a/tests/Unit/AppTestCase.php b/tests/Unit/AppTestCase.php index 09bed980e..0d4cc8201 100644 --- a/tests/Unit/AppTestCase.php +++ b/tests/Unit/AppTestCase.php @@ -13,6 +13,7 @@ use Quantum\App\AppContext; use Quantum\Config\Config; use Quantum\Router\Route; +use Quantum\Http\Response; use ReflectionClass; use Quantum\App\App; use Quantum\Di\Di; @@ -41,6 +42,10 @@ public function tearDown(): void AppFactory::destroy(AppType::WEB); + if (Di::isRegistered(Response::class)) { + response()->flush(); + } + if (Di::isRegistered(Config::class)) { config()->flush(); } diff --git a/tests/Unit/Middleware/MiddlewareManagerTest.php b/tests/Unit/Middleware/MiddlewareManagerTest.php new file mode 100644 index 000000000..65cb42df2 --- /dev/null +++ b/tests/Unit/Middleware/MiddlewareManagerTest.php @@ -0,0 +1,137 @@ +setHeader('X-Test', 'Passed'); + return $next($request, $response); + } + } + + class TestMwBlocker extends QtMiddleware + { + public function apply(Request $request, Response $response, Closure $next): Response + { + TestMwOne::$calls[] = 'TestMwBlocker'; + return $response->json(['status' => 'blocked']); + } + } + + class InvalidMw + { + public function apply(Request $request, Response $response, Closure $next) + { + return $next($request, $response); + } + } +} + +namespace Quantum\Tests\Unit\Middleware { + + use Quantum\Tests\Unit\AppTestCase; + use Quantum\Middleware\MiddlewareManager; + use Quantum\Middleware\Exceptions\MiddlewareException; + use Quantum\Router\MatchedRoute; + use Quantum\Router\Route; + use Mockery; + use Quantum\Tests\_root\modules\Test\Middlewares\TestMwOne; + + class MiddlewareManagerTest extends AppTestCase + { + public function tearDown(): void + { + Mockery::close(); + parent::tearDown(); + } + + public function testMiddlewareManagerExecutesSequentially(): void + { + TestMwOne::$calls = []; + + $route = new Route(['GET'], '/test-route', 'TestController', 'index'); + $route->addMiddlewares(['TestMwOne', 'TestMwTwo']); + $route->module('Test'); + + $matchedRoute = new MatchedRoute($route, []); + + $request = request(); + $response = response(); + + $manager = new MiddlewareManager($matchedRoute); + $result = $manager->applyMiddlewares($request, $response); + + $this->assertSame($response, $result); + $this->assertEquals(['TestMwOne', 'TestMwTwo'], TestMwOne::$calls); + $this->assertEquals('Passed', $result->getHeader('X-Test')); + } + + public function testMiddlewareManagerCanShortCircuit(): void + { + TestMwOne::$calls = []; + + $route = new Route(['GET'], '/test-route', 'TestController', 'index'); + $route->addMiddlewares(['TestMwOne', 'TestMwBlocker', 'TestMwTwo']); + $route->module('Test'); + + $matchedRoute = new MatchedRoute($route, []); + + $request = request(); + $response = response(); + + $manager = new MiddlewareManager($matchedRoute); + $result = $manager->applyMiddlewares($request, $response); + + $this->assertSame($response, $result); + $this->assertEquals(['TestMwOne', 'TestMwBlocker'], TestMwOne::$calls); + $this->assertEquals('{"status":"blocked"}', $result->getContent()); + $this->assertNull($result->getHeader('X-Test')); + } + + public function testMiddlewareManagerThrowsWhenMiddlewareDoesNotExist(): void + { + $this->expectException(MiddlewareException::class); + + $route = new Route(['GET'], '/test-route', 'TestController', 'index'); + $route->addMiddlewares(['NonExistentMw']); + $route->module('Test'); + + $matchedRoute = new MatchedRoute($route, []); + + $manager = new MiddlewareManager($matchedRoute); + $manager->applyMiddlewares(request(), response()); + } + + public function testMiddlewareManagerThrowsWhenNotInstanceOfQtMiddleware(): void + { + $this->expectException(MiddlewareException::class); + + $route = new Route(['GET'], '/test-route', 'TestController', 'index'); + $route->addMiddlewares(['InvalidMw']); + $route->module('Test'); + + $matchedRoute = new MatchedRoute($route, []); + + $manager = new MiddlewareManager($matchedRoute); + $manager->applyMiddlewares(request(), response()); + } + } +}