mirror of https://github.com/MISP/MISP
new: Added a new field for an exclude regex for the CSV / Freetext feeds
- just set a php compatible PCRE regex pattern to exclude valuespull/1815/head
parent
b40791e8b0
commit
26df6d3fe5
|
@ -114,6 +114,16 @@ class FeedsController extends AppController {
|
|||
}
|
||||
|
||||
public function add() {
|
||||
$this->loadModel('Event');
|
||||
$sgs = $this->Event->SharingGroup->fetchAllAuthorised($this->Auth->user(), 'name', 1);
|
||||
$distributionLevels = $this->Event->distributionLevels;
|
||||
if (empty($sgs)) unset($distributionLevels[4]);
|
||||
$this->set('distributionLevels', $distributionLevels);
|
||||
$this->set('sharingGroups', $sgs);
|
||||
$this->set('feed_types', $this->Feed->getFeedTypesOptions());
|
||||
$tags = $this->Event->EventTag->Tag->find('list', array('fields' => array('Tag.name'), 'order' => array('lower(Tag.name) asc')));
|
||||
$tags[0] = 'None';
|
||||
$this->set('tags', $tags);
|
||||
if ($this->request->is('post')) {
|
||||
$error = false;
|
||||
if (isset($this->request->data['Feed']['pull_rules'])) $this->request->data['Feed']['rules'] = $this->request->data['Feed']['pull_rules'];
|
||||
|
@ -128,6 +138,11 @@ class FeedsController extends AppController {
|
|||
}
|
||||
if (!isset($this->request->data['Feed']['settings'])) {
|
||||
$this->request->data['Feed']['settings'] = array();
|
||||
} else {
|
||||
if (!empty($this->request->data['Feed']['settings']['common']['excluderegex']) && !$this->__checkRegex($this->request->data['Feed']['settings']['common']['excluderegex'])) {
|
||||
$this->Session->setFlash('Invalid exclude regex. Make sure it\'s a delimited PCRE regex pattern.');
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (isset($this->request->data['Feed']['settings']['delimiter']) && empty($this->request->data['Feed']['settings']['delimiter'])) {
|
||||
$this->request->data['Feed']['settings']['delimiter'] = ',';
|
||||
|
@ -146,22 +161,29 @@ class FeedsController extends AppController {
|
|||
else $this->Session->setFlash('Feed could not be added. Invalid field: ' . array_keys($this->Feed->validationErrors)[0]);
|
||||
}
|
||||
}
|
||||
$this->loadModel('Event');
|
||||
$sgs = $this->Event->SharingGroup->fetchAllAuthorised($this->Auth->user(), 'name', 1);
|
||||
$distributionLevels = $this->Event->distributionLevels;
|
||||
if (empty($sgs)) unset($distributionLevels[4]);
|
||||
$this->set('distributionLevels', $distributionLevels);
|
||||
$this->set('sharingGroups', $sgs);
|
||||
$this->set('feed_types', $this->Feed->getFeedTypesOptions());
|
||||
$tags = $this->Event->EventTag->Tag->find('list', array('fields' => array('Tag.name'), 'order' => array('lower(Tag.name) asc')));
|
||||
$tags[0] = 'None';
|
||||
$this->set('tags', $tags);
|
||||
}
|
||||
|
||||
private function __checkRegex($pattern) {
|
||||
if (@preg_match($pattern, null) === false) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function edit($feedId) {
|
||||
$this->Feed->id = $feedId;
|
||||
if (!$this->Feed->exists()) throw new NotFoundException('Invalid feed.');
|
||||
$this->Feed->read();
|
||||
$this->loadModel('Event');
|
||||
$sgs = $this->Event->SharingGroup->fetchAllAuthorised($this->Auth->user(), 'name', 1);
|
||||
$distributionLevels = $this->Event->distributionLevels;
|
||||
if (empty($sgs)) unset($distributionLevels[4]);
|
||||
$this->set('distributionLevels', $distributionLevels);
|
||||
$this->set('sharingGroups', $sgs);
|
||||
$tags = $this->Event->EventTag->Tag->find('list', array('fields' => array('Tag.name'), 'order' => array('lower(Tag.name) asc')));
|
||||
$tags[0] = 'None';
|
||||
$this->set('feed_types', $this->Feed->getFeedTypesOptions());
|
||||
$this->set('tags', $tags);
|
||||
if (!empty($this->Feed->data['Feed']['settings'])) {
|
||||
$this->Feed->data['Feed']['settings'] = json_decode($this->Feed->data['Feed']['settings'], true);
|
||||
}
|
||||
|
@ -180,6 +202,11 @@ class FeedsController extends AppController {
|
|||
}
|
||||
if (!isset($this->request->data['Feed']['settings'])) {
|
||||
$this->request->data['Feed']['settings'] = array();
|
||||
} else {
|
||||
if (!empty($this->request->data['Feed']['settings']['common']['excluderegex']) && !$this->__checkRegex($this->request->data['Feed']['settings']['common']['excluderegex'])) {
|
||||
$this->Session->setFlash('Invalid exclude regex. Make sure it\'s a delimited PCRE regex pattern.');
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (isset($this->request->data['Feed']['settings']['delimiter']) && empty($this->request->data['Feed']['settings']['delimiter'])) {
|
||||
$this->request->data['Feed']['settings']['delimiter'] = ',';
|
||||
|
@ -212,16 +239,6 @@ class FeedsController extends AppController {
|
|||
}
|
||||
$this->request->data['Feed']['pull_rules'] = $this->request->data['Feed']['rules'];
|
||||
}
|
||||
$this->loadModel('Event');
|
||||
$sgs = $this->Event->SharingGroup->fetchAllAuthorised($this->Auth->user(), 'name', 1);
|
||||
$distributionLevels = $this->Event->distributionLevels;
|
||||
if (empty($sgs)) unset($distributionLevels[4]);
|
||||
$this->set('distributionLevels', $distributionLevels);
|
||||
$this->set('sharingGroups', $sgs);
|
||||
$tags = $this->Event->EventTag->Tag->find('list', array('fields' => array('Tag.name'), 'order' => array('lower(Tag.name) asc')));
|
||||
$tags[0] = 'None';
|
||||
$this->set('feed_types', $this->Feed->getFeedTypesOptions());
|
||||
$this->set('tags', $tags);
|
||||
}
|
||||
|
||||
public function delete($feedId) {
|
||||
|
|
|
@ -118,7 +118,14 @@ class Feed extends AppModel {
|
|||
$complexTypeTool = new ComplexTypeTool();
|
||||
$this->Warninglist = ClassRegistry::init('Warninglist');
|
||||
$complexTypeTool->setTLDs($this->Warninglist->fetchTLDLists());
|
||||
$resultArray = $complexTypeTool->checkComplexRouter($data, $type, isset($feed['Feed']['settings'][$type]) ? $feed['Feed']['settings'][$type] : array());
|
||||
$settings = array();
|
||||
if (isset($feed['Feed']['settings'][$type])) {
|
||||
$settings = $feed['Feed']['settings'][$type];
|
||||
}
|
||||
if (isset($feed['Feed']['settings']['common'])) {
|
||||
$settings = array_merge($settings, $feed['Feed']['settings']['common']);
|
||||
}
|
||||
$resultArray = $complexTypeTool->checkComplexRouter($data, $type, $settings);
|
||||
$this->Attribute = ClassRegistry::init('Attribute');
|
||||
foreach ($resultArray as $key => $value) {
|
||||
$resultArray[$key]['category'] = $this->Attribute->typeDefinitions[$value['default_type']]['default_category'];
|
||||
|
|
|
@ -70,6 +70,17 @@
|
|||
));
|
||||
?>
|
||||
</div>
|
||||
<div id="settingsCommonExcluderegexDiv" class="optionalField">
|
||||
<?php
|
||||
echo $this->Form->input('Feed.settings.common.excluderegex', array(
|
||||
'label' => 'Exclusion Regex',
|
||||
'title' => 'Add a regex pattern for detecting iocs that should be skipped (this can be useful to exclude any references to the actual report / feed for example)',
|
||||
'div' => 'input clear',
|
||||
'placeholder' => 'Regex pattern, for example: "/^https://myfeedurl/i',
|
||||
'class' => 'form-control span6'
|
||||
));
|
||||
?>
|
||||
</div>
|
||||
<div id="PublishDiv" class="input clear optionalField">
|
||||
<?php
|
||||
echo $this->Form->input('publish', array(
|
||||
|
|
|
@ -69,6 +69,17 @@
|
|||
));
|
||||
?>
|
||||
</div>
|
||||
<div id="settingsCommonExcluderegexDiv" class="optionalField">
|
||||
<?php
|
||||
echo $this->Form->input('Feed.settings.common.excluderegex', array(
|
||||
'label' => 'Exclusion Regex',
|
||||
'title' => 'Add a regex pattern for detecting iocs that should be skipped (this can be useful to exclude any references to the actual report / feed for example)',
|
||||
'div' => 'input clear',
|
||||
'placeholder' => 'Regex pattern, for example: "/^https://myfeedurl/i"',
|
||||
'class' => 'form-control span6'
|
||||
));
|
||||
?>
|
||||
</div>
|
||||
<div id="PublishDiv" class="input clear optionalField">
|
||||
<?php
|
||||
echo $this->Form->input('publish', array(
|
||||
|
|
|
@ -2568,6 +2568,7 @@ function feedFormUpdate() {
|
|||
$('#TargetEventDiv').show();
|
||||
$('#DeltaMergeDiv').show();
|
||||
}
|
||||
$('#settingsCommonExcluderegexDiv').show();
|
||||
break;
|
||||
case 'csv':
|
||||
$('#TargetDiv').show();
|
||||
|
@ -2579,6 +2580,7 @@ function feedFormUpdate() {
|
|||
}
|
||||
$('#settingsCsvValueDiv').show();
|
||||
$('#settingsCsvDelimiterDiv').show();
|
||||
$('#settingsCommonExcluderegexDiv').show();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue