Skip to content

Commit f5ef5e3

Browse files
authored
Don't throw when ordering API params are provided but DAO method has no order-able columns list (#1086)
1 parent 31a4890 commit f5ef5e3

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

src/main/java/org/dependencytrack/persistence/jdbi/ApiRequestConfig.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import org.jdbi.v3.core.config.JdbiConfig;
2222

23-
import java.util.Collections;
2423
import java.util.Optional;
2524
import java.util.Set;
2625

@@ -29,7 +28,7 @@
2928
*/
3029
public class ApiRequestConfig implements JdbiConfig<ApiRequestConfig> {
3130

32-
private Set<OrderingColumn> orderingAllowedColumns = Collections.emptySet();
31+
private Set<OrderingColumn> orderingAllowedColumns;
3332
private String orderingAlwaysBy = "";
3433
private String projectIdColumn = "\"PROJECT\".\"ID\"";
3534

@@ -39,7 +38,9 @@ public ApiRequestConfig() {
3938
}
4039

4140
private ApiRequestConfig(final ApiRequestConfig that) {
42-
this.orderingAllowedColumns = Set.copyOf(that.orderingAllowedColumns);
41+
this.orderingAllowedColumns = that.orderingAllowedColumns != null
42+
? Set.copyOf(that.orderingAllowedColumns)
43+
: that.orderingAllowedColumns;
4344
this.orderingAlwaysBy = that.orderingAlwaysBy;
4445
this.projectIdColumn = that.projectIdColumn;
4546
}

src/main/java/org/dependencytrack/persistence/jdbi/ApiRequestStatementCustomizer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ private void defineOrdering(final StatementContext ctx) {
101101
}
102102

103103
final var config = ctx.getConfig(ApiRequestConfig.class);
104+
if (config.orderingAllowedColumns() == null) {
105+
return;
106+
}
104107
if (config.orderingAllowedColumns().isEmpty()) {
105108
throw new IllegalArgumentException("Ordering is not allowed");
106109
}

src/test/java/org/dependencytrack/persistence/jdbi/ApiRequestStatementCustomizerTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.junit.Test;
3636

3737
import java.sql.PreparedStatement;
38+
import java.util.Collections;
3839
import java.util.List;
3940
import java.util.Set;
4041
import java.util.function.Consumer;
@@ -135,8 +136,33 @@ public void testWithAlpineRequestOrderingWithoutAllowedColumns() {
135136
/* orderDirection */ OrderDirection.DESCENDING
136137
);
137138

139+
useJdbiHandle(request, handle -> handle
140+
.addCustomizer(inspectStatement(ctx -> {
141+
assertThat(ctx.getRenderedSql()).isEqualToIgnoringWhitespace("""
142+
SELECT 1 AS "valueA", 2 AS "valueB" FROM "PROJECT" WHERE TRUE
143+
""");
144+
145+
assertThat(ctx.getBinding()).hasToString("{}");
146+
}))
147+
.createQuery(TEST_QUERY_TEMPLATE)
148+
.mapTo(Integer.class)
149+
.findOne());
150+
}
151+
152+
@Test
153+
public void testWithAlpineRequestOrderingEmptyAllowedColumns() {
154+
final var request = new AlpineRequest(
155+
/* principal */ null,
156+
/* pagination */ null,
157+
/* filter */ null,
158+
/* orderBy */ "value",
159+
/* orderDirection */ OrderDirection.DESCENDING
160+
);
161+
138162
assertThatExceptionOfType(IllegalArgumentException.class)
139163
.isThrownBy(() -> useJdbiHandle(request, handle -> handle
164+
.configure(ApiRequestConfig.class, config ->
165+
config.setOrderingAllowedColumns(Collections.emptySet()))
140166
.createQuery(TEST_QUERY_TEMPLATE)
141167
.mapTo(Integer.class)
142168
.findOne()))

0 commit comments

Comments
 (0)