mirror of https://github.com/MISP/PyMISP
				
				
				
			fix: Objects helpers were broken, do not overwrite describe_types
							parent
							
								
									3bb220c94b
								
							
						
					
					
						commit
						f312f87072
					
				|  | @ -134,12 +134,12 @@ class AbstractMISP(MutableMapping, MISPFileCache): | |||
|     __misp_objects_path = misp_objects_path | ||||
|     __describe_types = describe_types | ||||
| 
 | ||||
| 
 | ||||
|     def __init__(self, **kwargs): | ||||
|         """Abstract class for all the MISP objects""" | ||||
|         super(AbstractMISP, self).__init__() | ||||
|         self.__edited = True  # As we create a new object, we assume it is edited | ||||
|         self.__not_jsonable = [] | ||||
|         self.__self_defined_describe_types = None | ||||
| 
 | ||||
|         if kwargs.get('force_timestamps') is not None: | ||||
|             # Ignore the edited objects and keep the timestamps. | ||||
|  | @ -157,11 +157,13 @@ class AbstractMISP(MutableMapping, MISPFileCache): | |||
| 
 | ||||
|     @property | ||||
|     def describe_types(self): | ||||
|         if self.__self_defined_describe_types: | ||||
|             return self.__self_defined_describe_types | ||||
|         return self.__describe_types | ||||
| 
 | ||||
|     @describe_types.setter | ||||
|     def describe_types(self, describe_types): | ||||
|         self.__describe_types = describe_types | ||||
|         self.__self_defined_describe_types = describe_types | ||||
| 
 | ||||
|     @property | ||||
|     def resources_path(self): | ||||
|  |  | |||
|  | @ -140,14 +140,14 @@ class PyMISP(MISPFileCache):  # pragma: no cover | |||
|     @deprecated(reason="Use ExpandedPyMISP.describe_types_remote", version='2.4.110', action='default') | ||||
|     def get_live_describe_types(self): | ||||
|         response = self._prepare_request('GET', urljoin(self.root_url, 'attributes/describeTypes.json')) | ||||
|         describe_types = self._check_response(response) | ||||
|         if describe_types.get('error'): | ||||
|             for e in describe_types.get('error'): | ||||
|         remote_describe_types = self._check_response(response) | ||||
|         if remote_describe_types.get('error'): | ||||
|             for e in remote_describe_types.get('error'): | ||||
|                 raise PyMISPError('Failed: {}'.format(e)) | ||||
|         describe_types = describe_types['result'] | ||||
|         if not describe_types.get('sane_defaults'): | ||||
|         remote_describe_types = describe_types['result'] | ||||
|         if not remote_describe_types.get('sane_defaults'): | ||||
|             raise PyMISPError('The MISP server your are trying to reach is outdated (<2.4.52). Please use PyMISP v2.4.51.1 (pip install -I PyMISP==v2.4.51.1) and/or contact your administrator.') | ||||
|         return describe_types | ||||
|         return remote_describe_types | ||||
| 
 | ||||
|     def _prepare_request(self, request_type, url, data=None, | ||||
|                          background_callback=None, output_type='json'): | ||||
|  |  | |||
|  | @ -112,8 +112,8 @@ class ExpandedPyMISP(PyMISP): | |||
|     def describe_types_remote(self): | ||||
|         '''Returns the content of describe types from the remote instance''' | ||||
|         response = self._prepare_request('GET', 'attributes/describeTypes.json') | ||||
|         describe_types = self._check_response(response, expect_json=True) | ||||
|         return describe_types['result'] | ||||
|         remote_describe_types = self._check_response(response, expect_json=True) | ||||
|         return remote_describe_types['result'] | ||||
| 
 | ||||
|     @property | ||||
|     def recommended_pymisp_version(self): | ||||
|  |  | |||
|  | @ -25,6 +25,7 @@ except ImportError: | |||
| class ELFObject(AbstractMISPObjectGenerator): | ||||
| 
 | ||||
