Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
15.38% |
6 / 39 |
token | |
0.00% |
0 / 1 |
|
20.00% |
1 / 5 |
115.38 | |
15.38% |
6 / 39 |
table_name | |
100.00% |
1 / 1 |
1 | ||||||
getAll | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
check | |
0.00% |
0 / 1 |
3.03 | |
85.71% |
6 / 7 |
|||
generate | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 23 |
|||
remove | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 6 |
<?php | |
namespace manager\repo; | |
use \manager\sessionManager; | |
use \manager\Database; | |
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 = Database::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 Database::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( !Database::check('sha1', $token) ) return false; | |
/* [1] Verification dans la base de donnees | |
=========================================================*/ | |
$check = Database::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( !Database::check('varchar(3,50)', $name) || !Database::check('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 = Database::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 = Database::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 = Database::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( !Database::check('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 = Database::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; | |
} | |
} | |
?> |