diff --git a/automate.php b/automate.php index 6e7cf89..6c1eadf 100755 --- a/automate.php +++ b/automate.php @@ -6,10 +6,6 @@ use \manager\ManagerError; use \manager\Repo; - use \manager\module\callLog; - - debug(); - @@ -26,7 +22,7 @@ /* [2] On cree la requete =========================================================*/ - $request = new ModuleRequest('callLog/unserialize', array($file_content)); + $request = new ModuleRequest('call_log/unserialize', array($file_content)); $answer = $request->dispatch(); // on l'execute /* [3] Si erreur @@ -68,6 +64,13 @@ var_dump( $contact ); } - parseCallLog(); + // parseCallLog(); + + + $request = new ModuleRequest('token/generate', array('newtoken', '2') ); + $answer = $request->dispatch(); + + var_dump( ManagerError::explicit($request->error) ); + var_dump( $answer ); ?> \ No newline at end of file diff --git a/config/modules.json b/config/modules.json index 5a23a2d..79a9639 100755 --- a/config/modules.json +++ b/config/modules.json @@ -1,56 +1,17 @@ { - "callLog": [ - + "call_log": [ "unserialize" - ], "charts": [ - "network_data", "network_render" - ], - "userDefault" :[ - "create", - - "link", - "unlink", - - "search", - - "getAll", - "getById", - "getByCode", - "getByUsername", - - "getClusters", - - "edit", - - "delete" - ], - - "machineDefault" :[ - "create", - - "link", - "unlink", - - "search", - - "getAll", - "getById", - "getByCode", - "getByName", - - "getClusters", - - "edit", - - "delete" + "token" :[ + "remove", + "generate" ] } \ No newline at end of file diff --git a/config/repositories.json b/config/repositories.json index bd2feb1..24fd6f7 100755 --- a/config/repositories.json +++ b/config/repositories.json @@ -6,7 +6,9 @@ "token": [ "getAll", - "check" + "getById", + "check", + "generate" ] } \ No newline at end of file diff --git a/css/layout.css b/css/layout.css index f4da49d..8840469 100755 --- a/css/layout.css +++ b/css/layout.css @@ -1,2 +1,2 @@ -#WRAPPER{display:block;position:fixed;top:0;left:0;width:100%;height:100%;background-color:#e8e8e8;font-family:'Open Sans';font-size:15px}#WRAPPER>#HEADER{display:flex;position:absolute;top:0;left:15em;width:calc( 100% - 15em );height:calc( 5em - 1px );border-bottom:1px solid #e5e5e5;background-color:#fff;flex-direction:row;justify-content:flex-end;align-content:space-around;z-index:10}#WRAPPER>#MENU-SIDE{display:block;position:absolute;top:0;left:0;width:15em;height:100%;box-shadow:2px 1px 3px #ddd;background-color:#32323a;transition:all .3s;z-index:9}#WRAPPER>#CONTAINER{display:flex;position:absolute;top:5em;left:15em;width:calc( 100% - 15em - 2*1em );height:calc( 100% - 15em - 2*1em );padding:1em;flex-direction:row;justify-content:space-between;overflow-x:none;overflow-y:auto} +#WRAPPER{display:block;position:fixed;top:0;left:0;width:100%;height:100%;background-color:#e8e8e8;font-family:'Open Sans';font-size:15px;overflow-x:hidden;overflow-y:auto}#WRAPPER>#HEADER{display:flex;position:absolute;top:0;left:15em;width:calc( 100% - 15em );height:calc( 5em - 1px );border-bottom:1px solid #e5e5e5;background-color:#fff;flex-direction:row;justify-content:flex-end;align-content:space-around;z-index:10}#WRAPPER>#MENU-SIDE{display:block;position:fixed;top:0;left:0;width:15em;height:100%;box-shadow:2px 1px 3px #ddd;background-color:#32323a;transition:all .3s;z-index:9}#WRAPPER>#CONTAINER{display:flex;position:absolute;top:5em;left:15em;width:calc( 100% - 15em - 2*1em );min-height:calc( 100% - 5em - 2*1em );padding:1em;flex-direction:row;justify-content:space-between;overflow-x:none;overflow-y:auto} /*# sourceMappingURL=layout.css.map */ diff --git a/css/layout.css.map b/css/layout.css.map index e40d3c5..a0f5c89 100755 --- a/css/layout.css.map +++ b/css/layout.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAEA,QAAQ,CACP,OAAO,CAAE,KAAK,CACd,QAAQ,CAAE,KAAK,CACd,GAAG,CAAE,CAAC,CACN,IAAI,CAAE,CAAC,CACP,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CAEb,gBAAgB,CCPE,OAAO,CDSzB,WAAW,CAAE,WAAW,CACxB,SAAS,CAAE,IAAI,CAKf,gBAAW,CACV,OAAO,CAAE,IAAI,CACb,QAAQ,CAAE,QAAQ,CACjB,GAAG,CAAE,CAAC,CACN,IAAI,CCJW,IAAI,CDKnB,KAAK,CAAE,mBAAkC,CACzC,MAAM,CAAE,iBAA+B,CAExC,aAAa,CAAE,iBAA8B,CAE7C,gBAAgB,CCxBC,IAAO,CD2BxB,cAAc,CAAE,GAAG,CACnB,eAAe,CAAE,QAAQ,CACzB,aAAa,CAAE,YAAY,CAE3B,OAAO,CAAE,EAAE,CAQZ,mBAAc,CACb,OAAO,CAAE,KAAK,CACd,QAAQ,CAAE,QAAQ,CACjB,GAAG,CAAE,CAAC,CACN,IAAI,CAAE,CAAC,CACP,KAAK,CC9BU,IAAI,CD+BnB,MAAM,CAAE,IAAI,CAEb,UAAU,CAAE,gBAAgB,CAE5B,gBAAgB,CC5CA,OAAO,CD8CvB,UAAU,CAAE,OAAO,CAEnB,OAAO,CAAE,CAAC,CAMX,mBAAc,CACb,OAAO,CAAE,IAAI,CACb,QAAQ,CAAE,QAAQ,CACjB,GAAG,CC/CY,GAAG,CDgDlB,IAAI,CCjDW,IAAI,CDkDnB,KAAK,CAAE,2BAA0C,CACjD,MAAM,CAAE,2BAA0C,CACnD,OAAO,CAAE,GAAG,CAGZ,cAAc,CAAE,GAAG,CACnB,eAAe,CAAE,aAAa,CAE9B,UAAU,CAAE,IAAI,CAChB,UAAU,CAAE,IAAI", +"mappings": "AAEA,QAAQ,CACP,OAAO,CAAE,KAAK,CACd,QAAQ,CAAE,KAAK,CACd,GAAG,CAAE,CAAC,CACN,IAAI,CAAE,CAAC,CACP,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CAEb,gBAAgB,CCPE,OAAO,CDSzB,WAAW,CAAE,WAAW,CACxB,SAAS,CAAE,IAAI,CAEf,UAAU,CAAE,MAAM,CAClB,UAAU,CAAE,IAAI,CAKhB,gBAAW,CACV,OAAO,CAAE,IAAI,CACb,QAAQ,CAAE,QAAQ,CACjB,GAAG,CAAE,CAAC,CACN,IAAI,CCPW,IAAI,CDQnB,KAAK,CAAE,mBAAkC,CACzC,MAAM,CAAE,iBAA+B,CAExC,aAAa,CAAE,iBAA8B,CAE7C,gBAAgB,CC3BC,IAAO,CD8BxB,cAAc,CAAE,GAAG,CACnB,eAAe,CAAE,QAAQ,CACzB,aAAa,CAAE,YAAY,CAE3B,OAAO,CAAE,EAAE,CAQZ,mBAAc,CACb,OAAO,CAAE,KAAK,CACd,QAAQ,CAAE,KAAK,CACd,GAAG,CAAE,CAAC,CACN,IAAI,CAAE,CAAC,CACP,KAAK,CCjCU,IAAI,CDkCnB,MAAM,CAAE,IAAI,CAEb,UAAU,CAAE,gBAAgB,CAE5B,gBAAgB,CC/CA,OAAO,CDiDvB,UAAU,CAAE,OAAO,CAEnB,OAAO,CAAE,CAAC,CAMX,mBAAc,CACb,OAAO,CAAE,IAAI,CACb,QAAQ,CAAE,QAAQ,CACjB,GAAG,CClDY,GAAG,CDmDlB,IAAI,CCpDW,IAAI,CDqDnB,KAAK,CAAE,2BAA0C,CACjD,UAAU,CAAE,0BAAwC,CACrD,OAAO,CAAE,GAAG,CAGZ,cAAc,CAAE,GAAG,CACnB,eAAe,CAAE,aAAa,CAE9B,UAAU,CAAE,IAAI,CAChB,UAAU,CAAE,IAAI", "sources": ["layout.scss","constants.scss"], "names": [], "file": "layout.css" diff --git a/css/layout.scss b/css/layout.scss index 5bd237a..11cdfa4 100755 --- a/css/layout.scss +++ b/css/layout.scss @@ -13,6 +13,9 @@ font-family: 'Open Sans'; font-size: 15px; + overflow-x: hidden; + overflow-y: auto; + /* [1] Header de la page ==========================================*/ @@ -43,7 +46,7 @@ // Gestion du menu & > #MENU-SIDE{ display: block; - position: absolute; + position: fixed; top: 0; left: 0; width: $menu-side-width; @@ -67,7 +70,7 @@ top: $header-height; left: $menu-side-width; width: calc( 100% - #{$menu-side-width} - 2*1em ); - height: calc( 100% - #{$menu-side-width} - 2*1em ); + min-height: calc( 100% - #{$header-height} - 2*1em ); padding: 1em; // Flex properties diff --git a/manager/Database.php b/manager/Database.php index dfe3052..89f874b 100755 --- a/manager/Database.php +++ b/manager/Database.php @@ -191,10 +191,18 @@ return $checker && is_numeric($value) && $value <= 2147483647 && $value >= -2147483647; break; + case 'int': + return $checker && is_numeric($value) && $value <= 2147483647 && $value >= 0; + break; + case 'varchar(255)': return $checker && is_string($value) && strlen($value) <= 255; break; + case 'varchar(50)': + return $checker && is_string($value) && strlen($value) <= 50; + break; + /* (2) Utilisateur */ case 'user.code': case 'machine.code': diff --git a/manager/module/callLog.php b/manager/module/call_log.php similarity index 99% rename from manager/module/callLog.php rename to manager/module/call_log.php index a7d7071..5cd6ac8 100644 --- a/manager/module/callLog.php +++ b/manager/module/call_log.php @@ -6,7 +6,7 @@ use \manager\ManagerError; use \manager\Repo; - class callLog{ + class call_log{ /* DESERIALISATION D'UN JOURNAL D'APPEL diff --git a/manager/module/charts.php b/manager/module/charts.php old mode 100644 new mode 100755 diff --git a/manager/module/token.php b/manager/module/token.php new file mode 100755 index 0000000..079dbe3 --- /dev/null +++ b/manager/module/token.php @@ -0,0 +1,109 @@ + UID du token en question + * + * @return status Retourne l'etat de la suppression (VRAI -> fait/FAUX -> erreur) + * + */ + public static function remove($id_token){ + /* [0] Verification des INPUT + =========================================================*/ + if( !Database::check('id', $id_token) ) return array('ModuleError' => ManagerError::ParamError); + + + /* [1] Verification de l'existance du token + =========================================================*/ + $token_exists = new Repo('token/getById', array($id_token)); + + // On renvoie une erreur si le token n'existe pas + if( $token_exists->answer() == false ) return array('ModuleError' => ManagerError::Success, 'status' => false); + + + /* [2] Suppression du token + =========================================================*/ + $token_exists = new Repo('token/getById', array($id_token)); + + + /* [3] On verifie que le token soit supprime + =========================================================*/ + $token_removed = new Repo('token/getById', array($id_token)); + + // On renvoie une erreur si le token existe encore + if( $token_removed->answer() !== false ) return array('ModuleError' => ManagerError::Success, 'status' => false); + + + /* [n] Gestion du retour quand tout est normal + =========================================================*/ + return array( + 'ModuleError' => ManagerError::Success, + 'status' => true + ); + } + + + + + + + /* 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] On cree le token et recupere son id ou FAUX + =========================================================*/ + $create = new Repo('token/generate', array($name, $duration)); + $created = $create->answer(); + + + // Si erreur de creation + if( $created === false ) return array('ModuleError' => ManagerError::ModuleError ); + + + /* [2] Gestion du retour + =========================================================*/ + return array( + 'ModuleError' => ManagerError::Success, + 'id_token' => $created + ); + } + + + + + + + + + + + + } + + +?> \ No newline at end of file diff --git a/manager/repo/token.php b/manager/repo/token.php index c127448..990729d 100644 --- a/manager/repo/token.php +++ b/manager/repo/token.php @@ -1,6 +1,7 @@ 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 * @@ -82,8 +108,71 @@ } + /* 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']; + + } + }