From 309df0a775a67e36443a80aced98751ce548baf7 Mon Sep 17 00:00:00 2001 From: Jonas Finnemann Jensen Date: Tue, 29 Oct 2024 22:05:07 +0100 Subject: [PATCH 1/2] Make generation of `ListSecurityAdvisoryResponse` reusable. This should allow us to use the same logic as we use in the response handler when the `ApiExporter` wants to generate responses for `/advisories`. --- app/lib/frontend/handlers/package.dart | 14 +------------- app/lib/service/security_advisories/backend.dart | 13 ++++++++++++- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/app/lib/frontend/handlers/package.dart b/app/lib/frontend/handlers/package.dart index 368d166a98..8754a39327 100644 --- a/app/lib/frontend/handlers/package.dart +++ b/app/lib/frontend/handlers/package.dart @@ -531,17 +531,5 @@ Future listAdvisoriesForPackage( throw NotFoundException.resource(packageName); } - final advisories = - await securityAdvisoryBackend.lookupSecurityAdvisories(packageName); - if (advisories.isEmpty) { - return ListAdvisoriesResponse(advisories: []); - } - final advisoriesUpdated = advisories.fold( - advisories.first.syncTime, - (previousValue, advisory) => advisory.syncTime.isAfter(previousValue) - ? advisory.syncTime - : previousValue); - return ListAdvisoriesResponse( - advisories: advisories.map((e) => e.advisory).toList(), - advisoriesUpdated: advisoriesUpdated); + return await securityAdvisoryBackend.listAdvisoriesResponse(packageName); } diff --git a/app/lib/service/security_advisories/backend.dart b/app/lib/service/security_advisories/backend.dart index 1eb3d93661..13859302e1 100644 --- a/app/lib/service/security_advisories/backend.dart +++ b/app/lib/service/security_advisories/backend.dart @@ -5,7 +5,8 @@ import 'dart:async'; import 'dart:convert'; -import 'package:_pub_shared/data/advisories_api.dart' show OSV; +import 'package:_pub_shared/data/advisories_api.dart' + show ListAdvisoriesResponse, OSV; import 'package:basics/basics.dart'; import 'package:clock/clock.dart'; import 'package:collection/collection.dart'; @@ -50,6 +51,16 @@ class SecurityAdvisoryBackend { }))!; } + /// Create a [ListAdvisoriesResponse] for [package] using advisories from + /// cache. + Future listAdvisoriesResponse(String package) async { + final advisories = await lookupSecurityAdvisories(package); + return ListAdvisoriesResponse( + advisories: advisories.map((e) => e.advisory).toList(), + advisoriesUpdated: advisories.map((a) => a.syncTime).maxOrNull, + ); + } + Future lookupById(String id) async { final key = _db.emptyKey.append(SecurityAdvisory, id: id); return _db.lookupOrNull(key); From d424deb5dbda47abd7e4039ca77984395e62fad3 Mon Sep 17 00:00:00 2001 From: Jonas Finnemann Jensen Date: Wed, 30 Oct 2024 10:33:09 +0100 Subject: [PATCH 2/2] Update app/lib/service/security_advisories/backend.dart MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Soós --- app/lib/service/security_advisories/backend.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/service/security_advisories/backend.dart b/app/lib/service/security_advisories/backend.dart index 13859302e1..2450a24935 100644 --- a/app/lib/service/security_advisories/backend.dart +++ b/app/lib/service/security_advisories/backend.dart @@ -56,7 +56,7 @@ class SecurityAdvisoryBackend { Future listAdvisoriesResponse(String package) async { final advisories = await lookupSecurityAdvisories(package); return ListAdvisoriesResponse( - advisories: advisories.map((e) => e.advisory).toList(), + advisories: advisories.map((a) => a.advisory).toList(), advisoriesUpdated: advisories.map((a) => a.syncTime).maxOrNull, ); }