Skip to content

Commit

Permalink
fix: enable filtering/sorting on qualified purl json fields
Browse files Browse the repository at this point in the history
Fixes trustification#888
Fixes trustification#951
Fixes trustification#972

Signed-off-by: Jim Crossley <[email protected]>
  • Loading branch information
jcrossley3 committed Dec 5, 2024
1 parent bf0f157 commit 6a34c9a
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 29 deletions.
2 changes: 1 addition & 1 deletion common/auth/src/authorizer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ impl Authorizer {
permission: Permission,
) -> Result<(), AuthorizationError> {
if self.config.is_none() {
log::warn!("Authorization disabled, all permissions granted");
log::debug!("Authorization disabled, all permissions granted");
return Ok(());
}

Expand Down
21 changes: 17 additions & 4 deletions modules/fundamental/src/purl/endpoints/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ use trustify_common::model::PaginatedResults;
use trustify_common::purl::Purl;
use trustify_module_ingestor::graph::Graph;
use trustify_test_context::{call::CallService, TrustifyContext};
use urlencoding::encode;
use uuid::Uuid;

async fn setup(db: &Database, graph: &Graph) -> Result<(), anyhow::Error> {
let log4j = graph
Expand Down Expand Up @@ -290,12 +292,23 @@ async fn qualified_packages_filtering(ctx: &TrustifyContext) -> Result<(), anyho
setup(&ctx.db, &ctx.graph).await?;
let app = caller(ctx).await?;

let uri = "/api/v1/purl?q=type%3Dmaven";
let request = TestRequest::get().uri(uri).to_request();
let uri = format!("/api/v1/purl?q={}", encode("ty=maven"));
let request = TestRequest::get().uri(&uri).to_request();
let response: PaginatedResults<PurlSummary> = app.call_and_read_body_json(request).await;

assert_eq!(3, response.items.len());

ctx.ingestor
.graph()
.ingest_qualified_package(
&Purl::from_str("pkg:rpm/fedora/[email protected]?arch=i386")?,
&ctx.db,
)
.await?;
let uri = format!("/api/v1/purl?q={}", encode("ty=rpm&arch=i386"));
let request = TestRequest::get().uri(&uri).to_request();
let response: PaginatedResults<PurlSummary> = app.call_and_read_body_json(request).await;
assert_eq!(1, response.items.len());

Ok(())
}

Expand Down Expand Up @@ -325,7 +338,7 @@ async fn package_with_status(ctx: &TrustifyContext) -> Result<(), anyhow::Error>
let request = TestRequest::get().uri(&uri).to_request();
let response: Value = app.call_and_read_body_json(request).await;

log::debug!("{response:#?}");
assert_eq!(uuid, Uuid::parse_str(response["uuid"].as_str().unwrap())?);

Ok(())
}
31 changes: 8 additions & 23 deletions modules/fundamental/src/purl/service/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use tracing::instrument;
use trustify_common::{
db::{
limiter::LimiterTrait,
query::{Filtering, Query},
query::{Filtering, IntoColumns, Query},
},
model::{Paginated, PaginatedResults},
purl::{Purl, PurlErr},
Expand Down Expand Up @@ -309,29 +309,14 @@ impl PurlService {
paginated: Paginated,
connection: &C,
) -> Result<PaginatedResults<PurlSummary>, Error> {
// TODO: this would be the condition used to select from jsonb name key
let _unused_condition = Expr::cust_with_exprs(
"$1->>'name' ~~* $2",
[
qualified_purl::Column::Purl.into_simple_expr(),
SimpleExpr::Value(format!("%{}%", query.q).into()),
],
);

// TODO: we need to figure out how we bring in querying keys of jsonb column in query.rs
let limiter = qualified_purl::Entity::find()
.left_join(versioned_purl::Entity)
.filter(
Condition::any().add(
versioned_purl::Column::BasePurlId.in_subquery(
base_purl::Entity::find()
.filtering(query)?
.select_only()
.column(base_purl::Column::Id)
.into_query(),
),
),
)
.filtering_with(
query,
qualified_purl::Entity
.columns()
.json_keys("purl", &["ty", "namespace", "name", "version"])
.json_keys("qualifiers", &["arch", "type", "repository_url"]),
)?
.limiting(connection, paginated.offset, paginated.limit);

let total = limiter.total().await?;
Expand Down
4 changes: 3 additions & 1 deletion modules/fundamental/src/purl/service/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -626,10 +626,12 @@ async fn statuses(ctx: &TrustifyContext) -> Result<(), anyhow::Error> {

let uuid = results.items[0].head.uuid;

let _results = service
let results = service
.purl_by_uuid(&uuid, Default::default(), &ctx.db)
.await?;

assert_eq!(uuid, results.unwrap().head.uuid);

Ok(())
}

Expand Down

0 comments on commit 6a34c9a

Please sign in to comment.