Commit 30334522 authored by Ad Schellevis's avatar Ad Schellevis

(legacy) refactor diag_tables.php

parent 094727e8
...@@ -30,55 +30,59 @@ ...@@ -30,55 +30,59 @@
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.
*/ */
$pgtitle = array(gettext("Diagnostics"), gettext("Tables"));
$shortcut_section = "aliases";
require_once("guiconfig.inc"); require_once("guiconfig.inc");
// Set default table if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$tablename = "sshlockout"; if (!empty($_GET['tablename'])) {
$tablename = htmlspecialchars($_GET['tablename']);
if($_REQUEST['type']) } else {
$tablename = $_REQUEST['type']; // Set default table
$tablename = "sshlockout";
if($_REQUEST['delete']) { }
if(is_ipaddr($_REQUEST['delete']) || is_subnet($_REQUEST['delete'])) { if (isset($_GET['savemsg'])) {
exec("/sbin/pfctl -t " . escapeshellarg($_REQUEST['type']) . " -T delete " . escapeshellarg($_REQUEST['delete']), $delete); $savemsg = htmlspecialchars($_GET['savemsg']);
echo htmlentities($_REQUEST['delete']); }
} 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; 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'])) { $pgtitle = array(gettext("Diagnostics"), gettext("Tables"));
mwexec_bg('/usr/local/etc/rc.update_bogons now'); $shortcut_section = "aliases";
$maxtimetowait = 0; // fetch list of tables and content of selected table
$loading = true; $tables = json_decode(configd_run("filter list tables json"));
while($loading == true) { if (in_array($tablename, $tables)) {
$isrunning = `/bin/ps awwwux | /usr/bin/grep -v grep | /usr/bin/grep bogons`; $entries = json_decode(configd_run("filter list table {$tablename} json"));
if($isrunning == "") } else {
$loading = false; $entries = array();
$maxtimetowait++;
if($maxtimetowait > 89)
$loading = false;
sleep(1);
}
if($maxtimetowait < 90)
$savemsg = gettext("The bogons database has been updated.");
} }
exec("/sbin/pfctl -t " . escapeshellarg($tablename) . " -T show", $entries);
exec("/sbin/pfctl -sT", $tables);
include("head.inc"); include("head.inc");
?> ?>
<body> <body>
...@@ -86,100 +90,113 @@ include("head.inc"); ...@@ -86,100 +90,113 @@ include("head.inc");
<script type="text/javascript"> <script type="text/javascript">
//<![CDATA[ $( document ).ready(function() {
function method_change(entrytype) { // on change pfTable selection
window.location='diag_tables.php?type=' + entrytype; $("#tablename").change(function(){
} window.location='diag_tables.php?tablename=' + $(this).val();
function del_entry(entry) { });
jQuery.ajax("diag_tables.php?type=<?php echo htmlspecialchars($tablename);?>&delete=" + entry, {
complete: function(response) { // delete entry
if (200 == response.status) { $(".act_delete").click(function(event){
// Escape all dots to not confuse jQuery selectors event.preventDefault()
name = response.responseText.replace(/\./g,'\\.'); var address = $(this).attr("data-address");
name = name.replace(/\//g,'\\/'); $("#address").val(address);
jQuery('#' + name).fadeOut(1000); $("#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> </script>
<section class="page-content-main"> <section class="page-content-main">
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<form method="post" action="<?=$_SERVER['REQUEST_URI'];?>">
<section class="col-xs-12">
<?php if (isset($savemsg)) print_info_box($savemsg); ?> <?php if (isset($savemsg)) print_info_box($savemsg); ?>
<form method="post" id="iform" action="<?=$_SERVER['REQUEST_URI'];?>">
<input type="hidden" name="act" id="action"/>
<select id="type" onchange="method_change(jQuery('#type').val());" name="type" class='form-control'> <input type="hidden" name="address" id="address"/>
<option value="">Table</option> <section class="col-xs-12">
<?php foreach ($tables as $table) { <select id="tablename" name="tablename" class="selectpicker" data-width="auto" data-live-search="true">
echo "<option value=\"{$table}\""; <?php
if ($tablename == $table) foreach ($tables as $table):?>
echo " selected=\"selected\""; <option value="<?=$table;?>" <?=$tablename == $table ? " selected=\"selected\"" : "";?>>
echo ">{$table}</option>\n"; <?=$table;?>
} </option>
?> <?php
endforeach;?>
</select> </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>
<section class="col-xs-12"> <section class="col-xs-12">
<div class="content-box"> <div class="content-box">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped">
<table class="table table-striped table-sort sortable __nomb">
<tr> <tr>
<td class="listhdrr"><?=gettext("IP Address");?></td> <td colspan="2"><?=gettext("IP Address");?></td>
</tr> </tr>
<?php $count = 0; foreach($entries as $entryA): ?> <?php
<?php $entry = trim($entryA); ?> if (count($entries) ==0):?>
<tr id="<?=$entry?>"> <tr>
<td> <td colspan="2"><?=gettext("No entries exist in this table.");?></td>
<?php echo $entry; ?> </tr>
</td> <?php
endif;
foreach ($entries as $entry):?>
<tr>
<td><?=$entry;?></td>
<td> <td>
<?php if ( ($tablename != "bogons") && ($tablename != "bogonsv6") ) { ?> <a data-address="<?=$entry;?>" title="<?=gettext("delete this entry"); ?>" data-toggle="tooltip" class="act_delete btn btn-default btn-xs">
<a onclick="del_entry('<?=htmlspecialchars($entry)?>');" alt="delete">
<span class="glyphicon glyphicon-remove"></span> <span class="glyphicon glyphicon-remove"></span>
</a> </a>
<?php } ?>
</td> </td>
</tr> </tr>
<?php $count++; endforeach; ?> <?php
<?php endforeach;?>
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>
</table> </table>
</div> </div>
</div> </div>
</section> </section>
</form> </form>
</div> </div>
</div> </div>
</section> </section>
<?php include('foot.inc');?> <?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