diff options
author | OpenGnSys Support Team <soporte-og@soleta.eu> | 2019-05-27 13:05:06 +0200 |
---|---|---|
committer | OpenGnSys Support Team <soporte-og@soleta.eu> | 2019-05-27 13:05:58 +0200 |
commit | 560455a8c98e8a8ee374f50812c9915f32f7d18c (patch) | |
tree | 35725c0a0ef7f26bcdd0975eee998d1882a111f9 /admin | |
parent | b9d5756a29908aeb7c171c2be083c730383b2876 (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.php | 6 | ||||
-rw-r--r-- | admin/WebConsole/comandos/gestores/wakeonlan_repo.php | 13 | ||||
-rw-r--r-- | admin/WebConsole/includes/restfunctions.php | 137 | ||||
-rw-r--r-- | admin/WebConsole/principal/ecoconsola.php | 43 | ||||
-rw-r--r-- | admin/WebConsole/principal/sondeo.php | 30 |
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. |