class MISPInstance(): def __init__(self, params): self.initial_user_connector = ExpandedPyMISP(params['url'], params['key'], ssl=False, debug=False) # Git pull self.initial_user_connector.update_misp() # Set the default role (id 3 on the VM is normal user) self.initial_user_connector.set_default_role(3) # Restart workers self.initial_user_connector.restart_workers() if not fast_mode: # Load submodules self.initial_user_connector.update_object_templates() self.initial_user_connector.update_galaxies() self.initial_user_connector.update_noticelists() self.initial_user_connector.update_warninglists() self.initial_user_connector.update_taxonomies() self.initial_user_connector.toggle_global_pythonify() # Create organisation organisation = MISPOrganisation() organisation.name = params['orgname'] self.test_org = self.initial_user_connector.add_organisation( organisation) print(self.test_org.name, self.test_org.uuid) # Create Site admin in new org user = MISPUser() user.email = params['email_site_admin'] user.org_id = self.test_org.id user.role_id = 1 # Site admin self.test_site_admin = self.initial_user_connector.add_user(user) self.site_admin_connector = ExpandedPyMISP( params['url'], self.test_site_admin.authkey, ssl=False, debug=False) self.site_admin_connector.toggle_global_pythonify() # Create org admin user = MISPUser() user.email = params['email_admin'] user.org_id = self.test_org.id user.role_id = 2 # Org admin self.test_org_admin = self.site_admin_connector.add_user(user) self.org_admin_connector = ExpandedPyMISP(params['url'], self.test_org_admin.authkey, ssl=False, debug=False) self.org_admin_connector.toggle_global_pythonify() # Create user user = MISPUser() user.email = params['email_user'] user.org_id = self.test_org.id self.test_usr = self.org_admin_connector.add_user(user) self.user_connector = ExpandedPyMISP(params['url'], self.test_usr.authkey, ssl=False, debug=False) self.user_connector.toggle_global_pythonify() # Setup external_baseurl self.site_admin_connector.set_server_setting( 'MISP.external_baseurl', params['external_baseurl'], force=True) # Setup baseurl self.site_admin_connector.set_server_setting('MISP.baseurl', params['url'], force=True) # Setup host org self.site_admin_connector.set_server_setting('MISP.host_org_id', self.test_org.id) self.external_base_url = params['external_baseurl'] self.sync = [] self.sync_servers = [] def __repr__(self): return f'<{self.__class__.__name__}(external={self.external_base_url})' def create_sync_user(self, organisation): sync_org = self.site_admin_connector.add_organisation(organisation) short_org_name = sync_org.name.lower().replace(' ', '-') user = MISPUser() user.email = f"sync_user@{short_org_name}.local" user.org_id = sync_org.id user.role_id = 5 # Org admin sync_user = self.site_admin_connector.add_user(user) sync_user_connector = ExpandedPyMISP( self.site_admin_connector.root_url, sync_user.authkey, ssl=False, debug=False) sync_server_config = sync_user_connector.get_sync_config( pythonify=True) self.sync.append((sync_org, sync_user, sync_server_config)) def create_sync_server(self, name, server): server = self.site_admin_connector.import_server(server) server.self_signed = True server.pull = True # Not automatic, but allows to do a pull server = self.site_admin_connector.update_server(server) r = self.site_admin_connector.test_server(server) if r['status'] != 1: raise Exception(f'Sync test failed: {r}') self.sync_servers.append(server) def cleanup(self): for org, user, _ in self.sync: self.site_admin_connector.delete_user( user) # Delete user from other org self.site_admin_connector.delete_organisation(org) # Delete sync servers for server in self.site_admin_connector.servers(): self.site_admin_connector.delete_server(server) # Delete users self.org_admin_connector.delete_user(self.test_usr.id) self.site_admin_connector.delete_user(self.test_org_admin.id) self.initial_user_connector.delete_user(self.test_site_admin.id) # Delete org self.initial_user_connector.delete_organisation(self.test_org.id) # Make sure the instance is back to a clean state if self.initial_user_connector.events(): raise Exception( f'Events still on the instance {self.external_base_url}') if self.initial_user_connector.attributes(): raise Exception( f'Attributes still on the instance {self.external_base_url}') if self.initial_user_connector.attribute_proposals(): raise Exception( f'AttributeProposals still on the instance {self.external_base_url}' ) if self.initial_user_connector.sightings(): raise Exception( f'Sightings still on the instance {self.external_base_url}') if self.initial_user_connector.servers(): raise Exception( f'Servers still on the instance {self.external_base_url}') if self.initial_user_connector.sharing_groups(): raise Exception( f'SharingGroups still on the instance {self.external_base_url}' ) if len(self.initial_user_connector.organisations()) > 1: raise Exception( f'Organisations still on the instance {self.external_base_url}' ) if len(self.initial_user_connector.users()) > 1: raise Exception( f'Users still on the instance {self.external_base_url}')
class MISPInstance(): def __init__(self, params): self.site_admin_connector = ExpandedPyMISP(params['url'], params['key'], ssl=False, debug=False) # Set the default role (id 3 on the VM is normal user) self.site_admin_connector.set_default_role(3) if not fast_mode: # Git pull self.site_admin_connector.update_misp() # Load submodules self.site_admin_connector.update_object_templates() self.site_admin_connector.update_galaxies() self.site_admin_connector.update_noticelists() self.site_admin_connector.update_warninglists() self.site_admin_connector.update_taxonomies() self.site_admin_connector.toggle_global_pythonify() # Create organisation organisation = MISPOrganisation() organisation.name = params['orgname'] self.test_org = self.site_admin_connector.add_organisation( organisation) print(self.test_org.name, self.test_org.uuid) # Create org admin user = MISPUser() user.email = params['email_admin'] user.org_id = self.test_org.id user.role_id = 2 # Org admin self.test_admin = self.site_admin_connector.add_user(user) self.org_admin_connector = ExpandedPyMISP(params['url'], self.test_admin.authkey, ssl=False, debug=False) self.org_admin_connector.toggle_global_pythonify() # Create user user = MISPUser() user.email = params['email_user'] user.org_id = self.test_org.id self.test_usr = self.org_admin_connector.add_user(user) self.usr_connector = ExpandedPyMISP(params['url'], self.test_admin.authkey, ssl=False, debug=False) self.usr_connector.toggle_global_pythonify() # Setup external_baseurl self.site_admin_connector.set_server_setting( 'MISP.external_baseurl', params['external_baseurl'], force=True) self.external_base_url = params['external_baseurl'] self.sync = [] def create_sync_user(self, organisation): sync_org = self.site_admin_connector.add_organisation(organisation) short_org_name = sync_org.name.lower().replace(' ', '-') user = MISPUser() user.email = f"sync_user@{short_org_name}.local" user.org_id = sync_org.id user.role_id = 5 # Org admin sync_user = self.site_admin_connector.add_user(user) self.sync.append((sync_org, sync_user, self.external_base_url)) def create_sync_server(self, name, remote_url, authkey, organisation): server = MISPServer() server.name = name server.self_signed = True server.url = remote_url server.authkey = authkey server.remote_org_id = organisation.id server = self.site_admin_connector.add_server(server) r = self.site_admin_connector.test_server(server) print(r) def cleanup(self): for org, user, remote_url in self.sync: self.site_admin_connector.delete_user( user) # Delete user from other org self.site_admin_connector.delete_organisation(org) # Delete sync servers for server in self.site_admin_connector.servers(): self.site_admin_connector.delete_server(server) # Delete users self.org_admin_connector.delete_user(self.test_usr.id) self.site_admin_connector.delete_user(self.test_admin.id) # Delete org self.site_admin_connector.delete_organisation(self.test_org.id)