Implement login

This commit is contained in:
Matteo Gheza 2021-12-23 18:38:23 +01:00
parent c335f9b35a
commit 043beb3631
3 changed files with 105 additions and 12 deletions

View File

@ -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),
]);
}
);
}

18
backend/composer.lock generated
View File

@ -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",

View File

@ -1,4 +1,8 @@
<?php
use Lcobucci\JWT\Configuration;
use Lcobucci\JWT\Signer;
use Lcobucci\JWT\Signer\Key\InMemory;
require_once("vendor/autoload.php");
require("config.php");
@ -10,7 +14,13 @@ $db = \Delight\Db\PdoDatabase::fromDsn(
)
);
$auth = new \Delight\Auth\Auth($db, null, DB_PREFIX."_");
$JWTconfig = Configuration::forAsymmetricSigner(
new Signer\Rsa\Sha256(),
InMemory::base64Encoded('LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRRFR2d0U4N010Z1JFWUwKVEw0YUhoUW8zWnpvZ214eHZNVXNLblB6eXhSczFZclhPU09wd04wbnBzWGFyQktLVklVTU5MZkZPRHAvdm5RbgoyWnAwNk44WEc1OVdBT0t3dkM0TWZ4TERRa0ErSlhnZ3pIbGtiVm9UTitkVWtkWUlGcVNLdUFQR3dpV1RvUksyClN4RWhpajNyRTJGT044alFadkR4WmtpUDlhNHZ4Sk8zT1RQUXdLcmVkWEZpT2JzWEQvYzNSdExGaEtjdGpDeUgKT0lyUDBiUUVzZWUvbTdKTnRHNHJ5NkJQdXNONndiK3ZKbzVpZUJZUGEzYzE5YWtOcTZxL25ZV2hwbGhra0pTdQphT3JMNXhYRUZ6STVUdmN2blhSNTY4R1ZjeEs4WUxmRmtkeHBzWEd0NXJBYmVoMGgvVTVrSUxFQXF2OFA5UEdUClpwaWNLYnJuQWdNQkFBRUNnZ0VBZDN5VFFFUUhSOTEvQVNWZktQSE1RbnM3N2VDYlBWdGVrRnVzYnVnc01IWVkKRVBkSGJxVk1wdkZ2T01SYytmNVR6ZDE1emlxNnFCZGJDSm04bFRoTG00aVUwejFRcnBhaURaOHZnVXZEWU01WQpDWG9aRGxpK3VaV1VUcDYwL245NGZtYjBpcFpJQ2hTY3NJMlByek9KV1R2b2J2RC91c284TUp5ZFdjOHphZlFtCnVxWXp5Z09makZadlU0bFNmZ3pwZWZocHF1eTBKVXk1VGlLUm1HVW53TGIzVHRjc1ZhdmpzbjRRbU53TFlnT0YKMk9FK1IxMmV4M3BBS1RpUkU2RmNuRTF4RklvMUdLaEJhMk90Z3czTURPNkdnK2tuOFE0YWxLejZDNlJSbGdhSApSN3NZekVmSmhzay9HR0ZUWU96WEtRejJsU2FTdEt0OXdLQ29yMDRSY1FLQmdRRHpQT3U1akNUZmF5VW83eFkyCmpIdGlvZ0h5S0xMT2J0OWwzcWJ3Z1huYUQ2cm54WU52Q3JBME9NdlQraVpYc0ZaS0prWXpKcjhaT3hPcFBST2sKMTBXZE9hZWZpd1V5TDVkeXB1ZVN3bElEd1ZtK2hJNEJzODJNYWpIdHpPb3poKzczd0ErYXc1clBzODRVaXg5dwpWYmJ3YVZSNnFQL0JWMDl5SllTNWtRN2Ztd0tCZ1FEZTJ4anl3WDJkMk1DK3F6UnIrTGZVKzErZ3EwampoQkNYCldIcVJONklFQ0IweFRuWFVmOVdML1ZDb0kxLzU1QmhkYmJFamErNGJ0WWdjWFNQbWxYQklSS1E0VnRGZlZtWUIKa1BYZUQ4b1o3THl1TmRDc2JLTmUreDFJSFhEZTZXZnMzTDl1bENmWHhlSUU4NHd5M2ZkNjZtUWFoeVhWOWlEOQpDa3VpZk1xVXBRS0JnUUNpeWRIbFkxTEdKL285dEEyRXdtNU5hNm1ydk9zMlYyT3gxTnFiT2J3b1liWDYyZWlGCjUzeFg1dThiVmw1VTc1SkFtKzc5aXQvNGJkNVJ0S3V4OWRVRVRiTE9od2NhT0ZtK2hNK1ZHL0l4eXpSWjJuTUQKMXFjcFkyVTVCcHh6a25VdllGM1JNVG9wNmVkeFBrN3pLcHA5dWJDdFN1K29JTnZ0eEFoWS9Ta2NJd0tCZ0dQMQp1cGNJbXlPMkdaNXNoTEw1ZU51YmRTVklMd1YrTTBMdmVPcXlIWVhaYmQ2ejVyNU9LS2NHRkt1V1VuSndFVTIyCjZnR05ZOXdoN005c0o3SkJ6WDljNnB3cXRQY2lkZGEyQXRKOEdwYk9UVU9HOS9hZk5CaGlZcHY2T0txRDN3MnIKWm1KZktnL3F2cHFoODN6TmV6Z3k4bnZEcXdEeHlaSTJqLzV1SXgvUkFvR0JBTVdSbXh0djZIMmNLaGliSS9hSQpNVEpNNFFSanlQTnhRcXZBUXN2K29IVWJpZDA2VkszSkUrOWlReWl0aGpjZk5Pd25DYW9PN0k3cUFqOVFFZkpTCk1aUWMvVy80REhKZWJvMmtkMTF5b1hQVlRYWE91RXdMU0tDZWpCWEFCQlkwTVBOdVBVbWlYZVUwTzNUeWkzN0oKVFVLenJnY2Q3TnZsQTQxWTR4S2NPcUVBCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0='),
InMemory::base64Encoded('LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEwNzhCUE96TFlFUkdDMHkrR2g0VQpLTjJjNklKc2NiekZMQ3B6ODhzVWJOV0sxemtqcWNEZEo2YkYycXdTaWxTRkREUzN4VGc2Zjc1MEo5bWFkT2pmCkZ4dWZWZ0Rpc0x3dURIOFN3MEpBUGlWNElNeDVaRzFhRXpmblZKSFdDQmFraXJnRHhzSWxrNkVTdGtzUklZbzkKNnhOaFRqZkkwR2J3OFdaSWovV3VMOFNUdHprejBNQ3EzblZ4WWptN0Z3LzNOMGJTeFlTbkxZd3NoemlLejlHMApCTEhudjV1eVRiUnVLOHVnVDdyRGVzRy9yeWFPWW5nV0QydDNOZldwRGF1cXY1MkZvYVpZWkpDVXJtanF5K2NWCnhCY3lPVTczTDUxMGVldkJsWE1TdkdDM3haSGNhYkZ4cmVhd0czb2RJZjFPWkNDeEFLci9EL1R4azJhWW5DbTYKNXdJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t')
);
$auth = new \Delight\Auth\Auth($db, $JWTconfig, null, DB_PREFIX."_");
final class Role
{
@ -35,7 +45,7 @@ final class Role
class Users
{
private $db = null;
private $auth = null;
public $auth = null;
private $profile_names = [];
private $user_names = [];
public $holidays = null;
@ -112,6 +122,15 @@ class Users
//bdump(["id" => $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 {