summaryrefslogtreecommitdiffstats
path: root/admin
diff options
context:
space:
mode:
authorOpenGnSys Support Team <soporte-og@soleta.eu>2019-05-27 13:05:06 +0200
committerOpenGnSys Support Team <soporte-og@soleta.eu>2019-05-27 13:05:58 +0200
commit560455a8c98e8a8ee374f50812c9915f32f7d18c (patch)
tree35725c0a0ef7f26bcdd0975eee998d1882a111f9 /admin
parentb9d5756a29908aeb7c171c2be083c730383b2876 (diff)
#915 adapt web console to use new REST API in OgAdmServer
Use new REST API in ogAdmServer. This allows us to start removing the old SockHidra code.
Diffstat (limited to 'admin')
-rw-r--r--admin/WebConsole/comandos/gestores/gestor_Comandos.php6
-rw-r--r--admin/WebConsole/comandos/gestores/wakeonlan_repo.php13
-rw-r--r--admin/WebConsole/includes/restfunctions.php137
-rw-r--r--admin/WebConsole/principal/ecoconsola.php43
-rw-r--r--admin/WebConsole/principal/sondeo.php30
5 files changed, 159 insertions, 70 deletions
diff --git a/admin/WebConsole/comandos/gestores/gestor_Comandos.php b/admin/WebConsole/comandos/gestores/gestor_Comandos.php
index dd83efd5..ea656d2e 100644
--- a/admin/WebConsole/comandos/gestores/gestor_Comandos.php
+++ b/admin/WebConsole/comandos/gestores/gestor_Comandos.php
@@ -23,6 +23,7 @@ include_once("../includes/capturaacciones.php");
define("IDCOMANDWAKEUP", 1);
define("IDCOMANDSENDMESSAGE", 16);
+define('IDCOMMANDSESSION', 9);
// Recoge parametros de seguimiento
$sw_ejya="";
@@ -122,6 +123,8 @@ $cmd->CreaParametro("@ordtarea",0,1);
if($funcion == "nfn=Arrancar".chr(13))
include("wakeonlan_repo.php");
/**/
+if ($idcomando == 9)
+ session($cadenaip, $atributos);
if($ambito==0){ // Ambito restringido a un subconjuto de ordenadores con formato (idordenador1,idordenador2,etc)
$cmd->ParamSetValor("@restrambito",$idambito);
@@ -177,7 +180,8 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){
$ValorParametros=extrae_parametros($parametros,chr(13),'=');
$script=@urldecode($ValorParametros["scp"]);
if($sw_ejya=='on'){
- if ($idcomando != IDCOMANDSENDMESSAGE && $idcomando != IDCOMANDWAKEUP) {
+ if ($idcomando != IDCOMANDSENDMESSAGE && $idcomando != IDCOMANDWAKEUP &&
+ $idcomando != IDCOMMANDSESSION) {
// Envío al servidor
$shidra=new SockHidra($servidorhidra,$hidraport);
if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra
diff --git a/admin/WebConsole/comandos/gestores/wakeonlan_repo.php b/admin/WebConsole/comandos/gestores/wakeonlan_repo.php
index 68922c41..c1c5394f 100644
--- a/admin/WebConsole/comandos/gestores/wakeonlan_repo.php
+++ b/admin/WebConsole/comandos/gestores/wakeonlan_repo.php
@@ -9,9 +9,17 @@ include_once("../../includes/restfunctions.php");
$cadenaip
$cadenamac
-*/
+ */
+
+//Multicast or Unicast
+preg_match_all('!\d{1}!', $atributos, $matches);
+
// Capturamos todas las ids
$macs = explode(";",$cadenamac);
+$ips = explode(';',$cadenaip);
+
+wol($matches[0][0], $macs, $ips);
+
// Recorremos las ids y vemos cual es la ip del repositorio
$repos = array();
$reposAndMacs = array();
@@ -44,9 +52,6 @@ foreach($macs as $mac){
$rs->Cerrar();
}
-//Multicast or Unicast
-$typeWol = preg_match_all('!\d{1}!', $atributos, $matches);
-
// 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){
diff --git a/admin/WebConsole/includes/restfunctions.php b/admin/WebConsole/includes/restfunctions.php
index 374e4f0c..59f9bb98 100644
--- a/admin/WebConsole/includes/restfunctions.php
+++ b/admin/WebConsole/includes/restfunctions.php
@@ -1,5 +1,140 @@
<?php
-
+
+define('OG_REST_URL', 'http://127.0.0.1:8888/');
+
+define('GET', 1);
+define('POST', 2);
+define('CUSTOM', 3);
+
+define('OG_REST_CMD_CLIENTS', 'clients');
+define('OG_REST_CMD_WOL', 'wol');
+define('OG_REST_CMD_SESSION', 'session');
+define('OG_REST_CMD_RUN', 'shell/run');
+define('OG_REST_CMD_OUTPUT', 'shell/output');
+
+define('OG_REST_PARAM_CLIENTS', 'clients');
+define('OG_REST_PARAM_ADDR', 'addr');
+define('OG_REST_PARAM_MAC', 'mac');
+define('OG_REST_PARAM_DISK', 'disk');
+define('OG_REST_PARAM_PART', 'partition');
+define('OG_REST_PARAM_RUN', 'run');
+define('OG_REST_PARAM_TYPE', 'type');
+
+function common_request($command, $type, $data = null, $custom = 'GET') {
+
+ $json = json_encode($data);
+
+ $service_url = OG_REST_URL.$command;
+
+ $curl = curl_init($service_url);
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+
+ switch ($type) {
+ default:
+ case GET:
+ break;
+ case POST:
+ curl_setopt($curl, CURLOPT_POST, true);
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
+ }
+
+ $curl_response = curl_exec($curl);
+ $info = curl_getinfo($curl);
+
+ if ($curl_response === false || $info['http_code'] != 200) {
+ syslog(LOG_ERR, 'error occured during curl exec. Additioanl info: ' . var_export($info));
+ return null;
+ }
+
+ curl_close($curl);
+
+ syslog(LOG_INFO, 'response '.$command.' ok!');
+
+ return json_decode($curl_response, true);
+}
+
+
+function shell($case, $string_ips, $command) {
+
+ $ips = explode(';',$string_ips);
+
+ switch ($case) {
+ case 1:
+ $data = array(OG_REST_PARAM_CLIENTS => $ips,
+ OG_REST_PARAM_RUN => $command);
+ $command = OG_REST_CMD_RUN;
+ break;
+ default:
+ case 2:
+ $data = array(OG_REST_PARAM_CLIENTS => $ips);
+ $command = OG_REST_CMD_OUTPUT;
+ }
+
+ $result = common_request($command, POST,
+ $data)[OG_REST_PARAM_CLIENTS][0]['output'];
+
+ return (is_null($result) ? '1' : $result);
+}
+
+function clients($case, $ips) {
+
+ switch ($case) {
+ case 1:
+ $type = POST;
+ $data = array(OG_REST_PARAM_CLIENTS => $ips);
+ break;
+ case 2:
+ $type = GET;
+ break;
+ }
+
+ $result = common_request(OG_REST_CMD_CLIENTS, $type, $data);
+
+ foreach ($result[OG_REST_PARAM_CLIENTS] as $client) {
+ $trama_notificacion = $trama_notificacion.implode('/', $client).';';
+ }
+
+ return $trama_notificacion;
+}
+
+function wol($type_wol, $macs, $ips) {
+
+ switch ($type_wol) {
+ default:
+ case 1:
+ $wol = 'broadcast';
+ break;
+ case 2:
+ $wol = 'unicast';
+ }
+
+ $clients = array();
+
+ for($i=0; $i<count($macs); $i++) {
+ $clients[] = array(OG_REST_PARAM_ADDR => $ips[$i],
+ OG_REST_PARAM_MAC => $macs[$i]);
+ }
+
+ $data = array(OG_REST_PARAM_TYPE => $wol,
+ OG_REST_PARAM_CLIENTS => $clients);
+
+ common_request(OG_REST_CMD_WOL, POST, $data);
+}
+
+function session($string_ips, $params) {
+
+ preg_match_all('!\d{1}!', $params, $matches);
+
+ $ips = explode(';',$string_ips);
+ $disk = $matches[0][0];
+ $part = $matches[0][1];
+
+ $data = array(OG_REST_PARAM_CLIENTS => $ips,
+ OG_REST_PARAM_DISK => $disk, OG_REST_PARAM_PART => $part);
+
+ common_request(OG_REST_CMD_SESSION, POST, $data);
+}
+
/*
* @function multiRequest.
* @param URLs array (may include header and POST data), cURL options array.
diff --git a/admin/WebConsole/principal/ecoconsola.php b/admin/WebConsole/principal/ecoconsola.php
index 5832e8e9..26ea1b61 100644
--- a/admin/WebConsole/principal/ecoconsola.php
+++ b/admin/WebConsole/principal/ecoconsola.php
@@ -15,6 +15,7 @@
include_once("../includes/comunes.php");
include_once("../includes/CreaComando.php");
include_once("../includes/RecopilaIpesMacs.php");
+ include_once('../includes/restfunctions.php');
//________________________________________________________________________________________________________
$ambito=0;
$idambito=0;
@@ -29,18 +30,6 @@
if (!$cmd)
Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
//________________________________________________________________________________________________________
- switch($sw){
- case 1: // Envío del código de scrip
- $funcion="nfn=ConsolaRemota".chr(13);
- $atributos="scp=".rawurlencode($comando).chr(13);
- break;
- case 2: // Recupera el archivo de eco
- $funcion="nfn=EcoConsola".chr(13); // Nombre de la función que procesa la petición
- $atributos=chr(13);
- }
- $aplicacion=""; // Ámbito de aplicación (cadena de ipes separadas por ";" y de identificadores de ordenadores por ","
- $acciones=""; // Cadena de identificadores de acciones separadas por ";" para seguimiento
- //________________________________________________________________________________________________________
// Ámbito de aplicación de la petición
//________________________________________________________________________________________________________
$cadenaid="";
@@ -48,34 +37,12 @@
$cadenamac="";
RecopilaIpesMacs($cmd,$ambito,$idambito); // Ámbito de aplicación
- $aplicacion="ido=".$cadenaid.chr(13)."iph=".$cadenaip.chr(13);
//________________________________________________________________________________________________________
// Envio al servidor de la petición
//________________________________________________________________________________________________________
- $resul=false;
- $trama="";
- $shidra=new SockHidra($servidorhidra,$hidraport);
- if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra
- $parametros=$funcion.$aplicacion.$atributos.$acciones;
- $resul=$shidra->envia_peticion($parametros);
- if($resul)
- $trama=$shidra->recibe_respuesta();
- $shidra->desconectar();
- }
- if($resul){
- $hlonprm=hexdec(substr($trama,$LONCABECERA,$LONHEXPRM));
- $parametros=substr($trama,$LONCABECERA+$LONHEXPRM,$hlonprm);
- $ValorParametros=extrae_parametros($parametros,chr(13),'=');
- switch($sw){
- case 1: // Envío del código de scrip
- $trama_notificacion=$ValorParametros["res"];
- echo $trama_notificacion; // Devuelve respuesta
- break;
- case 2: // Recupera el archivo de eco
- $trama_notificacion=$ValorParametros["res"];
- echo $trama_notificacion; // Devuelve respuesta
- }
-
- }
+
+ $trama_notificacion = shell($sw, $cadenaip, $comando);
+
+ echo $trama_notificacion;
diff --git a/admin/WebConsole/principal/sondeo.php b/admin/WebConsole/principal/sondeo.php
index ca3e8b5e..90493d58 100644
--- a/admin/WebConsole/principal/sondeo.php
+++ b/admin/WebConsole/principal/sondeo.php
@@ -46,36 +46,14 @@
$cadenamac="";
RecopilaIpesMacs($cmd,$ambito,$idambito); // Ámbito de aplicación
- $aplicacion="ido=".$cadenaid.chr(13)."iph=".$cadenaip.chr(13);
- // Envio al servidor de la petición
- //________________________________________________________________________________________________________
- $resul=false;
- $trama="";
- $trama_notificacion="";
- $shidra=new SockHidra($servidorhidra,$hidraport);
- if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra
- $parametros="nfn=".$funcion.chr(13);
- $parametros.=$aplicacion;
- $parametros.=$atributos;
- $parametros.=$acciones;
- $resul=$shidra->envia_peticion($parametros);
- if($resul)
- $trama=$shidra->recibe_respuesta();
- $shidra->desconectar();
- }
- if($resul){
- $hlonprm=hexdec(substr($trama,$LONCABECERA,$LONHEXPRM));
- $parametros=substr($trama,$LONCABECERA+$LONHEXPRM,$hlonprm);
- $ValorParametros=extrae_parametros($parametros,chr(13),'=');
- if (isset ($ValorParametros["tso"])) {
- $trama_notificacion=$ValorParametros["tso"];
- }
- }
+ $ips = explode (';', $cadenaip);
+
+ $trama_notificacion = clients($sw, $ips);
// Send REST requests to new OGAgent clients.
$urls = array();
// Compose array of REST URLs.
- foreach (explode (';', $cadenaip) as $ip) {
+ foreach ($ips as $ip) {
$urls[$ip] = "https://$ip:8000/opengnsys/status";
}
// Launch concurrent requests.