Source code for api_searcher.third_services.cve_circl.cve_circl_connector

"""
Moduł odpowiadający za połączenie i zbieranie danych od serwisu https://cve.circl.lu/.
"""
import requests

from .wrappers.cve_wrapper import CveWrapper


[docs]class CveCirclConnectorError(Exception): """ Zgłasza wyjątek gdy nie można połaczyć się z serwisem https://cve.circl.lu/. """
[docs] def __init__(self, message=None, errors=None): super().__init__(message) self.errors = errors
[docs]class CveCirclConnector: """Klasa będąca konektorem do serwisu trzeciego https://cve.circl.lu/."""
[docs] def __init__(self, service_details): self.__base_url = service_details.base_url self.__cve = service_details.cve self.__vendor = service_details.vendor self.__last = service_details.last self.__db_info = service_details.db_info
@property def base_url(self): return self.__base_url @property def vendor(self): return self.__vendor @property def cve(self): return self.__cve @property def db_info(self): return self.__db_info @property def last(self): return self.__last
[docs] @staticmethod def connect(url): """Metoda pomocnicza klasy odpowidająca za rzadzanie GET HTTP do podanego urlu""" response = requests.get(url) if response.ok: return response.json() else: raise CveCirclConnectorError(f"Can't get data from {url}")
[docs] def get_vendors_list(self): """Metoda zwracająca listę dostawców oprogramowania.""" try: response = CveCirclConnector.connect(self.vendor) return response['vendor'] except Exception as ex: raise CveCirclConnectorError(str(ex))
[docs] def get_vendor_products(self, vendor:str): """Metoda zwracająca listę produktów dla danego dostawcy""" try: url = f'{self.vendor}{vendor}/' return requests.get(url) except Exception as ex: raise CveCirclConnectorError(str(ex))
[docs] def get_product(self, vendor:str, product:str): """Metoda zwracająca informacje o oprogramowaniu na podstawie podanego dostawcy i nazwy produktu od użytkownika""" try: url = f'{self.vendor}{vendor}/{product}' return requests.get(url) except Exception as ex: raise CveCirclConnectorError(str(ex))
[docs] def get_db_info(self:str): """Metoda zwraca infromacje o bazie danych serwisu https://cve.circl.lu/""" try: return requests.get(self.db_info) except Exception as ex: raise CveCirclConnectorError(str(ex))
[docs] def search_by_cve_code(self, cve_code:str): """Metoda zwracająca informacje o podatności Common Vulnerabilities and Exposures CVE z serwisu https://cve.circl.lu/""" try: url = f'{self.cve}{cve_code}' response = CveCirclConnector.connect(url) cve_wrapper = CveWrapper(response) return cve_wrapper except Exception as ex: raise CveCirclConnectorError(str(ex))