Source code for CveXplore.objects.cves

"""
cves
====
"""
import datetime

from CveXplore.common.data_source_connection import DatasourceConnection


[docs]class Cves(DatasourceConnection): """ Cves database object """
[docs] def __init__(self, **kwargs): super().__init__("cves") for each in kwargs: setattr(self, each, kwargs[each]) if hasattr(self, "cwe"): if isinstance(self.cwe, str): if self.cwe.lower() != "unknown": cwe_id = self.cwe[4:] # check if cwe_id can be cast to int try: if int(cwe_id): results = getattr( self._datasource_connection, "store_{}".format("cwe") ).find_one({"id": cwe_id}) if results is not None: self.cwe = results except ValueError: pass capecs = self._datasource_connection.store_capec.find( {"related_weakness": {"$in": [cwe_id]}} ) setattr(self, "capec", list(capecs)) via4s = self._datasource_connection.store_via4.find_one({"id": self.id}) if via4s is not None: setattr(self, "via4_references", via4s)
[docs] def iter_vuln_configurations(self): """ Generator function for iterating over vulnerable configurations for this CVE. :return: vulnerable_configuration :rtype: str """ if hasattr(self, "vulnerable_configuration"): for each in self.vulnerable_configuration: yield each
[docs] def iter_references(self): """ Generator function for iterating over references for this CVE. :return: references :rtype: str """ if hasattr(self, "references"): for each in self.references: yield each
[docs] def iter_capec(self): """ Generator function for iterating over capecs for this CVE. :return: capec :rtype: Capec """ if hasattr(self, "capec"): for each in self.capec: yield each
[docs] def to_dict(self): """ Method to convert the entire object to a dictionary :return: Data from object :rtype: dict """ full_dict = {k: v for (k, v) in self.__dict__.items() if not k.startswith("_")} for k, v in full_dict.items(): if isinstance(v, DatasourceConnection): full_dict[k] = v.to_dict() if isinstance(v, list): if len(v) > 0: if isinstance(v[0], DatasourceConnection): new_list = [] for each in v: new_list.append(each.to_dict()) full_dict[k] = new_list if isinstance(v, datetime.datetime): full_dict[k] = str(v) return full_dict
[docs] def __eq__(self, other): return self.__dict__ == other.__dict__
[docs] def __ne__(self, other): return self.__dict__ != other.__dict__
[docs] def __repr__(self): """ String representation of object """ return "<< Cves:{} >>".format(self.id)