minmod
This commit is contained in:
parent
5aa39c4548
commit
cb1af10da3
12
automate.php
12
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);
|
||||
|
||||
?>
|
|
@ -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." }
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
74
doc/bdd.sql
74
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 */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
|
|
47
index.php
47
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();
|
||||
|
|
|
@ -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);
|
||||
|
||||
// }
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -29,11 +29,12 @@
|
|||
*
|
||||
* @path<String> Chemin de delegation ("module/methode")
|
||||
* @param<Array> Tableau associatif contenant les parametres utiles au traitement
|
||||
* @token<String> Token d'acces a l'api (OPTIONNEL)
|
||||
*
|
||||
* @return status<Boolean> 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 <ModuleRequest>
|
||||
=========================================================*/
|
||||
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> String correspondant au chemin de delegation ("module/methode")
|
||||
|
@ -268,27 +260,58 @@
|
|||
|
||||
/* RETOURNE SI ON A LA PERMISSION D'EXECUTER CETTE METHODE
|
||||
*
|
||||
* @token<String> Token d'acces a l'API (OPTIONNEL)
|
||||
*
|
||||
* @return permission<bool> 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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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']); }
|
||||
|
||||
?>
|
|
@ -75,7 +75,7 @@
|
|||
*
|
||||
* @token<String> Token en question
|
||||
*
|
||||
* @return valid<bool> Retourne si VRAI ou FAUX le token est valid
|
||||
* @return permissions<Array> 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");
|
||||
|
|
|
@ -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 )
|
||||
|
|
|
@ -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) );
|
||||
|
|
|
@ -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) );
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<?php define('__ROOT__', dirname(__FILE__) );
|
||||
|
||||
require_once __ROOT__.'/manager/autoloader.php';
|
||||
use \manager\sessionManager;
|
||||
|
||||
|
||||
var_dump(session_id());
|
||||
|
||||
?>
|
28
view.php
28
view.php
|
@ -1,14 +1,6 @@
|
|||
<?php use \manager\ResourceDispatcher;
|
||||
|
||||
/* [1] 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();
|
||||
<?php use \manager\ResourceDispatcher; ?>
|
||||
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
@ -44,17 +36,20 @@
|
|||
<?php if( connected() ) echo "<div id='LOGIN'>";
|
||||
else echo "<div id='LOGIN' class='active'>"; ?>
|
||||
|
||||
|
||||
<?php //var_dump(session_id()); ?>
|
||||
<div id='login-icon'></div>
|
||||
<div id='login-close'>Accéder à la plateforme</div>
|
||||
|
||||
<div id='login-form'>
|
||||
<input type='text' placeholder='Identifiant ou adresse mail' id='login-login'>
|
||||
<input type='password' placeholder='Mot de passe' id='login-password'>
|
||||
<input type='button' value='Connexion' id='login-submit'>
|
||||
<form method='POST' action='' id='login-form'>
|
||||
<input type='text' placeholder='Identifiant ou adresse mail' name='login' id='login-login'>
|
||||
<input type='password' placeholder='Mot de passe' name='password' id='login-password'>
|
||||
<input type='submit' value='Connexion' id='login-submit'>
|
||||
|
||||
<!-- Si on a de mauvais logins -->
|
||||
<?php if( $_SESSION['login_status'] == 'error '){ echo "<span id='login-error'>Votre identifiant/mot de passe est incorrect.</span>"; } ?>
|
||||
|
||||
<span id='lost-password'>Mot de passe oublié ?</span>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
|
@ -98,6 +93,9 @@
|
|||
|
||||
<span data-link='analytics' ><?= ResourceDispatcher::getResource('f/svg/analytics/st/menu-side'); ?>Statistiques</span>
|
||||
<span data-link='charts' class='sep'><?= ResourceDispatcher::getResource('f/svg/charts/st/menu-side'); ?>Visualisation</span>
|
||||
<div class='sub'>
|
||||
<span data-sublink='network'>Reseau</span>
|
||||
</div>
|
||||
|
||||
<?php if( permission('admin') ){ ?>
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ $render = $answer->get('render');
|
|||
?>
|
||||
|
||||
|
||||
<section>
|
||||
<section data-sublink='network'>
|
||||
<h6>CERCLE DES RELATIONS</h6>
|
||||
<?= $render; ?>
|
||||
</section>
|
Loading…
Reference in New Issue