33
44from fetchcode .vcs import fetch_via_vcs
55
6- from vulnerabilities .models import AdvisoryAlias
7- from vulnerabilities .models import AdvisoryV2
86from vulnerabilities .models import DetectionRule
97from vulnerabilities .models import DetectionRuleTypes
108from vulnerabilities .pipelines import VulnerableCodePipeline
9+ from vulnerabilities .utils import build_alias_to_advisory_map
1110
1211
1312class DetectionRulesPipeline (VulnerableCodePipeline ):
@@ -56,7 +55,7 @@ def collect_detection_rules(self):
5655 source_url = json_data .get ("source_url" )
5756 for rule in json_data .get ("rules" , []):
5857 vulns_id = rule .get ("vulnerabilities" , [])
59- advisories = get_related_advisories (vulns_id )
58+ advisories = build_alias_to_advisory_map (vulns_id )
6059
6160 raw_text = rule .get ("rule_text" )
6261 rule_metadata = rule .get ("rule_metadata" )
@@ -80,26 +79,3 @@ def clean_downloads(self):
8079 def on_failure (self ):
8180 """Ensure cleanup is always performed on failure."""
8281 self .clean_downloads ()
83-
84-
85- def get_related_advisories (vulnerability_ids , logger = print ):
86- """
87- Fetches related advisories for a list of vulnerability IDs.
88- """
89- advisories = set ()
90-
91- for vulnerability_id in vulnerability_ids :
92- try :
93- alias = AdvisoryAlias .objects .get (alias = vulnerability_id )
94- advs = alias .advisories .all ()
95- advisories .update (advs )
96-
97- except AdvisoryAlias .DoesNotExist :
98- advs = AdvisoryV2 .objects .filter (advisory_id = vulnerability_id ).latest_per_avid ()
99-
100- if advs :
101- advisories .update (advs )
102- else :
103- logger (f"No advisory found for ID/alias: { vulnerability_id } " )
104-
105- return advisories
0 commit comments