second initial commit

This commit is contained in:
Jérôme Bousquié 2016-09-22 14:24:56 +02:00
parent 51d0c765b7
commit 45a0a47778
13 changed files with 862 additions and 0 deletions

26
admin/bloque_salle.php Normal file
View File

@ -0,0 +1,26 @@
<?php
Function bascule_salle($url) {
$salles_bloquees = array();
$r = new HttpRequest($url, HttpRequest::METH_GET);
try {
$r->send();
if ($r->getResponseCode() == 200) {
$r->getResponseBody();
$reponse = json_decode($r->getResponseBody());
}
}
catch (HttpException $ex) {
echo $ex;
}
return $r->getResponseCode();
}
$action = $_GET["a"];
$salle = $_GET["s"];
$url = "";
if ($action === "b") { $url = "http://cache.iut-rodez.fr/salles/bloque_salle.php?s=$salle"; }
if ($action === "d") { $url = "http://cache.iut-rodez.fr/salles/debloque_salle.php?s=$salle"; }
if ($action != "" ) { bascule_salle($url); }
$precedent = $_SERVER["HTTP_REFERER"];
header("Location: $precedent");
?>

11
admin/con_ip.php Normal file
View File

@ -0,0 +1,11 @@
<?php
header('Content-type: application/json; charset=utf-8');
include('connexions.php');
$ip = $_GET["ip"];
$con_ip = Con_ip($ip);
$tab = "";
if ($con_ip) {
$tab = json_encode($con_ip);
}
echo $tab;
?>

232
admin/connexions.php Normal file
View File

