From 519a6f4f740ba80f79178f55dd2970ef7268a436 Mon Sep 17 00:00:00 2001 From: Alexandr Shalaginov Date: Fri, 19 Jul 2024 14:01:35 +0300 Subject: [PATCH 1/4] SUPPORT-8381: add kafka auth config --- .../main/java/ervu/KafkaProducerConfig.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/backend/src/main/java/ervu/KafkaProducerConfig.java b/backend/src/main/java/ervu/KafkaProducerConfig.java index e0c26528..fa5cf5a5 100644 --- a/backend/src/main/java/ervu/KafkaProducerConfig.java +++ b/backend/src/main/java/ervu/KafkaProducerConfig.java @@ -3,7 +3,9 @@ package ervu; import java.util.HashMap; import java.util.Map; +import org.apache.kafka.clients.CommonClientConfigs; import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.common.config.SaslConfigs; import org.apache.kafka.common.serialization.StringSerializer; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; @@ -19,6 +21,16 @@ import org.springframework.kafka.core.ProducerFactory; public class KafkaProducerConfig { @Value("${kafka.send.url:#{null}}") private String kafkaUrl; + @Value("${kafka.send.security.protocol:#{null}}") + private String securityProtocol; + @Value("${kafka.send.login.module:org.apache.kafka.common.security.scram.ScramLoginModule}") + private String loginModule; + @Value("${kafka.send.username:#{null}}") + private String username; + @Value("${kafka.send.password:#{null}}") + private String password; + @Value("${kafka.sasl.mechanism:#{null}}") + private String saslMechanism; @Bean public ProducerFactory producerFactory() { @@ -34,6 +46,14 @@ public class KafkaProducerConfig { props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, this.kafkaUrl); props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); + + if (securityProtocol != null && username != null && password != null && saslMechanism != null) { + props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, securityProtocol); + props.put(SaslConfigs.SASL_JAAS_CONFIG, loginModule + " required username=\"" + + username + "\" password=\"" + password + "\";"); + props.put(SaslConfigs.SASL_MECHANISM, saslMechanism); + } + return props; } From 9a79327fea67cabd4adcc113cc0609453662cd74 Mon Sep 17 00:00:00 2001 From: Alexandr Shalaginov Date: Fri, 19 Jul 2024 14:19:49 +0300 Subject: [PATCH 2/4] SUPPORT-8381: add webdav auth --- .../fileupload/EmployeeInfoWebDavClient.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/ervu/client/fileupload/EmployeeInfoWebDavClient.java b/backend/src/main/java/ervu/client/fileupload/EmployeeInfoWebDavClient.java index 7614b710..c87adda9 100644 --- a/backend/src/main/java/ervu/client/fileupload/EmployeeInfoWebDavClient.java +++ b/backend/src/main/java/ervu/client/fileupload/EmployeeInfoWebDavClient.java @@ -1,6 +1,8 @@ package ervu.client.fileupload; import java.io.IOException; +import java.net.Authenticator; +import java.net.PasswordAuthentication; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; @@ -21,13 +23,26 @@ public class EmployeeInfoWebDavClient { @Value("${file.webdav.upload.url:http://localhost:5757}") private String url; + @Value("${file.webdav.upload.username:#{null}}") + private String username; + @Value("${file.webdav.upload.password:#{null}}") + private String password; public boolean webDavUploadFile(String filename, MultipartFile multipartFile) { try { - HttpClient httpClient = HttpClient.newBuilder().build(); + HttpClient.Builder httpClientBuilder = HttpClient.newBuilder(); + if (username != null && password != null) { + httpClientBuilder.authenticator(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password.toCharArray()); + } + }); + } HttpRequest httpRequest = HttpRequest.newBuilder().uri(URI.create(this.url + "/" + filename)) .PUT(HttpRequest.BodyPublishers.ofByteArray(multipartFile.getBytes())).build(); - HttpResponse response = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString()); + HttpResponse response = httpClientBuilder.build() + .send(httpRequest, HttpResponse.BodyHandlers.ofString()); return (response.statusCode() >= 200) && (response.statusCode() <= 202); } catch (IOException | InterruptedException e) { From 51635810a7b7d80ab99ee1f56575646e2b6ae092 Mon Sep 17 00:00:00 2001 From: Alexandr Shalaginov Date: Fri, 19 Jul 2024 15:12:26 +0300 Subject: [PATCH 3/4] SUPPORT-8381: add logging --- .../java/ervu/client/fileupload/EmployeeInfoWebDavClient.java | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/main/java/ervu/client/fileupload/EmployeeInfoWebDavClient.java b/backend/src/main/java/ervu/client/fileupload/EmployeeInfoWebDavClient.java index c87adda9..65017499 100644 --- a/backend/src/main/java/ervu/client/fileupload/EmployeeInfoWebDavClient.java +++ b/backend/src/main/java/ervu/client/fileupload/EmployeeInfoWebDavClient.java @@ -43,6 +43,7 @@ public class EmployeeInfoWebDavClient { .PUT(HttpRequest.BodyPublishers.ofByteArray(multipartFile.getBytes())).build(); HttpResponse response = httpClientBuilder.build() .send(httpRequest, HttpResponse.BodyHandlers.ofString()); + logger.debug("Response starus code: {}", response.statusCode()); return (response.statusCode() >= 200) && (response.statusCode() <= 202); } catch (IOException | InterruptedException e) { From 9f76a5b13b94cde8f229606990f2947155245ddd Mon Sep 17 00:00:00 2001 From: Alexandr Shalaginov Date: Fri, 19 Jul 2024 16:56:04 +0300 Subject: [PATCH 4/4] SUPPORT-8381: set property as required --- .../main/java/ervu/KafkaProducerConfig.java | 23 +++++++--------- .../fileupload/EmployeeInfoWebDavClient.java | 26 +++++++++---------- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/backend/src/main/java/ervu/KafkaProducerConfig.java b/backend/src/main/java/ervu/KafkaProducerConfig.java index fa5cf5a5..6b2d98c9 100644 --- a/backend/src/main/java/ervu/KafkaProducerConfig.java +++ b/backend/src/main/java/ervu/KafkaProducerConfig.java @@ -19,17 +19,17 @@ import org.springframework.kafka.core.ProducerFactory; */ @Configuration public class KafkaProducerConfig { - @Value("${kafka.send.url:#{null}}") + @Value("${kafka.send.url}") private String kafkaUrl; - @Value("${kafka.send.security.protocol:#{null}}") + @Value("${kafka.send.security.protocol}") private String securityProtocol; @Value("${kafka.send.login.module:org.apache.kafka.common.security.scram.ScramLoginModule}") private String loginModule; - @Value("${kafka.send.username:#{null}}") + @Value("${kafka.send.username}") private String username; - @Value("${kafka.send.password:#{null}}") + @Value("${kafka.send.password}") private String password; - @Value("${kafka.sasl.mechanism:#{null}}") + @Value("${kafka.sasl.mechanism}") private String saslMechanism; @Bean @@ -39,20 +39,15 @@ public class KafkaProducerConfig { @Bean public Map producerConfigs() { - if (this.kafkaUrl == null) { - throw new RuntimeException("Property kafka.send.url is null"); - } Map props = new HashMap<>(); props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, this.kafkaUrl); props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); - if (securityProtocol != null && username != null && password != null && saslMechanism != null) { - props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, securityProtocol); - props.put(SaslConfigs.SASL_JAAS_CONFIG, loginModule + " required username=\"" - + username + "\" password=\"" + password + "\";"); - props.put(SaslConfigs.SASL_MECHANISM, saslMechanism); - } + props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, securityProtocol); + props.put(SaslConfigs.SASL_JAAS_CONFIG, loginModule + " required username=\"" + + username + "\" password=\"" + password + "\";"); + props.put(SaslConfigs.SASL_MECHANISM, saslMechanism); return props; } diff --git a/backend/src/main/java/ervu/client/fileupload/EmployeeInfoWebDavClient.java b/backend/src/main/java/ervu/client/fileupload/EmployeeInfoWebDavClient.java index 65017499..6b38e20f 100644 --- a/backend/src/main/java/ervu/client/fileupload/EmployeeInfoWebDavClient.java +++ b/backend/src/main/java/ervu/client/fileupload/EmployeeInfoWebDavClient.java @@ -23,26 +23,26 @@ public class EmployeeInfoWebDavClient { @Value("${file.webdav.upload.url:http://localhost:5757}") private String url; - @Value("${file.webdav.upload.username:#{null}}") + @Value("${file.webdav.upload.username}") private String username; - @Value("${file.webdav.upload.password:#{null}}") + @Value("${file.webdav.upload.password}") private String password; public boolean webDavUploadFile(String filename, MultipartFile multipartFile) { try { - HttpClient.Builder httpClientBuilder = HttpClient.newBuilder(); - if (username != null && password != null) { - httpClientBuilder.authenticator(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password.toCharArray()); - } - }); - } + HttpClient httpClient = HttpClient.newBuilder() + .authenticator(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password.toCharArray()); + } + }) + .build(); + HttpRequest httpRequest = HttpRequest.newBuilder().uri(URI.create(this.url + "/" + filename)) .PUT(HttpRequest.BodyPublishers.ofByteArray(multipartFile.getBytes())).build(); - HttpResponse response = httpClientBuilder.build() - .send(httpRequest, HttpResponse.BodyHandlers.ofString()); + + HttpResponse response = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString()); logger.debug("Response starus code: {}", response.statusCode()); return (response.statusCode() >= 200) && (response.statusCode() <= 202); }