mirror of https://github.com/MISP/PyMISP
Merge pull request #794 from tomking2/feature/org_user_search
chg: Add ability to search against orgs and users by freetext search (both) or organisation (users)JakubOnderka-patch-1
commit
e84d5a11f3
|
@ -2030,13 +2030,18 @@ class PyMISP:
|
|||
|
||||
# ## BEGIN Organisation ###
|
||||
|
||||
def organisations(self, scope="local", pythonify: bool = False) -> Union[Dict, List[MISPOrganisation]]:
|
||||
def organisations(self, scope="local", search: str = None, pythonify: bool = False) -> Union[Dict, List[MISPOrganisation]]:
|
||||
"""Get all the organisations
|
||||
|
||||
:param scope: scope of organizations to get
|
||||
:param search: The search to make against the list of organisations
|
||||
:param pythonify: Returns a list of PyMISP Objects instead of the plain json output. Warning: it might use a lot of RAM
|
||||
"""
|
||||
r = self._prepare_request('GET', f'organisations/index/scope:{scope}')
|
||||
url_path = f'organisations/index/scope:{scope}'
|
||||
if search:
|
||||
url_path += f"/searchall:{search}"
|
||||
|
||||
r = self._prepare_request('GET', url_path)
|
||||
organisations = self._check_json_response(r)
|
||||
if not (self.global_pythonify or pythonify) or 'errors' in organisations:
|
||||
return organisations
|
||||
|
@ -2118,12 +2123,20 @@ class PyMISP:
|
|||
|
||||
# ## BEGIN User ###
|
||||
|
||||
def users(self, pythonify: bool = False) -> Union[Dict, List[MISPUser]]:
|
||||
"""Get all the users
|
||||
def users(self, search: str = None, organisation: int = None, pythonify: bool = False) -> Union[Dict, List[MISPUser]]:
|
||||
"""Get all the users, or a filtered set of users
|
||||
|
||||
:param search: The search to make against the list of users
|
||||
:param organisation: The ID of an organisation to filter against
|
||||
:param pythonify: Returns a list of PyMISP Objects instead of the plain json output. Warning: it might use a lot of RAM
|
||||
"""
|
||||
r = self._prepare_request('GET', 'admin/users/index')
|
||||
urlpath = 'admin/users/index'
|
||||
if search:
|
||||
urlpath += f'/value:{search}'
|
||||
if organisation:
|
||||
organisation_id = get_uuid_or_id_from_abstract_misp(organisation)
|
||||
urlpath += f"/searchorg:{organisation_id}"
|
||||
r = self._prepare_request('GET', urlpath)
|
||||
users = self._check_json_response(r)
|
||||
if not (self.global_pythonify or pythonify) or 'errors' in users:
|
||||
return users
|
||||
|
|
|
@ -1771,6 +1771,33 @@ class TestComprehensive(unittest.TestCase):
|
|||
organisation = self.admin_misp_connector.update_organisation(organisation, pythonify=True)
|
||||
self.assertEqual(organisation.name, 'blah', organisation)
|
||||
|
||||
def test_org_search(self):
|
||||
orgs = self.admin_misp_connector.organisations(pythonify=True)
|
||||
org_name = 'ORGNAME'
|
||||
# Search by the org name
|
||||
orgs = self.admin_misp_connector.organisations(search=org_name, pythonify=True)
|
||||
# There should be one org returned
|
||||
self.assertTrue(len(orgs) == 1)
|
||||
|
||||
# This org should have the name ORGNAME
|
||||
self.assertEqual(orgs[0].name, org_name)
|
||||
|
||||
def test_user_search(self):
|
||||
users = self.admin_misp_connector.users(pythonify=True)
|
||||
emailAddr = users[0].email
|
||||
|
||||
users = self.admin_misp_connector.users(search=emailAddr)
|
||||
self.assertTrue(len(users) == 1)
|
||||
self.assertEqual(users[0]['User']['email'], emailAddr)
|
||||
|
||||
users = self.admin_misp_connector.users(
|
||||
search=emailAddr,
|
||||
organisation=users[0]['Organisation']['id'],
|
||||
pythonify=True
|
||||
)
|
||||
self.assertTrue(len(users) == 1)
|
||||
self.assertEqual(users[0].email, emailAddr)
|
||||
|
||||
def test_attribute(self):
|
||||
first = self.create_simple_event()
|
||||
second = self.create_simple_event()
|
||||
|
|
Loading…
Reference in New Issue