From cb8fda0c03e6cf1ef1ea63c73dc47693a2a345e0 Mon Sep 17 00:00:00 2001
From: Martin Vogel <martin.vogel@sinc.de>
Date: Thu, 16 Jun 2022 10:26:01 +0200
Subject: [PATCH] #414 Add SET

---
 .../model/event/SecurityEventToken.java       |  4 +++
 .../fitko/fitconnect/api/services/Sender.java |  7 +++++-
 .../fitconnect/api/services/Subscriber.java   | 20 +++++++++++++++
 .../java/de/fitko/fitconnect/TestRunner.java  |  6 +++--
 .../fitconnect/cmd/CommandLineRunner.java     | 25 ++++++++++---------
 .../fitconnect/dependency/SdkModule.java      |  4 +--
 .../fitconnect/impl/SubmissionSubscriber.java | 12 +++++++++
 .../MetadataSubmissionValidator.java          |  1 +
 8 files changed, 62 insertions(+), 17 deletions(-)
 create mode 100644 api/src/main/java/de/fitko/fitconnect/api/domain/model/event/SecurityEventToken.java

diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/event/SecurityEventToken.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/event/SecurityEventToken.java
new file mode 100644
index 000000000..9104fd7c5
--- /dev/null
+++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/event/SecurityEventToken.java
@@ -0,0 +1,4 @@
+package de.fitko.fitconnect.api.domain.model.event;
+
+public class SecurityEventToken {
+}
diff --git a/api/src/main/java/de/fitko/fitconnect/api/services/Sender.java b/api/src/main/java/de/fitko/fitconnect/api/services/Sender.java
index 3300ea0fe..8caa21758 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/services/Sender.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/services/Sender.java
@@ -58,7 +58,7 @@ public interface Sender {
     Optional<OAuthToken> retrieveOAuthToken(final String clientId, final String clientSecret, final String... scope);
 
     /**
-     * Creates a {@link Metadata} object that contains {@link Data}, {@link Attachment} and their hashes so a subscriber
+     * Creates and uploads a {@link Metadata} object that contains {@link Data}, {@link Attachment} and their hashes so a subscriber
      * can verify the integrity.
      *
      * @param data {@link Data} object of the json or xml payload
@@ -67,5 +67,10 @@ public interface Sender {
      */
     Optional<Metadata> createMetadata(final Data data, final List<Attachment> attachments);
 
+    /**
+     *
+     * @param submission
+     * @return
+     */
     Submission sendSubmission(Submission submission);
 }
diff --git a/api/src/main/java/de/fitko/fitconnect/api/services/Subscriber.java b/api/src/main/java/de/fitko/fitconnect/api/services/Subscriber.java
index 2b966f8c5..2f8051ee8 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/services/Subscriber.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/services/Subscriber.java
@@ -5,6 +5,8 @@ import de.fitko.fitconnect.api.domain.auth.OAuthToken;
 import de.fitko.fitconnect.api.domain.model.metadata.Metadata;
 import de.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment;
 import de.fitko.fitconnect.api.domain.model.metadata.data.Data;
+import de.fitko.fitconnect.api.domain.model.event.SecurityEventToken;
+import de.fitko.fitconnect.api.domain.model.submission.Submission;
 import de.fitko.fitconnect.api.domain.validation.ValidationResult;
 
 import java.util.Optional;
@@ -61,4 +63,22 @@ public interface Subscriber {
      * @return a {@link ValidationResult}, that contains errors if the hash-values of the transmitted data are not valid
      */
     ValidationResult validateMetadataHashValues(final Metadata metadata);
+
+    /**
+     *
+     * @param submissionId
+     * @param attachmentId
+     * @return
+     */
+    Optional<Submission> getSubmission(String submissionId, String attachmentId);
+
+    /**
+     *
+     * @param data
+     * @param attachment
+     * @param privateKey
+     * @return
+     */
+    Optional<SecurityEventToken> createSecurityEventToken(Data data, Attachment attachment, RSAKey privateKey);
+
 }
diff --git a/client/src/main/java/de/fitko/fitconnect/TestRunner.java b/client/src/main/java/de/fitko/fitconnect/TestRunner.java
index afdc96bbd..830e20ddd 100644
--- a/client/src/main/java/de/fitko/fitconnect/TestRunner.java
+++ b/client/src/main/java/de/fitko/fitconnect/TestRunner.java
@@ -1,10 +1,10 @@
 package de.fitko.fitconnect;
 
-import de.fitko.fitconnect.client.SdkClientFactory;
-import de.fitko.fitconnect.client.SenderClient;
 import de.fitko.fitconnect.api.domain.model.metadata.Metadata;
 import de.fitko.fitconnect.api.domain.model.metadata.data.Data;
 import de.fitko.fitconnect.api.domain.model.submission.Submission;
+import de.fitko.fitconnect.client.SdkClientFactory;
+import de.fitko.fitconnect.client.SenderClient;
 
 import java.util.Collections;
 
@@ -23,5 +23,7 @@ public class TestRunner {
                 .createSubmission(Submission.builder().build())
                 .uploadAttachments(Collections.emptyList())
                 .sendSubmission(Metadata.builder().build(), Data.builder().build());
+
     }
+
 }
diff --git a/client/src/main/java/de/fitko/fitconnect/cmd/CommandLineRunner.java b/client/src/main/java/de/fitko/fitconnect/cmd/CommandLineRunner.java
index 44d62b447..43c473542 100644
--- a/client/src/main/java/de/fitko/fitconnect/cmd/CommandLineRunner.java
+++ b/client/src/main/java/de/fitko/fitconnect/cmd/CommandLineRunner.java
@@ -1,29 +1,30 @@
 package de.fitko.fitconnect.cmd;
 
 import com.beust.jcommander.JCommander;