@ -0,0 +1,232 @@
<?php
include_once('winlog_admin_conf.php');
include_once('db_access.php');
// Fonction : Connexions_par_salle
// Renvoie les connexions par salle sous la forme d'un Array
function Connexions_par_salle($salle) {
$machine_de_salle = Machines_de_salle(Machines());
$machines_de_ma_salle = $machine_de_salle[$salle];
$machines_connectees = Connexion_machine();
$connexions_par_salle = array();
if (!empty($machines_connectees)) {
$i = 0;
foreach($machines_de_ma_salle as $machine) {
$connexions_par_salle[$i] = array();
$connexions_par_salle[$i]["machine"] = $machine;
$connexions_par_salle[$i]["username"] = $machines_connectees[$machine]["username"];
$connexions_par_salle[$i]["stamp"] = $machines_connectees[$machine]["stamp"];
$connexions_par_salle[$i]["ip"] = $machines_connectees[$machine]["ip"];
$i++;
}
}
return $connexions_par_salle;
}
// Fonction : Machines()
// Renvoie toutes les machines existantes
// Retourne un tableau associatif : machines[$machine_id] = ($salle, $os, $os_sp, $os_version, $ip_fixe)
function Machines() {
//$machines = array() ;
$db = db_connect();
$req = 'select machine_id, salle, os, os_sp, os_version, ip_fixe from machines order by salle, machine_id';
$res = db_query($db, $req);
while ($mac = db_fetch_row($res)) {
$machines[$mac[0]] = array($mac[1], $mac[2], $mac[3], $mac[4], $mac[5]);
}
db_free($res);
return $machines;
}
// Fonction : Machines_de_salle($machines)
// Renvoie les machines existantes des salles du tableau $machine (si le tableau est vide, alors appel à Machines()
// Retourne un tableau associatif machines_de_salle[$salle_id]=($machine_id1, $machine_id2, ...)
// En fait, cette fonction inverse le tableau associatif de la fonction machine sur la clé $salle
function Machines_de_salle($machines) {
$machines_de_salle = array() ;
if (!$machines ) { $machines = Machines(); }
while ($mac = current($machines)) {
$machines_de_salle[$mac[0]][] = key($machines);
next($machines);
}
return $machines_de_salle;
}
// Fonction Connexion_machine()
// Renvoie un tableau associatif des machines connectées:
// connexion_machines[$machine_id]["username"] = $username
// connexion_machines[$machine_id]["ip"] = $ip
// connexion_machines[$machine_id]["stamp"] = $stamp
function Connexion_machine() {
$connexion_machine = array();
$connexions = Connexions();
if (!empty($connexions)) {
foreach($connexions as $con) {
$connexion_machine[$con["hote"]] = array();
$connexion_machine[$con["hote"]]["username"] = $con["username"];
$connexion_machine[$con["hote"]]["ip"] = $con["ip"];
$connexion_machine[$con["hote"]]["stamp"] = $con["stamp"];
}
}
return $connexion_machine;
}
// Fonction Compte($username)
// Renvoie les informations sur l'utilisateur du compte
// Retourne un array (nom, prenom, groupe)
function Compte($username) {
$db = db_connect();
$req = "SELECT nom, prenom, groupe FROM comptes WHERE username=\"{$username}\"";
$res = db_query($db, $req);
$compte = db_fetch_row($res);
db_free($res);
return $compte;
}
// Fonction : Con_ip($ip)
// Renvoie les informations de la connexion en cours relative à l'IP donnée
// Retourne un array (con_id, username, hote, stamp, nom, prenom, groupe)
function Con_ip($ip) {
$con = Connexions();
$con_ip = array();
$i = 0;
$count = count($con);
while($i < $count) {
if ($con[$i]["ip"] == $ip ) {
$cpt = Compte($con[$i]["username"]);
$con_ip = array($con[$i]["con_id"], $con[$i]["username"], $con[$i]["hote"], $con[$i]["stamp"], $cpt[0], $cpt[1], $cpt[2]);
break;
}
$i++;
}
return $con_ip;
}
// Fonction : Connexions()
// Renvoie les connexions windows en cours du jour
// Retourne un array indexé de connexions :
// con[i]["con_id"] : id de connexion dans la table connexions
// con[i]["username"] : login windows
// con[i]["hote"] : nom de la machine
// con[i]["stamp"] : timestamp unix de la connexion
// con[i]["ip"] : adresse IP de la machine
function Connexions() {
$connexions = array();
$db = db_connect();
$req = 'select con_id, username, hote, unix_timestamp(debut_con), ip from connexions where close=0 and (to_days(now())-to_days(debut_con)<1) order by username';
$res = db_query($db, $req);
$i = 0;
while ($con = db_fetch_row($res)) {
$connexions[$i] = array();
$connexions[$i]["con_id"] = $con[0];
$connexions[$i]["username"] = $con[1];
$connexions[$i]["hote"] = $con[2];
$connexions[$i]["stamp"] = $con[3];
$connexions[$i]["ip"] = $con[4];
$i++;
}
db_free($res);
return $connexions;
}
// Fonction Derniere_connexion_machine($hote)
// Renvoie les informations sur la dernière connexion sur la machine $hote
// Retourne un array :
// last_conn["username"] : login windows
// last_conn["debut"] : timestamp du début de la dernière connexion
// last_conn["fin"] : timestamp de la fin de la dernière connexion ( = debut, si connexion non encore terminée)
// last_conn["close"] : 0 | 1 booléen indiquant si la connexion est terminée (1=close)
function Derniere_connexion_machine($hote) {
$last_conn = array();
$db = db_connect();
$req = 'SELECT username, debut_con, fin_con, close FROM `connexions` WHERE hote="'.$hote.'" order by con_id desc limit 1';
$res = db_query($db, $req);
while ($con = db_fetch_row($res)) {
$last_conn["username"] = $con[0];
$last_conn["debut"] = $con[1];
$last_conn["fin"] = $con[2];
$last_conn["close"] = $con[3];
}
db_free($res);
return $last_conn;
}
// Fonction Connexion_doyenne_salle
// Renvoie la plus plus ancienne connexion d'une salle :
// renvoie un entier correspondant au nombre de jours depuis la dernière connexion la plus ancienne dans la salle
function Connexion_doyenne_salle($machines_de_la_salle) {
$date_now = time();
$date_last = $date_now;
foreach($machines_de_la_salle as $machine) {
$last_conn = Derniere_connexion_machine($machine);
if (!empty($last_conn)) {
$debut_last_machine = $last_conn["debut"];
$date_last_machine = strtotime($debut_last_machine);
if ($date_last_machine < $date_last) { $date_last = $date_last_machine; }
}
}
$nb_jours = floor(($date_now-$date_last)/86400);
return $nb_jours;
}
// Fonction Connexions_wifi()
// Renvoie les connexions wifi non marquées "close" en base
// Retourne un array indexé de connexions :
// con_wifi[i]["id"] : id de connexion wifi
// con_wifi[i]["username"] : login CAS
// con_wifi[i]["ip"] : ip allouée
// con_wifi[i]["browser"] : user agent
// con_wifi[i]["debut"] : timestamp du début de la connexion
function Connexions_wifi() {
$connexions_wifi = array();
$db = db_connect();
$req = 'select wifi_id, wifi_username, wifi_ip, wifi_browser, unix_timestamp(wifi_deb_conn) from wifi where close=0 and (to_days(now())-to_days(wifi_deb_conn)<1) order by wifi_deb_conn';
$res = db_query($db, $req);
$i = 0;
while ($con = db_fetch_row($res)) {
$connexions_wifi[$i]["id"] = $con[0];
$connexions_wifi[$i]["username"] = $con[1];
$connexions_wifi[$i]["ip"] = $con[2];
$connexions_wifi[$i]["browser"] = $con[3];
$connexions_wifi[$i]["debut"] = $con[4];
$i++;
}
db_free($res);
return $connexions_wifi;
}
// function connexions_blacklist_live()
// Renvoie les enregistrements de la table proxy de moins de 15 secondes : dernières touches sur la blacklist
// Retourne un array indexés : (ip, username, thème_blacklist) :
// $connexion_bl_live[$i]["ip"] : ip de la machine à l'origine de la requête sur une URL blacklistée
// $connexion_bl_live[$i]["username"] : username CAS à l'origine de la requête sur une URL blacklistée
// $connexion_bl_live[$i]["target"] : thème de la blacklist concerné - adult, warez, games, etc
function Connexions_blacklist_live() {
$connexions_bl_live = array();
$db = db_connect();
$req = 'select ip, username, target from proxy where timestampdiff(SECOND, timestamp(logts), timestamp(now())) < 15'; // on récupère les logs non checkés datant moins de 15s
$res = db_query($db, $req);
$i = 0;
while ($log = db_fetch_row($res)) {
$connexions_bl_live[$i]["ip"] = $log[0];
$connexions_bl_live[$i]["username"] = $log[1];
$connexions_bl_live[$i]["target"] = $log[2];
$i++;
}
db_free($res);
return $connexions_bl_live;
}
?>

