Commit initial

This commit is contained in:
2020-05-15 12:27:34 +02:00
commit 70f72f2e54
87 changed files with 12684 additions and 0 deletions

View File

@ -0,0 +1,137 @@
<?php
require_once $GLOBALS['app_path'].'Controller/ControllerSecureUserCam.php';
require_once $GLOBALS['app_path'].'Model/ModelCamera.php';
require_once $GLOBALS['app_path'].'Model/ModelUser.php';
require_once $GLOBALS['app_path'].'Model/Entity/Camera.php';
class ControllerCamera extends ControllerSecureUserCam {
public function index()
{
$modelUser = new ModelUser();
$user = $modelUser->getUserById($this->request->getSession()->getAttribute('user_id'));
$modelCamera = new ModelCamera();
$camera = $modelCamera->getCamera($this->request->getParameter('id'),$this->request->getSession()->getAttribute('user_id'));
$headScript = '<script src="jwplayer/jwplayer.js"></script><script>jwplayer.key="xEPI8DEypoE2gSBetC0/Vecoos0JKOx8WLKNMw==";</script>';
$this->generateView(array('camera' => $camera, 'headScript' => $headScript, 'user'=> $user));
}
public function swapState()
{
$whereController = "default";
$whereAction = null;
if($this->request->existParameter('whereController'))
$whereController = $this->request->getParameter('whereController');
if($this->request->existParameter('whereAction'))
$whereAction = $this->request->getParameter('whereAction');
if($this->request->existParameter('swap'))
{
$command = null;
$modelUser = new ModelUser();
$modelCamera = new ModelCamera();
$camera = $modelCamera->getCamera($this->request->getParameter('id'),$this->request->getSession()->getAttribute('user_id'));
$login = $this->request->getSession()->getAttribute('login');
$password = $modelUser->getUserById($this->request->getSession()->getAttribute('user_id'))->getPassword();
$swap = $this->request->getParameter('swap');
if($swap == 'enable' && $camera->getEnabled() == false)
$command = "enable";
else
if($swap == 'disable' && $camera->getEnabled() == true)
$command = 'disable';
if($command != null)
$this->sendCommand($login,$password,$camera->getId(),$command);
}
$this->redirect($whereController,$whereAction);
}
public function delete()
{
$modelUser = new ModelUser();
$modelUser->deleteCam($this->request->getSession()->getAttribute('user_id'),$this->request->getParameter('id'));
$this->redirect('default','settings');
}
private function sendCommand($login,$password,$camera_id,$command)
{
$s = socket_create(AF_INET,SOCK_STREAM,0);
if($s == false)
throw new Exception("Creation de socket echoue");
$addr = gethostbyname(Configuration::get('host'));
if($addr == Configuration::get('host'))
{
socket_close($s);
throw new Exception("Recuperation IP impossible ");
}
$result = socket_connect($s,$addr,40550);
if($result == false)
{
socket_close($s);
throw new Exception("Connection socket échoue");
}
$str = $login.":".$password.":".$command.":".$camera_id; //Command = enable|disable|disconnect
$buf = $str."\0";
$size = socket_write($s,$buf,strlen($str)+1);
if($size != strlen($buf))
{
socket_close($s);
throw new Exception("Ecriture dans la socket impossible");
}
$data = "";
$ret = socket_recv($s, $data, 1, MSG_WAITALL);
while($ret == 1 && $data != "\0")
{
$buf .= $data;
$data = "";
$ret = socket_recv($s, $data, 1, MSG_WAITALL);
}
if($ret != 1 && strlen($buf) == 0)
{
socket_close($s);
throw new Exception('Erreur rien à lire dans la socket');
}
socket_close($s);
}
public function delayed()
{
$videos = array();
$records_path = "Content/records/".$this->request->getParameter("id");
if(file_exists($records_path))
{
$files = scandir($records_path);
if($files != false)
{
$i = 0;
foreach($files as $file)
{
$path = $records_path."/".$file;
if(is_file($path))
{
$regex_results = array();
if(preg_match("/^([0-9]|[1-9][0-9]*)_([0-9]|[1-9][0-9]*)\.mp4$/",$file,$regex_results) == 1)
{
$videos[$i]["path"] = $path;
$videos[$i]["begin"] = date('j/n/Y H:i:s',$regex_results[1]);
$videos[$i]["end"] = date('j/n/Y H:i:s',$regex_results[2]);
$i++;
}
}
}
$headScript = '<script src="jwplayer/jwplayer.js"></script><script>jwplayer.key="xEPI8DEypoE2gSBetC0/Vecoos0JKOx8WLKNMw==";</script>';
$this->generateView(array('videos' => $videos, 'headScript' => $headScript));
}
else
throw new Exception("Fichier '".$records_path."' inconnue");
}
else
throw new Exception("Dossier '".$records_path."' inconnue");
}
}

