@@ -215,6 +215,45 @@ def get_affected_by_vulnerabilities(self, package):
215215
216216 advisories = []
217217
218+ if package .type not in TYPES_WITH_MULTIPLE_IMPORTERS :
219+ advisories_ids = advisories_qs .only ("id" )
220+
221+ advisories_ids = list (advisories_ids [:101 ])
222+ if len (advisories_ids ) > 100 :
223+ return None
224+
225+ advisory_by_avid = {adv .avid : adv for adv in advisories_qs }
226+ avids = advisory_by_avid .keys ()
227+
228+ impacts = (
229+ package .affected_in_impacts .filter (advisory__avid__in = avids )
230+ .select_related ("advisory" )
231+ .prefetch_related ("fixed_by_packages" )
232+ )
233+
234+ impact_by_avid = {impact .advisory .avid : impact for impact in impacts }
235+
236+ result = []
237+
238+ for advisory in advisories_qs :
239+ impact = impact_by_avid .get (advisory .avid )
240+ if not impact :
241+ continue
242+
243+ result .append (
244+ {
245+ "advisory_id" : advisory .advisory_id .split ("/" )[- 1 ],
246+ "aliases" : [alias .alias for alias in advisory .aliases .all ()],
247+ "summary" : advisory .summary ,
248+ "fixed_by_packages" : [pkg .purl for pkg in impact .fixed_by_packages .all ()],
249+ "severity" : advisory .weighted_severity ,
250+ "exploitability" : advisory .exploitability ,
251+ "risk_score" : advisory .risk_score ,
252+ }
253+ )
254+
255+ return result
256+
218257 is_grouped = AdvisorySet .objects .filter (package = package , relation_type = "affecting" ).exists ()
219258
220259 if is_grouped :
@@ -239,43 +278,25 @@ def get_affected_by_vulnerabilities(self, package):
239278 advisories = merge_and_save_grouped_advisories (package , advisories_qs , "affecting" )
240279 return self .return_advisories_data (package , advisories_qs , advisories )
241280
242- advisories_ids = advisories_qs .only ("id" )
243-
244- advisories_ids = list (advisories_ids [:101 ])
245- if len (advisories_ids ) > 100 :
246- return None
247-
248- advisory_by_avid = {adv .avid : adv for adv in advisories_qs }
249- avids = advisory_by_avid .keys ()
250-
251- impacts = (
252- package .affected_in_impacts .filter (advisory__avid__in = avids )
253- .select_related ("advisory" )
254- .prefetch_related ("fixed_by_packages" )
255- )
256-
257- impact_by_avid = {impact .advisory .avid : impact for impact in impacts }
258-
259- result = []
281+ def get_fixing_vulnerabilities (self , package ):
282+ advisories_qs = AdvisoryV2 .objects .latest_fixed_by_advisories_for_purl (package .package_url )
260283
261- for advisory in advisories_qs :
262- impact = impact_by_avid .get (advisory .avid )
263- if not impact :
264- continue
284+ if not package .type in TYPES_WITH_MULTIPLE_IMPORTERS :
285+ advisories_ids = advisories_qs .only ("id" )
265286
266- result .append (
267- {
268- "advisory_id" : advisory .advisory_id .split ("/" )[- 1 ],
269- "aliases" : [alias .alias for alias in advisory .aliases .all ()],
270- "summary" : advisory .summary ,
271- "fixed_by_packages" : [pkg .purl for pkg in impact .fixed_by_packages .all ()],
272- }
273- )
287+ advisories_ids = list (advisories_ids [:101 ])
288+ if len (advisories_ids ) > 100 :
289+ return None
274290
275- return result
291+ results = []
276292
277- def get_fixing_vulnerabilities (self , package ):
278- advisories_qs = AdvisoryV2 .objects .latest_fixed_by_advisories_for_purl (package .package_url )
293+ for advisory in advisories_qs :
294+ results .append (
295+ {
296+ "advisory_id" : advisory .advisory_id .split ("/" )[- 1 ],
297+ }
298+ )
299+ return results
279300
280301 advisories = []
281302
@@ -302,22 +323,6 @@ def get_fixing_vulnerabilities(self, package):
302323 advisories = merge_and_save_grouped_advisories (package , advisories_qs , "fixing" )
303324 return self .return_fixing_advisories_data (advisories )
304325
305- advisories_ids = advisories_qs .only ("id" )
306-
307- advisories_ids = list (advisories_ids [:101 ])
308- if len (advisories_ids ) > 100 :
309- return None
310-
311- results = []
312-
313- for advisory in advisories_qs :
314- results .append (
315- {
316- "advisory_id" : advisory .advisory_id .split ("/" )[- 1 ],
317- }
318- )
319- return results
320-
321326 def return_fixing_advisories_data (self , advisories ):
322327 result = []
323328 for advisory in advisories :
0 commit comments