Implement login
This commit is contained in:
parent
c335f9b35a
commit
043beb3631
|
@ -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),
|
||||
]);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue