diff --git a/cve_bin_tool/data_sources/nvd_source.py b/cve_bin_tool/data_sources/nvd_source.py index e6d6769caa..f5bce4e2ae 100644 --- a/cve_bin_tool/data_sources/nvd_source.py +++ b/cve_bin_tool/data_sources/nvd_source.py @@ -413,15 +413,24 @@ async def fetch_cves(self): self.nist_fetch_using_api(), ) else: - nvd_metadata = await asyncio.create_task( - self.nist_scrape(self.session), - ) + try: + nvd_metadata = await asyncio.create_task( + self.nist_scrape(self.session), + ) + + tasks = [ + self.cache_update(self.session, url, meta["sha256"]) + for url, meta in nvd_metadata.items() + if meta is not None + ] + except Exception as e: + self.nvd_type = "api2" + self.feed = self.FEED_MIRROR + self.LOGGER.info("NVD appears to be down, falling back to mirror") + self.all_cve_entries = await asyncio.create_task( + self.nist_fetch_using_api(), + ) - tasks = [ - self.cache_update(self.session, url, meta["sha256"]) - for url, meta in nvd_metadata.items() - if meta is not None - ] total_tasks = len(tasks) @@ -464,14 +473,17 @@ async def nist_fetch_using_api(self) -> list: api_key=self.nvd_api_key, api_version=api_version, ) - if self.incremental_update: - await nvd_api.get_nvd_params( - time_of_last_update=datetime.datetime.fromtimestamp( - db.get_db_update_date() + try: + if self.incremental_update: + await nvd_api.get_nvd_params( + time_of_last_update=datetime.datetime.fromtimestamp( + db.get_db_update_date() + ) ) - ) - else: - await nvd_api.get_nvd_params() + else: + await nvd_api.get_nvd_params() + except Exception as e: + self.LOGGER.debug(f"{e}") await nvd_api.get() await nvd_api.session.close() nvd_api.session = None