diff options
author | ramon <ramongomez@us.es> | 2016-04-26 13:13:57 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2016-04-26 13:13:57 +0000 |
commit | 15acccdf950630f68cd77ed1e7abf6e4c34dc40e (patch) | |
tree | 4d584a525dd5d912c16238e1e446b013fd1151d2 /admin/WebConsole | |
parent | dbbe6893690f7687e03b05d42e1d96ae88446f02 (diff) |
#743: Integrar código del ticket:743 en rama de desarrollo.
git-svn-id: https://opengnsys.es/svn/branches/version1.1@4904 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'admin/WebConsole')
9 files changed, 388 insertions, 46 deletions
diff --git a/admin/WebConsole/comandos/gestores/wakeonlan_repo.php b/admin/WebConsole/comandos/gestores/wakeonlan_repo.php new file mode 100644 index 00000000..d9a04aa8 --- /dev/null +++ b/admin/WebConsole/comandos/gestores/wakeonlan_repo.php @@ -0,0 +1,76 @@ +<? +// Fichero con funciones para trabajar con el webservice +include_once("../../includes/restfunctions.php"); + +/** + En este punto disponemos de tres variables indicando las ips, las macs y las ids de los + ordenadores, este script obtiene cual es el repositorio + $cadenaid + $cadenaip + $cadenamac + +*/ +// Capturamos todas las ids +$macs = explode(";",$cadenamac); +// Recorremos las ids y vemos cual es la ip del repositorio +$repos = array(); +$reposAndMacs = array(); +foreach($macs as $mac){ + $cmd->texto="SELECT repo.ip, repo.apikey FROM ordenadores o,repositorios repo WHERE o.mac=\"".$mac."\" AND o.idrepositorio=repo.idrepositorio"; + $rs=new Recordset; + $rs->Comando=&$cmd; + if (!$rs->Abrir()) + return; // Error al abrir recordset + while (!$rs->EOF){ + $repo = $rs->campos["ip"]; + if(!existREPO($repo, $repos)){ + $repos[count($repos)]=$repo; + } + // Una vez creado el repo se asigna la mac del pc a su lista + if(empty($reposAndMacs[$repo])){ + $reposAndMacs[$repo] = array(); + $reposAndMacs[$repo]["apikey"] = $rs->campos["apikey"]; + } + // Modificar la mac añadiendo ":" cada dos caracteres + $tmp = substr_replace($mac, ":", 2, 0); + $tmp = substr_replace($tmp, ":", 5, 0); + $tmp = substr_replace($tmp, ":", 8, 0); + $tmp = substr_replace($tmp, ":", 11, 0); + $tmp = substr_replace($tmp, ":", 14, 0); + + $reposAndMacs[$repo][count($reposAndMacs[$repo])] = $tmp; + $rs->Siguiente(); + } + $rs->Cerrar(); +} +// En este punto tenemos un array con todos los repos y cada uno de ellos con una lista de todas las macs que deben arrancar +// Recorremos cada uno de ellos +foreach($reposAndMacs as $repo => $macs){ + // En el array de $macs tenemos la clave "apikey" + if($macs["apikey"] !== ""){ + $apiKeyRepo = $macs["apikey"]; + unset($macs["apikey"]); + $url = "http://".$repo."/opengnsys/rest/index.php/repository/poweron"; + $headers = array('Authorization: '.$apiKeyRepo); + $data = http_build_query(array("macs" => $macs)); + $result = callAPI("POST",$url, $data, $headers); + $result = json_decode($result); + } + else{ + echo "No hacemos nada, el repositorio no tiene el webservice activo"; + + } +} + +function existREPO($repo, $repos){ + $found=false; + $index = 0; + while(!$found && $index < count($repos)){ + $r = $repos[$index]; + if($r == $repo) + $found=true; + } + return $found; +} + +?> diff --git a/admin/WebConsole/gestores/gestor_repositorios.php b/admin/WebConsole/gestores/gestor_repositorios.php index 88727394..29e2111a 100644 --- a/admin/WebConsole/gestores/gestor_repositorios.php +++ b/admin/WebConsole/gestores/gestor_repositorios.php @@ -26,6 +26,7 @@ $passguor=""; $grupoid=0; $puertorepo=""; +$apiKeyRepo=""; $comentarios=""; if (isset($_POST["opcion"])) $opcion=$_POST["opcion"]; // Recoge parametros @@ -38,6 +39,7 @@ if (isset($_POST["nombrerepositorio"])) $nombrerepositorio=$_POST["nombrereposit if (isset($_POST["ip"])) $ip=$_POST["ip"]; if (isset($_POST["passguor"])) $passguor=$_POST["passguor"]; if (isset($_POST["puertorepo"])) $puertorepo=$_POST["puertorepo"]; +if (isset($_POST["apiKeyRepo"])) $apiKeyRepo=$_POST["apiKeyRepo"]; if (isset($_POST["comentarios"])) $comentarios=$_POST["comentarios"]; $tablanodo=""; // Arbol para nodos insertados @@ -109,6 +111,7 @@ function Gestiona(){ global $ip; global $passguor; global $puertorepo; + global $apiKeyRepo; global $comentarios; global $op_alta; @@ -126,11 +129,12 @@ function Gestiona(){ $cmd->CreaParametro("@ip",$ip,0); $cmd->CreaParametro("@passguor",$passguor,0); $cmd->CreaParametro("@puertorepo",$puertorepo,0); + $cmd->CreaParametro("@apiKeyRepo",$apiKeyRepo,0); $cmd->CreaParametro("@comentarios",$comentarios,0); switch($opcion){ case $op_alta : - $cmd->texto="INSERT INTO repositorios(idcentro,grupoid,nombrerepositorio,ip,passguor,puertorepo,comentarios) VALUES (@idcentro,@grupoid,@nombrerepositorio,@ip,@passguor,@puertorepo,@comentarios)"; + $cmd->texto="INSERT INTO repositorios(idcentro,grupoid,nombrerepositorio,ip,passguor,puertorepo,comentarios,apikey) VALUES (@idcentro,@grupoid,@nombrerepositorio,@ip,@passguor,@puertorepo,@comentarios,@apiKeyRepo)"; $resul=$cmd->Ejecutar(); if ($resul){ // Crea una tabla nodo para devolver a la p�gina que llam� �sta $idrepositorio=$cmd->Autonumerico(); @@ -142,7 +146,7 @@ function Gestiona(){ } break; case $op_modificacion: - $cmd->texto="UPDATE repositorios SET nombrerepositorio=@nombrerepositorio,ip=@ip,passguor=@passguor,puertorepo=@puertorepo,comentarios=@comentarios WHERE idrepositorio=@idrepositorio"; + $cmd->texto="UPDATE repositorios SET nombrerepositorio=@nombrerepositorio,ip=@ip,passguor=@passguor,puertorepo=@puertorepo,comentarios=@comentarios, apikey=@apiKeyRepo WHERE idrepositorio=@idrepositorio"; $resul=$cmd->Ejecutar(); break; case $op_eliminacion : diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_repositorios_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_repositorios_cat.php index ccaaadcb..8ffd1ede 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_repositorios_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_repositorios_cat.php @@ -22,4 +22,5 @@ $TbMsg[13]="Espai Lliure"; $TbMsg[14]="% Ocupat"; $TbMsg[15]='Limitacions d\'aquesta versió'; $TbMsg[16]='Informació d\'espai és permès si Repositori i Servidor Web allotjats al mateix servidor'; +$TbMsg[17]='Api Token'; ?> diff --git a/admin/WebConsole/idiomas/php/eng/propiedades_repositorios_eng.php b/admin/WebConsole/idiomas/php/eng/propiedades_repositorios_eng.php index 22644e67..d98028f4 100644 --- a/admin/WebConsole/idiomas/php/eng/propiedades_repositorios_eng.php +++ b/admin/WebConsole/idiomas/php/eng/propiedades_repositorios_eng.php @@ -22,4 +22,5 @@ $TbMsg[13]="Space Free"; $TbMsg[14]="% Taken"; $TbMsg[15]='Limitations of this version'; $TbMsg[16]='Space information is allowed only if Repository and Web Server are hosted on the same server'; +$TbMsg[17]='Api Token'; ?> diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_repositorios_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_repositorios_esp.php index 2eae0b47..67f14a17 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_repositorios_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_repositorios_esp.php @@ -22,4 +22,5 @@ $TbMsg[13]="Espacio Libre"; $TbMsg[14]="% Ocupado"; $TbMsg[15]='Limitaciones de esta versión'; $TbMsg[16]='Información de espacio solo disponible si Repositorio y Servidor Web están alojados en el mismo servidor'; +$TbMsg[17]='Api Token'; ?> diff --git a/admin/WebConsole/includes/restfunctions.php b/admin/WebConsole/includes/restfunctions.php index 3293cd51..1fb5770f 100644 --- a/admin/WebConsole/includes/restfunctions.php +++ b/admin/WebConsole/includes/restfunctions.php @@ -64,5 +64,52 @@ function multiRequest($data, $options = array()) { return $result; } -?> + + +/** + * @brief Realiza una petición POST, PUT, GET, DELETE a una webservice. Pueden enviarse datos y cabeceras especificas + * @param $method Metodo http (POST, GET, etc) + * @param $url Url del webservice a consultar + * @param $data array de datos a enviar. Ej. array("param" => "value") ==> index.php?param=value + * @param $headers Cabeceras especificas de la peticion. Ej. array('Authorization: "9Ka7wG3EqhcjylUeQXITy0llj2TS8eKe"') + */ +// Method: POST, PUT, GET etc +// Data: +// Ej. callAPI("GET", "http://172.17.11.176/opengnsys/rest/index.php/repository/images?extensions[]=img&extensions[]=sum", array('Authorization: "9Ka7wG3EqhcjylUeQXITy0llj2TS8eKe"')) +function callAPI($method, $url, $data = false, $headers = false) +{ + $curl = curl_init(); + + switch ($method) + { + case "POST": + curl_setopt($curl, CURLOPT_POST, 1); + + if ($data) + curl_setopt($curl, CURLOPT_POSTFIELDS, $data); + break; + case "PUT": + curl_setopt($curl, CURLOPT_PUT, 1); + break; + default: + if ($data) + $url = sprintf("%s?%s", $url, http_build_query($data)); + } + + // Optional Authentication: + //curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + //curl_setopt($curl, CURLOPT_USERPWD, "username:password"); + + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + if($headers != false){ + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + } + + $result = curl_exec($curl); + + curl_close($curl); + + return $result; +} diff --git a/admin/WebConsole/propiedades/propiedades_repositorios.php b/admin/WebConsole/propiedades/propiedades_repositorios.php index 571c7d0e..f8bb2314 100644 --- a/admin/WebConsole/propiedades/propiedades_repositorios.php +++ b/admin/WebConsole/propiedades/propiedades_repositorios.php @@ -12,7 +12,9 @@ include_once("../includes/ctrlacc.php"); include_once("../includes/opciones.php");
include_once("../includes/CreaComando.php");
include_once("../clases/AdoPhp.php");
-include_once("../idiomas/php/".$idioma."/propiedades_repositorios_".$idioma.".php");
+include_once("../idiomas/php/".$idioma."/propiedades_repositorios_".$idioma.".php");
+// Fichero con funciones para trabajar con el webservice
+include_once("../includes/restfunctions.php");
//________________________________________________________________________________________________________
$opcion=0;
$opciones=array($TbMsg[0],$TbMsg[1],$TbMsg[2],$TbMsg[3]);
@@ -21,6 +23,7 @@ $idrepositorio=0; $nombrerepositorio="";
$ip="";
$puertorepo="2002";
+$apiKeyRepo="";
$grupoid=0;
$comentarios="";
$ordenadores=0; // Número de ordenador a los que da servicio
@@ -45,38 +48,40 @@ if ($opcion!=$op_alta){ $iprepositorio="";
$ipservidor=$_SERVER['SERVER_ADDR'];
- $cmd->texto="SELECT * FROM repositorios WHERE idrepositorio=$idrepositorio";
- $rs=new Recordset;
- $rs->Comando=&$cmd;
- if (!$rs->Abrir()) return(true); // Error al abrir recordset
- $rs->Primero();
- if (!$rs->EOF){
- $nombrerepositorio=$rs->campos["nombrerepositorio"];
- $iprepositorio=$rs->campos["ip"];
- }
- $rs->Cerrar();
-
-if ($iprepositorio == $ipservidor)
+if ($ip == $ipservidor)
{
$repolocal="si";
$espaciorepo=exec("df -h /opt/opengnsys/images");
- $espaciorepo=split(" ",$espaciorepo);
- for ($j=0;$j<count($espaciorepo);$j++)
- {
- if ($espaciorepo[$j]!="")
- {$espaciorepos[]=$espaciorepo[$j];}
- }
- for ($k=0;$k<count($espaciorepos);$k++)
- {
- $totalrepo=$espaciorepos[1];
- $ocupadorepo=$espaciorepos[2];
- $librerepo=$espaciorepos[3];
- $porcentajerepo=$espaciorepos[4];
- }
+ $espaciorepos=split(" ",preg_replace('/\s+/', ' ', $espaciorepo));
+
+ $totalrepo=$espaciorepos[1];
+ $ocupadorepo=$espaciorepos[2];
+ $librerepo=$espaciorepos[3];
+ $porcentajerepo=$espaciorepos[4];
+
}
else{
- $repolocaL="no";
+ $repolocal="no";
+ $repoWithApi=false;
+ $repoImages = null;
+
+ // Si tenemos un apiKey podemos obtener la información desde el webservice en el repositorio
+ if($apiKeyRepo != ""){
+ $url = "http://".$ip."/opengnsys/rest/index.php/repository/images";
+ $headers = array('Authorization: '.$apiKeyRepo);
+ $result = callAPI("GET",$url, false, $headers);
+ $result = json_decode($result);
+ $totalrepo=$result->disk->total;
+ $ocupadorepo=$result->disk->used;
+ $librerepo=$result->disk->free;
+ $porcentajerepo=$result->disk->percent;
+ $repoImages = $result->images;
+ $repoWithApi = true;
+
+
+ /**/
}
+}
//#########################################################################
?>
@@ -101,59 +106,69 @@ else{ <P align=center class=cabeceras><?echo $TbMsg[4]?><BR>
<SPAN align=center class=subcabeceras><? echo $opciones[$opcion]?></SPAN></P>
<TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos >
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+<!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -->
<TR>
- <TH align=center> <?echo $TbMsg[5]?> </TD>
+ <TH align="center"> <?echo $TbMsg[5]?> </TD>
<?
if ($opcion==$op_eliminacion)
echo '<TD>'.$nombrerepositorio.'</TD>';
else
- echo '<TD><INPUT class="formulariodatos" name=nombrerepositorio style="width:200" type=text value="'.$nombrerepositorio.'"></TD>';
+ echo '<TD><INPUT class="formulariodatos" name="nombrerepositorio" style="width:200" type="text" value="'.$nombrerepositorio.'"></TD>';
?>
- <TD valign=top align=left rowspan=3 ><CENTER>
- <IMG border=3 style="border-color:#63676b" src="../images/aula.jpg">
+ <TD valign="top" align="left" rowspan="4" ><CENTER>
+ <IMG border="3" style="border-color:#63676b" src="../images/aula.jpg">
<BR> Ordenadores: <? echo $ordenadores?></CENTER></TD>
</TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+<!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -->
<TR>
<TH align=center> <?echo $TbMsg[6]?> </TD>
<?
if ($opcion==$op_eliminacion)
echo '<TD>'.$ip.'</TD>';
else
- echo'<TD><INPUT class="formulariodatos" name=ip type=text style="width:200" value="'.$ip.'"></TD>';
+ echo'<TD><INPUT class="formulariodatos" name="ip" type="text" style="width:200" value="'.$ip.'"></TD>';
?>
</TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+<!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -->
<TR>
<TH align=center> <?echo $TbMsg[8]?> </TD>
<?
if ($opcion==$op_eliminacion)
echo '<TD>'.$puertorepo.'</TD>';
else
- echo'<TD><INPUT class="formulariodatos" name=puertorepo type=text style="width:200" value="'.$puertorepo.'"></TD>';
+ echo'<TD><INPUT class="formulariodatos" name=puertorepo type="text" style="width:200" value="'.$puertorepo.'"></TD>';
+ ?>
+ </TR>
+<!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -->
+ <TR>
+ <TH align=center> <?echo $TbMsg[17]?> </TD>
+ <?
+ if ($opcion==$op_eliminacion)
+ echo '<TD>'.$apiKeyRepo.'</TD>';
+ else
+ echo'<TD><INPUT class="formulariodatos" name="apiKeyRepo" type="text" style="width:200" value="'.$apiKeyRepo.'"></TD>';
?>
</TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+<!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -->
<TR>
<TH align=center> <?echo $TbMsg[7]?> </TD>
<?
if ($opcion==$op_eliminacion)
- echo '<TD colspan=2>'.$comentarios.'</TD>';
+ echo '<TD colspan="2">'.$comentarios.'</TD>';
else
- echo '<TD colspan=2><TEXTAREA class="formulariodatos" name=comentarios rows=2 cols=50>'.$comentarios.'</TEXTAREA></TD>';
+ echo '<TD colspan="2"><TEXTAREA class="formulariodatos" name="comentarios" rows=2 cols=50>'.$comentarios.'</TEXTAREA></TD>';
?>
</TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+<!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -->
</TABLE>
<?php if ( $opcion == 1 ){} else { ?>
<TABLE align=center border=0 cellPadding=2 cellSpacing=2 class=tabla_datos >
- <!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -->
- <?php if ($repolocal == "si" ) { ?>
+ <?php if ($repolocal == "si" || $repoWithApi == true ) { ?>
<TR>
<TH align=center width=125> <?echo $TbMsg[11]?> </TD>
<TH align=center width=120> <?echo $TbMsg[12]?> </TD>
@@ -166,15 +181,31 @@ else{ <TD align=center width=120> <?echo $librerepo?> </TD>
<TD align=center width=101> <?echo $porcentajerepo?> </TD>
</TR>
+ <?php
+ // Si tenemos informacion del repositorio remoto, mostramos las imagenes
+ if($repoWithApi == true && is_array($repoImages)){
+ echo "<tr class='tabla_listados_sin'><th colspan='4'>Contenido /opengnsys/images</th></tr>";
+ echo "<tr><td>File</td><td>Size</td><td>Modified</td><td>Permissions</td></tr>";
+ foreach($repoImages as $image){
+ echo "<tr class='tabla_listados_sin'>";
+ echo "<td>".$image->file->name."</td>";
+ echo "<td>".$image->file->size." bytes</td>";
+ echo "<td>".$image->file->modified."</td>";
+ echo "<td>".$image->file->permissions."</td>";
+ echo "</tr>";
+ }
+ }
+ ?>
<?php }else { ?>
<tr>
<th align="center"> <?php echo '<strong>'.$TbMsg[15].'</strong></br>'.$TbMsg[16] ?></th>
</tr>
<?php } ?>
<?php } ?>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+<!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -->
</TABLE>
+
</FORM>
</DIV>
@@ -197,6 +228,7 @@ function TomaPropiedades($cmd,$id){ global $ip;
global $comentarios;
global $puertorepo;
+ global $apiKeyRepo;
global $ordenadores;
@@ -217,6 +249,7 @@ function TomaPropiedades($cmd,$id){ $ip=$rs->campos["ip"];
$comentarios=$rs->campos["comentarios"];
$puertorepo=$rs->campos["puertorepo"];
+ $apiKeyRepo=$rs->campos["apikey"];
// $ordenadores=$rs->campos["numordenadores"];
}
$rs->Cerrar();
diff --git a/admin/WebConsole/rest/index.php b/admin/WebConsole/rest/index.php index f43ebda5..fc29c517 100644 --- a/admin/WebConsole/rest/index.php +++ b/admin/WebConsole/rest/index.php @@ -1009,6 +1009,9 @@ EOD; // } //); +// Include repository routes. +include("repository.php"); + // Include OGAgent push routes. include("ogagent.php"); diff --git a/admin/WebConsole/rest/repository.php b/admin/WebConsole/rest/repository.php new file mode 100644 index 00000000..0c18b6dd --- /dev/null +++ b/admin/WebConsole/rest/repository.php @@ -0,0 +1,176 @@ +<?php +/** + * @file index.php + * @brief OpenGnsys REST API manager. + * @warning All input and output messages are formatted in JSON. + * @note Some ideas are based on article "How to create REST API for Android app using PHP, Slim and MySQL" by Ravi Tamada, thanx. + * @license GNU GPLv3+ + * @author Juan Manuel Bardallo SIC Universidad de Huelva + * @version 1.0 + * @date 2016-04-06 + */ + +// Auxiliar functions. +/** + * @brief Validate API key included in "Authorization" HTTP header. + * @return JSON response on error. + */ +function validateRepositoryApiKey() { + $response = array(); + + // Read Authorization HTTP header. + $headers = apache_request_headers(); + if (! empty($headers['Authorization'])) { + // Assign user id. that match this key to global variable. + $apikey = htmlspecialchars($headers['Authorization']); + // El repositorio recupera el token desde el fichero de configuracion ogAdmRepo.cfg + $confFile = fopen("../../etc/ogAdmRepo.cfg", "r"); + + // Leemos cada linea hasta encontrar la clave "ApiToken" + if ($confFile) { + $found = false; + while(!feof($confFile)){ + $line = fgets($confFile); + $key = strtok($line,"="); + if($key == "ApiToken"){ + $token = trim(strtok("=")); + if(strcmp($apikey,$token) == 0){ + $found = true; + } + } + } + if (!$found){ + // Credentials error. + $response['error'] = true; + $response['message'] = 'Login failed. Incorrect credentials'; + jsonResponse(401, $response); + $app->stop(); + } + } else { + // Access error. + $response['error'] = true; + $response['message'] = "An error occurred, please try again"; + jsonResponse(500, $response); + } + } else { + // Error: missing API key. + $response['error'] = true; + $response['message'] = 'Missing Repository API key'; + jsonResponse(400, $response); + $app = \Slim\Slim::getInstance(); + $app->stop(); + } +} + +function commandExist($cmd) { + $returnVal = shell_exec("which $cmd"); + return (empty($returnVal) ? false : true); +} + +// Define REST routes. + + +/** + * @brief List all images in the repository + * @note Route: /images, Method: GET + * @param no + * @return JSON array with imagename, file size + */ +$app->get('/repository/images', 'validateRepositoryApiKey', + function() { + $imgPath = '/opt/opengnsys/images'; + $app = \Slim\Slim::getInstance(); + // Comprobar si en la peticion se especificó un filtro por extensiones + $extensions = $app->request->get('extensions'); + + if ($manager = opendir($imgPath)) { + $repoInfo=exec("df -h ".$imgPath); + $repoInfo=split(" ",preg_replace('/\s+/', ' ', $repoInfo)); + + $response['disk']["total"]=$repoInfo[1]; + $response['disk']["used"]=$repoInfo[2]; + $response['disk']["free"]=$repoInfo[3]; + $response['disk']["percent"]=$repoInfo[4]; + + $response['images'] = array(); + while (false !== ($entry = readdir($manager))) { + $include = true; + if ($entry != "." && $entry != "..") { + // Si se especificó algun filtro por extension, comprobamos si el fichero la cumple + if($extensions){ + $ext = pathinfo($imgPath."/".$entry, PATHINFO_EXTENSION); + // Puede ser una o varias dependiendo de si es array o no + if(is_array($extensions) && !in_array($ext, $extensions)){ + $include = false; + } + else if(!is_array($extensions) && $extensions != $ext){ + $include = false; + } + + } + if($include == true){ + $strFileName = $imgPath."/".$entry; + $fileInfo["file"]["name"] = $entry; + $fileInfo["file"]["size"] = filesize($strFileName); + $fileInfo["file"]["modified"] = date( "D d M Y g:i A", filemtime($strFileName)); + $fileInfo["file"]["permissions"] = (is_readable($strFileName)?"r":"-").(is_writable($strFileName)?"w":"-").(is_executable($strFileName)?"x":"-"); + array_push($response['images'], $fileInfo); + } + } + } + closedir($manager); + jsonResponse(200, $response); + }else{ + // Print error message. + $response['error'] = true; + $response['message'] = 'Images directory not found'; + jsonResponse(404, $response); + } + $app->stop(); + } +); + + +/** + * @brief Power on a pc or group of pcs with the MAC specified in POST parameters + * @note Route: /poweron, Method: POST + * @param macs OU id. + * @return JSON string ok if the power on command was sent + */ +$app->post('/repository/poweron', 'validateRepositoryApiKey', + function() { + $app = \Slim\Slim::getInstance(); + // Debe venir el parametro macs en el post + $data = $app->request()->post(); + if(empty($data["macs"])){ + // Print error message. + $response['error'] = true; + $response['message'] = 'Required param macs not found'; + jsonResponse(400, $response); + } + else{ + $macs = $data["macs"]; + $strMacs = ""; + foreach($macs as $mac){ + $strMacs .= " ".$mac; + } + // Ejecutar comando wakeonlan, debe estar disponible en el sistema operativo + if(commandExist("wakeonlan")){ + $response["output"] = "Executing wakeonlan ".trim($strMacs)."\n"; + $response["output"] .= shell_exec("wakeonlan ".trim($strMacs)); + // Comprobar si el comando se ejecutórrectamente + jsonResponse(200, $response); + } + else{ + // Print error message. + $response['error'] = true; + $response['message'] = 'Wakeonlan command not found in this repository'; + jsonResponse(404, $response); + } + } + } +); + +?> + + |