|     def __init__(self, parsed=None, filepath=None, pseudofile=None, standalone=True, **kwargs): | ||||
|         super(ELFObject, self).__init__('elf', standalone=standalone, **kwargs) | ||||
|         if not HAS_PYDEEP: | ||||
|             logger.warning("Please install pydeep: pip install git+https://github.com/kbandla/pydeep.git") | ||||
|         if not HAS_LIEF: | ||||
|  | @ -44,7 +45,6 @@ class ELFObject(AbstractMISPObjectGenerator): | |||
|                 self.__elf = parsed | ||||
|             else: | ||||
|                 raise InvalidMISPObject('Not a lief.ELF.Binary: {}'.format(type(parsed))) | ||||
|         super(ELFObject, self).__init__('elf', standalone=standalone, **kwargs) | ||||
|         self.generate_attributes() | ||||
| 
 | ||||
|     def generate_attributes(self): | ||||
|  |  | |||
|  | @ -13,6 +13,9 @@ logger = logging.getLogger('pymisp') | |||
| class EMailObject(AbstractMISPObjectGenerator): | ||||
| 
 | ||||
|     def __init__(self, filepath=None, pseudofile=None, attach_original_email=True, standalone=True, **kwargs): | ||||
|         # PY3 way: | ||||
|         # super().__init__('file') | ||||
|         super(EMailObject, self).__init__('email', standalone=standalone, **kwargs) | ||||
|         if filepath: | ||||
|             with open(filepath, 'rb') as f: | ||||
|                 self.__pseudofile = BytesIO(f.read()) | ||||
|  | @ -20,9 +23,6 @@ class EMailObject(AbstractMISPObjectGenerator): | |||
|             self.__pseudofile = pseudofile | ||||
|         else: | ||||
|             raise InvalidMISPObject('File buffer (BytesIO) or a path is required.') | ||||
|         # PY3 way: | ||||
|         # super().__init__('file') | ||||
|         super(EMailObject, self).__init__('email', standalone=standalone, **kwargs) | ||||
|         self.__email = message_from_bytes(self.__pseudofile.getvalue(), policy=policy.default) | ||||
|         if attach_original_email: | ||||
|             self.add_attribute('eml', value='Full email.eml', data=self.__pseudofile) | ||||
|  |  | |||
|  | @ -29,6 +29,9 @@ except ImportError: | |||
| class FileObject(AbstractMISPObjectGenerator): | ||||
| 
 | ||||
|     def __init__(self, filepath=None, pseudofile=None, filename=None, standalone=True, **kwargs): | ||||
|         # PY3 way: | ||||
|         # super().__init__('file') | ||||
|         super(FileObject, self).__init__('file', standalone=standalone, **kwargs) | ||||
|         if not HAS_PYDEEP: | ||||
|             logger.warning("Please install pydeep: pip install git+https://github.com/kbandla/pydeep.git") | ||||
|         if not HAS_MAGIC: | ||||
|  | @ -49,9 +52,6 @@ class FileObject(AbstractMISPObjectGenerator): | |||
|             self.__pseudofile = pseudofile | ||||
|         else: | ||||
|             raise InvalidMISPObject('File buffer (BytesIO) or a path is required.') | ||||
|         # PY3 way: | ||||
|         # super().__init__('file') | ||||
|         super(FileObject, self).__init__('file', standalone=standalone, **kwargs) | ||||
|         self.__data = self.__pseudofile.getvalue() | ||||
|         self.generate_attributes() | ||||
| 
 | ||||
|  |  | |||
|  | @ -26,6 +26,9 @@ except ImportError: | |||
| class MachOObject(AbstractMISPObjectGenerator): | ||||
| 
 | ||||
