1010import re
1111from typing import Iterable
1212
13- from fetchcode .vcs .git import fetch_via_git
14-
1513from vulnerabilities .importer import AdvisoryData
16- from vulnerabilities .importer import Importer
14+ from vulnerabilities .importer import GitImporter
1715from vulnerabilities .importer import Reference
18- from vulnerabilities .importer import logger
1916from vulnerabilities .utils import build_description
2017from vulnerabilities .utils import dedupe
2118
2219
23- class FireyeImporter (Importer ):
24- spdx_license_expression = "unknown"
25- license_url = ""
26- url = "git+https://github.com/mandiant/Vulnerability-Disclosures"
27-
28- def advisory_data (self ) -> Iterable [AdvisoryData ]:
29- forked_dir = fork_and_get_dir (self .url )
30- for file in get_files (forked_dir ):
31- yield parse_advisory_data (file )
32-
33-
34- def ForkError ():
35- pass
36-
37-
38- def fork_and_get_dir (url ) -> dict :
39- try :
40- fork_directory = fetch_via_git (url = url )
41- return fork_directory .dest_dir
42- except Exception as e :
43- logger .error (f"Can't clone url { url } " )
44- raise ForkError () from e
20+ class FireyeImporter (GitImporter ):
21+ spdx_license_expression = "CC-BY-SA-4.0 AND MIT"
22+ license_url = "https://github.com/mandiant/Vulnerability-Disclosures/blob/master/README.md"
4523
24+ def __init__ (self ):
25+ super ().__init__ (repo_url = "git+https://github.com/mandiant/Vulnerability-Disclosures" )
4626
47- def get_files (fork_directory ):
48- for root_dir in os .listdir (fork_directory ):
49- if root_dir in ("README.md" , ".git" ):
50- continue
27+ def advisory_data (self , _keep_clone = True ) -> Iterable [AdvisoryData ]:
28+ self .clone ()
29+ for root_dir in os .listdir (self .vcs_response .dest_dir ):
30+ if root_dir in ("README.md" , ".git" ):
31+ continue
5132
52- for root , _ , files in os .walk (os .path .join (fork_directory , root_dir )):
53- for file in files :
54- if file .endswith ((".md" , ".MD" )):
55- with open (os .path .join (root , file ), "r" , encoding = "ISO-8859-1" ) as f :
56- yield f .read ()
33+ for root , _ , files in os .walk (os .path .join (self . vcs_response . dest_dir , root_dir )):
34+ for file in files :
35+ if file .endswith ((".md" , ".MD" )):
36+ with open (os .path .join (root , file ), "r" , encoding = "ISO-8859-1" ) as f :
37+ yield parse_advisory_data ( f .read () )
5738
5839
5940def parse_advisory_data (raw_data ) -> AdvisoryData :
@@ -79,7 +60,7 @@ def parse_advisory_data(raw_data) -> AdvisoryData:
7960
8061 return AdvisoryData (
8162 aliases = get_aliases (database_id , cve_ref ),
82- summary = build_description ("" .join (summary ), "" .join (description )),
63+ summary = build_description (" " .join (summary ), " " .join (description )),
8364 references = get_references (references ),
8465 # date_published=disc_timeline,
8566 )
0 commit comments