From 2dc3854230c30bf2e7de9a0e24315f887c88377c Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Thu, 30 Nov 2023 14:58:56 +0100
Subject: [PATCH] OZG-4606 fix configuration

---
 .../GrpcChannelConfigurator.java              | 26 ++++++++++++++
 .../OzgCloudClientAutoConfiguration.java      | 34 +++++++++++++++++--
 .../OzgCloudUserManagerProperties.java        | 24 +++++++++++++
 3 files changed, 81 insertions(+), 3 deletions(-)
 create mode 100644 ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/GrpcChannelConfigurator.java
 create mode 100644 ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudUserManagerProperties.java

diff --git a/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/GrpcChannelConfigurator.java b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/GrpcChannelConfigurator.java
new file mode 100644
index 0000000..1329b10
--- /dev/null
+++ b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/GrpcChannelConfigurator.java
@@ -0,0 +1,26 @@
+package de.ozgcloud.client.autoconfigure;
+
+import lombok.Builder;
+import lombok.Getter;
+import net.devh.boot.grpc.client.config.GrpcChannelProperties;
+import net.devh.boot.grpc.client.config.GrpcChannelsProperties;
+import net.devh.boot.grpc.client.config.NegotiationType;
+
+@Builder
+@Getter
+public class GrpcChannelConfigurator {
+
+	private String clientName;
+	private String address;
+	private NegotiationType negotiationType;
+
+	public void addToProperties(GrpcChannelsProperties properties) {
+		var clientMap = properties.getClient();
+
+		var channelProps = new GrpcChannelProperties();
+		channelProps.setAddress(address);
+		channelProps.setNegotiationType(negotiationType);
+
+		clientMap.put(clientName, channelProps);
+	}
+}
diff --git a/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java
index 72c9378..dc3249e 100644
--- a/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java
+++ b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java
@@ -1,5 +1,6 @@
 package de.ozgcloud.client.autoconfigure;
 
+import java.util.Collection;
 import java.util.Map;
 
 import org.mapstruct.factory.Mappers;
@@ -48,6 +49,7 @@ public class OzgCloudClientAutoConfiguration {
 	private static final String CLIENT_NAME_VORGANG_MANAGER = "vorgang-manager";
 	private static final String CLIENT_NAME_FILE_MANAGER = "file-manager";
 	private static final String CLIENT_NAME_COMMAND_MANAGER = "command-manager";
+	private static final String CLIENT_NAME_USER_MANAGER = "user-manager";
 
 	@Autowired
 	private OzgCloudVorgangManagerProperties vorgangManagerProperties;
@@ -55,6 +57,8 @@ public class OzgCloudClientAutoConfiguration {
 	private OzgCloudFileManagerProperties fileManagerProperties;
 	@Autowired
 	private OzgCloudCommandManagerProperties commandManagerProperties;
+	@Autowired
+	private OzgCloudUserManagerProperties userManagerProperties;
 
 	// @Bean
 	// @ConditionalOnProperty("ozgcloud.vorgang-manager.address")
@@ -71,10 +75,27 @@ public class OzgCloudClientAutoConfiguration {
 
 	@Bean
 	@ConditionalOnProperty("ozgcloud.command-manager.address")
-	GrpcChannelsProperties commandProperties() {
+	GrpcChannelConfigurator commandProperties() {
+		return GrpcChannelConfigurator.builder()
+				.clientName(CLIENT_NAME_COMMAND_MANAGER)
+				.address(commandManagerProperties.getAddress())
+				.negotiationType(commandManagerProperties.getNegotiationType())
+				.build();
+	}
+
+	GrpcChannelConfigurator userManagerProperties() {
+		return GrpcChannelConfigurator.builder()
+				.clientName(CLIENT_NAME_USER_MANAGER)
+				.address(userManagerProperties.getAddress())
+				.negotiationType(userManagerProperties.getNegotiationType())
+				.build();
+	}
+
+	@Bean
+	GrpcChannelsProperties clientProperties(Collection<GrpcChannelConfigurator> configurators) {
 		var properties = new GrpcChannelsProperties();
-		var clientMap = properties.getClient();
-		addCommandManager(clientMap);
+		configurators.stream().forEach(configurator -> configurator.addToProperties(properties));
+
 		return properties;
 	}
 
@@ -163,4 +184,11 @@ public class OzgCloudClientAutoConfiguration {
 	AlfaService alfaService() {
 		return new DummyAlfaService();
 	}
+
+	@Bean
+	@ConditionalOnProperty("ozgcloud.user-manager.address")
+	OzgCloudUserProfileService grpcOzgCloudUserProfileService(@GrpcClient("user-manager") UserProfileServiceBlockingStub grpcStub,
+			UserProfileMapper mapper) {
+		return new GrpcOzgCloudUserProfileService(grpcStub, mapper);
+	}
 }
diff --git a/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudUserManagerProperties.java b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudUserManagerProperties.java
new file mode 100644
index 0000000..4fec478
--- /dev/null
+++ b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudUserManagerProperties.java
@@ -0,0 +1,24 @@
+package de.ozgcloud.client.autoconfigure;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+import lombok.Getter;
+import lombok.Setter;
+import net.devh.boot.grpc.client.config.NegotiationType;
+
+@Getter
+@Setter
+@Configuration
+@ConfigurationProperties("ozgcloud.user-manager")
+public class OzgCloudUserManagerProperties {
+	/**
+	 * Network-Address of the User-Manager instance, starting with resolving
+	 * protocoll.
+	 */
+	private String address;
+	/**
+	 * Negotiation Type for the gRPC connection - possible Values: PLAINTEXT, TLS
+	 */
+	private NegotiationType negotiationType = NegotiationType.valueOf("TLS");
+}
-- 
GitLab