Skip to content

Commit

Permalink
Merge pull request #3454 from ingef/fix/entity-preview-validation
Browse files Browse the repository at this point in the history
adds validation for entity preview requests
  • Loading branch information
thoniTUB authored May 29, 2024
2 parents 3b3daee + d4f6f39 commit d802618
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import com.bakdata.conquery.models.datasets.SecondaryIdDescription;
import com.bakdata.conquery.models.datasets.concepts.Connector;
import com.bakdata.conquery.models.error.ConqueryError;
import com.bakdata.conquery.models.exceptions.ValidatorHelper;
import com.bakdata.conquery.models.execution.ExecutionState;
import com.bakdata.conquery.models.execution.ManagedExecution;
import com.bakdata.conquery.models.i18n.I18n;
Expand Down Expand Up @@ -84,6 +85,7 @@
import com.google.common.collect.MutableClassToInstanceMap;
import jakarta.inject.Inject;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Validator;
import jakarta.ws.rs.BadRequestException;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.UriBuilder;
Expand All @@ -102,6 +104,8 @@ public class QueryProcessor {
private MetaStorage storage;
@Inject
private ConqueryConfig config;
@Inject
private Validator validator;



Expand Down Expand Up @@ -339,6 +343,9 @@ public FullExecutionStatus getSingleEntityExport(Subject subject, UriBuilder uri
final EntityPreviewForm form =
EntityPreviewForm.create(entity, idKind, dateRange, sources, previewConfig.getSelects(), previewConfig.getTimeStratifiedSelects(), datasetRegistry);

// Validate our own form because we provide it directly to the processor, which does not validate.
ValidatorHelper.failOnError(log, validator.validate(form));

// TODO make sure that subqueries are also system
// TODO do not persist system queries
final EntityPreviewExecution execution = (EntityPreviewExecution) postQuery(dataset, form, subject, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ public static CQConcept forSelect(Select select) {
table.setConnector(((Connector) select.getHolder()));

table.setSelects(List.of(select));
table.setConcept(cqConcept);
}
else {
cqConcept.setTables(((Concept<?>) select.getHolder())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.collect.ClassToInstanceMap;
import jakarta.validation.Valid;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -68,7 +69,9 @@ public class EntityPreviewForm extends Form implements InternalForm {
public static final String VALUES_QUERY_NAME = "VALUES";


@Valid
private final AbsoluteFormQuery infoCardQuery;
@Valid
private final TableExportQuery valuesQuery;


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public class DatasetQueryResource {

@POST
@Path("/entity")
public FullExecutionStatus getEntityData(@Auth Subject subject, EntityPreviewRequest query, @Context HttpServletRequest request) {
public FullExecutionStatus getEntityData(@Auth Subject subject, @Valid EntityPreviewRequest query, @Context HttpServletRequest request) {
subject.authorize(dataset, Ability.READ);
subject.authorize(dataset, Ability.PRESERVE_ID);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.bakdata.conquery.models.common.Range;
import com.bakdata.conquery.models.datasets.concepts.Connector;
import com.fasterxml.jackson.annotation.JsonCreator;
import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Data;

Expand All @@ -17,6 +18,7 @@ public class EntityPreviewRequest {
private final String entityId;
private final Range<LocalDate> time;
@NsIdRefCollection
@NotEmpty
private final List<Connector> sources;

//TODO uncomment, when frontend is adapted to support this
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,17 +49,21 @@
import com.bakdata.conquery.util.NonPersistentStoreFactory;
import com.google.common.collect.ImmutableList;
import io.dropwizard.core.setup.Environment;
import io.dropwizard.jersey.validation.Validators;
import jakarta.validation.Validator;
import jakarta.ws.rs.core.UriBuilder;
import lombok.SneakyThrows;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

public class StoredQueriesProcessorTest {

private static final Validator VALIDATOR = Validators.newValidator();
private static final MetaStorage STORAGE = new NonPersistentStoreFactory().createMetaStorage();

public static final ConqueryConfig CONFIG = new ConqueryConfig();
private static final DatasetRegistry<DistributedNamespace> datasetRegistry = new DatasetRegistry<>(0, CONFIG, null, null, null);
private static final QueryProcessor processor = new QueryProcessor(datasetRegistry, STORAGE, CONFIG);
private static final QueryProcessor processor = new QueryProcessor(datasetRegistry, STORAGE, CONFIG, VALIDATOR);

private static final Dataset DATASET_0 = new Dataset() {{
setName("dataset0");
Expand Down

0 comments on commit d802618

Please sign in to comment.