IDPS: replace classtype + action for extended filter in rules tab.

This commit is contained in:
Ad Schellevis 2020-06-02 20:12:48 +02:00
parent ecfd53ac2f
commit eb10976aa7
2 changed files with 32 additions and 32 deletions

View File

@ -104,10 +104,13 @@ class SettingsController extends ApiMutableModelControllerBase
$searchPhrase = '';
}
// add filter for classtype
if ($this->request->getPost("classtype", "string", '') != "") {
$searchTag = $filter->sanitize($this->request->getPost('classtype'), "query");
$searchPhrase .= " classtype/" . $searchTag . ' ';
// add metadata filters
foreach ($_POST as $key => $value) {
$key = $filter->sanitize($key, "string");
$value = $filter->sanitize($value, "string");
if (!in_array($key, ['current', 'rowCount', 'sort', 'searchPhrase', 'action'])) {
$searchPhrase .= " {$key}/{$value} ";
}
}
// add filter for action

View File

@ -62,27 +62,31 @@ POSSIBILITY OF SUCH DAMAGE.
/**
* list all known classtypes and add to selection box
*/
function updateRuleClassTypes() {
function updateRuleMetadata() {
ajaxGet("/api/ids/settings/listRuleMetadata", {}, function(data, status) {
if (status == "success") {
$('#ruleclass').html('<option value="">ALL</option>');
$.each(data['classtype'], function(key, value) {
$('#ruleclass').append($("<option></option>").attr("value",value).text(value));
$('#rulemetadata').empty();
$.each(Object.assign({}, {'action': ['drop', 'alert']}, data), function(key, values) {
let $optgroup = $("<optgroup/>");
$optgroup.prop('label', key);
for (let i=0; i < values.length ; ++i) {
$optgroup.append(
$("<option>").val(values[i]).text(values[i].substr(0, 50))
.data('property', key)
.data('value', values[i])
.data('content', "<span class='badge'>"+key+"\\"+values[i].substr(0, 50)+"</span>")
);
}
$('#rulemetadata').append($optgroup);
});
$('.selectpicker').selectpicker('refresh');
// link on change event
$('#ruleclass').on('change', function(){
$('#rulemetadata').on('change', function(){
$('#grid-installedrules').bootgrid('reload');
});
}
});
}
/**
* link on change event for alert "action" selectionbox
*/
$('#ruleaction').on('change', function(){
$('#grid-installedrules').bootgrid('reload');
});
/**
* update list of available alert logs
@ -111,14 +115,14 @@ POSSIBILITY OF SUCH DAMAGE.
* Add classtype / action to rule filter
*/
function addRuleFilters(request) {
var selected =$('#ruleclass').find("option:selected").val();
if ( selected != "") {
request['classtype'] = selected;
}
var selected =$('#ruleaction').find("option:selected").val();
if ( selected != "") {
request['action'] = selected;
}
$('#rulemetadata').find("option:selected").each(function(){
let filter_name = $(this).data('property');
if (request[filter_name] === undefined) {
request[filter_name] = $(this).data('value');
} else {
request[filter_name] += "," + $(this).data('value');
}
});
return request;
}
@ -315,7 +319,7 @@ POSSIBILITY OF SUCH DAMAGE.
//
// delay refresh for a bit
setTimeout(updateRuleClassTypes, 500);
setTimeout(updateRuleMetadata, 500);
/**
* grid installed rules
@ -783,14 +787,7 @@ POSSIBILITY OF SUCH DAMAGE.
<div class="bootgrid-header container-fluid">
<div class="row">
<div class="col-sm-12 actionBar">
<b>{{ lang._('Classtype') }} &nbsp;</b>
<select id="ruleclass" class="selectpicker" data-width="200px"></select>
&nbsp;
<b>{{ lang._('Action') }} &nbsp;</b>
<select id="ruleaction" class="selectpicker" data-width="100px">
<option value="">{{ lang._('All') }}</option>
<option value="drop">{{ lang._('Drop') }}</option>
<option value="alert">{{ lang._('Alert') }}</option>
<select id="rulemetadata" title="{{ lang._('Filters') }}" class="selectpicker" multiple=multiple data-live-search="true" data-size="10" data-width="100%">
</select>
</div>
</div>