From 043beb36313167f45c904ce082cf63e48c9c5126 Mon Sep 17 00:00:00 2001 From: Matteo Gheza Date: Thu, 23 Dec 2021 18:38:23 +0100 Subject: [PATCH] Implement login --- backend/apiRouter.php | 76 ++++++++++++++++++++++++++++++++++++++++++- backend/composer.lock | 18 +++++----- backend/utils.php | 23 +++++++++++-- 3 files changed, 105 insertions(+), 12 deletions(-) diff --git a/backend/apiRouter.php b/backend/apiRouter.php index 91eb527..f2abd08 100644 --- a/backend/apiRouter.php +++ b/backend/apiRouter.php @@ -10,11 +10,36 @@ function apiRouter (FastRoute\RouteCollector $r) { ); $r->addRoute( ['GET', 'POST'], - '/requestDebug', + '/debug/request', function ($vars) { apiResponse(["get" => $_GET, "post" => $_POST, "server" => $_SERVER]); } ); + $r->addRoute( + ['GET', 'POST'], + '/debug/token', + function ($vars) { + global $users; + $token = isset($_GET['token']) ? $_GET['token'] : $_POST['token']; + $token_parsed = $users->auth->parseToken($token); + + $claims = $token_parsed !== false ? $token_parsed->claims() : null; + $jti = isset($claims) ? $claims->get('jti') : null; + $exp = isset($claims) ? $claims->get('exp') : null; + $iat = isset($claims) ? $claims->get('iat') : null; + $nbf = isset($claims) ? $claims->get('nbf') : null; + $user_info = isset($claims) ? $claims->get('user_info') : null; + + apiResponse([ + "user_info" => $user_info, + "jti" => $jti, + "exp" => $exp, + "iat" => $iat, + "nbf" => $nbf, + "valid" => $users->auth->isTokenValid($token_parsed), + ]); + } + ); $r->addRoute( ['GET'], @@ -102,4 +127,53 @@ function apiRouter (FastRoute\RouteCollector $r) { apiResponse(["status" => "success"]); } ); + + $r->addRoute( + ['POST'], + '/login', + function ($vars) { + global $users; + try { + $token = $users->loginAndReturnToken($_POST["username"], $_POST["password"]); + apiResponse(["status" => "success", "token" => $token]); + } + catch (\Delight\Auth\InvalidEmailException $e) { + statusCode(401); + apiResponse(["status" => "error", "message" => "Wrong email address"]); + } + catch (\Delight\Auth\InvalidPasswordException $e) { + statusCode(401); + apiResponse(["status" => "error", "message" => "Wrong password"]); + } + catch (\Delight\Auth\EmailNotVerifiedException $e) { + statusCode(401); + apiResponse(["status" => "error", "message" => "Email not verified"]); + } + catch (\Delight\Auth\UnknownUsernameException $e) { + statusCode(401); + apiResponse(["status" => "error", "message" => "Wrong username"]); + } + catch (\Delight\Auth\TooManyRequestsException $e) { + statusCode(401); + apiResponse(["status" => "error", "message" => "Too many requests"]); + } + catch (Exception $e) { + statusCode(401); + apiResponse(["status" => "error", "message" => "Unknown error", "error" => $e]); + } + } + ); + $r->addRoute( + ['GET', 'POST'], + '/validateToken', + function ($vars) { + global $users; + $token = isset($_GET['token']) ? $_GET['token'] : $_POST['token']; + $token_parsed = $users->auth->parseToken($token); + + apiResponse([ + "valid" => $users->auth->isTokenValid($token_parsed), + ]); + } + ); } diff --git a/backend/composer.lock b/backend/composer.lock index cdca82f..935220c 100644 --- a/backend/composer.lock +++ b/backend/composer.lock @@ -207,12 +207,12 @@ "source": { "type": "git", "url": "https://github.com/allerta-vvf/PHP-Auth-JWT", - "reference": "84755530d88f66ae5e0f64db364f96f0e63d2813" + "reference": "1d555ca0f0cc9a647e6e5da1684430f5fa31987e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/allerta-vvf/PHP-Auth-JWT/zipball/84755530d88f66ae5e0f64db364f96f0e63d2813", - "reference": "84755530d88f66ae5e0f64db364f96f0e63d2813", + "url": "https://api.github.com/repos/allerta-vvf/PHP-Auth-JWT/zipball/1d555ca0f0cc9a647e6e5da1684430f5fa31987e", + "reference": "1d555ca0f0cc9a647e6e5da1684430f5fa31987e", "shasum": "" }, "require": { @@ -240,7 +240,7 @@ "login", "security" ], - "time": "2021-12-22T23:54:12+00:00" + "time": "2021-12-23T17:32:44+00:00" }, { "name": "delight-im/base64", @@ -388,16 +388,16 @@ }, { "name": "giggsey/libphonenumber-for-php", - "version": "8.12.39", + "version": "8.12.40", "source": { "type": "git", "url": "https://github.com/giggsey/libphonenumber-for-php.git", - "reference": "6ae517989e96f069141ffeb56ccbbd849520f6ff" + "reference": "cafb3497dce678e9643ec3eba38be251a67d7469" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/6ae517989e96f069141ffeb56ccbbd849520f6ff", - "reference": "6ae517989e96f069141ffeb56ccbbd849520f6ff", + "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/cafb3497dce678e9643ec3eba38be251a67d7469", + "reference": "cafb3497dce678e9643ec3eba38be251a67d7469", "shasum": "" }, "require": { @@ -457,7 +457,7 @@ "issues": "https://github.com/giggsey/libphonenumber-for-php/issues", "source": "https://github.com/giggsey/libphonenumber-for-php" }, - "time": "2021-12-07T08:51:54+00:00" + "time": "2021-12-23T11:54:39+00:00" }, { "name": "giggsey/locale", diff --git a/backend/utils.php b/backend/utils.php index 1afd439..6141a83 100644 --- a/backend/utils.php +++ b/backend/utils.php @@ -1,4 +1,8 @@ $id, "time" => $time]); //$this->tools->profiler_stop(); } + + public function loginAndReturnToken($username, $password) + { + //$this->tools->profiler_start("Login"); + $this->auth->loginWithUsername($username, $password); + $token = $this->auth->generateJWTtoken(); + //$this->tools->profiler_stop(); + return $token; + } } class Services {