29
admin/db_access.php Normal file
View File

@ -0,0 +1,29 @@
<?php
// Fonction : db_connect
// Renvoie une connexion à la base de données
function db_connect() {
global $db_server, $db_user, $db_passwd, $db_dbname;
$db = new mysqli($db_server, $db_user, $db_passwd, $db_dbname);
return $db;
}
// Fonction : db_query
// Renvoie le résultat d'une requête $query sur la base $db
function db_query($db, $query) {
$res = $db->query($query);
return $res;
}
// Fonction : db_fetch_row
// Renvoie un tableau indexé à partir d'une ligne de résultat d'une requête
function db_fetch_row($res) {
$row = $res->fetch_row();
return $row;
}
// Fonction : db_free
// Libère la mémoire
function db_free($res) {
$res->free();
}
?>

35
admin/ma_salle_live.php Normal file
View File

@ -0,0 +1,35 @@
<?php
include_once('winlog_admin_conf.php');
$delay = $delay * 1000;
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Winlog : Connexions en cours dans les salles</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Language" content="fr">
<link rel="stylesheet" media="screen" type="text/css" title="default" href="default.css">
<script src="jquery/jquery-1.4.4.min.js"></script>
<script>
var auto_refresh = setInterval(
function()
{
$('#loaddiv').load('reload_ma_salle.php');
}, <?php echo($delay); ?>);
</script>
</head>
<body>
<form>
<!-- faire un bouton bloquer/débloquer l'accès Web de cette salle -->
<!-- faire un bouton (sur un autre formulaire) bloquer/débloquer l'accès Windows de cette salle -->
</form>
<div class="salle"><? echo $salle ?></div>
<div class="connexions">
<div id="loaddiv">
<?php
include('reload_ma_salle.php');
?>
</div>
</body>
</html>

49
admin/ordi.php Normal file
View File

