Skip to content

Commit 0f1f780

Browse files
committed
fix: add vulnerability details in purl details for product statuses
1 parent 6a8b3c7 commit 0f1f780

File tree

2 files changed

+16
-15
lines changed

2 files changed

+16
-15
lines changed

e2e/ds3.hurl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,11 @@ GET http://localhost:8080/api/v2/sbom/{{ubi8_sbom_id}}/advisory
1818
HTTP 200
1919

2020
[Asserts]
21-
jsonpath "$[?(@.document_id == 'CVE-2023-44487')].status[?(@.context.cpe == 'cpe:/a:redhat:enterprise_linux:8:*:crb:*')]" count == 1
22-
jsonpath "$[?(@.document_id == 'CVE-2023-44487')].status[?(@.context.cpe == 'cpe:/o:redhat:enterprise_linux:8:*:baseos:*')]" count == 1
21+
jsonpath "$[?(@.document_id == 'CVE-2024-28834')].status[?(@.context.cpe == 'cpe:/a:redhat:enterprise_linux:8:*:appstream:*')]" count == 1
22+
23+
# Check purl vulnerability date
24+
GET http://localhost:8080/api/v2/purl/3a5c8e1e-17c4-5715-b74c-f8b61c4d7d8c
25+
HTTP 200
26+
27+
[Asserts]
28+
jsonpath "$.advisories[*].status[*].vulnerability.published" not isEmpty

modules/fundamental/src/purl/model/details/purl.rs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ async fn get_product_statuses_for_purl<C: ConnectionTrait>(
135135
.join(JoinType::LeftJoin, product::Relation::ProductVersion.def())
136136
.join(JoinType::Join, product_status::Relation::Status.def())
137137
.join(JoinType::Join, product_status::Relation::Advisory.def())
138+
.join(
139+
JoinType::Join,
140+
product_status::Relation::Vulnerability.def(),
141+
)
138142
.filter(product_version::Column::SbomId.in_subquery(sbom_ids_query))
139143
.filter(Expr::col(product_status::Column::Package).eq(purl_name).or(
140144
namespace_name.map_or(Expr::value(false), |ns| {
@@ -220,17 +224,8 @@ impl PurlAdvisory {
220224
}
221225

222226
for product_status in product_statuses {
223-
let vuln = vulnerability::Model {
224-
id: product_status.product_status.vulnerability_id.clone(),
225-
title: None,
226-
reserved: None,
227-
published: None,
228-
modified: None,
229-
withdrawn: None,
230-
cwes: None,
231-
};
232227
let purl_status = PurlStatus::new(
233-
&vuln,
228+
&product_status.vulnerability,
234229
product_status.status.slug,
235230
Some(product_status.cpe.to_string()),
236231
tx,
@@ -387,7 +382,7 @@ impl FromQueryResultMultiModel for LicenseCatcher {
387382
#[derive(Debug)]
388383
pub struct ProductStatusCatcher {
389384
advisory: advisory::Model,
390-
product_status: product_status::Model,
385+
vulnerability: vulnerability::Model,
391386
cpe: trustify_entity::cpe::Model,
392387
status: status::Model,
393388
}
@@ -396,7 +391,7 @@ impl FromQueryResult for ProductStatusCatcher {
396391
fn from_query_result(res: &QueryResult, _pre: &str) -> Result<Self, DbErr> {
397392
Ok(Self {
398393
advisory: Self::from_query_result_multi_model(res, "", advisory::Entity)?,
399-
product_status: Self::from_query_result_multi_model(res, "", product_status::Entity)?,
394+
vulnerability: Self::from_query_result_multi_model(res, "", vulnerability::Entity)?,
400395
cpe: Self::from_query_result_multi_model(res, "", trustify_entity::cpe::Entity)?,
401396
status: Self::from_query_result_multi_model(res, "", status::Entity)?,
402397
})
@@ -407,7 +402,7 @@ impl FromQueryResultMultiModel for ProductStatusCatcher {
407402
fn try_into_multi_model<E: EntityTrait>(select: Select<E>) -> Result<Select<E>, DbErr> {
408403
select
409404
.try_model_columns(advisory::Entity)?
410-
.try_model_columns(product_status::Entity)?
405+
.try_model_columns(vulnerability::Entity)?
411406
.try_model_columns(trustify_entity::cpe::Entity)?
412407
.try_model_columns(status::Entity)
413408
}

0 commit comments

Comments
 (0)