3838from vulnerabilities .forms import PipelineSchedulePackageForm
3939from vulnerabilities .forms import VulnerabilitySearchForm
4040from vulnerabilities .models import AdvisorySetMember
41+ from vulnerabilities .models import AdvisoryV2
4142from vulnerabilities .models import ImpactedPackage
4243from vulnerabilities .models import PipelineRun
4344from vulnerabilities .models import PipelineSchedule
4445from vulnerabilities .pipelines .v2_importers .epss_importer_v2 import EPSSImporterPipeline
4546from vulnerabilities .severity_systems import EPSS
4647from vulnerabilities .severity_systems import SCORING_SYSTEMS
4748from vulnerabilities .utils import group_advisories_by_content
49+ from vulnerabilities .utils import merge_advisories
4850from vulnerablecode import __version__ as VULNERABLECODE_VERSION
4951from vulnerablecode .settings import env
5052
@@ -218,22 +220,30 @@ def get_context_data(self, **kwargs):
218220 context ["latest_non_vulnerable" ] = latest_non_vulnerable
219221 context ["package_search_form" ] = PackageSearchForm (self .request .GET )
220222
221- affected_by_advisories_qs = models .AdvisoryV2 .objects .latest_affecting_advisories_for_purl (
222- package .package_url
223+ affecting_advisories = AdvisoryV2 .objects .latest_affecting_advisories_for_purl (
224+ purl = package .purl
225+ ).prefetch_related (
226+ "aliases" ,
227+ "impacted_packages__affecting_packages" ,
228+ "impacted_packages__fixed_by_packages" ,
223229 )
224230
225- fixing_advisories_qs = models .AdvisoryV2 .objects .latest_fixed_by_advisories_for_purl (
226- package .package_url
231+ fixed_by_advisories = AdvisoryV2 .objects .latest_fixed_by_advisories_for_purl (
232+ purl = package .purl
233+ ).prefetch_related (
234+ "aliases" ,
235+ "impacted_packages__affecting_packages" ,
236+ "impacted_packages__fixed_by_packages" ,
227237 )
228238
229239 affected_by_advisories_url = None
230240 fixing_advisories_url = None
231241
232- affected_by_advisories_qs_ids = affected_by_advisories_qs .only ("id" )
233- fixing_advisories_qs_ids = fixing_advisories_qs .only ("id" )
242+ affected_by_advisories_qs_ids = affecting_advisories .only ("id" )
243+ fixing_advisories_qs_ids = fixed_by_advisories .only ("id" )
234244
235- affected_by_advisories = list (affected_by_advisories_qs_ids [:101 ])
236- if len (affected_by_advisories ) > 100 :
245+ affected_by_advisories = list (affected_by_advisories_qs_ids [:1001 ])
246+ if len (affected_by_advisories ) > 1001 :
237247 affected_by_advisories_url = reverse_lazy (
238248 "affected_by_advisories_v2" , kwargs = {"purl" : package .package_url }
239249 )
@@ -242,33 +252,46 @@ def get_context_data(self, **kwargs):
242252 context ["fixed_package_details" ] = {}
243253
244254 else :
255+ advisories = []
256+
245257 fixed_pkg_details = get_fixed_package_details (package )
246- affected_avid_by_hash = {}
247- affected_avid_by_hash = group_advisories_by_content (affected_by_advisories_qs )
248- affecting_advs = []
258+ groups = merge_advisories (affecting_advisories , package )
259+ for aliases , primary , _ in groups :
260+ identifier = primary .advisory_id .split ("/" )[- 1 ]
261+
262+ filtered_aliases = [alias for alias in aliases if alias .alias != identifier ]
263+
264+ advisories .append (
265+ {"aliases" : filtered_aliases , "advisory" : primary , "identifier" : identifier }
266+ )
249267
250- for hash in affected_avid_by_hash :
251- affecting_advs .append (affected_avid_by_hash [hash ])
252- context ["affected_by_advisories_v2" ] = affecting_advs
268+ context ["affected_by_advisories_v2" ] = advisories
253269 context ["fixed_package_details" ] = fixed_pkg_details
254270 context ["affected_by_advisories_v2_url" ] = None
255271
256- fixing_advisories = list (fixing_advisories_qs_ids [:101 ])
257- if len (fixing_advisories ) > 100 :
272+ fixing_advisories = list (fixing_advisories_qs_ids [:1001 ])
273+ if len (fixing_advisories ) > 1001 :
258274 fixing_advisories_url = reverse_lazy (
259275 "fixing_advisories_v2" , kwargs = {"purl" : package .package_url }
260276 )
261277 context ["fixing_advisories_v2_url" ] = fixing_advisories_url
262278 context ["fixing_advisories_v2" ] = []
263279
264280 else :
265- fixing_avid_by_hash = {}
266- fixing_avid_by_hash = group_advisories_by_content (fixing_advisories_qs )
267- fixing_advs = []
281+ advisories = []
282+
283+ fixed_pkg_details = get_fixed_package_details (package )
284+ groups = merge_advisories (fixing_advisories , package )
285+ for aliases , primary , _ in groups :
286+ identifier = primary .advisory_id .split ("/" )[- 1 ]
287+
288+ filtered_aliases = [alias for alias in aliases if alias .alias != identifier ]
289+
290+ advisories .append (
291+ {"aliases" : filtered_aliases , "advisory" : primary , "identifier" : identifier }
292+ )
268293
269- for hash in fixing_avid_by_hash :
270- fixing_advs .append (fixing_avid_by_hash [hash ])
271- context ["fixing_advisories_v2" ] = fixing_advs
294+ context ["fixing_advisories_v2" ] = advisories
272295 context ["fixing_advisories_v2_url" ] = None
273296
274297 return context
0 commit comments