diff options
author | jim-p <jim@pingle.org> | 2010-04-27 13:58:42 -0400 |
---|---|---|
committer | jim-p <jim@pingle.org> | 2010-04-27 13:58:42 -0400 |
commit | 95b97dd1900f4bf7a6feae7a7b1d06d47bb71af7 (patch) | |
tree | df696af231c68bd834f9155a92c590473ec2e447 /usr/local/www/widgets | |
parent | 53663f57a68807cf9e748c3e7393b3b778961ac8 (diff) | |
download | pfsense-95b97dd1900f4bf7a6feae7a7b1d06d47bb71af7.zip pfsense-95b97dd1900f4bf7a6feae7a7b1d06d47bb71af7.tar.gz |
Add first revision of rewritten OpenVPN status widget to 2.0 resolves #496.
Diffstat (limited to 'usr/local/www/widgets')
-rw-r--r-- | usr/local/www/widgets/include/openvpn.inc | 4 | ||||
-rw-r--r-- | usr/local/www/widgets/widgets/openvpn.widget.php | 193 |
2 files changed, 197 insertions, 0 deletions
diff --git a/usr/local/www/widgets/include/openvpn.inc b/usr/local/www/widgets/include/openvpn.inc new file mode 100644 index 0000000..075d0e5 --- /dev/null +++ b/usr/local/www/widgets/include/openvpn.inc @@ -0,0 +1,4 @@ +<?php +$openvpn_title = "OpenVPN"; +$openvpn_title_link = "status_openvpn.php"; +?>
\ No newline at end of file diff --git a/usr/local/www/widgets/widgets/openvpn.widget.php b/usr/local/www/widgets/widgets/openvpn.widget.php new file mode 100644 index 0000000..c17c144 --- /dev/null +++ b/usr/local/www/widgets/widgets/openvpn.widget.php @@ -0,0 +1,193 @@ +<?php +require_once("openvpn.inc"); + +/* Handle AJAX */ +if($_GET['action']) { + if($_GET['action'] == "kill") { + $port = $_GET['port']; + $remipp = $_GET['remipp']; + if (!empty($port) and !empty($remipp)) { + $retval = kill_client($port, $remipp); + echo htmlentities("|{$port}|{$remipp}|{$retval}|"); + } else { + echo "invalid input"; + } + exit; + } +} + + +function kill_client($port, $remipp) { + $tcpsrv = "tcp://127.0.0.1:{$port}"; + $errval; + $errstr; + + /* open a tcp connection to the management port of each server */ + $fp = @stream_socket_client($tcpsrv, $errval, $errstr, 1); + $killed = -1; + if ($fp) { + fputs($fp, "kill {$remipp}\n"); + while (!feof($fp)) { + $line = fgets($fp, 1024); + /* parse header list line */ + if (strpos($line, "INFO:")) + continue; + if (strpos($line, "UCCESS")) { + $killed = 0; + } + break; + } + fclose($fp); + } + return $killed; +} + +$servers = openvpn_get_active_servers(); +$clients = openvpn_get_active_clients(); +?> + +<script src="/javascript/sorttable.js" type="text/javascript"></script> +<br/> +<form action="status_openvpn.php" method="get" name="iform"> +<script type="text/javascript"> + function killClient(mport, remipp) { + var busy = function(icon) { + icon.onclick = ""; + icon.src = icon.src.replace("\.gif", "_d.gif"); + icon.style.cursor = "wait"; + } + + $A(document.getElementsByName("i:" + mport + ":" + remipp)).each(busy); + + new Ajax.Request( + "<?=$_SERVER['SCRIPT_NAME'];?>" + + "?action=kill&port=" + mport + "&remipp=" + remipp, + { method: "get", onComplete: killComplete } + ); + } + + function killComplete(req) { + var values = req.responseText.split("|"); + if(values[3] != "0") { + alert('<?=gettext("An error occurred.");?>' + ' (' + values[3] + ')'); + return; + } + + $A(document.getElementsByName("r:" + values[1] + ":" + values[2])).each( + function(row) { Effect.Fade(row, { duration: 1.0 }); } + ); + } +</script> + +<?php foreach ($servers as $server): ?> + +<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td colspan="6" class="listtopic"> + Client connections for <?=$server['name'];?> + </td> + </tr> + <tr> + <td> + <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td class="listhdrr">Name/Time</td> + <td class="listhdrr">Real/Virtual IP</td> + </tr> + <?php foreach ($server['conns'] as $conn): ?> + <tr name='<?php echo "r:{$server['port']}:{$conn['remote_host']}"; ?>'> + <td class="listlr"> + <?=$conn['common_name'];?> + </td> + <td class="listr"> + <?=$conn['remote_host'];?> + </td> + <td class='list' rowspan="2"> + <img src='/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif' height='17' width='17' border='0' + onclick="killClient('<?php echo $server['port']; ?>', '<?php echo $conn['remote_host']; ?>');" style='cursor:pointer;' + name='<?php echo "i:{$server['port']}:{$conn['remote_host']}"; ?>' + title='Kill client connection from <?php echo $conn['remote_host']; ?>' alt='' /> + </td> + </tr> + <tr name='<?php echo "r:{$server['port']}:{$conn['remote_host']}"; ?>'> + <td class="listlr"> + <?=$conn['connect_time'];?> + </td> + <td class="listr"> + <?=$conn['virtual_addr'];?> + </td> + </tr> + + <?php endforeach; ?> + <tr> + <td colspan="6" class="list" height="12"></td> + </tr> + + </table> + </td> + </tr> +</table> + +<?php endforeach; ?> +<br/> + + +<?php if (!empty($clients)) { ?> +<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td colspan="6" class="listtopic"> + OpenVPN client instances statistics + </td> + </tr> + <tr> + <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td class="listhdrr">Name/Time</td> + <td class="listhdrr">Remote/Virtual IP</td> + </tr> + +<?php foreach ($clients as $client): ?> + <tr name='<?php echo "r:{$client['port']}:{$conn['remote_host']}"; ?>'> + <td class="listlr"> + <?=$client['name'];?> + </td> + <td class="listr"> + <?=$client['remote_host'];?> + </td> + <td rowspan="2" align="center"> + <?php + if ($client['status'] == "up") { + /* tunnel is up */ + $iconfn = "interface_up"; + } else { + /* tunnel is down */ + $iconfn = "interface_down"; + } + echo "<img src ='/themes/{$g['theme']}/images/icons/icon_{$iconfn}.gif'>"; + ?> + </td> + </tr> + <tr name='<?php echo "r:{$client['port']}:{$conn['remote_host']}"; ?>'> + <td class="listlr"> + <?=$client['connect_time'];?> + </td> + <td class="listr"> + <?=$client['virtual_addr'];?> + </td> + </tr> +<?php endforeach; ?> + </table> + </tr> +</table> + +<?php +} + +if ($DisplayNote) { + echo "<br/><b>NOTE:</b> You need to bind each OpenVPN client to enable its management daemon: use 'Local port' setting in the OpenVPN client screen"; +} + +if ((empty($clients)) && (empty($servers))) { + echo "No OpenVPN instance defined"; +} +?>
\ No newline at end of file |