mirror of https://github.com/MISP/MISP
Merge branch 'value1' into develop
commit
0f15344cff
|
@ -3129,6 +3129,8 @@ class Attribute extends AppModel
|
||||||
'Attribute' => array(
|
'Attribute' => array(
|
||||||
'sharinggroup' => array('function' => 'set_filter_sharing_group'),
|
'sharinggroup' => array('function' => 'set_filter_sharing_group'),
|
||||||
'value' => array('function' => 'set_filter_value'),
|
'value' => array('function' => 'set_filter_value'),
|
||||||
|
'value1' => array('function' => 'set_filter_simple_attribute'),
|
||||||
|
'value2' => array('function' => 'set_filter_simple_attribute'),
|
||||||
'category' => array('function' => 'set_filter_simple_attribute'),
|
'category' => array('function' => 'set_filter_simple_attribute'),
|
||||||
'type' => array('function' => 'set_filter_type'),
|
'type' => array('function' => 'set_filter_type'),
|
||||||
'object_relation' => array('function' => 'set_filter_simple_attribute'),
|
'object_relation' => array('function' => 'set_filter_simple_attribute'),
|
||||||
|
|
|
@ -2711,17 +2711,8 @@ class Event extends AppModel
|
||||||
public function set_filter_value(&$params, $conditions, $options)
|
public function set_filter_value(&$params, $conditions, $options)
|
||||||
{
|
{
|
||||||
if (!empty($params['value'])) {
|
if (!empty($params['value'])) {
|
||||||
$params[$options['filter']] = $this->convert_filters($params[$options['filter']]);
|
$params[$options['filter']] = $this->convert_filters($params['value']);
|
||||||
$conditions = $this->generic_add_filter($conditions, $params[$options['filter']], ['Attribute.value1', 'Attribute.value2']);
|
$conditions = $this->generic_add_filter($conditions, $params['value'], ['Attribute.value1', 'Attribute.value2']);
|
||||||
// Allows searching for ['value1' => [full, part1], 'value2' => [full, part2]]
|
|
||||||
if (is_string($params['value']) && strpos('|', $params['value']) !== false) {
|
|
||||||
$valueParts = explode('|', $params['value'], 2);
|
|
||||||
$convertedFilterVal1 = $this->convert_filters($valueParts[0]);
|
|
||||||
$convertedFilterVal2 = $this->convert_filters($valueParts[1]);
|
|
||||||
$conditionVal1 = $this->generic_add_filter([], $convertedFilterVal1, ['Attribute.value1'])['AND'][0]['OR'];
|
|
||||||
$conditionVal2 = $this->generic_add_filter([], $convertedFilterVal2, ['Attribute.value2'])['AND'][0]['OR'];
|
|
||||||
$conditions['AND'][0]['OR']['OR']['AND'] = [$conditionVal1, $conditionVal2];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $conditions;
|
return $conditions;
|
||||||
|
|
|
@ -2822,6 +2822,10 @@ components:
|
||||||
$ref: "#/components/schemas/LimitSearchFilter"
|
$ref: "#/components/schemas/LimitSearchFilter"
|
||||||
value:
|
value:
|
||||||
$ref: "#/components/schemas/AttributeValue"
|
$ref: "#/components/schemas/AttributeValue"
|
||||||
|
value1:
|
||||||
|
$ref: "#/components/schemas/AttributeValue"
|
||||||
|
value2:
|
||||||
|
$ref: "#/components/schemas/AttributeValue"
|
||||||
type:
|
type:
|
||||||
$ref: "#/components/schemas/AttributeType"
|
$ref: "#/components/schemas/AttributeType"
|
||||||
category:
|
category:
|
||||||
|
|
|
@ -863,12 +863,49 @@ class TestComprehensive(unittest.TestCase):
|
||||||
|
|
||||||
self.admin_misp_connector.delete_event(event)
|
self.admin_misp_connector.delete_event(event)
|
||||||
|
|
||||||
|
def test_restsearch_composite_attribute(self):
|
||||||
|
event = create_simple_event()
|
||||||
|
attribute_1 = event.add_attribute('ip-src|port', '10.0.0.1|8080')
|
||||||
|
attribute_2 = event.add_attribute('ip-src|port', '10.0.0.2|8080')
|
||||||
|
event = self.user_misp_connector.add_event(event)
|
||||||
|
check_response(event)
|
||||||
|
|
||||||
|
search_result = self._search_attribute({'value': '10.0.0.1', 'eventid': event.id})
|
||||||
|
self.assertEqual(search_result['Attribute'][0]['uuid'], attribute_1.uuid)
|
||||||
|
self.assertEqual(len(search_result['Attribute']), 1)
|
||||||
|
|
||||||
|
search_result = self._search_attribute({'value': '8080', 'eventid': event.id})
|
||||||
|
self.assertEqual(len(search_result['Attribute']), 2)
|
||||||
|
|
||||||
|
search_result = self._search_attribute({'value1': '10.0.0.1', 'eventid': event.id})
|
||||||
|
self.assertEqual(len(search_result['Attribute']), 1)
|
||||||
|
self.assertEqual(search_result['Attribute'][0]['uuid'], attribute_1.uuid)
|
||||||
|
|
||||||
|
search_result = self._search_attribute({'value1': '10.0.0.2', 'eventid': event.id})
|
||||||
|
self.assertEqual(len(search_result['Attribute']), 1)
|
||||||
|
self.assertEqual(search_result['Attribute'][0]['uuid'], attribute_2.uuid)
|
||||||
|
|
||||||
|
search_result = self._search_attribute({'value2': '8080', 'eventid': event.id})
|
||||||
|
self.assertEqual(len(search_result['Attribute']), 2)
|
||||||
|
|
||||||
|
search_result = self._search_attribute({'value1': '10.0.0.1', 'value2': '8080', 'eventid': event.id})
|
||||||
|
self.assertEqual(len(search_result['Attribute']), 1)
|
||||||
|
self.assertEqual(search_result['Attribute'][0]['uuid'], attribute_1.uuid)
|
||||||
|
|
||||||
|
self.admin_misp_connector.delete_event(event)
|
||||||
|
|
||||||
|
|
||||||
def _search(self, query: dict):
|
def _search(self, query: dict):
|
||||||
response = self.admin_misp_connector._prepare_request('POST', 'events/restSearch', data=query)
|
response = self.admin_misp_connector._prepare_request('POST', 'events/restSearch', data=query)
|
||||||
response = self.admin_misp_connector._check_response(response)
|
response = self.admin_misp_connector._check_response(response)
|
||||||
check_response(response)
|
check_response(response)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
def _search_attribute(self, query: dict):
|
||||||
|
response = self.admin_misp_connector._prepare_request('POST', 'attributes/restSearch', data=query)
|
||||||
|
response = self.admin_misp_connector._check_response(response)
|
||||||
|
check_response(response)
|
||||||
|
return response
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Loading…
Reference in New Issue