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 FROM api_token ORDER BY expires DESC"); /* [2] On recupere les donnees et ajout le status d'expire ou non =========================================================*/ $data = Database::delNumeric( $request->fetchAll() ); // Si le token est expire foreach($data as $i=>$token) $data[$i]['expired'] = time() > strtotime($token['expires']); /* [3] On retourne le resultat =========================================================*/ return $data; } /* 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 valid Retourne si VRAI ou FAUX le token est valid * */ 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 FROM api_token WHERE CURDATE() < expires AND token = :token"); $check->execute(array( ':token' => $token )); /* [2] On retourne le resultat =========================================================*/ return $check->fetch() !== false; } /* 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 array('ModuleError' => ManagerError::ParamError); // erreur de parametre /* [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, CURDATE()+:duration)"); $create->execute(array( ':token' => $token, ':name' => $name, ':duration' => $duration+1 )); /* [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 AND duration = CURDATE()+:duration"); $created->execute(array( ':token' => $token, ':name' => $name, ':duration' => $duration+1 )); // Si pas cree, on retourne une erreur if( ($token=$created->fetch()) === false ) return false; /* [4] On retourne l'id du token cree =========================================================*/ return $token['id_token']; } } ?>