|     def __init__(self, parsed=None, filepath=None, pseudofile=None, standalone=True, **kwargs): | ||||
|         # Python3 way | ||||
|         # super().__init__('elf') | ||||
|         super(MachOObject, self).__init__('macho', standalone=standalone, **kwargs) | ||||
|         if not HAS_PYDEEP: | ||||
|             logger.warning("Please install pydeep: pip install git+https://github.com/kbandla/pydeep.git") | ||||
|         if not HAS_LIEF: | ||||
|  | @ -45,9 +48,6 @@ class MachOObject(AbstractMISPObjectGenerator): | |||
|                 self.__macho = parsed | ||||
|             else: | ||||
|                 raise InvalidMISPObject('Not a lief.MachO.Binary: {}'.format(type(parsed))) | ||||
|         # Python3 way | ||||
|         # super().__init__('elf') | ||||
|         super(MachOObject, self).__init__('macho', standalone=standalone, **kwargs) | ||||
|         self.generate_attributes() | ||||
| 
 | ||||
|     def generate_attributes(self): | ||||
|  |  | |||
|  | @ -26,6 +26,9 @@ except ImportError: | |||
| class PEObject(AbstractMISPObjectGenerator): | ||||
| 
 | ||||
|     def __init__(self, parsed=None, filepath=None, pseudofile=None, standalone=True, **kwargs): | ||||
|         # Python3 way | ||||
|         # super().__init__('pe') | ||||
|         super(PEObject, self).__init__('pe', standalone=standalone, **kwargs) | ||||
|         if not HAS_PYDEEP: | ||||
|             logger.warning("Please install pydeep: pip install git+https://github.com/kbandla/pydeep.git") | ||||
|         if not HAS_LIEF: | ||||
|  | @ -45,9 +48,6 @@ class PEObject(AbstractMISPObjectGenerator): | |||
|                 self.__pe = parsed | ||||
|             else: | ||||
|                 raise InvalidMISPObject('Not a lief.PE.Binary: {}'.format(type(parsed))) | ||||
|         # Python3 way | ||||
|         # super().__init__('pe') | ||||
|         super(PEObject, self).__init__('pe', standalone=standalone, **kwargs) | ||||
|         self.generate_attributes() | ||||
| 
 | ||||
|     def _is_exe(self): | ||||
|  |  | |||
|  | @ -12,6 +12,9 @@ logger = logging.getLogger('pymisp') | |||
| class SSHAuthorizedKeysObject(AbstractMISPObjectGenerator): | ||||
| 
 | ||||
|     def __init__(self, authorized_keys_path=None, authorized_keys_pseudofile=None, standalone=True, **kwargs): | ||||
|         # PY3 way: | ||||
|         # super().__init__('file') | ||||
|         super(SSHAuthorizedKeysObject, self).__init__('ssh-authorized-keys', standalone=standalone, **kwargs) | ||||
|         if authorized_keys_path: | ||||
|             with open(authorized_keys_path, 'r') as f: | ||||
|                 self.__pseudofile = StringIO(f.read()) | ||||
|  | @ -19,9 +22,6 @@ class SSHAuthorizedKeysObject(AbstractMISPObjectGenerator): | |||
|             self.__pseudofile = authorized_keys_path | ||||
|         else: | ||||
|             raise InvalidMISPObject('File buffer (StringIO) or a path is required.') | ||||
|         # PY3 way: | ||||
|         # super().__init__('file') | ||||
|         super(SSHAuthorizedKeysObject, self).__init__('ssh-authorized-keys', standalone=standalone, **kwargs) | ||||
|         self.__data = self.__pseudofile.getvalue() | ||||
|         self.generate_attributes() | ||||
| 
 | ||||
|  |  | |||
|  | @ -1577,7 +1577,7 @@ class TestComprehensive(unittest.TestCase): | |||
|         remote_types = remote.pop('types') | ||||
|         remote_categories = remote.pop('categories') | ||||
|         remote_category_type_mappings = remote.pop('category_type_mappings') | ||||
|         local = self.admin_misp_connector.describe_types_local | ||||
|         local = dict(self.admin_misp_connector.describe_types_local) | ||||
|         local_types = local.pop('types') | ||||
|         local_categories = local.pop('categories') | ||||
|         local_category_type_mappings = local.pop('category_type_mappings') | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Raphaël Vinot
						Raphaël Vinot