-import de.fitko.fitconnect.api.domain.model.metadata.Metadata;
-import de.fitko.fitconnect.api.domain.model.metadata.data.Data;
-import de.fitko.fitconnect.api.domain.model.submission.Submission;
 import de.fitko.fitconnect.client.SdkClientFactory;
 import de.fitko.fitconnect.client.SenderClient;
 
-import java.util.Collections;
-
 public class CommandLineRunner {
 
     public static void main(String[] args) {
 
+        final CommandLineArgs cmdArgs = new CommandLineArgs();
+        JCommander build = JCommander.newBuilder()
+                .addObject(cmdArgs)
+                .build();
+
+        build.parse(args);
+
         final SenderClient senderClient = SdkClientFactory.senderClient();
 
-        var clientId = "781f6213-0f0f-4a79-9372-e7187ffda98b";
-        var secret = "PnzR8Vbmhpv_VwTkT34wponqXWK8WBm-LADlryYdV4o";
+        var clientId = cmdArgs.clientId;
+        var secret = cmdArgs.secret;
 
         // sample high -level- api calls to send a submission
-        senderClient.authenticate(clientId,secret)
-                .printToken()
-                .createSubmission(Submission.builder().build())
-                .uploadAttachments(Collections.emptyList())
-                .sendSubmission(Metadata.builder().build(), Data.builder().build());
+        senderClient
+                .authenticate(clientId,secret)
+                .printToken();
+
 
     }
 }
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 d4a2e265a..114ec6739 100644
--- a/dependency/src/main/java/de/fitko/fitconnect/dependency/SdkModule.java
+++ b/dependency/src/main/java/de/fitko/fitconnect/dependency/SdkModule.java
@@ -17,7 +17,7 @@ import de.fitko.fitconnect.impl.SubmissionSubscriber;
 import de.fitko.fitconnect.impl.auth.DefaultOAuthService;
 import de.fitko.fitconnect.impl.crypto.JWECryptoService;
 import de.fitko.fitconnect.impl.http.ProxyConfig;
-import de.fitko.fitconnect.impl.metadata.MetadataGenerationService;
+import de.fitko.fitconnect.impl.metadata.MetadataUploadService;
 import de.fitko.fitconnect.impl.validation.KeyValidator;
 import de.fitko.fitconnect.impl.validation.MetadataSubmissionValidator;
 import org.slf4j.Logger;
@@ -42,7 +42,7 @@ public class SdkModule extends AbstractModule {
         bind(CryptoService.class).to(JWECryptoService.class);
         bind(CertificateValidator.class).to(KeyValidator.class);
         bind(MetadataValidator.class).to(MetadataSubmissionValidator.class);
-        bind(MetadataService.class).to(MetadataGenerationService.class);
+        bind(MetadataService.class).to(MetadataUploadService.class);
 
         bind(Sender.class).to(SubmissionSender.class);
         bind(Subscriber.class).to(SubmissionSubscriber.class);
diff --git a/impl/src/main/java/de/fitko/fitconnect/impl/SubmissionSubscriber.java b/impl/src/main/java/de/fitko/fitconnect/impl/SubmissionSubscriber.java
index f3969aaff..654082bd4 100644
--- a/impl/src/main/java/de/fitko/fitconnect/impl/SubmissionSubscriber.java
+++ b/impl/src/main/java/de/fitko/fitconnect/impl/SubmissionSubscriber.java
@@ -6,6 +6,8 @@ import de.fitko.fitconnect.api.domain.auth.OAuthToken;
 import de.fitko.fitconnect.api.domain.model.metadata.Metadata;
 import de.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment;
 import de.fitko.fitconnect.api.domain.model.metadata.data.Data;
+import de.fitko.fitconnect.api.domain.model.event.SecurityEventToken;
+import de.fitko.fitconnect.api.domain.model.submission.Submission;
 import de.fitko.fitconnect.api.domain.validation.ValidationResult;
 import de.fitko.fitconnect.api.exceptions.AuthenticationException;
 import de.fitko.fitconnect.api.services.Subscriber;
@@ -64,4 +66,14 @@ public class SubmissionSubscriber implements Subscriber {
     public ValidationResult validateMetadataHashValues(Metadata metadata) {
         return metadataValidator.validateMetadataHashValues(metadata);
     }
+
+    @Override
+    public Optional<Submission> getSubmission(String submissionId, String attachmentId) {
+        throw new UnsupportedOperationException("not yet implemented");
+    }
+
+    @Override
+    public Optional<SecurityEventToken> createSecurityEventToken(Data data, Attachment attachment, RSAKey privateKey) {
+        throw new UnsupportedOperationException("not yet implemented");
+    }
 }
diff --git a/impl/src/main/java/de/fitko/fitconnect/impl/validation/MetadataSubmissionValidator.java b/impl/src/main/java/de/fitko/fitconnect/impl/validation/MetadataSubmissionValidator.java
index d80fa02a6..f4bfcaa5b 100644
--- a/impl/src/main/java/de/fitko/fitconnect/impl/validation/MetadataSubmissionValidator.java
+++ b/impl/src/main/java/de/fitko/fitconnect/impl/validation/MetadataSubmissionValidator.java
@@ -35,6 +35,7 @@ public class MetadataSubmissionValidator implements MetadataValidator {
     public ValidationResult validateMetadataHashValues(Metadata metadata) {
         return ValidationResult.ok();
     }
+
     private JSONObject toJsonObject(Metadata metadata) throws JsonProcessingException {
         return new JSONObject(new JSONTokener(mapper.writeValueAsString(metadata)));
     }
-- 
GitLab