@ -0,0 +1,49 @@
<?php
include 'XMPPHP/XMPP.php';
$pc=$_GET["pc"];
#Use XMPPHP_Log::LEVEL_VERBOSE to get more logging for error reports
#If this doesn't work, are you running 64-bit PHP with < 5.2.6?
$conn = new XMPPHP_XMPP('jabber.iut.rdz', 5222, 'winlog', 'winlog', 'xmpphp', 'iut.rdz', $printlog=false, $loglevel=XMPPHP_Log::LEVEL_INFO);
try {
$conn->connect();
$conn->processUntil('session_start');
$conn->presence();
//$msg = "task ".$pc." | findstr DOMETUD | sort";
//$msg = "reload-execute";
$msg = "task ".$pc." | findstr IUT | sort";
$conn->message('windows@iut.rdz', $msg);
$conn->disconnect();
} catch(XMPPHP_Exception $e) {
die($e->getMessage());
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Machine <? echo($pc); ?></title>
<script type="text/javascript" src="jquery/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="strophejs/core.js"></script>
<script type="text/javascript" src="strophejs/md5.js"></script>
<script type="text/javascript" src="strophejs/base64.js"></script>
<script type="text/javascript" src="infopc.js"></script>
</head>
<body>
<h1>Machine <? echo($pc) ; ?></h1>
<h2>Processus</h2>
<div id="resultats"></div>
<br>
<h3>Notifications</h3>
<div id="notifications"></div>
</body>
</html>

116
admin/recup_salles.php Normal file
View File

@ -0,0 +1,116 @@
<?php
// Récupération des salles et des machines dans l'AD, chargement dans la base
include_once('winlog_admin_conf.php');
include_once('db_access.php');
// Connexion à la base winlog
$db = db_connect();
$req_purge_machine = "TRUNCATE machines";
$req_purge_salle = "TRUNCATE salles";
$req_purge_compte = "TRUNCATE comptes";
// connexion LDAP à l'AD
$ldap_con = ldap_connect($ldap_host, $ldap_port);
$ldap_auth = ldap_bind($ldap_con, $ldap_rdn, $ldap_passwd);
// Lecture des salles dans AD : machines pédagogiques
$res_salles = ldap_search($ldap_con, $base_salles, $filtre_salles, $attr_salles);
$entry_salles = ldap_get_entries($ldap_con, $res_salles);
// Lecture des salles dans AD : machines personnels
$res_salles_personnel = ldap_search($ldap_con, $base_salles_personnel, $filtre_salles, $attr_salles);
$entry_salles_personnel = ldap_get_entries($ldap_con, $res_salles_personnel);
// Insertion des machines
db_query($db, $req_purge_machine);
// salles pédagiques
$salles = array(); // Ce tableau indexé contiendra les salles qui possèdent des machines
for ($i=0; $i<$entry_salles["count"];$i++) {
$dn_tab = ldap_explode_dn($entry_salles[$i]["dn"],1);
$salle = $dn_tab[1]; // le nom de la salle dans laquelle elle se trouve est le 2° élément du DN d'une machine
$salles[$i] = $salle; // tableau des salles construit à la volée
$machine_id = $entry_salles[$i]["cn"][0];
$os = "";
$os_sp = "";
$os_version = "";
if (array_key_exists("operatingsystem", $entry_salles[$i])) { $os = addslashes($entry_salles[$i]["operatingsystem"][0]); }
if (array_key_exists("operatingsystemservicepack", $entry_salles[$i])) { $os_sp = addslashes($entry_salles[$i]["operatingsystemservicepack"][0]); }
if (array_key_exists("operatingsystemversion", $entry_salles[$i])) { $os_version = addslashes($entry_salles[$i]["operatingsystemversion"][0]); }
$req_machine = "INSERT INTO machines (machine_id, salle, os, os_sp, os_version) VALUES ('{$machine_id}', '{$salle}', '{$os}', '{$os_sp}', '{$os_version}')";
db_query($db, $req_machine);
}
// machines personnels
$salles_perso = array(); // Ce tableau indexé contiendra les salles qui possèdent des machines
for ($i=0; $i<$entry_salles_personnel["count"];$i++) {
$dn_tab = ldap_explode_dn($entry_salles_personnel[$i]["dn"],1);
$salle_perso = $dn_tab[1]; // le nom de la salle dans laquelle elle se trouve est le 2° élément du DN d'une machine
$salles_perso[$i] = $salle_perso; // tableau des salles construit à la volée
$machine_id = $entry_salles_personnel[$i]["cn"][0];
$os = "";
$os_sp = "";
$os_version = "";
if (array_key_exists("operatingsystem", $entry_salles[$i])) { $os = addslashes($entry_salles[$i]["operatingsystem"][0]); }
if (array_key_exists("operatingsystemservicepack", $entry_salles[$i])) { $os_sp = addslashes($entry_salles[$i]["operatingsystemservicepack"][0]); }
if (array_key_exists("operatingsystemversion", $entry_salles[$i])) { $os_version = addslashes($entry_salles[$i]["operatingsystemversion"][0]); }
$req_machine = "INSERT INTO machines (machine_id, salle, os, os_sp, os_version) VALUES ('{$machine_id}', '{$salle_perso}', '{$os}', '{$os_sp}', '{$os_version}')";
db_query($db, $req_machine);
}
// Insertion des salles pédagogiques
$salles = array_unique($salles); // suppression des doublons dans le tableau des salles
db_query($db, $req_purge_salle);
foreach($salles as $s) {
$req_salle = "INSERT INTO salles (salle_id) VALUES ('{$s}')";
db_query($db, $req_salle);
}
// Insertion des salles personnels
$salles_perso = array_unique($salles); // suppression des doublons dans le tableau des salles
db_query($db, $req_purge_salle);
foreach($salles_perso as $s) {
$req_salle = "INSERT INTO salles (salle_id) VALUES ('{$s}')";
db_query($db, $req_salle);
}
// Lecture des enseignants dans AD
$res_enseignants = ldap_search($ldap_con, $base_enseignants, $filtre_enseignants, $attr_enseignants);
$entry_enseignants = ldap_get_entries($ldap_con, $res_enseignants);
// Insertions des enseignants
db_query($db, $req_purge_compte);
for ($i=0; $i<$entry_enseignants["count"];$i++) {
$dn_tab = ldap_explode_dn($entry_salles[$i]["dn"],1);
$username = $entry_enseignants[$i]["samaccountname"][0];
$prenom = "";
$nom = "";
if (array_key_exists("givenname", $entry_enseignants[$i])) { $prenom = addslashes($entry_enseignants[$i]["givenname"][0]); }
if (array_key_exists("sn", $entry_enseignants[$i])) { $nom = addslashes($entry_enseignants[$i]["sn"][0]); }
$req_enseignant = "INSERT INTO comptes (username, prenom, nom, groupe) VALUES ('{$username}', '{$prenom}', '{$nom}', 'Enseignant')";
db_query($db, $req_enseignant);
}
// Lecture des étudiants dans AD
$res_etudiants = ldap_search($ldap_con, $base_etudiants, $filtre_etudiants, $attr_etudiants);
$entry_etudiants = ldap_get_entries($ldap_con, $res_etudiants);
// Insertions des étudiants
for ($i=0; $i<$entry_etudiants["count"];$i++) {
$dn_tab = ldap_explode_dn($entry_etudiants[$i]["dn"],1);
$groupe = $dn_tab[1];
$username = $entry_etudiants[$i]["cn"][0];
$prenom = "";
$nom = "";
if (array_key_exists("givenname", $entry_etudiants[$i])) { $prenom = addslashes($entry_etudiants[$i]["givenname"][0]); }
if (array_key_exists("sn", $entry_etudiants[$i])) { $nom = addslashes($entry_etudiants[$i]["sn"][0]); }
$req_etudiant = "INSERT INTO comptes (username, prenom, nom, groupe) VALUES ('{$username}', '{$prenom}', '{$nom}', '{$groupe}')";
db_query($db, $req_etudiant);
}
ldap_close($ldap_con);
header('Location: '.$winlog_url.'/admin/salles_live.php');
?>

83
admin/reload_ma_salle.php Normal file
View File

@ -0,0 +1,83 @@
<?php
include_once("connexions.php");
Function Get_salles_bloquees() {
$salles_bloquees = array();
$r = new HttpRequest("http://cache.iut-rodez.fr/salles/salles_bloquees.php", HttpRequest::METH_GET);
try {
$r->send();
if ($r->getResponseCode() == 200) {
$r->getResponseBody();
$salles_bloquees = json_decode($r->getResponseBody());
}
}
catch (HttpException $ex) {
echo $ex;
}
return $salles_bloquees;
}
/*
Function Get_user_connected($ip) {
$user = array();
$r = new HttpRequest("https://winlog.iut.rdz/admin/con_ip.php?ip=$ip", HttpRequest::METH_GET);
try {
$r->send();
if ($r->getResponseCode() == 200) {
$r->getResponseBody();
$user = json_decode($r->getResponseBody());
}
}
catch (HttpException $ex) {
echo $ex;
}
return $user;
}
*/
if ( isset($_SERVER["HTTP_X_FORWARDED_FOR"]) )
$ip_connectee = $_SERVER["HTTP_X_FORWARDED_FOR"];
else
$ip_connectee = $_SERVER["REMOTE_ADDR"];
$con = Con_ip($ip_connectee);
if (empty($con) || $con[6] !== "Enseignant") { echo($msg_salle_live_non_autorise."<br/>adresse IP : ".$ip_connectee); return; } // on quitte immédiatement si non autorisé
$nom = $con[4];
$prenom = $con[5];
$hote = $con[2];
$machines = Machines();
$salle = $machines[$hote][0];
if ( is_null($salle) ) { echo "hors d'une salle"; return; } //on quitte immédiatement si on n'est pas sur une machine d'une salle
$bloque = '<i><a href="bloque_salle.php?a=b&s='.strtolower($salle).'">bloque</a></i>';
$debloque = '<i><a href="bloque_salle.php?a=d&s='.strtolower($salle).'">debloque</a></i>';
$lien = $bloque;
//$salles_bloquees = Get_salles_bloquees();
//if (in_array(strtolower($salle), $salles_bloquees)) { $lien = $debloque; }
$connexions_de_ma_salle = Connexions_par_salle($salle);
$machines_de_salle = machines_de_salle($machines);
$nb_machines_de_ma_salle = count($machines_de_salle[$salle]);
$nb_connexions = 0;
foreach($connexions_de_ma_salle as $con) {
if ($con["username"]) { // on ne compte que les machines connectées
$nb_connexions++;
}
}
echo "<div class=\"salle\">$salle ($nb_connexions connexions sur $nb_machines_de_ma_salle machines) ($lien)</div>\n";
echo "<table>";
foreach($connexions_de_ma_salle as $con) {
if ($con["username"]) { // on n'affiche que les machines connectées
$username = $con["username"];
$cpt = Compte($username);
$style = "";
$fin_style = "";
if ($cpt[2]=="Enseignant") { $style = "<b>"; $fin_style="</b>"; }
echo "<tr>";
echo "<td>".$style.$con["machine"].$fin_style."</td>";
echo "<td>".$style.date("H:i:s",$con["stamp"]).$fin_style."</td>";
echo "<td>".$style.$con["ip"].$fin_style."</td>";
echo "<td>".$style.$username.$fin_style."</td>";
echo "<td>".$style.$cpt[1]." ".$cpt[0].$fin_style."</td>";
echo "<td>".$style.$cpt[2].$fin_style."</td>";
echo "</tr>\n";
}
}
echo "</table>";
?>

122
admin/reload_salles.php Normal file
View File

@ -0,0 +1,122 @@
<?php
include_once('connexions.php');
$machines = Machines(); // récupération de toutes les machines connues
$machines_de_salle = Machines_de_salle($machines); // range les machines dans le tableau $machines_de_salle
$connexion_machine = Connexion_machine(); // récupère toutes les connexions en cours
Function Get_salles_bloquees() {
$salles_bloquees = array();
$r = new HttpRequest("http://cache.iut-rodez.fr/salles/salles_bloquees.php", HttpRequest::METH_GET);
try {
$r->send();
if ($r->getResponseCode() == 200) {
$r->getResponseBody();
$salles_bloquees = json_decode($r->getResponseBody());
}
}
catch (HttpException $ex) {
echo $ex;
}
return $salles_bloquees;
}
echo "<b>Connexions Windows en cours par salle</b><br/><br/>";
echo "<br/>";
// connexions dans les salles
//$salles_bloquees = Get_salles_bloquees();
while ($mdc = current($machines_de_salle)) {
$salle = key($machines_de_salle);
if (!in_array($salle, $salles_invisibles) ) {
$bloque = '<i><a href="bloque_salle.php?a=b&s='.strtolower($salle).'">bloque</a></i>';
$debloque = '<i><a href="bloque_salle.php?a=d&s='.strtolower($salle).'">debloque</a></i>';
$lien = $bloque;
// calcul dernière connexion la plus ancienne
$jours_last_con = Connexion_doyenne_salle($machines_de_salle[$salle]);
$class_jour ='jours ';
if ($jours_last_con > 9) { $class_jour = 'jours j10'; }
if ($jours_last_con > 19) { $class_jour = 'jours j20'; }
if ($jours_last_con > 29) { $class_jour = 'jours j30'; }
// lien bloque/debloque
//if (in_array(strtolower($salle), $salles_bloquees)) { $lien = $debloque; }
// calcul nombre de machines connectées / nombre machines de la salle
$nb_machines_salle = count($mdc);
$i = 0;
if (!empty($connexion_machine)) {
foreach($mdc as $mac) {
if ( array_key_exists($mac, $connexion_machine)) { // on ne compte que les machines connectées
$i++;
}
}
}
// affichage ligne de salle
echo "<div class=\"salle\"><a href=\"salles/?salle=$salle\">$salle</a> ($i connexions sur $nb_machines_salle machines) <span class='".$class_jour."' title='".$class_jour."'>&nbsp;&nbsp;&nbsp;&nbsp;</span> ($lien)</div>\n";
echo "<div class=\"connexions\"><table>\n";
if (!empty($connexion_machine)) {
// parcours des machines connectées de la salle courante
foreach($mdc as $mac) {
if (array_key_exists($mac, $connexion_machine)) { // on n'affiche que les machines connectées
$username = $connexion_machine[$mac]["username"];
$cpt = Compte($username); // récupère les informations sur l'utilisateur courant
$style = "";
$fin_style = "";
if ($cpt[2]=="Enseignant") { $style = "<b>"; $fin_style="</b>"; }
echo "<tr id=\"".str_replace('.','-',$connexion_machine[$mac]["ip"])."\">";
echo "<td><a href=\"taches.php?machine=".$mac."\">".$style.$mac.$fin_style."</a></td>";
echo "<td>".$style.date("H:i:s",$connexion_machine[$mac]["stamp"]).$fin_style."</td>";
echo "<td>".$style.$connexion_machine[$mac]["ip"].$fin_style."</td>";
echo "<td>".$style.$username.$fin_style."</td>";
echo "<td>".$style.$cpt[1]." ".$cpt[0].$fin_style."</td>";
echo "<td>".$style.$cpt[2].$fin_style."</td>";
echo "</tr>\n";
}
}
}
echo "</table></div>\n";
} // fin du test salle invisible
next($machines_de_salle);
}
// connexions wifi
/*
$connexions_wifi = Connexions_wifi();
echo "<br/>";
echo "<br/>";
echo "<b>Connexions WIFI en cours</b> (".count($connexions_wifi) ." connexions)<br/><br/>";
echo "<div class=\"wifi\">\n";
echo "<table>\n";
// boucle sur les connexions wifi en cours
while ($wc = current($connexions_wifi)) {
$l = '<tr id="'.str_replace('.','-',$wc["ip"]).'"><td>'.date("H:i:s",$wc["debut"]).'</td><td>'.$wc["ip"].'</td><td>'.$wc["username"].'</td><td><i><a href="http://user-agent-string.info/?Fuas='.$wc["browser"].'" target="_blank">'.$wc["browser"]."</a></i></td></tr>\n";
echo $l;
next($connexions_wifi);
}
echo "</table>\n</div>\n";
// on ajoute un appel masqué au script wifi/kanet.php pour forcer la purge des connexions wifi fermées
$lien_purge = "<iframe src='/wifi/kanet.php' width='0' heigth='0' style='display: none;'></iframe>";
echo $lien_purge;
*/
$connexions_blacklist_live = Connexions_blacklist_live();
$string_javascript_tab = "";
foreach($connexions_blacklist_live as $bl) {
$string_javascript_tab = $string_javascript_tab."bl[\"".str_replace('.','-',$bl["ip"])."\"]=[\"".$bl["username"]."\", \"".$bl["target"]."\"];\n";
}
?>
<script>
function flashLogin() {
var bl=new Object();
<?php
echo $string_javascript_tab;
?>
for (var ip in bl) {
//$("#"+ip).toggle("highlight");
$("#"+ip).effect("highlight", {color:"darkorange"}, 1000);
}
}
$(document).ready(flashLogin);
</script>

46
admin/salles_live.php Normal file
View File

@ -0,0 +1,46 @@
<?php
header ('Content-Type: text/html; charset=utf-8');
include_once('libhome.php');
include_once('winlog_admin_conf.php');
$delay = $delay * 1000;
$username = phpCAS::getUser();
$autorises = array("jerome.bousquie", "rosalie.viala", "monique.malric", "dominique.seryies", "nicolas.gaven", "systeme.ut1", "thierry.deltort");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Winlog : Connexions en cours dans les salles</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Language" content="fr">
<link rel="stylesheet" media="screen" type="text/css" title="default" href="default.css">
<link rel="stylesheet" href="jquery/jquery-ui-1.10.0.custom.css">
<script src="jquery/jquery-1.9.js"></script>
<script src="jquery/jquery-ui-1.10.0.custom.min.js"></script>
<script>
var auto_refresh = setInterval(
function()
{
$('#loaddiv').load('reload_salles.php');
}, <?php echo($delay); ?>);
</script>
</head>
<body>
<?php
// Si le compte est autorisé à voir les salles, on affiche le div
if (in_array($username, $autorises)) {
echo('<div id="loaddiv">');
include('reload_salles.php');
echo('</div>');
}
else
{
// sinon on affiche un message
echo("Vous n'avez pas l'autorisation d'afficher cette page");
}
?>
<br/>
<br/>
<a href="recup_salles.php"><i>rechargement des comptes, machines et salles</i></a>
</body>
</html>

33
admin/stop.php Normal file
View File

@ -0,0 +1,33 @@
<?php
// Ce script récupère une action (shutdown ou restart) et un tableau json de machines
// Il émet une requête POST à Ghost:81 pour executer le psshutdown sur le domaine
// URL du script stop.php sur Ghost:81
$url = "http://10.5.0.15:81/stop.php";
$act = "";
$logout = "fermer la session";
$logout_salle = "fermer toutes les sessions";
$eteindre = "éteindre cette machine";
$eteindre_salle = "éteindre toute la salle";
$restart = "redémarrer cette machine";
$restart_salle = "redémarrer toute la salle";
$action_logout = array($logout, $logout_salle);
$action_stop = array($eteindre, $eteindre_salle);
$action_restart = array($restart, $restart_salle);
$action = $_POST["stop"];
$hosts = $_POST["host"]; // on récupère une chaîne de caractères représentant un tableau json
// on choisit la valeur de l'option à passer à la commande shutdown sur Ghost
if (in_array($action, $action_logout)) { $act = "l"; }
if (in_array($action, $action_stop)) { $act = "s"; }
if (in_array($action, $action_restart)) { $act = "r"; }
if ($act != "") {
$http = new HttpRequest( $url, HttpRequest::METH_POST);
$http->addPostFields(array('act'=>$act, 'hosts'=>$hosts ));
try { $http->send(); } catch (HttpException $ex) { echo $ex; }
}
header('Location: salles_live.php');
?>

73
admin/taches.php Normal file
View File

@ -0,0 +1,73 @@
<?php
// Ce script affiche les processus en cours sur une machine windows
// Pour ceci il interroge (http) un serveur windows du domaine sur le lequel sera exécuté une commande tasklist /s $host
Function get_tasks($url) {
$salles_bloquees = array();
$r = new HttpRequest($url, HttpRequest::METH_GET);
try {
$r->send();
if ($r->getResponseCode() == 200) {
$r->getResponseBody();
$reponse = json_decode($r->getResponseBody());
}
}
catch (HttpException $ex) {
echo $ex;
}
return $reponse;
}
// Variables
$precedent = $_SERVER["HTTP_REFERER"];
$host = $_GET['machine'];
//$url = "http://10.2.0.13/task.php?host=".$host; // ancien seretud06
$url = "http://10.5.0.15:81/task.php?host=".$host; // Ghost + apache, port 81
$processus_utilisateur = 'IUT'; // motif identifiant un processus utilisateur dans la task list
$msg = "";
// si le script est appelé sans paramètre, on revient à la page précédente
if ($host == "" ) { header("Location: $precedent"); exit; }
$host_json = json_encode(array($host));
$proc = get_tasks($url);
if (sizeof($proc) == 0) { $msg = "La machine ".$host." n'a renvoyé aucune réponse."; }
else {
$msg="<table><th>Processus</th><th>mémoire</th><th>Propriétaire</th>";
$lig_proc =array();
foreach($proc as $li) {
$li = str_replace('ÿ','',$li);
$li = str_replace('"','',$li);
$lig_prog = explode(',', $li);
$class_user = "";
if (substr($lig_prog[5],0,strlen($processus_utilisateur))==$processus_utilisateur) { $class_user = " p_user"; };
$msg = $msg."<tr class='proc".$class_user."'><td><a href=\"https://www.google.fr/search?q=".$lig_prog[0]."\" target=\"_blank\" >".$lig_prog[0]."</a></td><td>".$lig_prog[4]."</td><td>".$lig_prog[5]."</td></tr>\n";
}
$msg = $msg."</table>";
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Winlog : Connexions en cours dans les salles</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="refresh" content=20>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Language" content="fr">
<link rel="stylesheet" media="screen" type="text/css" title="default" href="default.css">
</head>
<body>
<h2>Processus utilisateurs de la machine <?php echo $host; ?>&nbsp;&nbsp;&nbsp;&nbsp;<a href="salles_live.php">[retour]</a></h2>
<form action="stop.php" method="POST">
<input type="hidden" name="host" value='<?php echo($host_json); ?>'>
<!--<input type="submit" value="fermer la session" name="stop">-->
<input type="submit" value="redémarrer cette machine" name="stop">
<input type="submit" value="éteindre cette machine" name="stop">
</form>
<?php
echo $msg;
?>
</body>
</hmtl>

7
winlogconf.php.example Normal file
View File

@ -0,0 +1,7 @@
<?php
$db_server = "p:localhost";
$db_dbname ="winlog";
$db_user = "db_user";
$db_passwd = "db_password";
$server_code = "salt";
?>