From cb1af10da39d50c459d91a54af9e7567e2e9ba71 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 13 Apr 2016 13:37:36 +0200 Subject: [PATCH] minmod --- automate.php | 12 +++--- config/modules.json | 4 +- css/layout.css | 2 +- css/layout.css.map | 2 +- css/layout.scss | 7 +-- doc/bdd.sql | 74 ++++++++++++++++++++++++++++++-- index.php | 47 +++++++++++++++++++- js/action-script.js | 28 ++---------- manager/ModuleAnswer.php | 8 +++- manager/ModuleRequest.php | 63 ++++++++++++++++++--------- manager/ResourceDispatcher.php | 2 +- manager/autoloader.php | 24 +++++------ manager/repo/token.php | 15 ++++--- manager/sessionManager.php | 24 ++++++----- phpunit/tests/Database_check.php | 4 +- phpunit/tests/sessionManager.php | 2 +- receiver.php | 9 ++++ view.php | 28 ++++++------ view/charts.php | 2 +- 19 files changed, 245 insertions(+), 112 deletions(-) create mode 100644 receiver.php diff --git a/automate.php b/automate.php index dcf5072..cc842bd 100755 --- a/automate.php +++ b/automate.php @@ -66,18 +66,18 @@ var_dump( $contact ); } - // parseCallLog(); + parseCallLog(); debug(); - $api = new client(); + // $api = new client(); - $response = $api->send('generate-network-chart-data', array( - '@token'=> '48e701d4e72e4e35bc37c9a800b49d5400734d7b' - )); + // $response = $api->send('generate-network-chart-data', array( + // '@token'=> '48e701d4e72e4e35bc37c9a800b49d5400734d7b' + // )); - var_dump($response); + // var_dump($response); ?> \ No newline at end of file diff --git a/config/modules.json b/config/modules.json index f48a578..6118761 100755 --- a/config/modules.json +++ b/config/modules.json @@ -32,13 +32,13 @@ "network_data": { "description": "Renvoie un jeu de donnees fictif pour un graphique de type #network.", - "permissions": ["admin"], + "permissions": [], "parameters": {} }, "network_render": { "description": "Renvoie le contenu du svg representant un graphique de type #network avec les donnees recues.", - "permissions": ["admin"], + "permissions": [], "parameters": { "dataset": { "description": "Dataset au bon format pour un graphique de type #network." } } diff --git a/css/layout.css b/css/layout.css index d2d03ca..3102b01 100755 --- a/css/layout.css +++ b/css/layout.css @@ -1,2 +1,2 @@ -body{font-family:'Open Sans';font-size:15px}#WRAPPER{display:block;position:fixed;top:0;left:0;width:100%;height:100%;background-color:#e8e8e8;overflow-x:hidden;overflow-y:auto;z-index:1}#WRAPPER>#HEADER{display:block;position:fixed;top:0;left:0;width:100%;height:calc( 4em - 1px );border-bottom:1px solid #cfcfcf;background-color:#fff;z-index:9}#WRAPPER>#MENU-SIDE{display:block;position:fixed;top:4em;left:0;width:15em;height:calc( 100% - 4em );box-shadow:2px 1px 3px #ddd;background-color:#32323a;transition:all .3s;z-index:10}#WRAPPER>#CONTAINER{display:flex;position:absolute;top:4em;left:15em;width:calc( 100% - 15em - 2*1em );min-height:calc( 100% - 4em - 2*1em );padding:1em;flex-direction:row;justify-content:space-between;overflow-x:none;overflow-y:auto}#LOGIN{display:flex;position:fixed;top:0;left:-100%;width:100%;height:100%;flex-direction:row;flex-wrap:nowrap;justify-content:space-around;align-items:center;background-color:#32323a;transition:left .3s ease-in-out;z-index:101}#LOGIN.active{left:0}#LOGIN>#login-icon{width:35em;height:10em;background:url("/f/svg/icon/st") center center no-repeat;background-size:auto 100%}#LOGIN>#login-form{display:block}#LOGIN>#login-form>input[type='text'],#LOGIN>#login-form>input[type='password'],#LOGIN>#login-form>input[type='button']{display:flex;width:20em;margin:2em 0;padding:1em 2em;flex-direction:column;justify-content:space-around;flex-wrap:nowrap;align-items:middle;border-radius:5px;border:1px solid #6b6b6b;background-color:#32323a;color:#fff;font-weight:bold;letter-spacing:.07em;transition:border .2s ease-in-out;cursor:default}#LOGIN>#login-form>input[type='text']:hover,#LOGIN>#login-form>input[type='text']:focus,#LOGIN>#login-form>input[type='password']:hover,#LOGIN>#login-form>input[type='password']:focus,#LOGIN>#login-form>input[type='button']:hover,#LOGIN>#login-form>input[type='button']:focus{border-color:#53d192}#LOGIN>#login-form>input[type='button']{margin:2em auto;border:0;background-color:#53d192;color:#fff;font-weight:bold;cursor:pointer}#LOGIN>#login-form>input[type='button']:hover{background-color:#33be79;box-shadow:0 0 1em #1a1a1f}#LOGIN>#login-form>#lost-password{color:#ddd;cursor:pointer}#LOGIN>#login-form>#lost-password:hover{color:#53d192;text-decoration:underline}#LOGIN>#login-close{display:block;position:absolute;top:2em;right:2em;min-width:2em;height:2em;background:url("/f/svg/back/st/container/ffffff") right center no-repeat;background-size:1em;color:#fff;padding-right:2em;line-height:2em;font-weight:bold;cursor:pointer} +body{font-family:'Open Sans';font-size:15px}#WRAPPER{display:block;position:fixed;top:0;left:0;width:100%;height:100%;background-color:#e8e8e8;overflow-x:hidden;overflow-y:auto;z-index:1}#WRAPPER>#HEADER{display:block;position:fixed;top:0;left:0;width:100%;height:calc( 4em - 1px );border-bottom:1px solid #cfcfcf;background-color:#fff;z-index:9}#WRAPPER>#MENU-SIDE{display:block;position:fixed;top:4em;left:0;width:15em;height:calc( 100% - 4em );box-shadow:2px 1px 3px #ddd;background-color:#32323a;transition:all .3s;z-index:10}#WRAPPER>#CONTAINER{display:flex;position:absolute;top:4em;left:15em;width:calc( 100% - 15em - 2*1em );min-height:calc( 100% - 4em - 2*1em );padding:1em;flex-direction:row;justify-content:space-between;overflow-x:none;overflow-y:auto}#LOGIN{display:flex;position:fixed;top:0;left:-100%;width:100%;height:100%;flex-direction:row;flex-wrap:nowrap;justify-content:space-around;align-items:center;background-color:#32323a;transition:left .3s ease-in-out;z-index:101}#LOGIN.active{left:0}#LOGIN>#login-icon{width:35em;height:10em;background:url("/f/svg/icon/st") center center no-repeat;background-size:auto 100%}#LOGIN>#login-form{display:block}#LOGIN>#login-form>input[type='text'],#LOGIN>#login-form>input[type='password'],#LOGIN>#login-form>input[type='submit']{display:flex;width:20em;margin:2em 0;padding:1em 2em;flex-direction:column;justify-content:space-around;flex-wrap:nowrap;align-items:middle;border-radius:5px;border:1px solid #6b6b6b;background-color:#32323a;color:#fff;font-weight:bold;letter-spacing:.07em;transition:border .2s ease-in-out;cursor:default}#LOGIN>#login-form>input[type='text']:hover,#LOGIN>#login-form>input[type='text']:focus,#LOGIN>#login-form>input[type='password']:hover,#LOGIN>#login-form>input[type='password']:focus,#LOGIN>#login-form>input[type='submit']:hover,#LOGIN>#login-form>input[type='submit']:focus{border-color:#53d192}#LOGIN>#login-form>input[type='submit']{width:100%;margin:2em 0;border:0;background-color:#53d192;color:#fff;font-weight:bold;cursor:pointer}#LOGIN>#login-form>input[type='submit']:hover{background-color:#33be79;box-shadow:0 0 1em #1a1a1f}#LOGIN>#login-form>#lost-password{color:#ddd;cursor:pointer}#LOGIN>#login-form>#lost-password:hover{color:#53d192;text-decoration:underline}#LOGIN>#login-close{display:block;position:absolute;top:2em;right:2em;min-width:2em;height:2em;background:url("/f/svg/back/st/container/ffffff") right center no-repeat;background-size:1em;color:#fff;padding-right:2em;line-height:2em;font-weight:bold;cursor:pointer} /*# sourceMappingURL=layout.css.map */ diff --git a/css/layout.css.map b/css/layout.css.map index db3de1f..140b5ab 100755 --- a/css/layout.css.map +++ b/css/layout.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "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", +"mappings": "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", "sources": ["layout.scss","constants.scss"], "names": [], "file": "layout.css" diff --git a/css/layout.scss b/css/layout.scss index ac9aff7..3851766 100755 --- a/css/layout.scss +++ b/css/layout.scss @@ -136,7 +136,7 @@ body{ /* (2.1) Champs de texte (login/password) */ & > input[type='text'], & > input[type='password'], - & > input[type='button']{ + & > input[type='submit']{ display: flex; width: 20em; @@ -173,8 +173,9 @@ body{ /* (2.2) Bouton de connexion */ - & > input[type='button']{ - margin: 2em auto; + & > input[type='submit']{ + width: 100%; + margin: 2em 0; border: 0; diff --git a/doc/bdd.sql b/doc/bdd.sql index cd75497..403366d 100644 --- a/doc/bdd.sql +++ b/doc/bdd.sql @@ -3,7 +3,7 @@ -- http://www.phpmyadmin.net -- -- Host: localhost --- Generation Time: Apr 10, 2016 at 12:22 PM +-- Generation Time: Apr 12, 2016 at 05:32 PM -- Server version: 5.6.28-0ubuntu0.15.10.1 -- PHP Version: 5.6.11-1ubuntu3.1 @@ -22,13 +22,35 @@ SET time_zone = "+00:00"; -- -------------------------------------------------------- +-- +-- Table structure for table `api_token` +-- + +CREATE TABLE IF NOT EXISTS `api_token` ( + `id_token` int(11) NOT NULL, + `token` varchar(40) NOT NULL, + `name` varchar(50) NOT NULL, + `expires` date NOT NULL +) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=latin1; + +-- +-- Dumping data for table `api_token` +-- + +INSERT INTO `api_token` (`id_token`, `token`, `name`, `expires`) VALUES +(38, '48e701d4e72e4e35bc37c9a800b49d5400734d7b', 'test', '2016-04-11'), +(39, '935fe104d0e64d36e466c7a0a1c9773e3d7521c5', 'user#1', '2016-04-22'), +(48, 'bba06e9b01f5ac00798d6cf241d8bf105da0f25a', 'user#2', '2016-05-02'); + +-- -------------------------------------------------------- + -- -- Table structure for table `Categories` -- CREATE TABLE IF NOT EXISTS `Categories` ( `idCategorie` int(11) NOT NULL, - `intitule` varchar(32) NOT NULL + `intitule` varchar(40) NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; -- @@ -75,7 +97,7 @@ CREATE TABLE IF NOT EXISTS `Personnes` ( `nom` varchar(255) DEFAULT NULL, `prenom` varchar(255) DEFAULT NULL, `id_facebook` int(11) DEFAULT NULL, - `telephone` int(11) DEFAULT NULL + `telephone` varchar(10) DEFAULT NULL ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; -- @@ -136,10 +158,38 @@ CREATE TABLE IF NOT EXISTS `ReponsesUtilisateurs` ( `idUtilisateur` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; +-- -------------------------------------------------------- + +-- +-- Table structure for table `users` +-- + +CREATE TABLE IF NOT EXISTS `users` ( + `id_user` int(11) NOT NULL, + `login` varchar(30) NOT NULL, + `password` varchar(40) NOT NULL, + `mail` varchar(255) NOT NULL, + `reference` int(11) DEFAULT NULL, + `permission` text NOT NULL +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; + +-- +-- Dumping data for table `users` +-- + +INSERT INTO `users` (`id_user`, `login`, `password`, `mail`, `reference`, `permission`) VALUES +(1, 'xdrm', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', 'xdrm@xdrm.io', NULL, 'admin,user'); + -- -- Indexes for dumped tables -- +-- +-- Indexes for table `api_token` +-- +ALTER TABLE `api_token` + ADD PRIMARY KEY (`id_token`); + -- -- Indexes for table `Categories` -- @@ -201,10 +251,21 @@ ALTER TABLE `ReponsesUtilisateurs` ADD KEY `index_ReponsesUtilisateurs` (`idQuestion`), ADD KEY `index_ReponsesUtilisateurs_idPersonne` (`idUtilisateur`); +-- +-- Indexes for table `users` +-- +ALTER TABLE `users` + ADD PRIMARY KEY (`id_user`); + -- -- AUTO_INCREMENT for dumped tables -- +-- +-- AUTO_INCREMENT for table `api_token` +-- +ALTER TABLE `api_token` + MODIFY `id_token` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=49; -- -- AUTO_INCREMENT for table `Categories` -- @@ -236,6 +297,11 @@ ALTER TABLE `ReponsesAttendues` ALTER TABLE `ReponsesUtilisateurs` MODIFY `idReponseUtilisateur` int(11) NOT NULL AUTO_INCREMENT; -- +-- AUTO_INCREMENT for table `users` +-- +ALTER TABLE `users` + MODIFY `id_user` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3; +-- -- Constraints for dumped tables -- @@ -275,4 +341,4 @@ ALTER TABLE `ReponsesUtilisateurs` /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; \ No newline at end of file +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/index.php b/index.php index 8ba482a..ceb0544 100755 --- a/index.php +++ b/index.php @@ -5,6 +5,10 @@ use \router\Router; use \manager\ResourceDispatcher; use \manager\ModuleRequest; + use \manager\ManagerError; + use \manager\Database; + + /*******************************************/ /* DEBUGGER */ @@ -13,13 +17,49 @@ /*******************************************/ + + + + + /* [x] Gestion des utilisateurs + =========================================================*/ + /* (1) Valeurs par defaut */ + if( !isset($_SESSION['userid']) ) $_SESSION['userid'] = null; + if( !isset($_SESSION['username']) ) $_SESSION['username'] = null; + if( !isset($_SESSION['permission']) ) $_SESSION['permission'] = array(); + + + /* (2) Gestion de la connection */ + $login_vars = isset($_POST['login']) && Database::check('varchar(255)', $_POST['login']); + $login_vars = $login_vars && isset($_POST['password']) && Database::check('text', $_POST['password']); + + // Status de login + $_SESSION['login_status'] = 'no'; + + // Si les parametres de connection, on essaie de connecter + if( $login_vars ){ + $login = new ModuleRequest('users/login', array( 'login' => $_POST['login'], 'password' => $_POST['password'] )); + $login_ans = $login->dispatch(); + + // Si aucune erreur, on dit qu'on vient de se connecter + if( $login_ans->error == ManagerError::Success ) + $_SESSION['login_status'] = 'logged'; + else // Si on n'a pas les bonnes donnees + $_SESSION['login_status'] = 'error'; + } + + + /* (3) Gestion de le deconnexion */ + + + /* [0] On initialise le routeur ===================================================*/ $R = new Router( $_GET['url'] ); - // var_dump($R); + /* [1] On cree les regles de routage ===================================================*/ @@ -36,9 +76,11 @@ // nomPage/arg1/arg2 -> inclusion de la page $R->get('(?:'.implode('|', $views).')(?:/[\w-]+)*/?', function(){ include __ROOT__.'/view.php'; }); + // Dispatcher $R->get('f(?:/([\w-]+))*/?', function(){ new ResourceDispatcher($_GET['url'], true); }); + // Api $R->post('api/?', function(){ $request = ModuleRequest::fromPost($_POST); @@ -47,11 +89,14 @@ echo $answer->serialize(); }); + // N'importe -> page d'accueil $R->get('.+', function(){ header('Location: /dashboard/'); }); + $R->post('.+', function(){ header('Location: /dashboard/'); }); + /* [3] On lance le routeur ===================================================*/ $R->run(); diff --git a/js/action-script.js b/js/action-script.js index cd74f80..048ff70 100755 --- a/js/action-script.js +++ b/js/action-script.js @@ -205,13 +205,9 @@ /* [7] Gestion du toggle de la page de login =========================================================*/ var LOGIN = { - show: document.getElementById('user-data'), - hide: document.getElementById('login-close'), - page: document.getElementById('LOGIN'), - - login: document.getElementById('login-login'), - password: document.getElementById('login-password'), - submit: document.getElementById('login-submit') + show: document.getElementById('user-data'), + hide: document.getElementById('login-close'), + page: document.getElementById('LOGIN') }; /* (1) Gestion de l'affichage de la page de login */ @@ -220,22 +216,4 @@ /* (2) Gestion de la fermeture de la page de login */ LOGIN.hide.addEventListener('click', function(e){ LOGIN.page.className = ''; }, false); - /* (3) Gestion du login */ - LOGIN.submit.addEventListener('click', function(e){ - // Creation de la requete de connexion - var request = { - path: 'users/login', - login: LOGIN.login.value, - password: LOGIN.password.value - }; - - // On lance la requete et recupere la reponse - api.send(request, function(answer){ - console.log( answer ); - if( answer.ModuleError == 0 ) // Si on est bien connecte, on recharge la page - document.location = '/'; - }, js_access_token); - - }, false); - // } \ No newline at end of file diff --git a/manager/ModuleAnswer.php b/manager/ModuleAnswer.php index 7869be7..c914b2f 100755 --- a/manager/ModuleAnswer.php +++ b/manager/ModuleAnswer.php @@ -137,7 +137,13 @@ public function serialize(){ // On rajoute l'erreur au message - $returnData = array_merge( array('ModuleError' => $this->error, 'ErrorDescription' => ManagerError::explicit($this->error)), $this->data ); + $returnData = array_merge( + array( + 'ModuleError' => $this->error, + 'ErrorDescription' => ManagerError::explicit($this->error) + ), + $this->data + ); return json_encode($returnData); diff --git a/manager/ModuleRequest.php b/manager/ModuleRequest.php index 718d987..43fac03 100755 --- a/manager/ModuleRequest.php +++ b/manager/ModuleRequest.php @@ -29,11 +29,12 @@ * * @path Chemin de delegation ("module/methode") * @param Tableau associatif contenant les parametres utiles au traitement + * @token Token d'acces a l'api (OPTIONNEL) * * @return status Retourne si oui ou non tout s'est bien passe * */ - public function __construct($path=null, $params=null){ + public function __construct($path=null, $params=null, $token=null){ // Si pas parametre manquant, on quitte if( $path == null ){ $this->error = ManagerError::MissingPath; @@ -73,7 +74,7 @@ /* [3] Verification des droits =========================================================*/ - if( !$this->checkPermission() ){ // Si on a pas les droits + if( !$this->checkPermission($token) ){ // Si on a pas les droits $this->error = ManagerError::PermissionError; return false; } @@ -183,15 +184,6 @@ return $tmp; } - /* (2) Si le token n'est pas dans la BDD */ - $checkToken = new Repo('token/check', array($_SERVER['PHP_AUTH_DIGEST']) ); - $valid_token = $checkToken->answer(); - - if( !$valid_token ){ - $tmp = new ModuleRequest(); - $tmp->error = ManagerError::TokenError; - return $tmp; - } /* [1] On verifie que le @path est renseigne =========================================================*/ @@ -205,17 +197,17 @@ // On retire le @path de @params unset($params['path']); + /* [3] On retourne une instance de =========================================================*/ - return new ModuleRequest($post['path'], $params); - + // On cree notre requete avec le token + return new ModuleRequest($post['path'], $params, $_SERVER['PHP_AUTH_DIGEST']); } - /* VERIFICATION DU FORMAT ET DE LA COHERENCE DU CHEMIN SPECIFIE * * @path String correspondant au chemin de delegation ("module/methode") @@ -268,27 +260,58 @@ /* RETOURNE SI ON A LA PERMISSION D'EXECUTER CETTE METHODE * + * @token Token d'acces a l'API (OPTIONNEL) + * * @return permission Retourne si on a les droits ou pas pour executer cette methode * */ - private function checkPermission(){ + private function checkPermission($token=null){ + /* [1] On recupere les informations utiles + =========================================================*/ // On recupere le nom de la methode $method = $this->modules[$this->path['module']][$this->path['method']]; // Si aucune permission n'est definie if( !isset($method['permissions']) ) return true; - // On recupere les permissions + + /* [2] Gestion si un @token est defini + =========================================================*/ + if( Database::check('sha1', $token) ){ + + + /* (1) On verifie que le token est valide */ + $checkToken = new Repo('token/check', array($token) ); + $token_permissions = $checkToken->answer(); + + // Si le token est invalide, on retourne FAUX + if( $token_permissions === false ) return false; + + $local_permissions = $token_permissions; + + + /* [3] Gestion si aucun token, avec utilisateu connecte + =========================================================*/ + }else + $local_permissions = $_SESSION['permission']; + + + + /* [4] Verification des droits parmi les permissions donnees + =========================================================*/ + /* (1) On recupere la liste des permissions possibles */ $permissions = $method['permissions']; - // Si aucune permission n'est definie, on laisse l'acces + /* (2) Si aucune permission n'est definie, on laisse l'acces */ if( count($permissions) == 0 ) return true; - // On verifie qu'il y a au moins une permission ok + /* (3) On verifie qu'il y a au moins une permission ok */ foreach($permissions as $permission) - if( permission($permission) ) return true; + if( in_array($permission, $local_permissions) ) return true; - // On retourne FAUX si aucun droit n'a ete trouve + + /* [5] On retourne FAUX si aucun droit n'a ete trouve + =========================================================*/ return false; } diff --git a/manager/ResourceDispatcher.php b/manager/ResourceDispatcher.php index 4f907fb..1999236 100755 --- a/manager/ResourceDispatcher.php +++ b/manager/ResourceDispatcher.php @@ -255,7 +255,7 @@ ///////////// SI FICHIER JS //////////// //////////////////////////////////////// if( $this->flags['extension'] == 'js' ) - $content = 'var js_access_token = "'. substr($_SESSION['session_token'], 0, 40) .'";' . "\n\n" . $content; + $content = 'var js_access_token = "'. substr(session_id(), 0, 23) .'";' . "\n\n" . $content; diff --git a/manager/autoloader.php b/manager/autoloader.php index e3fb28f..3d05f74 100755 --- a/manager/autoloader.php +++ b/manager/autoloader.php @@ -18,19 +18,6 @@ error_reporting(-1); } - /* [1] Gestion des droits des utilisateurs - =========================================================*/ - /* (1) Retourne si l'utilisateur est connecte ou non */ - function connected(){ return isset($_SESSION['permission']) && count($_SESSION['permission']) > 0; } - - /* (2) Retourne si l'utilisateur a le status en question */ - function permission($type){ return connected() && in_array($type, $_SESSION['permission']); } - - - - - - @@ -63,4 +50,15 @@ /* On demarre la session securisee PHP =========================================================*/ \manager\sessionManager::session_start(); + + + + /* [1] Gestion des droits des utilisateurs + =========================================================*/ + /* (1) Retourne si l'utilisateur est connecte ou non */ + function connected(){ return isset($_SESSION['permission']) && count($_SESSION['permission']) > 0; } + + /* (2) Retourne si l'utilisateur a le status en question */ + function permission($type){ return connected() && in_array($type, $_SESSION['permission']); } + ?> \ No newline at end of file diff --git a/manager/repo/token.php b/manager/repo/token.php index 545e996..e867dc5 100644 --- a/manager/repo/token.php +++ b/manager/repo/token.php @@ -75,7 +75,7 @@ * * @token Token en question * - * @return valid Retourne si VRAI ou FAUX le token est valid + * @return permissions Retourne les permissions (droits) du token s'il est valide sinon retourne FAUX * */ public static function check($token){ @@ -92,16 +92,21 @@ /* [2] Verification dans la base de donnees =========================================================*/ - $check = Database::getPDO()->prepare("SELECT id_token + $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(); - /* [3] On retourne le resultat + // Si le token est inactif, on retourne FALSE + if( $token_info === false ) return false; + + + /* [3] On retourne le resultat (les permissions du token) =========================================================*/ - return $check->fetch() !== false; + return explode( ',', str_replace(' ', '', $token_info['permission']) ); } @@ -130,7 +135,7 @@ $token_used = true; // tant qu'un token a deja la meme valeur while( $token_used ){ - $token = sessionManager::secure_sha1(uniqid()); + $token = sessionManager::sha1(uniqid()); // Verification dans la BDD $check = Database::getPDO()->prepare("SELECT id_token FROM api_token WHERE token = :token"); diff --git a/manager/sessionManager.php b/manager/sessionManager.php index 94e0212..6a27e1e 100755 --- a/manager/sessionManager.php +++ b/manager/sessionManager.php @@ -11,7 +11,7 @@ /*************************/ /* SECURE SHA1 ALGORITHM */ /*************************/ - public static function secure_sha1($data){ + public static function sha1($data){ return sha1( '">\[..|{@#))'.sha1($data.'_)Q@#((%*_$%(@#') ); } @@ -29,7 +29,7 @@ session_id( $session_id ); // Precaution: on met a jour le cookie - setcookie('PHPSESSID', session_id(), time()+60*30 ); + setcookie( 'PHPSESSID', session_id(), time()+60*30, '/'); // On redemarre la session avec le bon id session \session_start(); @@ -44,33 +44,37 @@ /* GENERE UN TOKEN */ /*******************/ private static function update_token(){ - $token = self::$prefix.self::secure_sha1(uniqid()); + $token = self::$prefix.self::sha1(uniqid()); // On definit le token en session $_SESSION['session_token'] = $token; // On definit le token en cookie $_COOKIE['session_token'] = $_SESSION['session_token']; - setcookie('session_token', $_COOKIE['session_token'], time()+60*30 ); + setcookie( 'session_token', $_COOKIE['session_token'], time()+60*30, '/'); } /************/ /* AMORCEUR */ /************/ public static function session_start(){ + \session_start(); + return; + + /* [1] Génération et Gestion des donnees a utiliser ==============================================================*/ // On genere le hash a partir des donnees personnelles - self::$prefix = self::secure_sha1( $_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'] ); + self::$prefix = self::sha1( $_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'] ); - // On cree un id session associe a ces donnees personnelles - $sessid = substr(self::$prefix,0,5) . substr(self::secure_sha1(uniqid()),0,24); + // On cree un id session associe aux donnees personnelles + $sessid = substr(self::$prefix,0,5) . substr(self::sha1(uniqid()),0,24); // On genere un token pour l'execution suivante - $token = self::$prefix.self::secure_sha1(uniqid()); + $token = self::$prefix.self::sha1(uniqid()); // On definit/recupere le token - $session_token = (isset($_COOKIE['session_token'])) ? $_COOKIE['session_token'] : null; + $session_token = (isset($_COOKIE['session_token'])) ? $_COOKIE['session_token'] : null; @@ -79,7 +83,7 @@ \session_start(); // On verifie l'id session (5 premiers chars du hash des donnees perso) - $valid_sessid = strpos( session_id(), substr(self::$prefix,0,5) ) === 0; + $valid_sessid = strpos( session_id(), substr(self::$prefix,0,5) ) === 0; // Si id session incorrect ou pas de token if( !$valid_sessid ) diff --git a/phpunit/tests/Database_check.php b/phpunit/tests/Database_check.php index 635b39f..9fd8110 100755 --- a/phpunit/tests/Database_check.php +++ b/phpunit/tests/Database_check.php @@ -185,7 +185,7 @@ /* [5] Mot de passe =========================================================*/ public function testPasswordSizeEqCorrect(){ - $password_hash = \manager\sessionManager::secure_sha1('monmotdepasse'); + $password_hash = \manager\sessionManager::sha1('monmotdepasse'); $this->assertEquals( 40, strlen($password_hash) ); $this->assertTrue( \manager\Database::check('user.password', $password_hash) ); @@ -199,7 +199,7 @@ } public function testPasswordSizeSupIncorrect(){ - $password_hash = \manager\sessionManager::secure_sha1('monmotdepasse').'a'; + $password_hash = \manager\sessionManager::sha1('monmotdepasse').'a'; $this->assertGreaterThan( 40, strlen($password_hash) ); $this->assertFalse( \manager\Database::check('user.password', $password_hash) ); diff --git a/phpunit/tests/sessionManager.php b/phpunit/tests/sessionManager.php index c5cec2c..fbfc251 100755 --- a/phpunit/tests/sessionManager.php +++ b/phpunit/tests/sessionManager.php @@ -7,7 +7,7 @@ =========================================================*/ public function testSecureSHA1(){ $plain = 'montexteclair'; - $hash = \manager\sessionManager::secure_sha1($plain); + $hash = \manager\sessionManager::sha1($plain); // Verification desuiee $this->assertEquals(40, strlen($hash) ); diff --git a/receiver.php b/receiver.php new file mode 100644 index 0000000..6432074 --- /dev/null +++ b/receiver.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/view.php b/view.php index 6139500..29fd583 100755 --- a/view.php +++ b/view.php @@ -1,14 +1,6 @@ - -?> @@ -44,17 +36,20 @@ "; else echo "
"; ?> - +
Accéder à la plateforme
-
- - - +
+ + + + + + Votre identifiant/mot de passe est incorrect."; } ?> Mot de passe oublié ? -
+
@@ -98,6 +93,9 @@ Statistiques Visualisation +
+ Reseau +
diff --git a/view/charts.php b/view/charts.php index 04a074e..be65c22 100755 --- a/view/charts.php +++ b/view/charts.php @@ -39,7 +39,7 @@ $render = $answer->get('render'); ?> -
+
CERCLE DES RELATIONS
\ No newline at end of file