commit initial

This commit is contained in:
Jérôme Bousquié 2016-09-22 11:49:17 +02:00
commit 51d0c765b7
6 changed files with 194 additions and 0 deletions

30
index.php Normal file
View File

@ -0,0 +1,30 @@
<?php
include_once('winlogconf.php');
include_once('admin/db_access.php');
// ne traiter que sur des requêtes POST sur le port 443
if ( $_SERVER["REQUEST_METHOD"] == "POST" && $_SERVER["SERVER_PORT"] == "443") {
$action = $_POST["action"];
$username = $_POST["username"];
$computer = $_POST["computer"];
$code = $_POST["code"];
$ip = $_SERVER["REMOTE_ADDR"];
if (strcmp($code, $server_code)!=0) { exit; } // se protéger des POST anonymes par un code partagé entre client et serveur
$db = db_connect();
// requête de purge d'une éventuelle connexion restée ouverte sur une machine (multi-session non autorisée sur les PC)
$req_purge_C = 'UPDATE connexions SET close = 1 WHERE close = 0 AND hote = "'.$computer.'"';
// requête de création de l'enregistrement de connexion
$req_con_C ='INSERT INTO connexions (username, hote, ip, debut_con, close) VALUES ("'.$username.'", "'.$computer.'", "'.$ip.'", CURRENT_TIMESTAMP(),0)';
//requête de mise à jour (fermeture) de la connexion
$req_con_D = 'UPDATE connexions SET close = 1 WHERE close = 0 AND username = "'.$username.'" AND hote = "'.$computer.'"';
// si action = C alors $req = $req_con_C, sinon $req_con_D
$req = $action == "C" ? $req_con_C:$req_con_D;
if ($action == "C") { db_query($db, $req_purge_C); } // on commence par purger avant de créer une connexion
$res = db_query($db, $req);
}
?>

9
log.vbs Normal file
View File

@ -0,0 +1,9 @@
Dim o, n, data, secopt
Set o = CreateObject("WinHttp.WinHttpRequest.5.1")
Set n = CreateObject("wscript.network")
o.setproxy 1
o.Option(4) = 13056 'pour forcer à ignorer toutes les erreurs de certificats
o.open "POST", "https://winlog.dometud.iut-rodez.local/", False
o.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
data = "action=C&username="+n.Username+"&computer="+n.ComputerName
o.send data

31
logcas.php Normal file
View File

@ -0,0 +1,31 @@
<?php
//
// phpCAS simple client
//
// import phpCAS lib
include_once('CAS/CAS.php');
//phpCAS::setDebug();
// initialize phpCAS
phpCAS::client(CAS_VERSION_2_0,$cas_server,$cas_port,$cas_path);
// no SSL validation for the CAS server
phpCAS::setNoCasServerValidation();
// check CAS authentication
phpCAS::checkAuthentication();
// at this step, the user has been authenticated by the CAS server
// and the user's login name can be read with phpCAS::getUser().
function Autorise($user, $liste_users_autorises) {
return in_array($user, $liste_users_autorises);
}
// logout if desired
if (isset($_REQUEST['logout'])) {
phpCAS::logout();
}
?>

9
logout.vbs Normal file
View File

@ -0,0 +1,9 @@
Dim o, n, data
Set o = CreateObject("WinHttp.WinHttpRequest.5.1")
Set n = CreateObject("wscript.network")
o.setproxy 1
o.open "POST", "http://winlog.dometud.iut-rodez.local/", False
o.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
data = "action=D&username="+n.Username+"&computer="+n.ComputerName
o.send data

46
proxy/squid.php Normal file
View File

