Commit 30334522 authored by Ad Schellevis's avatar Ad Schellevis

(legacy) refactor diag_tables.php

parent 094727e8
<?php <?php
/* /*
Copyright (C) 2014 Deciso B.V. Copyright (C) 2014 Deciso B.V.
Copyright (C) 2010 Jim Pingle Copyright (C) 2010 Jim Pingle
Portions borrowed from diag_dump_states.php: Portions borrowed from diag_dump_states.php:
Copyright (C) 2010 Scott Ullrich Copyright (C) 2010 Scott Ullrich
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, 1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer. this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright 2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution. documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
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') {
exit; if (!empty($_POST['tablename'])) {
} $tablename = $_POST['tablename'];
}
if($_REQUEST['deleteall']) { if (isset($_POST['act']) && $_POST['act'] == 'update_bogons') {
exec("/sbin/pfctl -t " . escapeshellarg($tablename) . " -T show", $entries); try {
if(is_array($entries)) { configd_run("filter update bogons");
foreach($entries as $entryA) { } catch (Exception $e) {
$entry = trim($entryA); $savemsg = gettext("The bogons database has NOT been updated.");
exec("/sbin/pfctl -t " . escapeshellarg($tablename) . " -T delete " . escapeshellarg($entry), $delete); } 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;
}
} 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'];?>"> <?php if (isset($savemsg)) print_info_box($savemsg); ?>
<section class="col-xs-12"> <form method="post" id="iform" action="<?=$_SERVER['REQUEST_URI'];?>">
<input type="hidden" name="act" id="action"/>
<input type="hidden" name="address" id="address"/>
<?php if (isset($savemsg)) print_info_box($savemsg); ?> <section class="col-xs-12">
<select id="tablename" name="tablename" class="selectpicker" data-width="auto" data-live-search="true">
<?php
<select id="type" onchange="method_change(jQuery('#type').val());" name="type" class='form-control'> foreach ($tables as $table):?>
<option value="">Table</option> <option value="<?=$table;?>" <?=$tablename == $table ? " selected=\"selected\"" : "";?>>
<?php foreach ($tables as $table) { <?=$table;?>
echo "<option value=\"{$table}\""; </option>
if ($tablename == $table) <?php
echo " selected=\"selected\""; endforeach;?>
echo ">{$table}</option>\n"; </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>
</select> <?=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">
<table class="table table-striped">
<div class="table-responsive"> <tr>
<td colspan="2"><?=gettext("IP Address");?></td>
<table class="table table-striped table-sort sortable __nomb"> </tr>
<tr> <?php
<td class="listhdrr"><?=gettext("IP Address");?></td> if (count($entries) ==0):?>
</tr> <tr>
<?php $count = 0; foreach($entries as $entryA): ?> <td colspan="2"><?=gettext("No entries exist in this table.");?></td>
<?php $entry = trim($entryA); ?> </tr>
<tr id="<?=$entry?>"> <?php
<td> endif;
<?php echo $entry; ?> foreach ($entries as $entry):?>
</td> <tr>
<td> <td><?=$entry;?></td>
<?php if ( ($tablename != "bogons") && ($tablename != "bogonsv6") ) { ?> <td>
<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> <span class="glyphicon glyphicon-remove"></span>
</a> </a>
<?php } ?> </td>
</td> </tr>
</tr> <?php
<?php $count++; endforeach; ?> endforeach;?>
<?php </table>
if($count == 0) </div>
if( ($tablename == "bogons") || ($tablename == "bogonsv6") ) </div>
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."); </section>
else </form>
echo "<tr><td>" . gettext("No entries exist in this table."); </div>
?> </div>
<?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>
</div>
</div>
</section>
</form>
</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