diff --git a/automate.php b/automate.php index 6c1eadf..1014be3 100755 --- a/automate.php +++ b/automate.php @@ -3,6 +3,7 @@ use \manager\ModuleRequest; use \manager\ResourceDispatcher; + use \manager\sessionManager; use \manager\ManagerError; use \manager\Repo; @@ -64,13 +65,7 @@ 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/repositories.json b/config/repositories.json index 24fd6f7..88d148c 100755 --- a/config/repositories.json +++ b/config/repositories.json @@ -7,8 +7,10 @@ "token": [ "getAll", "getById", + "check", - "generate" + "generate", + "remove" ] } \ No newline at end of file diff --git a/css/global.css b/css/global.css index 382a60b..1645009 100755 --- a/css/global.css +++ b/css/global.css @@ -1,2 +1,2 @@ -section[data-panel-list]{display:block;position:relative;border-radius:3px;border:1px solid #ccc;background-color:#fff;font-size:.8em}section[data-panel-list]>div[data-header]{display:flex;position:relative;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;align-items:center;padding:.5em .7em;border-radius:3px 3px 0 0;border-bottom:1px solid #ccc;background-color:#f5f5f5;box-shadow:inset 0 0 5px #eee}section[data-panel-list]>div[data-header]>span,section[data-panel-list]>div[data-header]>button{color:#333;font-weight:bold;line-height:2em}section[data-panel-list]>div[data-header]>button{padding:.1em .7em;border-radius:3px;border:1px solid #555;background:#f5f5f5;transition:all .2s ease-in-out}section[data-panel-list]>div[data-header]>button:hover{background:#333;color:#fff}section[data-panel-list]>div[data-description]{display:block;position:relative;border-bottom:1px solid #ccc;padding:.7em .7em;color:#666}section[data-panel-list]>ul[data-list]{display:flex;position:relative;flex-direction:column;justify-content:flex-start;flex-wrap:nowrap;margin:0;padding:0;list-style:none}section[data-panel-list]>ul[data-list]>li[data-element]{display:flex;flex-direction:row;justify-content:space-between;align-items:center;flex-wrap:nowrap;padding:.2em 1em}section[data-panel-list]>ul[data-list]>li[data-element]:not(:last-child){border-bottom:1px solid #ccc}section[data-panel-list]>ul[data-list]>li[data-element]>div:nth-child(1){display:flex;width:10em;height:6em;flex-direction:column;justify-content:flex-end;align-items:center;background:url("/f/svg/token/st/container/666666") center 1em no-repeat;background-size:auto 50%}section[data-panel-list]>ul[data-list]>li[data-element]>div:nth-child(1).active{background-image:url("/f/svg/token/st/container/4cbf86")}section[data-panel-list]>ul[data-list]>li[data-element]>div:nth-child(1)>span{display:block;padding:0 .4em;border-radius:3px;border:1px solid #ddd;font-size:.8em;color:#666;text-transform:uppercase;font-weight:bold}section[data-panel-list]>ul[data-list]>li[data-element]>div:nth-child(n+2){display:flex;position:relative;flex:10em;padding:1em;flex-direction:column;justify-content:flex-start;align-items:flex-start;font-size:.9em;color:#666;font-weight:bold}section[data-panel-list]>ul[data-list]>li[data-element]>div:nth-child(n+2)>span[data-prefix]:before{content:attr(data-prefix) ": ";font-weight:normal}section[data-panel-list]>ul[data-list]>li[data-element]>button{padding:.1em .7em;height:2em;border-radius:3px;border:1px solid #de2b08;background:#fff;color:#de2b08;font-weight:bold;transition:all .2s ease-in-out}section[data-panel-list]>ul[data-list]>li[data-element]>button:hover{background:#de2b08;color:#fff}section[data-panel-list]>div[data-add]{display:none;position:relative;padding:1em;border-top:1px solid #ccc;background-color:#f5f5f5;font-weight:bold}section[data-panel-list]>div[data-add].active{display:block}section[data-panel-list]>div[data-add]>input[type='text']{margin:1em 0;padding:.3em .5em;border-radius:3px;border:1px solid #999;background-color:#fff;color:#000;font-weight:normal} +section[data-panel-list]{display:block;position:relative;border-radius:3px;border:1px solid #ccc;background-color:#fff;font-size:.8em}section[data-panel-list]>div[data-header]{display:flex;position:relative;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;align-items:center;padding:.5em .7em;border-radius:3px 3px 0 0;border-bottom:1px solid #ccc;background-color:#f5f5f5;box-shadow:inset 0 0 5px #eee}section[data-panel-list]>div[data-header]>span,section[data-panel-list]>div[data-header]>button{color:#333;font-weight:bold;line-height:2em}section[data-panel-list]>div[data-header]>button{padding:.1em .7em;border-radius:3px;border:1px solid #555;background:#f5f5f5;transition:all .2s ease-in-out}section[data-panel-list]>div[data-header]>button:hover{background:#333;color:#fff}section[data-panel-list]>div[data-description]{display:block;position:relative;border-bottom:1px solid #ccc;padding:.7em .7em;color:#666}section[data-panel-list]>ul[data-list]{display:flex;position:relative;flex-direction:column;justify-content:flex-start;flex-wrap:nowrap;margin:0;padding:0;list-style:none}section[data-panel-list]>ul[data-list]>li[data-element]{display:flex;flex-direction:row;justify-content:space-between;align-items:center;flex-wrap:nowrap;padding:.2em 1em}section[data-panel-list]>ul[data-list]>li[data-element]:not(:last-child){border-bottom:1px solid #ccc}section[data-panel-list]>ul[data-list]>li[data-element]>div:nth-child(1){display:flex;width:10em;height:6em;flex-direction:column;justify-content:flex-end;align-items:center;background:url("/f/svg/token/st/container/666666") center 1em no-repeat;background-size:auto 50%}section[data-panel-list]>ul[data-list]>li[data-element]>div:nth-child(1).active{background-image:url("/f/svg/token/st/container/4cbf86")}section[data-panel-list]>ul[data-list]>li[data-element]>div:nth-child(1)>span{display:block;padding:0 .4em;border-radius:3px;border:1px solid #ddd;font-size:.8em;color:#666;text-transform:uppercase;font-weight:bold}section[data-panel-list]>ul[data-list]>li[data-element]>div:nth-child(n+2){display:flex;position:relative;flex:10em;padding:1em;flex-direction:column;justify-content:flex-start;align-items:flex-start;font-size:.9em;color:#666;font-weight:bold}section[data-panel-list]>ul[data-list]>li[data-element]>div:nth-child(n+2)>span[data-prefix]:before{content:attr(data-prefix) ": ";font-weight:normal}section[data-panel-list]>ul[data-list]>li[data-element]>button{padding:.1em .7em;height:2em;border-radius:3px;border:1px solid #de2b08;background:#fff;color:#de2b08;font-weight:bold;transition:all .2s ease-in-out}section[data-panel-list]>ul[data-list]>li[data-element]>button:hover{background:#de2b08;color:#fff}section[data-panel-list]>div[data-add]{display:none;position:relative;padding:1em;border-bottom:1px solid #ccc;background-color:#f5f5f5;font-weight:bold}section[data-panel-list]>div[data-add].active{display:block}section[data-panel-list]>div[data-add]>input[type='text']{margin:1em 0;padding:.3em .5em;border-radius:3px;border:1px solid #999;background-color:#fff;color:#000;font-weight:normal} /*# sourceMappingURL=global.css.map */ diff --git a/css/global.css.map b/css/global.css.map index da4bf12..d1d4f19 100755 --- a/css/global.css.map +++ b/css/global.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "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", +"mappings": "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", "sources": ["global.scss"], "names": [], "file": "global.css" diff --git a/css/global.scss b/css/global.scss index 3fe94b3..3574b9b 100755 --- a/css/global.scss +++ b/css/global.scss @@ -208,7 +208,7 @@ section[data-panel-list]{ padding: 1em; - border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; background-color: #f5f5f5; diff --git a/js/action-script.js b/js/action-script.js index af400fb..c90f70d 100755 --- a/js/action-script.js +++ b/js/action-script.js @@ -197,4 +197,9 @@ + /* [6] Gestion du rechargement de page + =========================================================*/ + function reload(){ navMenu( pageManager.page ); } + + // } \ No newline at end of file diff --git a/js/lib/api.js b/js/lib/api.js index b9209bc..ba2df59 100755 --- a/js/lib/api.js +++ b/js/lib/api.js @@ -10,6 +10,7 @@ APIClass.prototype = { * * @param pRequest l'objet passé en JSON à http://host/api/ * @param pHandler fonction qui s'éxécutera lors de la réponse (1 argument -> réponse) + * @param pToken si donne, token d'auth pour l'api * * @return answer l'objet retourné par http://host/api/ via pHandler (1er argument) * @@ -26,7 +27,7 @@ APIClass.prototype = { * 3. on passe une fonction qui utilise un argument (sera la réponse de http://host/api/) (sous forme d'objet) * */ - send: function(pRequest, pHandler){ + send: function(pRequest, pHandler, pToken){ // Si le chemin de delegation n'est pas renseigne, on renvoie une erreur if( !pRequest.hasOwnProperty('path') ) @@ -77,7 +78,16 @@ APIClass.prototype = { if( pRequest.hasOwnProperty('data') ) form.append('data', JSON.stringify(pRequest.data) ); + + this.xhr[i].open('POST', this.target, true); + + + // Gestion du token optionnel + if( pToken != null ) this.xhr[i].setRequestHeader('Authorization', 'Digest '+pToken); + + + this.xhr[i].send( form ); } diff --git a/manager/module/token.php b/manager/module/token.php index 079dbe3..6680eae 100755 --- a/manager/module/token.php +++ b/manager/module/token.php @@ -16,7 +16,7 @@ * * @id_token UID du token en question * - * @return status Retourne l'etat de la suppression (VRAI -> fait/FAUX -> erreur) + * @return status Retourne l'etat de la suppression (VRAI -> fait/FAUX -> erreur) * */ public static function remove($id_token){ @@ -25,33 +25,16 @@ if( !Database::check('id', $id_token) ) return array('ModuleError' => ManagerError::ParamError); - /* [1] Verification de l'existance du token + /* [1] Suppression 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); + $remove = new Repo('token/remove', array($id_token)); + // On renvoie une erreur si une erreur intervient pendant la suppression + if( !$remove->answer() ) return array('ModuleError' => ManagerError::ModuleError); /* [n] Gestion du retour quand tout est normal =========================================================*/ - return array( - 'ModuleError' => ManagerError::Success, - 'status' => true - ); + return array( 'ModuleError' => ManagerError::Success ); } @@ -71,18 +54,17 @@ public static function generate($name, $duration){ /* [0] Verification des INPUT =========================================================*/ - if( !Database::check('varchar(50)', $name) || !Database::check('int', $duration) ) + if( !Database::check('varchar(50)', $name) || !Database::check('numeric', $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 ); + if( $create->answer() === false ) return array('ModuleError' => ManagerError::ModuleError ); /* [2] Gestion du retour diff --git a/manager/repo/token.php b/manager/repo/token.php index 990729d..0d92c5b 100644 --- a/manager/repo/token.php +++ b/manager/repo/token.php @@ -93,7 +93,12 @@ if( !Database::check('sha1', $token) ) return false; - /* [1] Verification dans la base de donnees + /* [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 FROM api_token @@ -102,12 +107,14 @@ $check->execute(array( ':token' => $token )); - /* [2] On retourne le resultat + /* [3] On retourne le resultat =========================================================*/ return $check->fetch() !== false; } + + /* GENERE UN NOUVEAU TOKEN DE NOM ET EXPIRATION SPECIFIEE * * @name Nom attribue au token @@ -120,9 +127,8 @@ 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 - + if( !Database::check('varchar(50)', $name) || !Database::check('int', $duration) ) return false; + /* [1] Generation d'un token si pas deja dans la BDD =========================================================*/ @@ -174,6 +180,38 @@ } + + + /* 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; + } + } diff --git a/view/js/settings.js b/view/js/settings.js index ef41127..e1f633d 100644 --- a/view/js/settings.js +++ b/view/js/settings.js @@ -1,19 +1,84 @@ + /* [1] Gestion des tokens =========================================================*/ +var TOKEN = { + add: { // Tout ce qui attrait a l'ajout + toggle: document.getElementById('add-token'), // bouton de toggle pour l'affichage du panel + panel: document.querySelector('div[data-add]'), // formulaire de creation + state: true, // etat (visible ou non) du panel + + name: document.getElementById('add-name'), // nom du token a creer + duration: document.getElementById('add-duration'), // duree du token a creer (en jours) + submit: document.getElementById('add-submit') // validation de la creation + }, + + + remove: { + buttons: document.querySelectorAll('.remove-token') + } +}; + + + + /* (1) Gestion de la creation de token */ -var add_token_button = document.getElementById('add-token'); -var add_panel = document.querySelector('div[data-add]'); -/* (1.1) Gestion du toggle pour le panel de creation */ -var add_panel_state = true; -add_token_button.addEventListener('click', function(e){ + /* (1.1) Gestion du toggle pour le panel de creation */ + TOKEN.add.toggle.addEventListener('click', function(e){ + TOKEN.add.panel.className = (TOKEN.add.state) ? 'active' : ''; // toggle de la classe (visibilite) + TOKEN.add.state = !TOKEN.add.state; // switch de l'etat pour le toggle + }, false); - add_panel.className = (add_panel_state) ? 'active' : ''; + /* (1.2) Gestion de la creation */ + TOKEN.add.submit.addEventListener('click', function(e){ + // On redige la requete + var request = { // on ecrit la requete + 'path': 'token/generate', + 'data': [TOKEN.add.name.value, TOKEN.add.duration.value] + }; - add_panel_state = !add_panel_state; -}, false); + // On lance la requete + api.send(request, function(answer){ + console.log( answer ); + // Si la generation effectuee, on recharge la page + if( answer.ModuleError == 0 ) + reload(); + + }, js_access_token); + }, false); -/* (n) Gestion de la suppression de token */ -var remove_token_buttons = document.querySelectorAll('.remove-token'); \ No newline at end of file + + + + + + +/* (2) Gestion de la suppression de token */ +for( var i = 0 ; i < TOKEN.remove.buttons.length ; i++ ){ + + /* (2.0) Pour chaque bouton supprimer, on attache un evenement */ + TOKEN.remove.buttons[i].addEventListener('click', function(e){ + var token_id = e.target.parentNode.getData('id'); + + /* (2.1) Si on ne trouve pas l'id, on retourne une erreur */ + if( token_id == false ){ console.warn('id du token non trouvee'); return; } + + /* (2.2) On lance la suppression */ + var request = { // on ecrit la requete + 'path': 'token/remove', + 'data': [token_id] + }; + + // On lance la requete + api.send(request, function(answer){ + // Si la suppression effectuee, on recharge la page + if( answer.ModuleError == 0 ) + reload(); + + }, js_access_token); + + }, false); + +} \ No newline at end of file diff --git a/view/settings.php b/view/settings.php index 57338f0..aade2fa 100755 --- a/view/settings.php +++ b/view/settings.php @@ -29,7 +29,13 @@ $tokens = $req_tokens->answer(); -
Liste des accès distants actifs. Ils seront automatiquement désactivés a la date d'expiration.
+
Liste des accès distants actifs. Ils seront automatiquement désactivés a la date d'expiration. Veuillez toutefois les supprimer.
+ +
+

+

+ +
    @@ -60,12 +66,6 @@ $tokens = $req_tokens->answer();
- -
-

-

- -