@ -0,0 +1,46 @@
<?php
//header('Content-type: application/json; charset=utf-8');
include('../admin/winlog_admin_conf.php');
include('../admin/connexions.php');
$ip = $_GET["ip"];
$src = $_GET["src"];
$target = $_GET["tgt"];
$username = "";
$prefixe_reseau_captif = "10.3."; // prefixe du réseau captif
if ($src!="etudiants" && $src!="personnels") {
// si src <> étudiants ou personnels :
// la requête vient directement de cache.iut-rodez.fr : $ip reçu est fiable
// il s'agit d'un accès interdit depuis un poste fixe de l'IUT
// sinon :
// la requête vient d'un iframe inclus dans la page interdit.php
// on ne peut se baser que sur X_FORWARDED_FOR
$adresses = explode(',', $_SERVER["HTTP_X_FORWARDED_FOR"]);
// le header peut contenir plusieurs ip (ex: routeur Kanet) => on récupère un tableau
$ip = "";
$lg_prefixe = strlen($prefixe_reseau_captif);
foreach($adresses as $http_ip) {
if (substr($http_ip, 0, $lg_prefixe) == $prefixe_reseau_captif) { $ip = $http_ip; }
}
$connexions_wifi = Connexions_wifi();
$i = 0;
while ($connexions_wifi[$i]) {
if ($connexions_wifi[$i]["ip"] == $ip) { $username = $connexions_wifi[$i]["username"];}
$i++;
}
}
else { // src= etudiants ou personnels
$con_ip = Con_ip($ip);
if (!empty($con_ip)) { $username = $con_ip[1]; }
}
$db = db_connect();
$req_log = 'INSERT INTO proxy (ip, username, target, logts) VALUES ( "'.$ip.'", "'.$username.'", "'.$target.'", CURRENT_TIMESTAMP() )';
$req_purge = 'DELETE from proxy WHERE timestampdiff(SECOND, timestamp(logts), timestamp(now())) > 60'; // on purge les logs de plus de 1mn
$res = db_query($db, $req_purge);
$res = db_query($db, $req_log);
?>

69
wifi/kanet.php Normal file
View File

@ -0,0 +1,69 @@
<?php
// conf serveur CAS
$cas_server = 'cas.iut-rodez.fr';
$cas_path = '/cas';
$cas_port = 443;
include_once('../logcas.php');
include_once('../winlogconf.php'); // importation de la conf mysql
$prefixe_reseau_captif = "10.3."; // prefixe du réseau captif
$delai = "15"; // délai en secondes de renvoi de la requête depuis le browser
$delai_vie = "40"; // délai en secondes avant de fermer une connexion en base
// le délai de vie doit être supérieur au délai de reload
$cas_user = phpCAS::getUser();
$action = $_GET['action'];
// $action :
// si "C" => création d'un enregistrement de connexion
// si "U" => mise à jour d'un enregistrement existant (déconnexion)
$browser = $_SERVER["HTTP_USER_AGENT"];
$adresses = explode(',', $_SERVER["HTTP_X_FORWARDED_FOR"]);
// le header peut contenir plusieurs ip (ex: routeur Kanet) => on récupère un tableau
$wifi_ip = "";
$lg_prefixe = strlen($prefixe_reseau_captif);
foreach($adresses as $http_ip) {
if (substr($http_ip, 0, $lg_prefixe) == $prefixe_reseau_captif) { $wifi_ip = $http_ip; }
}
$req_check = 'SELECT * FROM wifi WHERE wifi_username="'.$cas_user.'" AND wifi_ip="'.$wifi_ip.'" AND close=0'; // recherche connexion déjà ouverte
$req_con = 'INSERT INTO wifi (wifi_username, wifi_ip, wifi_browser, wifi_deb_conn, wifi_fin_conn, close) VALUES ( "'.$cas_user.'", "'.$wifi_ip.'", "'.$browser.'", CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP(), 0 )';
$req_clos = 'UPDATE wifi SET close = 1 WHERE close = 0 AND timestampdiff(SECOND, timestamp(wifi_fin_conn), timestamp(now())) > '.$delai_vie; // ferme TOUTES les connexions trop anciennes
$req_maj = 'UPDATE wifi SET wifi_fin_conn = CURRENT_TIMESTAMP() WHERE close = 0 AND wifi_username = "'.$cas_user.'" AND wifi_ip = "'.$wifi_ip.'"';
$db = mysql_pconnect($db_server, $db_user, $db_passwd);
mysql_select_db($db_dbname, $db);
$clos = mysql_query($req_clos, $db); // dans tous les cas, on ferme toutes les connexions trop anciennes
if ($action == "C") {
$deja_con = mysql_query($req_check, $db);
$req = $req_maj;
if (mysql_num_rows($deja_con) == 0) { $req = $req_con; }
// si non déjà connecté, alors connecte, sinon update
}
if ($action=="U") { $req = $req_maj; }
$res = mysql_query($req, $db);
// on sert une page web vide qui se reloade toutes les $delai secondes dans une iframe invisible
// (seulement sur action == U, sinon une iframe charge une fois unique la page => action == C)
// mieux qu'un appel ajax : kanet.php est un client CAS, xhr ne suit pas la redirection CAS
?>
<html>
<head>
<?php
if ($action == "U") { echo('<meta http-equiv="refresh" content="'.$delai.'">'); }
?>
</head>
<body>
still alive...
</body>
</html>