192 lines
5.4 KiB
PHP
192 lines
5.4 KiB
PHP
<?php
|
|
|
|
// TODO: Gestion des droits attribués aux tokens
|
|
|
|
namespace database\repo;
|
|
use \manager\sessionManager;
|
|
use \database\core\DatabaseDriver;
|
|
use \api\core\Checker;
|
|
|
|
class token extends parentRepo{
|
|
|
|
protected static function table_name(){ static $table_name = 'api_token'; return $table_name; }
|
|
|
|
/* Gestion de la table Token (pour secu) et des derivations
|
|
*
|
|
* 1. Gestion des access
|
|
* - getAll()
|
|
* - getById(id_token)
|
|
*
|
|
* 2. Gestion de la verification
|
|
* - check(token, id_personne)
|
|
*
|
|
* 4. Gestion de creation
|
|
* - generate(name, duration)
|
|
*
|
|
* 4. Gestion de creation
|
|
* - create(pseudo, nom, prenom, facebook, telephone)
|
|
*
|
|
*
|
|
*/
|
|
|
|
|
|
/* RETOURNE LA LISTE DE TOUS LES TOKENS
|
|
*
|
|
* @return tokens<Array> Liste de tous les tokens
|
|
*
|
|
*/
|
|
public static function getAll(){
|
|
/* [1] On prepare et execute la requete
|
|
=========================================================*/
|
|
$request = DatabaseDriver::getPDO()->query("SELECT id_token, name, token, expires, (CURDATE() > expires) as expired
|
|
FROM api_token
|
|
ORDER BY expires DESC");
|
|
|
|
|
|
/* [3] On retourne les donnees
|
|
=========================================================*/
|
|
return DatabaseDriver::delNumeric( $request->fetchAll() );
|
|
}
|
|
|
|
|
|
|
|
/* VERIFIE SI UN TOKEN EST VALIDE
|
|
*
|
|
* @token<String> Token en question
|
|
*
|
|
* @return permissions<Array> Retourne les permissions (droits) du token s'il est valide sinon retourne FAUX
|
|
*
|
|
*/
|
|
public static function check($token){
|
|
/* [0] Verification des INPUT
|
|
=========================================================*/
|
|
// si le format est incorrect, on retourne FAUX
|
|
if( !Checker::run('hash', $token) ) return false;
|
|
|
|
|
|
/* [1] Verification dans la base de donnees
|
|
=========================================================*/
|
|
$check = DatabaseDriver::getPDO()->prepare("SELECT id_token, permission
|
|
FROM api_token
|
|
WHERE CURDATE() <= expires
|
|
AND token = :token");
|
|
$check->execute(array( ':token' => $token ));
|
|
|
|
$token_info = $check->fetch();
|
|
|
|
// Si le token est inactif, on retourne FALSE
|
|
if( $token_info === false ) return false;
|
|
|
|
|
|
/* [2] On retourne le resultat (les permissions du token)
|
|
=========================================================*/
|
|
return explode( ',', str_replace(' ', '', $token_info['permission']) );
|
|
}
|
|
|
|
|
|
|
|
|
|
/* GENERE UN NOUVEAU TOKEN DE NOM ET EXPIRATION SPECIFIEE
|
|
*
|
|
* @name<String> Nom attribue au token
|
|
* @duration<int> Duree du token en jours
|
|
*
|
|
* @return id_token<int> Renvoie l'id du token cree
|
|
* @return FALSE Renvoie FALSE si erreur
|
|
*
|
|
*/
|
|
public static function generate($name, $duration){
|
|
/* [0] Verification des INPUT
|
|
=========================================================*/
|
|
if( !Checker::run('varchar(3,50)', $name) || !Checker::run('id', $duration) ) return false;
|
|
|
|
|
|
// On definit la date d'expiration du token
|
|
$expiration = date('Y-m-d', time()+$duration*3600*24);
|
|
|
|
/* [1] Generation d'un token si pas deja dans la BDD
|
|
=========================================================*/
|
|
$token_used = true;
|
|
// tant qu'un token a deja la meme valeur
|
|
while( $token_used ){
|
|
$token = sessionManager::sha1(uniqid());
|
|
|
|
// Verification dans la BDD
|
|
$check = DatabaseDriver::getPDO()->prepare("SELECT id_token FROM api_token WHERE token = :token");
|
|
$check->execute( array( ':token' => $token ) );
|
|
|
|
// VRAI un token est identique
|
|
$token_used = $check->fetch() !== false;
|
|
}
|
|
|
|
|
|
/* [2] On cree le token
|
|
=========================================================*/
|
|
$create = DatabaseDriver::getPDO()->prepare("INSERT INTO api_token(id_token, token, name, expires)
|
|
VALUES(DEFAULT, :token, :name, :expiration)");
|
|
$create->execute(array(
|
|
':token' => $token,
|
|
':name' => $name,
|
|
':expiration' => $expiration
|
|
));
|
|
|
|
/* [3] On verifie qu'il a bien ete cree
|
|
=========================================================*/
|
|
$created = DatabaseDriver::getPDO()->prepare("SELECT id_token FROM api_token
|
|
WHERE token = :token
|
|
AND name = :name");
|
|
$created->execute(array(
|
|
':token' => $token,
|
|
':name' => $name
|
|
));
|
|
|
|
$created_data = $created->fetch();
|
|
|
|
// Si pas cree, on retourne une erreur
|
|
if( $created_data === false ) return false;
|
|
|
|
|
|
/* [4] On retourne l'id du token cree
|
|
=========================================================*/
|
|
return $created_data['id_token'];
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* SUPPRIME UN TOKEN D'ID SPECIFIE
|
|
*
|
|
* @id_token<int> UID du token en question
|
|
*
|
|
* @return status<bool> VRAI si le token est bien cree sinon FALSE
|
|
*
|
|
*/
|
|
public static function remove($id_token){
|
|
/* [0] Verification des INPUT
|
|
=========================================================*/
|
|
if( !Checker::run('id', $id_token) ) return false;
|
|
|
|
|
|
/* [1] On verifie l'existance du token
|
|
=========================================================*/
|
|
if( count(self::getById($id_token)) == 0 ) return false;
|
|
|
|
|
|
/* [2] Suppression du token
|
|
=========================================================*/
|
|
$remove = DatabaseDriver::getPDO()->prepare("DELETE FROM api_token
|
|
WHERE id_token = :id_token");
|
|
$remove->execute(array( ':id_token' => $id_token ));
|
|
|
|
|
|
/* [3] On retourne VRAI si le token est bien supprime
|
|
=========================================================*/
|
|
return count(self::getById($id_token)) == 0;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
?>
|