View File

@ -0,0 +1,76 @@
<?php
require_once $GLOBALS['app_path'].'Framework/Controller.php';
require_once $GLOBALS['app_path'].'Model/ModelUser.php';
class ControllerConnexion extends Controller
{
private $modelUser;
public function __construct()
{
$this->modelUser = new ModelUser();
}
public function index()
{
$this->generateView();
}
public function logOn()
{
if ($this->request->existParameter("login") && $this->request->existParameter("password")) {
$login = $this->request->getParameter("login");
$password = sha1($this->request->getParameter("password"));
if ($this->modelUser->exist($login, $password))
{
$user = $this->modelUser->getUser($login, $password);
$this->request->getSession()->setAttribute("user_id",
$user->getId());
$this->request->getSession()->setAttribute("login",
$user->getLogin());
if($login == "root")
$this->redirect('default','admin');
else
$this->redirect("default");
}
else
$this->generateView(array('msgError' => 'Login ou mot de passe incorrects'),
"index");
}
else
throw new Exception("Action impossible : login ou mot de passe non défini");
}
public function registration()
{
$this->generateView();
}
public function register()
{
if ($this->request->existParameter("login") && $this->request->existParameter("password") && $this->request->existParameter("passwordBis")) {
$login = $this->request->getParameter("login");
$password = sha1($this->request->getParameter("password"));
$passwordBis = sha1($this->request->getParameter("passwordBis"));
if ($password == $passwordBis) {
if(!$this->modelUser->exist($login,$password))
{
$this->modelUser->addUser($login, $password);
$this->redirect("default");
}
else
$this->generateView(array('msgError' => 'Utilisateur déja existant'),
"registration");
}
else
$this->generateView(array('msgError' => 'Les mots de passes doivent être identiques'),
"registration");
}
else
throw new Exception("Action impossible : login ou mot de passe non défini");
}
public function disconnect()
{
$this->request->getSession()->destruct();
$this->redirect("connexion");
}
}

View File

