Skip to content

Commit 039b466

Browse files
committed
Update detection_rules to use build_alias_to_advisory_map
Resolve merge conflict Signed-off-by: ziad hany <ziadhany2016@gmail.com>
1 parent 2513f2d commit 039b466

4 files changed

Lines changed: 9 additions & 31 deletions

File tree

vulnerabilities/improvers/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@
1616
from vulnerabilities.pipelines import enhance_with_metasploit
1717
from vulnerabilities.pipelines import flag_ghost_packages
1818
from vulnerabilities.pipelines import populate_vulnerability_summary_pipeline
19-
from vulnerabilities.pipelines.v2_improvers import archive_urls, detection_rules
19+
from vulnerabilities.pipelines.v2_improvers import archive_urls
2020
from vulnerabilities.pipelines.v2_improvers import collect_ssvc_trees
2121
from vulnerabilities.pipelines.v2_improvers import compute_advisory_todo as compute_advisory_todo_v2
2222
from vulnerabilities.pipelines.v2_improvers import compute_package_risk as compute_package_risk_v2
23+
from vulnerabilities.pipelines.v2_improvers import detection_rules
2324
from vulnerabilities.pipelines.v2_improvers import enhance_with_exploitdb as exploitdb_v2
2425
from vulnerabilities.pipelines.v2_improvers import enhance_with_github_poc
2526
from vulnerabilities.pipelines.v2_improvers import enhance_with_kev as enhance_with_kev_v2

vulnerabilities/migrations/0130_detectionrule.py renamed to vulnerabilities/migrations/0138_detectionrule.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
# Generated by Django 5.2.11 on 2026-05-15 11:10
1+
# Generated by Django 5.2.11 on 2026-06-20 15:51
22

33
from django.db import migrations, models
44

55

66
class Migration(migrations.Migration):
77

88
dependencies = [
9-
("vulnerabilities", "0129_advisorypoc"),
9+
("vulnerabilities", "0137_alter_pipelineschedule_run_interval"),
1010
]
1111

1212
operations = [

vulnerabilities/pipelines/v2_improvers/detection_rules.py

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33

44
from fetchcode.vcs import fetch_via_vcs
55

6-
from vulnerabilities.models import AdvisoryAlias
7-
from vulnerabilities.models import AdvisoryV2
86
from vulnerabilities.models import DetectionRule
97
from vulnerabilities.models import DetectionRuleTypes
108
from vulnerabilities.pipelines import VulnerableCodePipeline
9+
from vulnerabilities.utils import build_alias_to_advisory_map
1110

1211

1312
class 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

vulnerabilities/tests/pipelines/v2_improvers/test_detection_rules.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ def test_detection_rules_improver(mock_fetch_via_vcs):
3232

3333
adv1 = AdvisoryV2.objects.create(
3434
advisory_id="VCIO-123-2002",
35-
datasource_id="ds",
36-
avid="ds/VCIO-123-2002",
35+
pipeline_id="detection_rules",
36+
datasource_id="rules",
37+
avid="rules/VCIO-123-2002",
3738
unique_content_id="i3giu",
3839
url="https://test.com",
3940
date_collected=datetime.now(),

0 commit comments

Comments
 (0)