From 4eb0e69e29814620ca4ab7e2646ddee60e0f8cad Mon Sep 17 00:00:00 2001 From: Jonathan Date: Thu, 28 Sep 2023 10:11:55 +0200 Subject: [PATCH 1/4] #11763 new regex filter events --- pandora_console/operation/events/events.php | 33 ++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index 059c8f90ec..5567eecd60 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -130,6 +130,11 @@ $severity = get_parameter( 'filter[severity]', ($filter['severity'] ?? '') ); +$regex = get_parameter( + 'filter[regex]', + ($filter['regex'] ?? '') +); +unset($filter['regex']); $status = get_parameter( 'filter[status]', ($filter['status'] ?? '') @@ -466,6 +471,23 @@ if (is_ajax() === true) { $events = $events['data']; } + if (!empty($events) && $regex !== '') { + foreach ($events as $key => $event) { + $regex_validation = false; + foreach ($event as $field) { + if (preg_match('/'.$regex.'/', $field)) { + $regex_validation = true; + } + } + + if ($regex_validation === false) { + unset($events[$key]); + } + } + + $count = count($events); + } + if (empty($events) === false) { $redirection_form_id = 0; @@ -2078,6 +2100,12 @@ $in = '
'; $in .= $data.'
'; $inputs[] = $in; +// REGEX search datatable. +$in = '
'; +$in .= html_print_input_text('regex', $regex, '', '', 255, true); +$in .= '
'; +$inputs[] = $in; + // User private filter. $inputs[] = html_print_input_hidden('private_filter_event', $private_filter_event, true); // Trick view in table. @@ -3434,7 +3462,10 @@ $(document).ready( function() { $("#button-remove_without").click(function() { click_button_remove_tag("without"); }); - + + $('#myInputTextField').keyup(function(){ + $("#table_events").search($(this).val()).draw() ; + }) //Autorefresh in fullscreen var pure = ''; From 545316e9a8f1ef55e9edddf2b48e71ada47a1cd5 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Tue, 7 Nov 2023 08:35:49 +0100 Subject: [PATCH 2/4] #11763 regex fix html entities --- pandora_console/operation/events/events.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index 57c7111885..e4aa2aa5fe 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -132,7 +132,7 @@ $severity = get_parameter( ); $regex = get_parameter( 'filter[regex]', - ($filter['regex'] ?? '') + (io_safe_output($filter['regex']) ?? '') ); unset($filter['regex']); $status = get_parameter( From 82759ae12f247d48a77a89831fdf04db344d21d2 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Wed, 8 Nov 2023 15:24:47 +0100 Subject: [PATCH 3/4] #11763 regex events --- pandora_console/operation/events/events.php | 41 ++++++++++++--------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index e4aa2aa5fe..f4eb499a79 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -471,29 +471,12 @@ if (is_ajax() === true) { $events = $events['data']; } - if (!empty($events) && $regex !== '') { - foreach ($events as $key => $event) { - $regex_validation = false; - foreach ($event as $field) { - if (preg_match('/'.$regex.'/', $field)) { - $regex_validation = true; - } - } - - if ($regex_validation === false) { - unset($events[$key]); - } - } - - $count = count($events); - } - if (empty($events) === false) { $redirection_form_id = 0; $data = array_reduce( $events, - function ($carry, $item) use ($table_id, &$redirection_form_id, $filter, $compact_date, $external_url) { + function ($carry, $item) use ($table_id, &$redirection_form_id, $filter, $compact_date, $external_url, $regex) { global $config; $tmp = (object) $item; @@ -1241,12 +1224,34 @@ if (is_ajax() === true) { } } + if (empty($tmp) === false && $regex !== '') { + $regex_validation = false; + foreach (json_decode(json_encode($tmp), true) as $key => $field) { + if (preg_match('/'.$regex.'/', $field)) { + $regex_validation = true; + } + } + + if ($regex_validation === false) { + unset($tmp); + } + } + $carry[] = $tmp; return $carry; } ); } + $data = array_values( + array_filter( + $data, + function ($item) { + return (bool) (array) $item; + } + ) + ); + $count = count($data); // RecordsTotal && recordsfiltered resultados totales. echo json_encode( [ From f86a3e60e8513c5e63a0fef21d1d1067bdb9c049 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Wed, 29 Nov 2023 11:14:40 +0100 Subject: [PATCH 4/4] #11763 save filter regex on bbdd --- pandora_console/extras/mr/67.sql | 3 +++ pandora_console/include/ajax/events.php | 6 ++++++ pandora_console/operation/events/events.php | 3 ++- pandora_console/pandoradb.sql | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pandora_console/extras/mr/67.sql b/pandora_console/extras/mr/67.sql index a31ea6e670..11d57b140f 100644 --- a/pandora_console/extras/mr/67.sql +++ b/pandora_console/extras/mr/67.sql @@ -5,4 +5,7 @@ DROP TABLE tagent_access; ALTER TABLE treport_content ADD check_unknowns_graph tinyint DEFAULT 0 NULL; +ALTER TABLE `tevent_filter` +ADD COLUMN `regex` TEXT NULL AFTER `private_filter_user`; + COMMIT; diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index 881ef22f39..8a9c3c5710 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -313,6 +313,7 @@ if ($save_event_filter) { $values['severity'] = implode(',', get_parameter('severity', -1)); $values['status'] = get_parameter('status'); $values['search'] = get_parameter('search'); + $values['regex'] = get_parameter('regex'); $values['not_search'] = get_parameter('not_search'); $values['text_agent'] = get_parameter('text_agent'); $values['id_agent'] = get_parameter('id_agent'); @@ -381,6 +382,7 @@ if ($update_event_filter) { $values['severity'] = implode(',', get_parameter('severity', -1)); $values['status'] = get_parameter('status'); $values['search'] = get_parameter('search'); + $values['regex'] = get_parameter('regex'); $values['not_search'] = get_parameter('not_search'); $values['text_agent'] = get_parameter('text_agent'); $values['id_agent'] = get_parameter('id_agent'); @@ -640,6 +642,8 @@ function load_form_filter() { $("#status").val(val); if (i == 'search') $('#text-search').val(val); + if (i == 'regex') + $('#text-regex').val(val); if (i == 'not_search') $('#checkbox-not_search').val(val); if (i == 'text_agent') @@ -970,6 +974,7 @@ function save_new_filter() { "severity" : $("#severity").val(), "status" : $("#status").val(), "search" : $("#text-search").val(), + "regex" : $('#text-regex').val(), "not_search" : $("#checkbox-not_search").val(), "text_agent" : $("#text_id_agent").val(), "id_agent" : $('input:hidden[name=id_agent]').val(), @@ -1050,6 +1055,7 @@ function save_update_filter() { "severity" : $("#severity").val(), "status" : $("#status").val(), "search" : $("#text-search").val(), + "regex" : $('#text-regex').val(), "not_search" : $("#checkbox-not_search").val(), "text_agent" : $("#text_id_agent").val(), "id_agent" : $('input:hidden[name=id_agent]').val(), diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index bcdb370887..a1642fb25d 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -1320,6 +1320,7 @@ if ($loaded_filter !== false && $from_event_graph != 1 && isset($fb64) === false $severity = $filter['severity']; $status = $filter['status']; $search = $filter['search']; + $regex = $filter['regex']; $not_search = $filter['not_search']; $text_agent = $filter['text_agent']; $id_agent = $filter['id_agent']; @@ -2085,7 +2086,7 @@ $in .= $data.''; $inputs[] = $in; // REGEX search datatable. -$in = '
'; +$in = '
'; $in .= html_print_input_text('regex', $regex, '', '', 255, true); $in .= '
'; $inputs[] = $in; diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index 4c527345c0..b9819936fc 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -1271,6 +1271,7 @@ CREATE TABLE IF NOT EXISTS `tevent_filter` ( `custom_data_filter_type` TINYINT UNSIGNED DEFAULT 0, `owner_user` TEXT, `private_filter_user` TEXT, + `regex` TEXT, PRIMARY KEY (`id_filter`) ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;