#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.
remotes/github/pjlink
OpenGnSys Support Team 2019-05-27 13:05:06 +02:00
parent b9d5756a29
commit 560455a8c9
5 changed files with 159 additions and 70 deletions

View File

@ -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

View File

@ -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){

View File

@ -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.

View File

@ -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;

View File

@ -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.