summaryrefslogtreecommitdiffstats
path: root/admin/WebConsole/comandos/gestores/wakeonlan_repo.php
blob: e71f1e5180d9fc26633b1f621f8b93f2101f1e88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
// 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

 */

//Multicast or Unicast
preg_match_all('!\d{1}!', $atributos, $matches);

// Capturamos todas las ids
$macs = explode(";",$cadenamac);
$ips = explode(';',$cadenaip);

wol($matches[0][0], $ips);

// 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"]);
		// Componer datos de conexión para el repositorio.
		$urls[$repo]['url'] = "https://$repo/opengnsys/rest/repository/poweron";
		$urls[$repo]['header'] = array('Authorization: '. $apiKeyRepo);
		$urls[$repo]['post'] = '{"macs": ["' . implode('","', $macs) . '"], "ips": ["' . str_replace(';', '","', $cadenaip) .
			'"], "mar": "' . $matches[0][0] . '"}';
	}
	else {
		$avisoRepo = true;
	}
}
// Enviar petición múltiple a los repositorios afectados.
if (isset($urls)) {
	$result = multiRequest($urls);
	// Comprobar respuesta.
	foreach ($result as $repo => $res) {
		if ($res['code'] != 200) {
			$avisoRepo = true;
		}
	}
}


function existREPO($repo, $repos){
	$found=false;
	$index = 0;
	while(!$found && $index < count($repos)){
		$r = $repos[$index];
		$index++;
		if($r == $repo)
			$found=true;
	}
	return $found;
}