From d83804479b9321fc31e9a00c972cdcc4a9392a08 Mon Sep 17 00:00:00 2001 From: Keshav Priyadarshi Date: Tue, 18 Aug 2026 00:35:38 +0530 Subject: [PATCH] feat: support advisory todo lookup using AVID Signed-off-by: Keshav Priyadarshi --- vulnerabilities/forms.py | 13 +++- vulnerabilities/templates/advisory_todos.html | 78 +++++++++++++++++-- vulnerabilities/views.py | 5 +- 3 files changed, 87 insertions(+), 9 deletions(-) diff --git a/vulnerabilities/forms.py b/vulnerabilities/forms.py index 122f8125a..b8fc5bdd1 100644 --- a/vulnerabilities/forms.py +++ b/vulnerabilities/forms.py @@ -112,7 +112,18 @@ class AdvisoryToDoForm(forms.Form): label=False, widget=forms.TextInput( attrs={ - "placeholder": "Search ToDos...", + "placeholder": "Search aliases (CVE, GHSA, etc.)", + "class": "input", + }, + ), + ) + + avid = forms.CharField( + required=False, + label=False, + widget=forms.TextInput( + attrs={ + "placeholder": "Lookup advisory by AVID", "class": "input", }, ), diff --git a/vulnerabilities/templates/advisory_todos.html b/vulnerabilities/templates/advisory_todos.html index d77a5af77..f5ce62c2a 100644 --- a/vulnerabilities/templates/advisory_todos.html +++ b/vulnerabilities/templates/advisory_todos.html @@ -23,6 +23,11 @@ .column { word-break: break-word; } + + .select.is-solid-info::after { + border-color: white !important; + } + {% endblock %} @@ -40,21 +45,43 @@

Advisory To-Dos

-
+ +
+
+ +
+
+ +
{{ form.search }} {% if form.search.value %} - - ✕ - + + + + {% endif %} +
+ +
+ {{ form.avid }} + + {% if form.avid.value %} + + + {% endif %}
@@ -80,6 +107,7 @@

Advisory To-Dos

+
@@ -169,3 +197,39 @@

Advisory To-Dos

{% endblock %} +{% block scripts %} + + +{% endblock %} \ No newline at end of file diff --git a/vulnerabilities/views.py b/vulnerabilities/views.py index c4df4517b..16d183993 100644 --- a/vulnerabilities/views.py +++ b/vulnerabilities/views.py @@ -1119,7 +1119,10 @@ def get_queryset(self): qs = qs.filter(issue_type=issue_type) qs.prefetch_related("advisories__aliases") - if form.is_valid() and (search := form.cleaned_data.get("search")): + + if form.is_valid() and (avid := form.cleaned_data.get("avid")): + return qs.filter(advisories__avid=avid).distinct() + elif form.is_valid() and (search := form.cleaned_data.get("search")): return qs.filter(advisories__aliases__alias__icontains=search).distinct() return qs