Gestion de la création et suppression de token toutes les fonctions repo/modules

This commit is contained in:
xdrm-brackets 2016-04-11 12:20:34 +02:00
parent dc40901143
commit 4487fb9e00
11 changed files with 158 additions and 61 deletions

View File

@ -3,6 +3,7 @@
use \manager\ModuleRequest; use \manager\ModuleRequest;
use \manager\ResourceDispatcher; use \manager\ResourceDispatcher;
use \manager\sessionManager;
use \manager\ManagerError; use \manager\ManagerError;
use \manager\Repo; use \manager\Repo;
@ -64,13 +65,7 @@
var_dump( $contact ); 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 );
?> ?>

View File

@ -7,8 +7,10 @@
"token": [ "token": [
"getAll", "getAll",
"getById", "getById",
"check", "check",
"generate" "generate",
"remove"
] ]
} }

View File

@ -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 */ /*# sourceMappingURL=global.css.map */

View File

@ -1,6 +1,6 @@
{ {
"version": 3, "version": 3,
"mappings": "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", "mappings": "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",
"sources": ["global.scss"], "sources": ["global.scss"],
"names": [], "names": [],
"file": "global.css" "file": "global.css"

View File

@ -208,7 +208,7 @@ section[data-panel-list]{
padding: 1em; padding: 1em;
border-top: 1px solid #ccc; border-bottom: 1px solid #ccc;
background-color: #f5f5f5; background-color: #f5f5f5;

View File

@ -197,4 +197,9 @@
/* [6] Gestion du rechargement de page
=========================================================*/
function reload(){ navMenu( pageManager.page ); }
// } // }

View File

@ -10,6 +10,7 @@ APIClass.prototype = {
* *
* @param pRequest<Object> l'objet passé en JSON à http://host/api/ * @param pRequest<Object> l'objet passé en JSON à http://host/api/
* @param pHandler<Function> fonction qui s'éxécutera lors de la réponse (1 argument -> réponse<Object>) * @param pHandler<Function> fonction qui s'éxécutera lors de la réponse (1 argument -> réponse<Object>)
* @param pToken<String> si donne, token d'auth pour l'api
* *
* @return answer<Object> l'objet retourné par http://host/api/ via pHandler (1er argument) * @return answer<Object> 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) * 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 // Si le chemin de delegation n'est pas renseigne, on renvoie une erreur
if( !pRequest.hasOwnProperty('path') ) if( !pRequest.hasOwnProperty('path') )
@ -77,7 +78,16 @@ APIClass.prototype = {
if( pRequest.hasOwnProperty('data') ) if( pRequest.hasOwnProperty('data') )
form.append('data', JSON.stringify(pRequest.data) ); form.append('data', JSON.stringify(pRequest.data) );
this.xhr[i].open('POST', this.target, true); 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 ); this.xhr[i].send( form );
} }

View File

@ -25,33 +25,16 @@
if( !Database::check('id', $id_token) ) return array('ModuleError' => ManagerError::ParamError); 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)); $remove = new Repo('token/remove', array($id_token));
// On renvoie une erreur si une erreur intervient pendant la suppression
// On renvoie une erreur si le token n'existe pas if( !$remove->answer() ) return array('ModuleError' => ManagerError::ModuleError);
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 /* [n] Gestion du retour quand tout est normal
=========================================================*/ =========================================================*/
return array( return array( 'ModuleError' => ManagerError::Success );
'ModuleError' => ManagerError::Success,
'status' => true
);
} }
@ -71,18 +54,17 @@
public static function generate($name, $duration){ public static function generate($name, $duration){
/* [0] Verification des INPUT /* [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 return array('ModuleError' => ManagerError::ParamError); // erreur de parametre
/* [1] On cree le token et recupere son id ou FAUX /* [1] On cree le token et recupere son id ou FAUX
=========================================================*/ =========================================================*/
$create = new Repo('token/generate', array($name, $duration)); $create = new Repo('token/generate', array($name, $duration));
$created = $create->answer();
// Si erreur de creation // 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 /* [2] Gestion du retour

View File

@ -93,7 +93,12 @@
if( !Database::check('sha1', $token) ) return false; 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 $check = Database::getPDO()->prepare("SELECT id_token
FROM api_token FROM api_token
@ -102,12 +107,14 @@
$check->execute(array( ':token' => $token )); $check->execute(array( ':token' => $token ));
/* [2] On retourne le resultat /* [3] On retourne le resultat
=========================================================*/ =========================================================*/
return $check->fetch() !== false; return $check->fetch() !== false;
} }
/* GENERE UN NOUVEAU TOKEN DE NOM ET EXPIRATION SPECIFIEE /* GENERE UN NOUVEAU TOKEN DE NOM ET EXPIRATION SPECIFIEE
* *
* @name<String> Nom attribue au token * @name<String> Nom attribue au token
@ -120,8 +127,7 @@
public static function generate($name, $duration){ public static function generate($name, $duration){
/* [0] Verification des INPUT /* [0] Verification des INPUT
=========================================================*/ =========================================================*/
if( !Database::check('varchar(50)', $name) || !Database::check('int', $duration) ) if( !Database::check('varchar(50)', $name) || !Database::check('int', $duration) ) return false;
return array('ModuleError' => ManagerError::ParamError); // erreur de parametre
/* [1] Generation d'un token si pas deja dans la BDD /* [1] Generation d'un token si pas deja dans la BDD
@ -174,6 +180,38 @@
} }
/* 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( !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;
}
} }

View File

@ -1,19 +1,84 @@
/* [1] Gestion des tokens /* [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 */ /* (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 */ /* (1.1) Gestion du toggle pour le panel de creation */
var add_panel_state = true; TOKEN.add.toggle.addEventListener('click', function(e){
add_token_button.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; // On lance la requete
}, false); 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');
/* (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);
}

View File

@ -29,7 +29,13 @@ $tokens = $req_tokens->answer();
</div> </div>
<!-- Description des tokens actifs --> <!-- Description des tokens actifs -->
<div data-description>Liste des accès distants actifs. Ils seront automatiquement désactivés a la date d'expiration.</div> <div data-description>Liste des accès distants actifs. Ils seront automatiquement désactivés a la date d'expiration. Veuillez toutefois les supprimer.</div>
<!-- Creation d'un nouvel element (cache) -->
<div data-add>
<label for='add-name'>Nom de l'accès</label><br><input type='text' placeholder='token' id='add-name'><br>
<label for='add-duration'>Duree de vie (jours)</label><br><input type='text' value='10' id='add-duration'><br>
<input type='button' value='Ajouter un accès' id='add-submit'>
</div>
<!-- Conteneur de la liste des elements --> <!-- Conteneur de la liste des elements -->
<ul data-list> <ul data-list>
@ -60,12 +66,6 @@ $tokens = $req_tokens->answer();
</ul> </ul>
<!-- Creation d'un nouvel element (cache) -->
<div data-add>
<label for='add-name'>Nom de l'accès</label><br><input type='text' placeholder='token' id='add-name'><br>
<label for='add-duration'>Duree de vie (jours)</label><br><input type='text' placeholder='10' id='add-duration'><br>
<input type='button' value='Ajouter un accès'>
</div>
</section> </section>
</section> </section>