From 0b5fa9323e5b9d5b39c6421f4fa86bbb00000cd0 Mon Sep 17 00:00:00 2001
From: Martin Vogel <martin.vogel@sinc.de>
Date: Tue, 14 Jun 2022 10:56:09 +0200
Subject: [PATCH] #414 Externalize tokenUrl to property file

---
 .../de/fitconnect/client/ClientFactory.java   |  5 ++++
 .../fitconnect/client/SubscriberClient.java   | 15 ++++++++++++
 .../de/fitconnect/dependency/SdkModule.java   | 24 +++++++++++++++++--
 dependency/src/main/resources/sdk.properties  |  1 +
 4 files changed, 43 insertions(+), 2 deletions(-)
 create mode 100644 client/src/main/java/de/fitconnect/client/SubscriberClient.java
 create mode 100644 dependency/src/main/resources/sdk.properties

diff --git a/client/src/main/java/de/fitconnect/client/ClientFactory.java b/client/src/main/java/de/fitconnect/client/ClientFactory.java
index 6b0f208ee..6ab8712ac 100644
--- a/client/src/main/java/de/fitconnect/client/ClientFactory.java
+++ b/client/src/main/java/de/fitconnect/client/ClientFactory.java
@@ -4,6 +4,7 @@ import com.google.inject.Guice;
 import com.google.inject.Injector;
 import de.fitconnect.dependency.SdkModule;
 import fitconnect.api.services.Sender;
+import fitconnect.api.services.Subscriber;
 
 public class ClientFactory {
 
@@ -12,4 +13,8 @@ public class ClientFactory {
     public static SenderClient senderClient(){
         return  new SenderClient(injector.getInstance(Sender.class));
     }
+
+    public static SubscriberClient subscriberClient(){
+        return new SubscriberClient(injector.getInstance(Subscriber.class));
+    }
 }
diff --git a/client/src/main/java/de/fitconnect/client/SubscriberClient.java b/client/src/main/java/de/fitconnect/client/SubscriberClient.java
new file mode 100644
index 000000000..0d262745f
--- /dev/null
+++ b/client/src/main/java/de/fitconnect/client/SubscriberClient.java
@@ -0,0 +1,15 @@
+package de.fitconnect.client;
+
+import com.google.inject.Inject;
+import fitconnect.api.services.Subscriber;
+
+public class SubscriberClient {
+
+    private final Subscriber subscriber;
+
+    @Inject
+    public SubscriberClient(final Subscriber subscriber){
+        this.subscriber = subscriber;
+    }
+
+}
diff --git a/dependency/src/main/java/de/fitconnect/dependency/SdkModule.java b/dependency/src/main/java/de/fitconnect/dependency/SdkModule.java
index d09d1a48e..583f01e7f 100644
--- a/dependency/src/main/java/de/fitconnect/dependency/SdkModule.java
+++ b/dependency/src/main/java/de/fitconnect/dependency/SdkModule.java
@@ -2,6 +2,8 @@ package de.fitconnect.dependency;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
+import com.google.inject.name.Named;
+import com.google.inject.name.Names;
 import fitconnect.api.services.Sender;
 import fitconnect.api.services.Subscriber;
 import fitconnect.api.services.auth.OAuthService;
@@ -15,10 +17,17 @@ import fitconnect.impl.crypto.JWECryptoService;
 import fitconnect.impl.validation.KeyValidator;
 import fitconnect.impl.validation.MetadataSubmissionValidator;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
 public class SdkModule extends AbstractModule {
 
     @Override
     protected void configure() {
+
+        bindConfigProperties();
+
         bind(CryptoService.class).to(JWECryptoService.class);
         bind(CertificateValidator.class).to(KeyValidator.class);
         bind(MetadataValidator.class).to(MetadataSubmissionValidator.class);
@@ -28,8 +37,19 @@ public class SdkModule extends AbstractModule {
     }
 
     @Provides
-    static OAuthService provideOAuthService() {
-        return new MonoPublisherOAuthService("https://auth-testing.fit-connect.fitko.dev/token");
+    OAuthService provideOAuthService(@Named("tokenUrl")  String tokenUrl) {
+        return new MonoPublisherOAuthService(tokenUrl);
     }
 
+    private void bindConfigProperties() {
+        try {
+            final ClassLoader classloader = Thread.currentThread().getContextClassLoader();
+            final InputStream is = classloader.getResourceAsStream("sdk.properties");
+            final Properties properties = new Properties();
+            properties.load(is);
+            Names.bindProperties(binder(), properties);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
 }
diff --git a/dependency/src/main/resources/sdk.properties b/dependency/src/main/resources/sdk.properties
new file mode 100644
index 000000000..ebcfeba90
--- /dev/null
+++ b/dependency/src/main/resources/sdk.properties
@@ -0,0 +1 @@
+tokenUrl=https://auth-testing.fit-connect.fitko.dev/token
\ No newline at end of file
-- 
GitLab