Skip to content

Commit de5c3c7

Browse files
committed
Add project tag filter to component identity endpoint
Signed-off-by: Anand Nawale <anandnawale1416@gmail.com>
1 parent 832da0a commit de5c3c7

3 files changed

Lines changed: 36 additions & 20 deletions

File tree

apiserver/src/main/java/org/dependencytrack/persistence/ComponentQueryManager.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import jakarta.json.JsonArray;
2929
import jakarta.json.JsonValue;
3030
import org.apache.commons.lang3.tuple.Pair;
31+
import org.dependencytrack.model.Tag;
3132
import org.dependencytrack.model.Component;
3233
import org.dependencytrack.model.ComponentIdentity;
3334
import org.dependencytrack.model.ComponentOccurrence;
@@ -325,11 +326,12 @@ public PaginatedResult getComponentByHash(String hash) {
325326
* @return a list of components
326327
*/
327328
public PaginatedResult getComponents(
328-
ComponentIdentity identity,
329-
Project project,
330-
boolean includeMetrics,
331-
boolean excludeInactiveProjects,
332-
boolean onlyLatestProjectVersions) {
329+
ComponentIdentity identity,
330+
Project project,
331+
boolean includeMetrics,
332+
boolean excludeInactiveProjects,
333+
boolean onlyLatestProjectVersions,
334+
String projectTag) {
333335
if (identity == null) {
334336
return null;
335337
}
@@ -347,6 +349,14 @@ public PaginatedResult getComponents(
347349
if (onlyLatestProjectVersions) {
348350
queryFilterElements.add(" project.isLatest == true ");
349351
}
352+
if (projectTag != null && !projectTag.isBlank()) {
353+
final Tag tag = getTagByName(projectTag.trim());
354+
355+
if (tag != null) {
356+
queryFilterElements.add(" project.tags.contains(:tag) ");
357+
queryParams.put("tag", tag);
358+
}
359+
}
350360

351361
final PaginatedResult result;
352362
if (identity.getGroup() != null || identity.getName() != null || identity.getVersion() != null) {

apiserver/src/main/java/org/dependencytrack/persistence/QueryManager.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -486,16 +486,18 @@ public PaginatedResult getComponentByHash(String hash) {
486486

487487
public PaginatedResult getComponents(
488488
ComponentIdentity identity,
489-
Project project,
490-
boolean includeMetrics,
491-
boolean excludeInactiveProjects,
492-
boolean onlyLatestProjectVersions) {
489+
Project project,
490+
boolean includeMetrics,
491+
boolean excludeInactiveProjects,
492+
boolean onlyLatestProjectVersions,
493+
String projectTag) {
493494
return getComponentQueryManager().getComponents(
494-
identity,
495-
project,
496-
includeMetrics,
497-
excludeInactiveProjects,
498-
onlyLatestProjectVersions);
495+
identity,
496+
project,
497+
includeMetrics,
498+
excludeInactiveProjects,
499+
onlyLatestProjectVersions,
500+
projectTag);
499501
}
500502

501503
public Component createComponent(Component component, boolean commitIndex) {

apiserver/src/main/java/org/dependencytrack/resources/v1/ComponentResource.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,10 @@ public Response getComponentByIdentity(@Parameter(description = "The group of th
228228
@Parameter(description = "When true, only return components from active projects")
229229
@QueryParam("excludeInactiveProjects") boolean excludeInactiveProjects,
230230
@Parameter(description = "When true, only return components from projects flagged as the latest version")
231-
@QueryParam("onlyLatestProjectVersions") boolean onlyLatestProjectVersions) {
231+
@QueryParam("onlyLatestProjectVersions") boolean onlyLatestProjectVersions,
232+
@Parameter(description = "Only return components belonging to projects with the specified tag")
233+
@QueryParam("projectTag")
234+
String projectTag) {
232235
try (QueryManager qm = new QueryManager(getAlpineRequest())) {
233236
Project project = null;
234237
if (projectUuid != null) {
@@ -254,11 +257,12 @@ public Response getComponentByIdentity(@Parameter(description = "The group of th
254257
return Response.ok().header(TOTAL_COUNT_HEADER, 0).build();
255258
} else {
256259
final PaginatedResult result = qm.getComponents(
257-
identity,
258-
project,
259-
/* includeMetrics */ true,
260-
excludeInactiveProjects,
261-
onlyLatestProjectVersions);
260+
identity,
261+
project,
262+
/* includeMetrics */ true,
263+
excludeInactiveProjects,
264+
onlyLatestProjectVersions,
265+
projectTag);
262266
return Response.ok(result.getObjects()).header(TOTAL_COUNT_HEADER, result.getTotal()).build();
263267
}
264268
}

0 commit comments

Comments
 (0)