Example #1
0
/* Handle AJAX */
if ($_GET['action']) {
    if ($_GET['action'] == "kill") {
        $port = $_GET['port'];
        $remipp = $_GET['remipp'];
        if (!empty($port) and !empty($remipp)) {
            $retval = openvpn_kill_client($port, $remipp);
            echo htmlentities("|{$port}|{$remipp}|{$retval}|");
        } else {
            echo gettext("invalid input");
        }
        exit;
    }
}
$servers = openvpn_get_active_servers();
$sk_servers = openvpn_get_active_servers("p2p");
$clients = openvpn_get_active_clients();
include "head.inc";
?>

<form action="status_openvpn.php" method="get" name="iform">
<script type="text/javascript">
//<![CDATA[
	function killClient(mport, remipp) {
		var busy = function(index,icon) {
			$(icon).bind("onclick","");
			$(icon).attr('src',$(icon).attr('src').replace("\.gif", "_d.gif"));
			$(icon).css("cursor","wait");
		}

		$('img[name="i:' + mport + ":" + remipp + '"]').each(busy);
function printPanel()
{
    $servers = openvpn_get_active_servers();
    $sk_servers = openvpn_get_active_servers("p2p");
    $clients = openvpn_get_active_clients();
    $opstring = "";
    foreach ($servers as $server) {
        $opstring .= "<div class=\"widget panel panel-default\">";
        $opstring .= "<div class=\"panel-heading\"><h2 class=\"panel-title\">" . htmlspecialchars($server['name']) . "</h2></div>";
        $opstring .= "<div class=\"table-responsive\">";
        $opstring .= "<table class=\"table table-striped table-hover table-condensed sortable-theme-bootstrap\" data-sortable>";
        $opstring .= "<thead>";
        $opstring .= "<tr>";
        $opstring .= "<th>" . gettext('Name/Time') . "</th>";
        $opstring .= "<th>" . gettext('Real/Virtual IP') . "</th>";
        $opstring .= "<th></th>";
        $opstring .= "</tr>";
        $opstring .= "</thead>";
        $opstring .= "<tbody>";
        $rowIndex = 0;
        foreach ($server['conns'] as $conn) {
            $evenRowClass = $rowIndex % 2 ? " listMReven" : " listMRodd";
            $rowIndex++;
            $opstring .= "<tr name=\"" . "r:" . $server['mgmt'] . ":" . $conn['remote_host'] . "\" class=\"" . $evenRowClass . "\">";
            $opstring .= "<td>";
            $opstring .= $conn['common_name'];
            $opstring .= "</td>";
            $opstring .= "<td>";
            $opstring .= $conn['remote_host'];
            $opstring .= "</td>";
            $opstring .= "<td>";
            $opstring .= "<i class=\"fa fa-times-circle\" ";
            $opstring .= "onclick=\"killClient('" . $server['mgmt'] . "', '" . $conn['remote_host'] . "');\" ";
            $opstring .= "style=\"cursor:pointer;\" ";
            $opstring .= "name=\"" . "i:" . $server['mgmt'] . ":" . $conn['remote_host'] . "\" ";
            $opstring .= "title=\"" . sprintf(gettext('Kill client connection from %s'), $conn['remote_host']) . "\">";
            $opstring .= "</i>";
            $opstring .= "</td>";
            $opstring .= "</tr>";
            $opstring .= "<tr name=\"" . "r:" . $server['mgmt'] . ":" . $conn['remote_host'] . "\" class=\"" . $evenRowClass . "\">";
            $opstring .= "<td>";
            $opstring .= $conn['connect_time'];
            $opstring .= "</td>";
            $opstring .= "<td>";
            $opstring .= $conn['virtual_addr'];
            $opstring .= "</td>";
            $opstring .= "<td></td>";
            $opstring .= "</tr>";
        }
        $opstring .= "</tbody>";
        $opstring .= "</table>";
        $opstring .= "</div>";
        $opstring .= "</div>";
    }
    print $opstring;
    if (!empty($sk_servers)) {
        $opstring = "";
        $opstring .= "<div class=\"widget panel panel-default\">";
        $opstring .= "<div class=\"panel-heading\"><h2 class=\"panel-title\">" . gettext("Peer to Peer Server Instance Statistics") . "</h2></div>";
        $opstring .= "<div class=\"table-responsive\">";
        $opstring .= "<table class=\"table table-striped table-hover table-condensed sortable-theme-bootstrap\" data-sortable>";
        $opstring .= "<thead>";
        $opstring .= "<tr>";
        $opstring .= "<th>" . gettext('Name/Time') . "</th>";
        $opstring .= "<th>" . gettext('Remote/Virtual IP') . "</th>";
        $opstring .= "<th></th>";
        $opstring .= "</tr>";
        $opstring .= "</thead>";
        $opstring .= "<tbody>";
        foreach ($sk_servers as $sk_server) {
            $opstring .= "<tr name=\"r:" . $sk_server['port'] . ":" . $sk_server['remote_host'] . "\">";
            $opstring .= "<td>";
            $opstring .= $sk_server['name'];
            $opstring .= "</td>";
            $opstring .= "<td>";
            $opstring .= $sk_server['remote_host'];
            $opstring .= "</td>";
            $opstring .= "<td>";
            if ($sk_server['status'] == "up") {
                /* tunnel is up */
                $opstring .= "<i class=\"fa fa-arrow-up text-success\"></i>";
            } else {
                /* tunnel is down */
                $opstring .= "<i class=\"fa fa-arrow-down text-danger\"></i>";
            }
            $opstring .= "</td>";
            $opstring .= "</tr>";
            $opstring .= "<tr name=\"r:" . $sk_server['port'] . ":" . $sk_server['remote_host'] . "\">";
            $opstring .= "<td>";
            $opstring .= $sk_server['connect_time'];
            $opstring .= "</td>";
            $opstring .= "<td>";
            $opstring .= $sk_server['virtual_addr'];
            $opstring .= "</td>";
            $opstring .= "<td></td>";
            $opstring .= "</tr>";
        }
        $opstring .= "</tbody>";
        $opstring .= "</table>";
        $opstring .= "</div>";
        $opstring .= "</div>";
        print $opstring;
    }
    if (!empty($clients)) {
        $opstring = "";
        $opstring .= "<div class=\"widget panel panel-default\">";
        $opstring .= "<div class=\"panel-heading\"><h2 class=\"panel-title\">" . gettext("Client Instance Statistics") . "</h2></div>";
        $opstring .= "<div class=\"table-responsive\">";
        $opstring .= "<table class=\"table table-striped table-hover table-condensed sortable-theme-bootstrap\" data-sortable>";
        $opstring .= "<thead>";
        $opstring .= "<tr>";
        $opstring .= "<th>" . gettext('Name/Time') . "</th>";
        $opstring .= "<th>" . gettext('Remote/Virtual IP') . "</th>";
        $opstring .= "<th></th>";
        $opstring .= "</tr>";
        $opstring .= "</thead>";
        $opstring .= "<tbody>";
        foreach ($clients as $client) {
            $opstring .= "<tr name=\"r:" . $client['port'] . ":" . $client['remote_host'] . "\">";
            $opstring .= "<td>";
            $opstring .= $client['name'];
            $opstring .= "</td>";
            $opstring .= "<td>";
            $opstring .= $client['remote_host'];
            $opstring .= "</td>";
            $opstring .= "<td>";
            if ($client['status'] == "up") {
                /* tunnel is up */
                $opstring .= "<i class=\"fa fa-arrow-up text-success\"></i>";
            } else {
                /* tunnel is down */
                $opstring .= "<i class=\"fa fa-arrow-down text-danger\"></i>";
            }
            $opstring .= "</td>";
            $opstring .= "</tr>";
            $opstring .= "<tr name=\"r:" . $client['port'] . ":" . $client['remote_host'] . "\">";
            $opstring .= "<td>";
            $opstring .= $client['connect_time'];
            $opstring .= "</td>";
            $opstring .= "<td>";
            $opstring .= $client['virtual_addr'];
            $opstring .= "</td>";
            $opstring .= "<td></td>";
            $opstring .= "</tr>";
        }
        $opstring .= "</tbody>";
        $opstring .= "</table>";
        $opstring .= "</div>";
        $opstring .= "</div>";
        print $opstring;
    }
    if (empty($clients) && empty($servers) && empty($sk_servers)) {
        print gettext("No OpenVPN instances defined");
    }
}