193 lines
5.7 KiB
HTML
193 lines
5.7 KiB
HTML
<!DOCTYPE html>
|
|
<!--
|
|
This file is part of Cockpit.
|
|
|
|
Copyright (C) 2015 Red Hat, Inc.
|
|
|
|
Cockpit is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU Lesser General Public License as published by
|
|
the Free Software Foundation; either version 2.1 of the License, or
|
|
(at your option) any later version.
|
|
|
|
Cockpit is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
along with Cockpit; If not, see <http://www.gnu.org/licenses/>.
|
|
-->
|
|
<html>
|
|
|
|
<head>
|
|
<title>OpenConnect VPN</title>
|
|
<meta charset="utf-8">
|
|
<link href="../base1/cockpit.css" type="text/css" rel="stylesheet">
|
|
<link href="ocserv.css" type="text/css" rel="stylesheet">
|
|
<script type="text/javascript" src="../base1/cockpit.js"></script>
|
|
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
|
|
</head>
|
|
<body hidden>
|
|
<div class="pf-c-page">
|
|
<main class="pf-c-page__main" tabindex="-1">
|
|
<div class="curtain-ocserv blank-slate-pf" hidden>
|
|
<div class="blank-slate-pf-icon">
|
|
<div class="fa fa-exclamation-circle"></div>
|
|
</div>
|
|
<h1>Couldn't connect to OpenConnect Server</h1>
|
|
<p></p>
|
|
</div>
|
|
|
|
<section id="status-info" class="pf-c-page__main-section pf-m-light">
|
|
<div class="panel panel-default">
|
|
<div class="panel-heading">
|
|
<span id="head">Server status</span>
|
|
</div>
|
|
<table class="info-table-ct" id="status-table">
|
|
</table>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="users-info" class="pf-c-page__main-section pf-m-light">
|
|
<div class="panel panel-default">
|
|
<div class="panel-heading">
|
|
<span id="head">Connected users</span>
|
|
</div>
|
|
<table class="table table-hover" id="users-table">
|
|
<thead>
|
|
<tr>
|
|
<th class="ocserv-users-id">ID</th>
|
|
<th class="ocserv-users-name">Username</th>
|
|
<th class="ocserv-users-remote-ip">Remote IP</th>
|
|
<th class="ocserv-users-ip">VPN IP</th>
|
|
<th class="ocserv-users-since">Since</th>
|
|
<th class="ocserv-users-state">State</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="users-table-tbody">
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
</div>
|
|
<script>
|
|
var raw;
|
|
var status_raw;
|
|
|
|
occtl_users_run();
|
|
occtl_status_run();
|
|
|
|
function occtl_users_run() {
|
|
var proc = cockpit.spawn(["/usr/bin/occtl", "-n", "-j", "show", "users"],
|
|
{ err: "message", superuser: "try" });
|
|
proc.done(occtl_users_success);
|
|
proc.stream(occtl_users_output);
|
|
proc.fail(occtl_users_fail);
|
|
|
|
raw = "";
|
|
}
|
|
|
|
function occtl_users_success() {
|
|
var obj;
|
|
try {
|
|
obj = JSON.parse(raw);
|
|
} catch(e) {
|
|
console.warn(e, obj);
|
|
}
|
|
|
|
$("#users-table-tbody").empty();
|
|
|
|
$.each(obj, function (index,Object) {
|
|
var ipv4 = Object.IPv4;
|
|
var ipv6 = Object.IPv6;
|
|
var ip;
|
|
|
|
if (ipv4 && ipv6) {
|
|
ip = ipv4 + "/" + ipv6;
|
|
} else {
|
|
if (ipv4)
|
|
ip = ipv4;
|
|
else
|
|
ip = ipv6;
|
|
}
|
|
|
|
var row = $("<tr>").append(
|
|
$('<td class="ocserv-users-id">').text(Object.ID),
|
|
$('<td class="ocserv-users-name">').text(Object.Username),
|
|
$('<td class="ocserv-users-remote-ip">').text(Object["Remote IP"]),
|
|
$('<td class="ocserv-users-ip">').text(ip),
|
|
$('<td class="ocserv-users-since">').text(Object["Connected at"]),
|
|
$('<td class="ocserv-users-state">').text(Object.State)
|
|
);
|
|
$("#users-table-tbody").append(row);
|
|
});
|
|
|
|
$('.curtain-ocserv').hide();
|
|
$('body').show();
|
|
}
|
|
|
|
function occtl_users_fail(ex) {
|
|
if (ex.problem == "not-found")
|
|
console.warn("occtl executable was not found");
|
|
else
|
|
console.warn(cockpit.message(ex));
|
|
$('.curtain-ocserv').show();
|
|
$('body').show();
|
|
}
|
|
|
|
function occtl_users_output(data) {
|
|
raw = raw.concat(data);
|
|
}
|
|
|
|
function occtl_status_run() {
|
|
function occtl_status_output(data) {
|
|
status_raw = status_raw.concat(data);
|
|
}
|
|
|
|
status_raw = "";
|
|
|
|
var proc = cockpit.spawn(["/usr/bin/occtl", "-n", "-j", "show", "status"],
|
|
{ err: "message", superuser: "try" });
|
|
proc.done(occtl_status_success);
|
|
proc.stream(occtl_status_output);
|
|
proc.fail(occtl_status_fail);
|
|
}
|
|
|
|
function occtl_status_success() {
|
|
var obj;
|
|
try {
|
|
obj = JSON.parse(status_raw);
|
|
} catch(e) {
|
|
console.warn(e, obj);
|
|
}
|
|
|
|
$("#status-table").empty();
|
|
if (!obj) {
|
|
occtl_status_fail();
|
|
} else {
|
|
$("#status-table").append('<tr><td>Status</td><td>' +
|
|
obj.Status + '</td></tr>');
|
|
$("#status-table").append('<tr><td>Uptime</td><td>' +
|
|
obj["_Up since"] + '</td></tr>');
|
|
$("#status-table").append('<tr><td>Connected users</td><td>' +
|
|
obj["Clients"] + '</td></tr>');
|
|
$("#status-table").append('<tr><td>IPs in ban list</td><td>' +
|
|
obj["IPs in ban list"] + '</td></tr>');
|
|
}
|
|
}
|
|
|
|
function occtl_status_fail(ex) {
|
|
console.log("status fail", ex);
|
|
var message = ex ? cockpit.message(ex) : "offline";
|
|
$("#status-table")
|
|
.empty()
|
|
.append('<tr>')
|
|
.append($('<td>Status</td>'),
|
|
$('<td>').text(message));
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|
|
|