diff --git a/api/pom.xml b/api/pom.xml index fac019ab5..0c44d462e 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -29,6 +29,10 @@ org.springframework.boot spring-boot-starter-security + + org.springframework.boot + spring-boot-starter-validation + org.springframework.boot spring-boot-actuator diff --git a/api/src/main/java/io/kafbat/ui/config/ClustersProperties.java b/api/src/main/java/io/kafbat/ui/config/ClustersProperties.java index 5931602b2..e73029c4f 100644 --- a/api/src/main/java/io/kafbat/ui/config/ClustersProperties.java +++ b/api/src/main/java/io/kafbat/ui/config/ClustersProperties.java @@ -2,6 +2,9 @@ import io.kafbat.ui.model.MetricsConfig; import jakarta.annotation.PostConstruct; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -17,13 +20,15 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.util.StringUtils; +import org.springframework.validation.annotation.Validated; @Configuration @ConfigurationProperties("kafka") @Data +@Validated public class ClustersProperties { - List clusters = new ArrayList<>(); + List<@Valid Cluster> clusters = new ArrayList<>(); String internalTopicPrefix; @@ -33,7 +38,9 @@ public class ClustersProperties { @Data public static class Cluster { + @NotBlank(message = "field name for for cluster could not be blank") String name; + @NotBlank(message = "field bootstrapServers for for cluster could not be blank") String bootstrapServers; TruststoreConfig ssl; @@ -46,9 +53,9 @@ public static class Cluster { KsqldbServerAuth ksqldbServerAuth; KeystoreConfig ksqldbServerSsl; - List kafkaConnect; + List<@Valid ConnectCluster> kafkaConnect; - List serde; + List<@Valid SerdeConfig> serde; String defaultKeySerde; String defaultValueSerde; @@ -58,7 +65,7 @@ public static class Cluster { Long pollingThrottleRate; - List masking; + List<@Valid Masking> masking; AuditProperties audit; } @@ -88,7 +95,9 @@ public static class MetricsConfigData { @Builder(toBuilder = true) @ToString(exclude = {"password", "keystorePassword"}) public static class ConnectCluster { + @NotBlank String name; + @NotBlank String address; String username; String password; @@ -122,6 +131,7 @@ public static class KeystoreConfig { @Data public static class SerdeConfig { + @NotBlank String name; String className; String filePath; @@ -139,6 +149,7 @@ public static class KsqldbServerAuth { @Data public static class Masking { + @NotNull Type type; List fields; String fieldsNamePattern; @@ -160,7 +171,7 @@ public static class AuditProperties { Integer auditTopicsPartitions; Boolean topicAuditEnabled; Boolean consoleAuditEnabled; - LogLevel level; + LogLevel level = LogLevel.ALTER_ONLY; Map auditTopicProperties; public enum LogLevel {