Liste de tous les tokens * */ public static function getAll(){ /* [1] On prepare et execute la requete =========================================================*/ $request = Database::getPDO()->query("SELECT id_token as id, name, token, expires, (CURDATE() > expires) as expired FROM api_token ORDER BY expires DESC"); /* [3] On retourne les donnees =========================================================*/ return Database::delNumeric( $request->fetchAll() ); } /* RETOURNE LE TOKEN D'ID SPECIFIE OU FALSE * * @id_token UID du token en question * * @return token Retourne les donnees du token ou FALSE si erreur * */ public static function getById($id_token){ /* [0] Verification des INPUT =========================================================*/ if( !Database::check('id', $id_token) ) return false; /* [1] On cherche dans la bdd =========================================================*/ $get_token = Database::getPDO()->prepare("SELECT id_token FROM api_token WHERE id_token = :id_token"); $get_token->execute( array( ':id_token' => $id_token ) ); /* [2] On renvoie la valeur ou FALSE =========================================================*/ return $get_token->fetch(); } /* VERIFIE SI UN TOKEN EST VALIDE * * @token Token en question * * @return permissions 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 du token local =========================================================*/ if( substr($_SESSION['session_token'], 0, 40) == $token ) return true; /* [2] 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; /* [3] 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 Nom attribue au token * @duration Duree du token en jours * * @return id_token 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(50)', $name) || !Database::check('int', $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::secure_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 UID du token en question * * @return status 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( !self::getById($id_token) ) 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 self::getById($id_token) === false; } } ?>