mirror of https://github.com/MISP/PyMISP
Designed in same style as search, all attributes can be used
parent
c88096ab5d
commit
2c134f6154
|
@ -48,6 +48,8 @@ class NewEventError(PyMISPError):
|
|||
class NewAttributeError(PyMISPError):
|
||||
pass
|
||||
|
||||
class SearchError(PyMISPError):
|
||||
pass
|
||||
|
||||
class MissingDependency(PyMISPError):
|
||||
pass
|
||||
|
@ -704,10 +706,48 @@ class PyMISP(object):
|
|||
response = session.post(url, data=json.dumps(query))
|
||||
return self._check_response(response)
|
||||
|
||||
def search_index(self, value):
|
||||
value = quote(value)
|
||||
def search_index(self, published=None, eventid = None, tag = None, datefrom = None,
|
||||
dateto = None, eventinfo = None, threatlevel = None, distribution = None,
|
||||
analysis = None, attribute = None, org=None):
|
||||
"""
|
||||
Search only at the index level. Use ! infront of value as NOT, default OR
|
||||
|
||||
:param published: Published (0,1)
|
||||
:param eventid: Evend ID(s) | str or list
|
||||
:param tag: Tag(s) | str or list
|
||||
:param datefrom: First date, in format YYYY-MM-DD
|
||||
:param datefrom: Last date, in format YYYY-MM-DD
|
||||
:param eventinfo: Event info(s) to match | str or list
|
||||
:param threatlevel: Threat level(s) (1,2,3,4) | str or list
|
||||
:param distribution: Distribution level(s) (0,1,2,3) | str or list
|
||||
:param analysis: Analysis level(s) (0,1,2) | str or list
|
||||
:param org: Organisation(s) | str or list
|
||||
|
||||
"""
|
||||
allowed = {'published':published, 'eventid':eventid, 'tag':tag, 'Dateto':dateto,
|
||||
'Datefrom':datefrom, 'eventinfo':eventinfo, 'threatlevel':threatlevel,
|
||||
'distribution':distribution, 'analysis':analysis, 'attribute':attribute,
|
||||
'org':org }
|
||||
rule_levels = {'distribution':["0","1","2","3","!0","!1","!2","!3"],
|
||||
'threatlevel':["1","2","3","4","!1","!2","!3","!4"],
|
||||
'analysis':["0","1","2","!0","!1","!2"]}
|
||||
buildup_url = "events/index"
|
||||
|
||||
for rule in allowed.keys():
|
||||
if allowed[rule] != None:
|
||||
if type(allowed[rule])!=list:
|
||||
allowed[rule]=[allowed[rule]]
|
||||
allowed[rule] = map(str, allowed[rule])
|
||||
if rule in rule_levels:
|
||||
if not set(allowed[rule]).issubset(rule_levels[rule]):
|
||||
raise SearchError('Values in your {} are invalid, has to be in {}'.format(rule, ', '.join(str(x) for x in rule_levels[rule])))
|
||||
if type(allowed[rule]) == list:
|
||||
joined = '|'.join(str(x) for x in allowed[rule])
|
||||
buildup_url += '/search{}:{}'.format(rule, joined)
|
||||
else:
|
||||
buildup_url += '/search{}:{}'.format(rule, allowed[rule])
|
||||
session = self.__prepare_session('json')
|
||||
url = urljoin(self.root_url, 'events/index/searchall:%s' % value)
|
||||
url = urljoin(self.root_url, buildup_url)
|
||||
response = session.get(url)
|
||||
return self._check_response(response)
|
||||
|
||||
|
|
Loading…
Reference in New Issue