@ -0,0 +1,150 @@
<?php
require_once $GLOBALS['app_path'].'Controller/ControllerSecure.php';
require_once $GLOBALS['app_path'].'Model/ModelCamera.php';
require_once $GLOBALS['app_path'].'Model/Entity/Camera.php';
require_once $GLOBALS['app_path'].'Model/ModelUser.php';
class ControllerDefault extends ControllerSecure {
public function index()
{
$modelCamera = new ModelCamera();
$cameras = $modelCamera->getAllCameraByUser($this->request->getSession()->getAttribute('user_id'));
$this->generateView(array('cameras' => $cameras));
}
public function settings()
{
$modelCamera = new ModelCamera();
$modelUser = new ModelUser();
$user_id = $this->request->getSession()->getAttribute('user_id');
$user = $modelUser->getUserById($user_id);
$cameras = $modelCamera->getAllCameraByUser($user_id);
$this->generateView(array('cameras' => $cameras, 'user' => $user));
}
public function updateLogin()
{
$messageInfo = "";
$modelUser = new ModelUser();
$modelCamera = new ModelCamera();
$user_id = $this->request->getSession()->getAttribute('user_id');
$user = $modelUser->getUserById($user_id);
$cameras = $modelCamera->getAllCameraByUser($user_id);
if($this->request->existParameter('login'))
{
$login = $this->request->getParameter('login');
if($user->getLogin() != $login)
{
if(!$modelUser->exist($login, $user->getPassword()))
{
$modelUser->update($user->getId(),$login,$user->getPassword());
$messageInfo = "Modification effectué";
}
else
$messageInfo = "Ce login existe déja";
}
else
$messageInfo = "Ce Login est déja le vôtre";
}
else
$messageInfo = "Login manquant";
$this->generateView(array('cameras' => $cameras, 'user' => $user, 'messageInfo' => $messageInfo ),'settings');
}
public function updatePassword()
{
$messageInfo = "";
$modelUser = new ModelUser();
$modelCamera = new ModelCamera();
$user_id = $this->request->getSession()->getAttribute('user_id');
$user = $modelUser->getUserById($user_id);
$cameras = $modelCamera->getAllCameraByUser($user_id);
if($this->request->existParameter('password') && $this->request->existParameter('passwordBis'))
{
$password = $this->request->getParameter('password');
$passwordBis = $this->request->getParameter('passwordBis');
if($password == $passwordBis)
{
if ($user->getPassword() != $password)
{
$modelUser->update($user->getId(), $user->getLogin(), $password);
$messageInfo = "Modification effectué";
}
else
$messageInfo = "Ce mot de passe est déja le vôtre";
}
else
$messageInfo = "Les deux mot de passe doivent être les mêmes";
}
else
$messageInfo = "Les deux champs mot de passe doivent être remplies";
$this->generateView(array('cameras' => $cameras, 'user' => $user, 'messageInfo' => $messageInfo ),'settings');
}
public function addCam()
{
$messageInfo = "";
$modelUser = new ModelUser();
$modelCamera = new ModelCamera();
$user_id = $this->request->getSession()->getAttribute('user_id');
$user = $modelUser->getUserById($user_id);
if($this->request->existParameter('name') && $this->request->existParameter('camera_id'))
{
$name = $this->request->getParameter('name');
$camera_id = $this->request->getParameter('camera_id');
if($modelCamera->exist($camera_id))
{
if (!$modelUser->haveCam($user->getId(), $camera_id))
{
$modelUser->addCam($user->getId(), $camera_id, $name);
$messageInfo = "Modification effectué";
}
else
$messageInfo = "Vous avez déja accès à cette caméra";
}
else
$messageInfo = "Le numéro de série ne correspond à aucune caméra";
}
else
$messageInfo = "Les champs name et numéro de série doivent être remplies";
$cameras = $modelCamera->getAllCameraByUser($user_id);
$this->generateView(array('cameras' => $cameras, 'user' => $user, 'messageInfo' => $messageInfo ),'settings');
}
public function admin()
{
if($this->request->getSession()->getAttribute('login') == "root")
{
$this->generateView();
}
else
throw new Exception('Vous n\'avez pas accès à cette page');
}
public function addCamAdmin()
{
if($this->request->getSession()->getAttribute('login') == "root")
{
$modelCamera = new ModelCamera();
$id = uniqid("",false).rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);
$product_key = sha1(strval(rand()));
$modelCamera->addCamera($id,$product_key,0,0,"");
$this->generateView(array("id"=>$id, "product_key"=>$product_key),"admin");
}
else
throw new Exception('Vous n\'avez pas accès à cette page');
}
}

View File

@ -0,0 +1,15 @@
<?php
require_once $GLOBALS['app_path'].'Framework/Controller.php';
abstract class ControllerSecure extends Controller
{
public function executeAction($action)
{
if ($this->request->getSession()->existAttribute("user_id")) {
parent::executeAction($action);
}
else {
$this->redirect("connexion");
}
}
}

View File

@ -0,0 +1,27 @@
<?php
require_once $GLOBALS['app_path'].'Framework/Controller.php';
abstract class ControllerSecureUserCam extends Controller
{
public function executeAction($action)
{
if ($this->request->getSession()->existAttribute("user_id"))
{
$user_id = $this->request->getSession()->getAttribute("user_id");
if($this->request->existParameter('id'))
{
$camera_id = $this->request->getParameter('id');
$modelCamera = new ModelCamera();
if($modelCamera->userCanAccessCam($user_id,$camera_id))
parent::executeAction($action);
else
throw new Exception('Vous n\'avez pas accès à cette caméra');
}
else
throw new Exception('Id caméra non spécifié');
}
else {
$this->redirect("connexion");
}
}
}