Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 4
CRAP
15.38% covered (danger)
15.38%
6 / 39
token
0.00% covered (danger)
0.00%
0 / 1
20.00% covered (danger)
20.00%
1 / 5
115.38
15.38% covered (danger)
15.38%
6 / 39
 table_name
100.00% covered (success)
100.00%
1 / 1
1  
 
 getAll
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 check
0.00% covered (danger)
0.00%
0 / 1
3.03
85.71% covered (warning)
85.71%
6 / 7
 generate
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 23
 remove
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
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;
        }
    }
?>