Commit 30334522 authored by Ad Schellevis's avatar Ad Schellevis

(legacy) refactor diag_tables.php

parent 094727e8
......@@ -30,55 +30,59 @@
POSSIBILITY OF SUCH DAMAGE.
*/
$pgtitle = array(gettext("Diagnostics"), gettext("Tables"));
$shortcut_section = "aliases";
require_once("guiconfig.inc");
// Set default table
$tablename = "sshlockout";
if($_REQUEST['type'])
$tablename = $_REQUEST['type'];
if($_REQUEST['delete']) {
if(is_ipaddr($_REQUEST['delete']) || is_subnet($_REQUEST['delete'])) {
exec("/sbin/pfctl -t " . escapeshellarg($_REQUEST['type']) . " -T delete " . escapeshellarg($_REQUEST['delete']), $delete);
echo htmlentities($_REQUEST['delete']);
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
if (!empty($_GET['tablename'])) {
$tablename = htmlspecialchars($_GET['tablename']);
} else {
// Set default table
$tablename = "sshlockout";
}
if (isset($_GET['savemsg'])) {
$savemsg = htmlspecialchars($_GET['savemsg']);
}
} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!empty($_POST['tablename'])) {
$tablename = $_POST['tablename'];
}
if (isset($_POST['act']) && $_POST['act'] == 'update_bogons') {
try {
configd_run("filter update bogons");
} catch (Exception $e) {
$savemsg = gettext("The bogons database has NOT been updated.");
} finally {
$savemsg = gettext("The bogons database has been updated.");
}
echo $savemsg;
exit;
} elseif (isset($_POST['act']) && $_POST['act'] == 'delete') {
// delete entry
if((is_ipaddr($_REQUEST['address']) || is_subnet($_REQUEST['address'])) && !empty($tablename)) {
$delEntry = escapeshellarg($_REQUEST['address']);
$delTable = escapeshellarg($tablename);
configd_run("filter delete table {$delTable} {$delEntry}");
header("Location: diag_tables.php?tablename=" . $tablename);
exit;
}
if($_REQUEST['deleteall']) {
exec("/sbin/pfctl -t " . escapeshellarg($tablename) . " -T show", $entries);
if(is_array($entries)) {
foreach($entries as $entryA) {
$entry = trim($entryA);
exec("/sbin/pfctl -t " . escapeshellarg($tablename) . " -T delete " . escapeshellarg($entry), $delete);
}
} elseif (isset($_POST['act']) && $_POST['act'] == 'flush') {
$delTable = escapeshellarg($tablename);
configd_run("filter delete table {$delTable} ALL");
header("Location: diag_tables.php?tablename=" . $tablename);
exit;
}
}
if((($tablename == "bogons") || ($tablename == "bogonsv6")) && ($_POST['Download'])) {
mwexec_bg('/usr/local/etc/rc.update_bogons now');
$maxtimetowait = 0;
$loading = true;
while($loading == true) {
$isrunning = `/bin/ps awwwux | /usr/bin/grep -v grep | /usr/bin/grep bogons`;
if($isrunning == "")
$loading = false;
$maxtimetowait++;
if($maxtimetowait > 89)
$loading = false;
sleep(1);
}
if($maxtimetowait < 90)
$savemsg = gettext("The bogons database has been updated.");
$pgtitle = array(gettext("Diagnostics"), gettext("Tables"));
$shortcut_section = "aliases";
// fetch list of tables and content of selected table
$tables = json_decode(configd_run("filter list tables json"));
if (in_array($tablename, $tables)) {
$entries = json_decode(configd_run("filter list table {$tablename} json"));
} else {
$entries = array();
}
exec("/sbin/pfctl -t " . escapeshellarg($tablename) . " -T show", $entries);
exec("/sbin/pfctl -sT", $tables);
include("head.inc");
?>
<body>
......@@ -86,100 +90,113 @@ include("head.inc");
<script type="text/javascript">
//<![CDATA[
function method_change(entrytype) {
window.location='diag_tables.php?type=' + entrytype;
}
function del_entry(entry) {
jQuery.ajax("diag_tables.php?type=<?php echo htmlspecialchars($tablename);?>&delete=" + entry, {
complete: function(response) {
if (200 == response.status) {
// Escape all dots to not confuse jQuery selectors
name = response.responseText.replace(/\./g,'\\.');
name = name.replace(/\//g,'\\/');
jQuery('#' + name).fadeOut(1000);
}
$( document ).ready(function() {
// on change pfTable selection
$("#tablename").change(function(){
window.location='diag_tables.php?tablename=' + $(this).val();
});
// delete entry
$(".act_delete").click(function(event){
event.preventDefault()
var address = $(this).attr("data-address");
$("#address").val(address);
$("#action").val("delete");
$("#iform").submit();
});
// update bogons
$("#update_bogons").click(function(event){
event.preventDefault()
$("#update_bogons_progress").addClass("fa fa-spinner fa-pulse");
//update_bogons
jQuery.ajax({
type: "post",
url: "/diag_tables.php",
data:{'act':'update_bogons'},
success: function(data) {
// reload page when finished, send result as savemessage.
window.location='diag_tables.php?tablename=' + $("#tablename").val()+'&savemsg='+data;
}
});
});
// flush table.. first ask user if it's ok to do so..
$("#flushtable").click(function(event){
event.preventDefault()
BootstrapDialog.show({
type:BootstrapDialog.TYPE_INFO,
title: "<?= gettext("Tables");?>",
message: "<?=gettext("Do you really want to flush this table?");?>",
buttons: [{
label: "<?= gettext("No");?>",
action: function(dialogRef) {
dialogRef.close();
}}, {
label: "<?= gettext("Yes");?>",
action: function(dialogRef) {
$("#action").val("flush");
$("#iform").submit()
}
//]]>
}]
});
});
});
</script>
<section class="page-content-main">
<div class="container-fluid">
<div class="row">
<form method="post" action="<?=$_SERVER['REQUEST_URI'];?>">
<section class="col-xs-12">
<?php if (isset($savemsg)) print_info_box($savemsg); ?>
<select id="type" onchange="method_change(jQuery('#type').val());" name="type" class='form-control'>
<option value="">Table</option>
<?php foreach ($tables as $table) {
echo "<option value=\"{$table}\"";
if ($tablename == $table)
echo " selected=\"selected\"";
echo ">{$table}</option>\n";
}
?>
<form method="post" id="iform" action="<?=$_SERVER['REQUEST_URI'];?>">
<input type="hidden" name="act" id="action"/>
<input type="hidden" name="address" id="address"/>
<section class="col-xs-12">
<select id="tablename" name="tablename" class="selectpicker" data-width="auto" data-live-search="true">
<?php
foreach ($tables as $table):?>
<option value="<?=$table;?>" <?=$tablename == $table ? " selected=\"selected\"" : "";?>>
<?=$table;?>
</option>
<?php
endforeach;?>
</select>
<button class="btn btn-default" id="flushtable"><?=gettext("Flush");?></button>
<button class="btn btn-default pull-right" id="update_bogons"><i id="update_bogons_progress" class=""></i>
<?=gettext("Update bogons");?>
</button>
</section>
<section class="col-xs-12">
<div class="content-box">
<div class="table-responsive">
<table class="table table-striped table-sort sortable __nomb">
<table class="table table-striped">
<tr>
<td class="listhdrr"><?=gettext("IP Address");?></td>
<td colspan="2"><?=gettext("IP Address");?></td>
</tr>
<?php $count = 0; foreach($entries as $entryA): ?>
<?php $entry = trim($entryA); ?>
<tr id="<?=$entry?>">
<td>
<?php echo $entry; ?>
</td>
<?php
if (count($entries) ==0):?>
<tr>
<td colspan="2"><?=gettext("No entries exist in this table.");?></td>
</tr>
<?php
endif;
foreach ($entries as $entry):?>
<tr>
<td><?=$entry;?></td>
<td>
<?php if ( ($tablename != "bogons") && ($tablename != "bogonsv6") ) { ?>
<a onclick="del_entry('<?=htmlspecialchars($entry)?>');" alt="delete">
<a data-address="<?=$entry;?>" title="<?=gettext("delete this entry"); ?>" data-toggle="tooltip" class="act_delete btn btn-default btn-xs">
<span class="glyphicon glyphicon-remove"></span>
</a>
<?php } ?>
</td>
</tr>
<?php $count++; endforeach; ?>
<?php
if($count == 0)
if( ($tablename == "bogons") || ($tablename == "bogonsv6") )
echo "<tr><td>" . gettext("No entries exist in this table.") . "&nbsp;&nbsp;" . "<input name=\"Download\" type=\"submit\" class=\"formbtn\" value=\"" . gettext("Download") . "\" /> " . gettext(" the latest bogon data.");
else
echo "<tr><td>" . gettext("No entries exist in this table.");
?>
<?php
if($count > 0)
if( ($tablename == "bogons") || ($tablename == "bogonsv6") ) {
$last_updated = exec('/usr/bin/grep -i -m 1 -E "^# last updated" /etc/' . escapeshellarg($tablename));
echo "<tr><td>&nbsp;<b>$count</b> " . gettext("entries in this table.") . "&nbsp;&nbsp;" . "<input name=\"Download\" type=\"submit\" class=\"formbtn\" value=\"" . gettext("Download") . "\" /> " . gettext(" the latest bogon data.") . "<br />" . "$last_updated";
}
else
echo "<tr><td>" . gettext("Delete") . " <a href=\"diag_tables.php?deleteall=true&amp;type=" . htmlspecialchars($tablename) . "\">" . gettext("all") . "</a> " . "<b>$count</b> " . gettext("entries in this table.");
?>
</td></tr>
<?php
endforeach;?>
</table>
</div>
</div>
</section>
</form>
</div>
</div>
</section>
<?php include('foot.inc');?>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment