Skip to content

Commit a60c015

Browse files
committed
Merge remote-tracking branch 'origin/gradle_final' into gradle_ci
# Conflicts: # .github/workflows/docker_publish.yml # api/build.gradle # build.gradle # contract/build.gradle # e2e-tests/build.gradle # frontend/build.gradle # frontend/vite.config.ts # gradle/libs.versions.toml # serde-api/build.gradle
2 parents 1af1f07 + d6f51e8 commit a60c015

File tree

107 files changed

+1000
-636
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+1000
-636
lines changed

.dev/dev.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ services:
2727

2828
kafka0:
2929
image: confluentinc/cp-kafka:7.8.0
30-
user: "0:0"
3130
hostname: kafka0
3231
container_name: kafka0
3332
ports:

.github/FUNDING.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
github: [kafbat]
2+
open_collective: kafka-ui

.github/workflows/frontend_tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323

2424
- uses: pnpm/[email protected]
2525
with:
26-
version: 9.15.0
26+
version: 9.15.4
2727

2828
- name: Install node
2929
uses: actions/[email protected]

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,6 @@ out/
4646
node_modules/
4747
.gradle
4848
/e2e-tests/allure-results/
49+
out/
50+
node_modules/
51+
.gradle

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Versatile, fast and lightweight web UI for managing Apache Kafka® clusters.
1818
<a href="https://ui.docs.kafbat.io/quick-start/demo-run">Quick Start</a> •
1919
<a href="https://discord.gg/4DWzD7pGE5">Community</a>
2020
<br/>
21+
<a href="https://aws.amazon.com/marketplace/pp/prodview-6tdqqzzjwmejq">AWS Marketplace</a> •
2122
<a href="https://www.producthunt.com/products/ui-for-apache-kafka/reviews/new">ProductHunt</a>
2223
</p>
2324

api/pom.xml

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
<groupId>org.springframework.boot</groupId>
3030
<artifactId>spring-boot-starter-security</artifactId>
3131
</dependency>
32+
<dependency>
33+
<groupId>org.springframework.boot</groupId>
34+
<artifactId>spring-boot-starter-validation</artifactId>
35+
</dependency>
3236
<dependency>
3337
<groupId>org.springframework.boot</groupId>
3438
<artifactId>spring-boot-actuator</artifactId>
@@ -212,6 +216,19 @@
212216
<version>${okhttp3.mockwebserver.version}</version>
213217
<scope>test</scope>
214218
</dependency>
219+
<dependency>
220+
<groupId>org.apache.kafka</groupId>
221+
<artifactId>kafka-clients</artifactId>
222+
<version>${confluent.version}-ccs</version>
223+
<classifier>test</classifier>
224+
<scope>test</scope>
225+
</dependency>
226+
<dependency>
227+
<groupId>org.bouncycastle</groupId>
228+
<artifactId>bcpkix-jdk18on</artifactId>
229+
<version>1.80</version>
230+
<scope>test</scope>
231+
</dependency>
215232

216233
<dependency>
217234
<groupId>org.springframework.boot</groupId>
@@ -329,7 +346,7 @@
329346
<groupId>org.apache.maven.plugins</groupId>
330347
<artifactId>maven-surefire-plugin</artifactId>
331348
<configuration>
332-
<argLine>@{argLine} --illegal-access=permit</argLine>
349+
<argLine>@{argLine}</argLine>
333350
</configuration>
334351
</plugin>
335352
<plugin>

api/src/main/java/io/kafbat/ui/client/RetryingKafkaConnectClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import io.kafbat.ui.connect.model.ConnectorTopics;
1313
import io.kafbat.ui.connect.model.NewConnector;
1414
import io.kafbat.ui.connect.model.TaskStatus;
15-
import io.kafbat.ui.exception.KafkaConnectConflictReponseException;
15+
import io.kafbat.ui.exception.KafkaConnectConflictResponseException;
1616
import io.kafbat.ui.exception.ValidationException;
1717
import io.kafbat.ui.util.WebClientConfigurator;
1818
import jakarta.validation.constraints.NotNull;
@@ -48,7 +48,7 @@ private static Retry conflictCodeRetry() {
4848
.fixedDelay(MAX_RETRIES, RETRIES_DELAY)
4949
.filter(e -> e instanceof WebClientResponseException.Conflict)
5050
.onRetryExhaustedThrow((spec, signal) ->
51-
new KafkaConnectConflictReponseException(
51+
new KafkaConnectConflictResponseException(
5252
(WebClientResponseException.Conflict) signal.failure()));
5353
}
5454

api/src/main/java/io/kafbat/ui/config/ClustersProperties.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import io.kafbat.ui.model.MetricsConfig;
44
import jakarta.annotation.PostConstruct;
5+
import jakarta.validation.Valid;
6+
import jakarta.validation.constraints.NotBlank;
7+
import jakarta.validation.constraints.NotNull;
58
import java.util.ArrayList;
69
import java.util.HashMap;
710
import java.util.HashSet;
@@ -17,13 +20,15 @@
1720
import org.springframework.boot.context.properties.ConfigurationProperties;
1821
import org.springframework.context.annotation.Configuration;
1922
import org.springframework.util.StringUtils;
23+
import org.springframework.validation.annotation.Validated;
2024

2125
@Configuration
2226
@ConfigurationProperties("kafka")
2327
@Data
28+
@Validated
2429
public class ClustersProperties {
2530

26-
List<Cluster> clusters = new ArrayList<>();
31+
List<@Valid Cluster> clusters = new ArrayList<>();
2732

2833
String internalTopicPrefix;
2934

@@ -33,7 +38,9 @@ public class ClustersProperties {
3338

3439
@Data
3540
public static class Cluster {
41+
@NotBlank(message = "field name for for cluster could not be blank")
3642
String name;
43+
@NotBlank(message = "field bootstrapServers for for cluster could not be blank")
3744
String bootstrapServers;
3845

3946
TruststoreConfig ssl;
@@ -46,19 +53,21 @@ public static class Cluster {
4653
KsqldbServerAuth ksqldbServerAuth;
4754
KeystoreConfig ksqldbServerSsl;
4855

49-
List<ConnectCluster> kafkaConnect;
56+
List<@Valid ConnectCluster> kafkaConnect;
5057

51-
List<SerdeConfig> serde;
58+
List<@Valid SerdeConfig> serde;
5259
String defaultKeySerde;
5360
String defaultValueSerde;
5461

5562
MetricsConfigData metrics;
5663
Map<String, Object> properties;
64+
Map<String, Object> consumerProperties;
65+
Map<String, Object> producerProperties;
5766
boolean readOnly = false;
5867

5968
Long pollingThrottleRate;
6069

61-
List<Masking> masking;
70+
List<@Valid Masking> masking;
6271

6372
AuditProperties audit;
6473
}
@@ -88,7 +97,9 @@ public static class MetricsConfigData {
8897
@Builder(toBuilder = true)
8998
@ToString(exclude = {"password", "keystorePassword"})
9099
public static class ConnectCluster {
100+
@NotBlank
91101
String name;
102+
@NotBlank
92103
String address;
93104
String username;
94105
String password;
@@ -122,6 +133,7 @@ public static class KeystoreConfig {
122133

123134
@Data
124135
public static class SerdeConfig {
136+
@NotBlank
125137
String name;
126138
String className;
127139
String filePath;
@@ -139,6 +151,7 @@ public static class KsqldbServerAuth {
139151

140152
@Data
141153
public static class Masking {
154+
@NotNull
142155
Type type;
143156
List<String> fields;
144157
String fieldsNamePattern;
@@ -160,7 +173,7 @@ public static class AuditProperties {
160173
Integer auditTopicsPartitions;
161174
Boolean topicAuditEnabled;
162175
Boolean consoleAuditEnabled;
163-
LogLevel level;
176+
LogLevel level = LogLevel.ALTER_ONLY;
164177
Map<String, String> auditTopicProperties;
165178

166179
public enum LogLevel {
@@ -189,6 +202,8 @@ private void setMetricsDefaults() {
189202
private void flattenClusterProperties() {
190203
for (Cluster cluster : clusters) {
191204
cluster.setProperties(flattenClusterProperties(null, cluster.getProperties()));
205+
cluster.setConsumerProperties(flattenClusterProperties(null, cluster.getConsumerProperties()));
206+
cluster.setProducerProperties(flattenClusterProperties(null, cluster.getProducerProperties()));
192207
}
193208
}
194209

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package io.kafbat.ui.config;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.security.web.server.firewall.StrictServerWebExchangeFirewall;
6+
7+
@Configuration
8+
public class GeneralSecurityConfig {
9+
10+
@Bean
11+
public StrictServerWebExchangeFirewall strictServerWebExchangeFirewall() {
12+
StrictServerWebExchangeFirewall firewall = new StrictServerWebExchangeFirewall();
13+
firewall.setAllowUrlEncodedSlash(true);
14+
return firewall;
15+
}
16+
17+
}

api/src/main/java/io/kafbat/ui/config/auth/BasicAuthSecurityConfig.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package io.kafbat.ui.config.auth;
22

3-
import io.kafbat.ui.util.EmptyRedirectStrategy;
43
import io.kafbat.ui.util.StaticFileWebFilter;
5-
import java.net.URI;
64
import lombok.extern.slf4j.Slf4j;
75
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
86
import org.springframework.context.annotation.Bean;
@@ -12,8 +10,6 @@
1210
import org.springframework.security.config.web.server.SecurityWebFiltersOrder;
1311
import org.springframework.security.config.web.server.ServerHttpSecurity;
1412
import org.springframework.security.web.server.SecurityWebFilterChain;
15-
import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
16-
import org.springframework.security.web.server.authentication.logout.RedirectServerLogoutSuccessHandler;
1713
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatchers;
1814

1915
@Configuration

0 commit comments

Comments
 (0)