From a89182b64f5d7bef425c77d9082fb14ee1c5b0d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=91cze=20Bence?= Date: Sun, 16 Apr 2023 16:53:35 +0200 Subject: [PATCH 1/2] split authentication required and secured controllers --- public/index.php | 42 +++++++++++++++---------- src/Controller/CommunityController.php | 8 ++--- src/Controller/HomeController.php | 8 ++--- src/Controller/OAuthAuthController.php | 8 ++--- src/Controller/UserController.php | 8 ++--- src/Controller/UserSearchController.php | 8 ++--- 6 files changed, 45 insertions(+), 37 deletions(-) diff --git a/public/index.php b/public/index.php index 0468f42..81dfb54 100644 --- a/public/index.php +++ b/public/index.php @@ -1,7 +1,12 @@ getHandler(); $controller = new $handler[0](Container::$request); - if ($controller instanceof SokoWeb\Interfaces\Authorization\ISecured) { - $authorized = $controller->authorize(); - } else { - $authorized = true; - } - - if (!$authorized) { + if ( + $controller instanceof IAuthenticationRequired && + $controller->isAuthenticationRequired() && + Container::$request->user() === null + ) { Container::$request->session()->set('redirect_after_login', substr($_SERVER['REQUEST_URI'], strlen('/'))); $response = new Redirect(Container::$routeCollection->getRoute('login')->generateLink(), IRedirect::TEMPORARY); header('Location: ' . $response->getUrl(), true, $response->getHttpCode()); @@ -36,23 +39,28 @@ if ($match !== null) { } if ($method === 'post' && !in_array($url, $antiCsrfTokenExceptions) && Container::$request->post('anti_csrf_token') !== Container::$request->session()->get('anti_csrf_token')) { - $content = new SokoWeb\Response\JsonContent(['error' => 'no_valid_anti_csrf_token']); + $content = new JsonContent(['error' => 'no_valid_anti_csrf_token']); header('Content-Type: text/html; charset=UTF-8', true, 403); $content->render(); return; } - $response = call_user_func([$controller, $handler[1]]); - if ($response instanceof SokoWeb\Interfaces\Response\IContent) { - header('Content-Type: ' . $response->getContentType() . '; charset=UTF-8'); - $response->render(); - return; - } elseif ($response instanceof SokoWeb\Interfaces\Response\IRedirect) { - header('Location: ' . $response->getUrl(), true, $response->getHttpCode()); - return; + if ( + !($controller instanceof ISecured) || + $controller->authorize() + ) { + $response = call_user_func([$controller, $handler[1]]); + if ($response instanceof IContent) { + header('Content-Type: ' . $response->getContentType() . '; charset=UTF-8'); + $response->render(); + return; + } elseif ($response instanceof IRedirect) { + header('Location: ' . $response->getUrl(), true, $response->getHttpCode()); + return; + } } } -$content = new SokoWeb\Response\HtmlContent('error/404'); +$content = new HtmlContent('error/404'); header('Content-Type: text/html; charset=UTF-8', true, 404); $content->render(); diff --git a/src/Controller/CommunityController.php b/src/Controller/CommunityController.php index ff0bddf..30b6e11 100644 --- a/src/Controller/CommunityController.php +++ b/src/Controller/CommunityController.php @@ -7,14 +7,14 @@ use RVR\PersistentData\Model\User; use RVR\Repository\CommunityRepository; use RVR\Repository\CommunityMemberRepository; use RVR\Repository\UserRepository; -use SokoWeb\Interfaces\Authorization\ISecured; +use SokoWeb\Interfaces\Authentication\IAuthenticationRequired; use SokoWeb\Interfaces\Request\IRequest; use SokoWeb\Interfaces\Response\IContent; use SokoWeb\PersistentData\PersistentDataManager; use SokoWeb\Response\HtmlContent; use SokoWeb\Response\JsonContent; -class CommunityController implements ISecured +class CommunityController implements IAuthenticationRequired { private IRequest $request; @@ -35,9 +35,9 @@ class CommunityController implements ISecured $this->communityMemberRepository = new CommunityMemberRepository(); } - public function authorize(): bool + public function isAuthenticationRequired(): bool { - return $this->request->user() !== null; + return true; } public function getCommunityHome(): ?IContent diff --git a/src/Controller/HomeController.php b/src/Controller/HomeController.php index 7cec7b6..b9233f9 100644 --- a/src/Controller/HomeController.php +++ b/src/Controller/HomeController.php @@ -2,12 +2,12 @@ use RVR\PersistentData\Model\User; use RVR\Repository\CommunityMemberRepository; -use SokoWeb\Interfaces\Authorization\ISecured; +use SokoWeb\Interfaces\Authentication\IAuthenticationRequired; use SokoWeb\Interfaces\Request\IRequest; use SokoWeb\Interfaces\Response\IContent; use SokoWeb\Response\HtmlContent; -class HomeController implements ISecured +class HomeController implements IAuthenticationRequired { private IRequest $request; @@ -19,9 +19,9 @@ class HomeController implements ISecured $this->communityMemberRepository = new CommunityMemberRepository(); } - public function authorize(): bool + public function isAuthenticationRequired(): bool { - return $this->request->user() !== null; + return true; } public function getHome(): IContent diff --git a/src/Controller/OAuthAuthController.php b/src/Controller/OAuthAuthController.php index 7dd983a..e8d636c 100644 --- a/src/Controller/OAuthAuthController.php +++ b/src/Controller/OAuthAuthController.php @@ -4,14 +4,14 @@ use DateTime; use RVR\PersistentData\Model\OAuthToken; use RVR\PersistentData\Model\User; use RVR\Repository\OAuthClientRepository; -use SokoWeb\Interfaces\Authorization\ISecured; +use SokoWeb\Interfaces\Authentication\IAuthenticationRequired; use SokoWeb\Interfaces\Request\IRequest; use SokoWeb\Interfaces\Response\IRedirect; use SokoWeb\Response\Redirect; use SokoWeb\PersistentData\PersistentDataManager; use SokoWeb\Response\HtmlContent; -class OAuthAuthController implements ISecured +class OAuthAuthController implements IAuthenticationRequired { private IRequest $request; @@ -26,9 +26,9 @@ class OAuthAuthController implements ISecured $this->oAuthClientRepository = new OAuthClientRepository(); } - public function authorize(): bool + public function isAuthenticationRequired(): bool { - return $this->request->user() !== null; + return true; } public function auth() diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index 84c8c73..43605b2 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -2,7 +2,7 @@ use DateTime; use SokoWeb\Http\Request; -use SokoWeb\Interfaces\Authorization\ISecured; +use SokoWeb\Interfaces\Authentication\IAuthenticationRequired; use SokoWeb\Interfaces\Request\IRequest; use SokoWeb\Interfaces\Response\IContent; use SokoWeb\Interfaces\Response\IRedirect; @@ -15,7 +15,7 @@ use SokoWeb\Response\Redirect; use SokoWeb\Util\JwtParser; use RVR\Repository\UserRepository; -class UserController implements ISecured +class UserController implements IAuthenticationRequired { private IRequest $request; @@ -30,9 +30,9 @@ class UserController implements ISecured $this->userRepository = new UserRepository(); } - public function authorize(): bool + public function isAuthenticationRequired(): bool { - return $this->request->user() !== null; + return true; } public function getAccount(): IContent diff --git a/src/Controller/UserSearchController.php b/src/Controller/UserSearchController.php index fab93f0..69d8c33 100644 --- a/src/Controller/UserSearchController.php +++ b/src/Controller/UserSearchController.php @@ -1,12 +1,12 @@ userRepository = new UserRepository(); } - public function authorize(): bool + public function isAuthenticationRequired(): bool { - return $this->request->user() !== null; + return true; } public function searchUser(): IContent From 70e13f70c0a6d631049e7c5c9a7331578848771b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=91cze=20Bence?= Date: Sun, 16 Apr 2023 16:55:39 +0200 Subject: [PATCH 2/2] update soko-web to 0.3 --- composer.json | 2 +- composer.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index 273435e..9575416 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ } ], "require": { - "esoko/soko-web": "0.2.1", + "esoko/soko-web": "0.3", "firebase/php-jwt": "^6.4" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 841e101..5701037 100644 --- a/composer.lock +++ b/composer.lock @@ -4,15 +4,15 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "695034ad53031c4fdacbc6f551d610e3", + "content-hash": "64c21f0e5181bd39d8977af72e2aeddc", "packages": [ { "name": "esoko/soko-web", - "version": "v0.2.1", + "version": "v0.3", "source": { "type": "git", "url": "https://git.esoko.eu/esoko/soko-web.git", - "reference": "4af7ae352108e7ba151fca2633ff4b40b3194b32" + "reference": "014a5480967c03c00dda5ee34c7eaf4be224b96e" }, "require": { "phpmailer/phpmailer": "^6.8", @@ -33,7 +33,7 @@ "GNU GPL 3.0" ], "description": "Lightweight web framework", - "time": "2023-04-16T14:00:29+00:00" + "time": "2023-04-16T14:54:22+00:00" }, { "name": "firebase/php-jwt",