summaryrefslogtreecommitdiffstats
path: root/src/usr/local/www/status_logs_filter_dynamic.php
diff options
context:
space:
mode:
authorStephen Beaver <sbeaver@netgate.com>2015-12-11 16:44:11 -0500
committerStephen Beaver <sbeaver@netgate.com>2015-12-11 16:48:56 -0500
commit1af5edbf04e0e3bbbc55981f6fc404b60ff33f2b (patch)
treecdb4b613aaab86efc5b0888ccffdf612f8874137 /src/usr/local/www/status_logs_filter_dynamic.php
parente00df6598920a78da34698cf77ef4d4b2198a387 (diff)
downloadpfsense-1af5edbf04e0e3bbbc55981f6fc404b60ff33f2b.zip
pfsense-1af5edbf04e0e3bbbc55981f6fc404b60ff33f2b.tar.gz
Rename of files to better match their position in the memory structure
Diffstat (limited to 'src/usr/local/www/status_logs_filter_dynamic.php')
-rwxr-xr-xsrc/usr/local/www/status_logs_filter_dynamic.php441
1 files changed, 441 insertions, 0 deletions
diff --git a/src/usr/local/www/status_logs_filter_dynamic.php b/src/usr/local/www/status_logs_filter_dynamic.php
new file mode 100755
index 0000000..fb8c8d7
--- /dev/null
+++ b/src/usr/local/www/status_logs_filter_dynamic.php
@@ -0,0 +1,441 @@
+<?php
+/*
+ status_logs_filter_dynamic.php
+*/
+/* ====================================================================
+ * Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved.
+ *
+ * Some or all of this file is based on the m0n0wall project which is
+ * Copyright (c) 2004 Manuel Kasper (BSD 2 clause)
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgment:
+ * "This product includes software developed by the pfSense Project
+ * for use in the pfSense software distribution. (http://www.pfsense.org/).
+ *
+ * 4. The names "pfSense" and "pfSense Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * coreteam@pfsense.org.
+ *
+ * 5. Products derived from this software may not be called "pfSense"
+ * nor may "pfSense" appear in their names without prior written
+ * permission of the Electric Sheep Fencing, LLC.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ *
+ * "This product includes software developed by the pfSense Project
+ * for use in the pfSense software distribution (http://www.pfsense.org/).
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 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 POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+/*
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-logs-firewall-dynamic
+##|*NAME=Status: System Logs: Firewall (Dynamic View)
+##|*DESCR=Allow access to the 'Status: System Logs: Firewall (Dynamic View)' page
+##|*MATCH=status_logs_filter_dynamic.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("filter_log.inc");
+
+$filter_logfile = "{$g['varlog_path']}/filter.log";
+
+/* Hardcode this. AJAX doesn't do so well with large numbers */
+$nentries = 50;
+
+/* AJAX related routines */
+handle_ajax($nentries, $nentries + 20);
+
+if ($_POST['clear']) {
+ clear_log_file($filter_logfile);
+}
+
+$filterlog = conv_log_filter($filter_logfile, $nentries, $nentries + 100);
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Firewall"), gettext("Dynamic View"));
+$shortcut_section = "firewall";
+include("head.inc");
+
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+ lastsawtime = '<?=time(); ?>;';
+ var lines = Array();
+ var timer;
+ var updateDelay = 25500;
+ var isBusy = false;
+ var isPaused = false;
+ var nentries = <?=$nentries; ?>;
+<?php
+ if (isset($config['syslog']['reverse'])) {
+ echo "var isReverse = true;\n";
+ } else {
+ echo "var isReverse = false;\n";
+ }
+?>
+ /* Called by the AJAX updater */
+ function format_log_line(row) {
+ if (row[8] == '6') {
+ srcIP = '[' + row[3] + ']';
+ dstIP = '[' + row[5] + ']';
+ } else {
+ srcIP = row[3];
+ dstIP = row[5];
+ }
+
+ if (row[4] == '') {
+ srcPort = '';
+ } else {
+ srcPort = ':' + row[4];
+ }
+ if (row[6] == '') {
+ dstPort = '';
+ } else {
+ dstPort = ':' + row[6];
+ }
+
+ var line =
+ '<td>' + row[0] + '</td>' +
+ '<td>' + row[1] + '</td>' +
+ '<td>' + row[2] + '</td>' +
+ '<td>' + srcIP + srcPort + '</td>' +
+ '<td>' + dstIP + dstPort + '</td>' +
+ '<td>' + row[7] + '</td>';
+
+ return line;
+ }
+
+if (typeof getURL == 'undefined') {
+ getURL = function(url, callback) {
+ if (!url)
+ throw 'No URL for getURL';
+ try {
+ if (typeof callback.operationComplete == 'function')
+ callback = callback.operationComplete;
+ } catch (e) {}
+ if (typeof callback != 'function')
+ throw 'No callback function for getURL';
+ var http_request = null;
+ if (typeof XMLHttpRequest != 'undefined') {
+ http_request = new XMLHttpRequest();
+ }
+ else if (typeof ActiveXObject != 'undefined') {
+ try {
+ http_request = new ActiveXObject('Msxml2.XMLHTTP');
+ } catch (e) {
+ try {
+ http_request = new ActiveXObject('Microsoft.XMLHTTP');
+ } catch (e) {}
+ }
+ }
+ if (!http_request)
+ throw 'Both getURL and XMLHttpRequest are undefined';
+ http_request.onreadystatechange = function() {
+ if (http_request.readyState == 4) {
+ callback( { success : true,
+ content : http_request.responseText,
+ contentType : http_request.getResponseHeader("Content-Type") } );
+ }
+ };
+ http_request.open('GET', url, true);
+ http_request.send(null);
+ };
+}
+
+function outputrule(req) {
+ alert(req.content);
+}
+
+function fetch_new_rules() {
+ if(isPaused)
+ return;
+ if(isBusy)
+ return;
+ isBusy = true;
+ getURL('status_logs_filter_dynamic.php?lastsawtime=' + lastsawtime, fetch_new_rules_callback);
+}
+
+function fetch_new_rules_callback(callback_data) {
+ if(isPaused)
+ return;
+
+ var data_split;
+ var new_data_to_add = Array();
+ var data = callback_data.content;
+
+ data_split = data.split("\n");
+
+ for(var x=0; x<data_split.length-1; x++) {
+ /* loop through rows */
+ row_split = data_split[x].split("||");
+ lastsawtime = row_split[9];
+
+ var tmp = format_log_line(row_split);
+
+ if ( !(tmp) )
+ continue;
+
+ new_data_to_add[new_data_to_add.length] = tmp;
+ }
+
+ update_table_rows(new_data_to_add);
+ isBusy = false;
+}
+
+function in_arrayi(needle, haystack) {
+ var i = haystack.length;
+ while (i--) {
+ if (haystack[i].toLowerCase() === needle.toLowerCase()) {
+ return true;
+ }
+ }
+ return false;
+}
+
+function update_table_rows(data) {
+ if(isPaused)
+ return;
+
+ var isIE = navigator.appName.indexOf('Microsoft') != -1;
+ var isSafari = navigator.userAgent.indexOf('Safari') != -1;
+ var isOpera = navigator.userAgent.indexOf('Opera') != -1;
+ var showanim = 1;
+
+ if (isIE) {
+ showanim = 0;
+ }
+
+ var startat = data.length - nentries;
+
+ if (startat < 0) {
+ startat = 0;
+ }
+
+ data = data.slice(startat, data.length);
+
+ var rows = jQuery('#filter-log-entries>tr');
+
+ // Number of rows to move by
+ var move = rows.length + data.length - nentries;
+
+ if (move < 0)
+ move = 0;
+
+ if (isReverse == false) {
+ for (var i = move; i < rows.length; i++) {
+ jQuery(rows[i - move]).html(jQuery(rows[i]).html());
+ }
+
+ var tbody = jQuery('#filter-log-entries');
+
+ for (var i = 0; i < data.length; i++) {
+ var rowIndex = rows.length - move + i;
+ if (rowIndex < rows.length) {
+ jQuery(rows[rowIndex]).html(data[i]);
+ } else {
+ jQuery(tbody).append('<tr>' + data[i] + '</tr>');
+ }
+ }
+ } else {
+ for (var i = rows.length - 1; i >= move; i--) {
+ jQuery(rows[i]).html(jQuery(rows[i - move]).html());
+ }
+
+ var tbody = jQuery('#filter-log-entries');
+
+ for (var i = 0; i < data.length; i++) {
+ var rowIndex = move - 1 - i;
+ if (rowIndex >= 0) {
+ jQuery(rows[rowIndex]).html(data[i]);
+ } else {
+ jQuery(tbody).prepend('<tr>' + data[i] + '</tr>');
+ }
+ }
+ }
+
+ // Much easier to go through each of the rows once they've all be added.
+ rows = jQuery('#filter-log-entries>tr');
+ for (var i = 0; i < rows.length; i++) {
+ rows[i].className = i % 2 == 0 ? 'listMRodd' : 'listMReven';
+ }
+
+ $('.fa').tooltip();
+}
+
+function toggle_pause() {
+ if(isPaused) {
+ isPaused = false;
+ fetch_new_rules();
+ } else {
+ isPaused = true;
+ }
+}
+/* start local AJAX engine */
+if (typeof updateDelay != 'undefined') {
+ timer = setInterval('fetch_new_rules()', updateDelay);
+}
+
+function toggleListDescriptions(){
+ var ss = document.styleSheets;
+ for (var i=0; i<ss.length; i++) {
+ var rules = ss[i].cssRules || ss[i].rules;
+ for (var j=0; j<rules.length; j++) {
+ if (rules[j].selectorText === ".listMRDescriptionL" || rules[j].selectorText === ".listMRDescriptionR") {
+ rules[j].style.display = rules[j].style.display === "none" ? "table-cell" : "none";
+ }
+ }
+ }
+}
+
+//]]>
+</script>
+
+<?php
+$tab_array = array();
+$tab_array[] = array(gettext("System"), false, "status_logs.php");
+$tab_array[] = array(gettext("Firewall"), true, "status_logs_filter.php");
+$tab_array[] = array(gettext("DHCP"), false, "status_logs.php?logfile=dhcpd");
+$tab_array[] = array(gettext("Portal Auth"), false, "status_logs.php?logfile=portalauth");
+$tab_array[] = array(gettext("IPsec"), false, "status_logs.php?logfile=ipsec");
+$tab_array[] = array(gettext("PPP"), false, "status_logs.php?logfile=ppp");
+$tab_array[] = array(gettext("VPN"), false, "status_logs_vpn.php");
+$tab_array[] = array(gettext("Load Balancer"), false, "status_logs.php?logfile=relayd");
+$tab_array[] = array(gettext("OpenVPN"), false, "status_logs.php?logfile=openvpn");
+$tab_array[] = array(gettext("NTP"), false, "status_logs.php?logfile=ntpd");
+$tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+display_top_tabs($tab_array);
+
+$tab_array = array();
+$tab_array[] = array(gettext("Normal View"), false, "/status_logs_filter.php");
+$tab_array[] = array(gettext("Dynamic View"), true, "/status_logs_filter_dynamic.php");
+$tab_array[] = array(gettext("Summary View"), false, "/status_logs_filter_summary.php");
+display_top_tabs($tab_array, false, 'nav nav-tabs');
+?>
+
+<div class="panel panel-default">
+ <div class="panel-heading">
+ <h2 class="panel-title">
+ <?=gettext('Last ') . $nentries . gettext(' records. ') . gettext('Pause ')?><input type="checkbox" onclick="javascript:toggle_pause();" />
+ </h2>
+ </div>
+ <div class="panel-body">
+ <div class="table-responsive">
+ <table class="table table-striped table-hover table-condensed">
+ <thead>
+ <tr>
+ <th><?=gettext("Act")?></th>
+ <th><?=gettext("Time")?></th>
+ <th><?=gettext("IF")?></th>
+ <th><?=gettext("Source")?></th>
+ <th><?=gettext("Destination")?></th>
+ <th><?=gettext("Proto")?></th>
+ </tr>
+ </thead>
+ <tbody id="filter-log-entries">
+<?php
+ $rowIndex = 0;
+ $tcpcnt = 0;
+
+ foreach ($filterlog as $filterent) {
+ $evenRowClass = $rowIndex % 2 ? " listMReven" : " listMRodd";
+ $rowIndex++;
+ if ($filterent['version'] == '6') {
+ $srcIP = "[" . htmlspecialchars($filterent['srcip']) . "]";
+ $dstIP = "[" . htmlspecialchars($filterent['dstip']) . "]";
+ } else {
+ $srcIP = htmlspecialchars($filterent['srcip']);
+ $dstIP = htmlspecialchars($filterent['dstip']);
+ }
+
+ if ($filterent['srcport'])
+ $srcPort = ":" . htmlspecialchars($filterent['srcport']);
+ else
+ $srcPort = "";
+
+ if ($filterent['dstport'])
+ $dstPort = ":" . htmlspecialchars($filterent['dstport']);
+ else
+ $dstPort = "";
+?>
+ <tr>
+ <td>
+<?php
+ if ($filterent['act'] == "block") {
+ $icon_act = "fa-times icon-danger";
+ } else {
+ $icon_act = "fa-check icon-success";
+ }
+?>
+ <i class="fa <?php echo $icon_act;?> icon-pointer" title="<?php echo $filterent['act'] .'/'. $filterent['tracker'];?>" onclick="javascript:getURL('status_logs_filter.php?getrulenum=<?="{$filterent['rulenum']},{$filterent['tracker']},{$filterent['act']}"; ?>', outputrule);"></i>
+ </td>
+ <td><?=htmlspecialchars($filterent['time'])?></td>
+ <td><?=htmlspecialchars($filterent['interface'])?></td>
+ <td><?=$srcIP . $srcPort?></td>
+ <td><?=$dstIP . $dstPort?></td>
+<?php
+ if ($filterent['proto'] == "TCP") {
+ $filterent['proto'] .= ":{$filterent['tcpflags']}";
+ $tcpcnt++;
+ }
+?>
+ <td><?=htmlspecialchars($filterent['proto'])?></td>
+ </tr>
+<?php
+ } // e-o-foreach()
+?>
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
+<?php
+
+if ($tcpcnt > 0)
+ print_info_box('<a href="https://doc.pfsense.org/index.php/What_are_TCP_Flags%3F">' .
+ gettext("TCP Flags") . '</a>: F - FIN, S - SYN, A or . - ACK, R - RST, P - PSH, U - URG, E - ECE, C - CWR');
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+events.push(function(){
+ $(document).ready(function(){
+ $('.fa').tooltip();
+ });
+});
+//]]>
+</script>
+
+<?php include("foot.inc");
OpenPOWER on IntegriCloud