From 8bba0e0e542c36b682ab8e325876aabff414de09 Mon Sep 17 00:00:00 2001
From: Martin Vogel <martin.vogel@sinc.de>
Date: Tue, 21 Jun 2022 22:31:09 +0200
Subject: [PATCH] #414 Use HOCON notation for app config

---
 .../dependency/ApplicationConfig.java         | 36 +++++++++++++++++++
 .../fitconnect/dependency/SdkModule.java      | 28 ++++++---------
 sdk-config/sdk.properties                     |  3 --
 sdk.conf                                      | 12 +++++++
 4 files changed, 58 insertions(+), 21 deletions(-)
 create mode 100644 dependency/src/main/java/de/fitko/fitconnect/dependency/ApplicationConfig.java
 delete mode 100644 sdk-config/sdk.properties
 create mode 100644 sdk.conf

diff --git a/dependency/src/main/java/de/fitko/fitconnect/dependency/ApplicationConfig.java b/dependency/src/main/java/de/fitko/fitconnect/dependency/ApplicationConfig.java
new file mode 100644
index 000000000..e459216d0
--- /dev/null
+++ b/dependency/src/main/java/de/fitko/fitconnect/dependency/ApplicationConfig.java
@@ -0,0 +1,36 @@
+package de.fitko.fitconnect.dependency;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.util.List;
+import java.util.Properties;
+
+@Getter
+@Setter
+@ToString
+public class ApplicationConfig {
+
+    private String httpProxyHost;
+    private String httpProxyPort;
+
+    private String authTokenUrl;
+    private List<String> apiUrls;
+
+    private String clientId;
+    private String clientSecret;
+
+
+    public Properties getAsProperties() {
+        var props = new Properties();
+        props.put("httpProxyHost", getHttpProxyHost());
+        props.put("httpProxyPort", getHttpProxyPort());
+        props.put("authTokenUrl", getAuthTokenUrl());
+        props.put("apiUrls", String.join(",",getApiUrls()));
+        props.put("clientId", clientId);
+        props.put("clientSecret", clientSecret);
+        return props;
+    }
+}
+
diff --git a/dependency/src/main/java/de/fitko/fitconnect/dependency/SdkModule.java b/dependency/src/main/java/de/fitko/fitconnect/dependency/SdkModule.java
index 114ec6739..57551e680 100644
--- a/dependency/src/main/java/de/fitko/fitconnect/dependency/SdkModule.java
+++ b/dependency/src/main/java/de/fitko/fitconnect/dependency/SdkModule.java
@@ -5,6 +5,9 @@ import com.google.inject.Provides;
 import com.google.inject.Singleton;
 import com.google.inject.name.Named;
 import com.google.inject.name.Names;
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigBeanFactory;
+import com.typesafe.config.ConfigFactory;
 import de.fitko.fitconnect.api.services.Sender;
 import de.fitko.fitconnect.api.services.Subscriber;
 import de.fitko.fitconnect.api.services.auth.OAuthService;
@@ -24,15 +27,12 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.client.RestTemplate;
 
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
+import java.io.File;
 
 public class SdkModule extends AbstractModule {
 
     private static final Logger logger = LoggerFactory.getLogger(SdkModule.class);
-    public static final String CONFIG_PATH = "sdk-config/sdk.properties";
+    public static final String CONFIG_NAME = "sdk.conf";
 
     @Override
     protected void configure() {
@@ -43,16 +43,12 @@ public class SdkModule extends AbstractModule {
         bind(CertificateValidator.class).to(KeyValidator.class);
         bind(MetadataValidator.class).to(MetadataSubmissionValidator.class);
         bind(MetadataService.class).to(MetadataUploadService.class);
+        bind(OAuthService.class).to(DefaultOAuthService.class);
 
         bind(Sender.class).to(SubmissionSender.class);
         bind(Subscriber.class).to(SubmissionSubscriber.class);
     }
 
-    @Provides
-    OAuthService provideOAuthService(@Named("authTokenUrl") String tokenUrl, RestTemplate restTemplate) {
-        return new DefaultOAuthService(restTemplate, tokenUrl);
-    }
-
     @Provides
     @Singleton
     RestTemplate provideRestTemplate(@Named("httpProxyHost") String proxyHost, @Named("httpProxyPort") int proxyPort) {
@@ -60,13 +56,9 @@ public class SdkModule extends AbstractModule {
     }
 
     private void bindConfigProperties() {
-        try (InputStream in = new FileInputStream(CONFIG_PATH)) {
-            final Properties properties = new Properties();
-            properties.load(in);
-            Names.bindProperties(binder(), properties);
-            logger.info("using sdk config: {}", properties);
-        } catch (IOException e) {
-            logger.error("could not read sdk properties", e);
-        }
+        final Config conf = ConfigFactory.load( ConfigFactory.parseFile(new File(CONFIG_NAME))).getConfig("sdk");
+        final ApplicationConfig appConfig = ConfigBeanFactory.create(conf, ApplicationConfig.class);
+        Names.bindProperties(binder(), appConfig.getAsProperties());
+        logger.info("using sdk config: {}", appConfig);
     }
 }
diff --git a/sdk-config/sdk.properties b/sdk-config/sdk.properties
deleted file mode 100644
index 10e7ac647..000000000
--- a/sdk-config/sdk.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-authTokenUrl=https://auth-testing.fit-connect.fitko.dev/token
-httpProxyHost=
-httpProxyPort=0
\ No newline at end of file
diff --git a/sdk.conf b/sdk.conf
new file mode 100644
index 000000000..50dacfca5
--- /dev/null
+++ b/sdk.conf
@@ -0,0 +1,12 @@
+# SKD application properties and global configurations
+sdk {
+
+  clientId: "781f6213-0f0f-4a79-9372-e7187ffda98b"
+  clientSecret: "PnzR8Vbmhpv_VwTkT34wponqXWK8WBm-LADlryYdV4o"
+
+  httpProxyHost: ""
+  httpProxyPort: "0"
+
+  apiUrls: ["http://test.url1", "http://test.url2", "http://test.url3"]
+  authTokenUrl: "https://auth-testing.fit-connect.fitko.dev/token"
+}
-- 
GitLab