From b639c88578d2bbd9395378c9e5951eddc82ea17a Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Tue, 13 Aug 2024 15:17:28 +0200
Subject: [PATCH] =?UTF-8?q?WIP:=20OZG-6275=20Auf=20NachrichtId=20umgestell?=
 =?UTF-8?q?t,=20upload=20von=20Antwortanh=C3=A4ngen=20deaktiviert?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/main/docker/docker-compose.yaml           |  2 +-
 .../transfer/ElsterTransferRemoteService.java | 32 +++++++++++--------
 .../muk/MukPostfachRemoteServiceITCase.java   |  2 ++
 .../muk/PostfachNachrichtTestFactory.java     |  4 +--
 .../transfer/AntwortDetailsTestFactory.java   |  2 +-
 .../ElsterTransferRemoteServiceTest.java      | 19 +++++++----
 .../MukPostfachMessageMapperTest.java         |  4 +--
 7 files changed, 39 insertions(+), 26 deletions(-)

diff --git a/src/main/docker/docker-compose.yaml b/src/main/docker/docker-compose.yaml
index 2e816b3..48b6f85 100644
--- a/src/main/docker/docker-compose.yaml
+++ b/src/main/docker/docker-compose.yaml
@@ -13,4 +13,4 @@ services:
       ETR_NETZ: "e4k"
       ETR_EINSTELLUNGEN_ELSTERZERTIFIKAT_PASSWORT: "-siehe-keepass-"
       ETR_EINSTELLUNGEN_ELSTERZERTIFIKAT_DATEIPFAD: "/opt/ELSTER-Transfer/elster-org-cert.pfx"
-      ETR_ACCESS_ALLOWFROM: '\d+.\d+\.\d+\.\d+;\d*|::1;\d*|0:0:0:0:0:0:0:1;\d*'
+      ETR_ACCESS_ALLOWFROM: '.*'
diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteService.java
index 354bc43..844d00d 100644
--- a/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteService.java
+++ b/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteService.java
@@ -37,6 +37,7 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Stream;
 
+import org.bson.types.ObjectId;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Service;
 
@@ -181,26 +182,32 @@ public class ElsterTransferRemoteService {
 			nachrichtBuilder
 			  .referencedNachricht(nachrichtId.toHexString())
 			  .replyOption(PostfachNachricht.ReplyOption.POSSIBLE);
-
-			if (Objects.nonNull(antwortDetails.getAnhaenge())) {
-				nachrichtBuilder.attachments(antwortDetails.getAnhaenge().stream()
-				  .filter(Objects::nonNull)
-				  .map(downloadAnhangDetails -> this.downloadAnhang(downloadAnhangDetails, nachrichtId.toHexString()))
-				  .filter(Optional::isPresent)
-				  .map(Optional::get)
-				  .toList());
-			}
+			// TODO update to new API as soon the new api is available.
+			//addAttachments(nachrichtBuilder, antwortDetails, nachrichtId);
 		}
 
 		return nachrichtBuilder.build();
 	}
 
-	Optional<String> downloadAnhang(DownloadAnhangDetails downloadAnhangDetails, String nachrichtId) {
-		Optional<String> fileIdOptional = Optional.empty();
+	private void addAttachments(final PostfachNachricht.PostfachNachrichtBuilder nachrichtBuilder, final AntwortDetails antwortDetails, final ObjectId nachrichtId) {
+		if (Objects.nonNull(antwortDetails.getAnhaenge())) {
+			nachrichtBuilder.attachments(antwortDetails.getAnhaenge().stream()
+			  .filter(Objects::nonNull)
+			  .map(downloadAnhangDetails -> saveAnhang(downloadAnhang(downloadAnhangDetails), downloadAnhangDetails, nachrichtId.toHexString()))
+			  .filter(Optional::isPresent)
+			  .map(Optional::get)
+			  .toList());
+		}
+	}
+
+	byte[] downloadAnhang(DownloadAnhangDetails downloadAnhangDetails) {
 		var url = postfachProperties.getServer() + downloadAnhangDetails.getDownloadUrl();
 
-		var data = (byte[]) restClient.getForObject(url, byte[].class);
+		return restClient.getForObject(url, byte[].class);
+	}
 
+	Optional<String> saveAnhang(byte[] data, DownloadAnhangDetails downloadAnhangDetails, String nachrichtId) {
+		Optional<String> fileIdOptional = Optional.empty();
 		if (Objects.nonNull(data)) {
 			try (var dataIn = new ByteArrayInputStream(data)) {
 				fileIdOptional = storeToOzgCloud(downloadAnhangDetails, nachrichtId, dataIn);
@@ -235,7 +242,6 @@ public class ElsterTransferRemoteService {
 		  .fileName(downloadAnhangDetails.getDatei())
 		  .fieldName(POSTFACH)
 		  .contentType(downloadAnhangDetails.getMimeType()).build();
-		  //.nachrichtReferenz(nachrichtId).build();
 	}
 }
 
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/MukPostfachRemoteServiceITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/MukPostfachRemoteServiceITCase.java
index 2f51fc0..a42340e 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/MukPostfachRemoteServiceITCase.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/MukPostfachRemoteServiceITCase.java
@@ -29,6 +29,7 @@ import static org.assertj.core.api.Assertions.*;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -140,6 +141,7 @@ public class MukPostfachRemoteServiceITCase {
 		}
 
 		@Test
+		@Disabled("Needs to be reimplemented when the new File API is available")
 		void shouldDownloadAntwort() {
 			var antworten = mukPostfachRemoteService.getAllMessages().toList();
 
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/PostfachNachrichtTestFactory.java b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/PostfachNachrichtTestFactory.java
index a4e0f80..1cda11a 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/PostfachNachrichtTestFactory.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/PostfachNachrichtTestFactory.java
@@ -57,7 +57,7 @@ public class PostfachNachrichtTestFactory {
 	public static final int POSTFACH_TYPE = 1;
 	public static final String SUBJECT = LoremIpsum.getInstance().getTitle(1);
 	public static final String MESSAGE_ID = UUID.randomUUID().toString();
-	public static final String VORGANG_ID = new ObjectId().toHexString();
+	public static final String NACHRICHT_ID = new ObjectId().toHexString();
 
 	public static PostfachNachricht create() {
 		return createBuilder().build();
@@ -68,7 +68,7 @@ public class PostfachNachrichtTestFactory {
 		  .id(ID)
 		  .postfachAddress(postfachAddress())
 		  .messageId(MESSAGE_ID)
-		  .vorgangId(VORGANG_ID)
+		  .vorgangId(NACHRICHT_ID)
 		  .direction(DIRECTION)
 		  .createdAt(CREATED_AT)
 		  .createdBy(CREATED_BY)
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/AntwortDetailsTestFactory.java b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/AntwortDetailsTestFactory.java
index 90dfc7f..44dcc3f 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/AntwortDetailsTestFactory.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/AntwortDetailsTestFactory.java
@@ -37,7 +37,7 @@ public class AntwortDetailsTestFactory {
 	public static final String DATEI_BEZEICHNUNG = "test daten";
 	public static final URI DOWNLOAD_URI = URI.create("/download");
 	public static final String TEXT_CSV = "text/csv";
-	public static final UUID ZUORDNUNG = ObjectIdToUUIDConverter.toUUID(VORGANG_ID);
+	public static final UUID ZUORDNUNG = ObjectIdToUUIDConverter.toUUID(NACHRICHT_ID);
 
 	static AntwortDetails create() {
 		var antwortDetails = new AntwortDetails();
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteServiceTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteServiceTest.java
index 3f6d7c4..a6cd786 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteServiceTest.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteServiceTest.java
@@ -36,6 +36,7 @@ import java.util.UUID;
 
 import org.bson.types.ObjectId;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
@@ -260,6 +261,7 @@ class ElsterTransferRemoteServiceTest {
 
 	@Nested
 	class TestLoadingAntwort {
+		byte[] data = "test data".getBytes();
 		@Test
 		void shouldLoadAntwort() {
 			var antwort = elsterTransferService.getAntwort(AntwortDetailsTestFactory.create());
@@ -268,15 +270,17 @@ class ElsterTransferRemoteServiceTest {
 		}
 
 		@Test
+		@Disabled("Needs to be reimplemented when the new File API is available")
 		void shouldCallDownloadAntwort() {
 			setupForAttachments();
 
 			elsterTransferService.getAntwort(AntwortDetailsTestFactory.create());
 
-			verify(elsterTransferService).downloadAnhang(any(), anyString());
+			verify(elsterTransferService).downloadAnhang(any());
 		}
 
 		@Test
+		@Disabled("Needs to be reimplemented when the new File API is available")
 		void shouldCallStoreToOzgCloud() throws IOException {
 			setupForAttachments();
 
@@ -293,8 +297,6 @@ class ElsterTransferRemoteServiceTest {
 
 		@Test
 		void shouldHandleAttachmentSaveError() {
-			when(postfachProperties.getServer()).thenReturn("http://localhost");
-			when(restClient.getForObject(matches(postfachProperties.getServer() + DOWNLOAD_URI), any())).thenReturn("Test,Data".getBytes());
 			when(attachmentService.store(any(), any())).thenReturn(null);
 
 			DownloadAnhangDetails downloadAnhangDetails = new DownloadAnhangDetails();
@@ -303,7 +305,7 @@ class ElsterTransferRemoteServiceTest {
 			downloadAnhangDetails.setDateiBezeichnung(OzgCloudFileTestFactory.NAME);
 			downloadAnhangDetails.setDatei("");
 
-			var res = elsterTransferService.downloadAnhang(downloadAnhangDetails, ObjectId.get().toHexString());
+			var res = elsterTransferService.saveAnhang(data, downloadAnhangDetails, ObjectId.get().toHexString());
 
 			assertThat(res).isNotPresent();
 
@@ -319,13 +321,14 @@ class ElsterTransferRemoteServiceTest {
 		}
 
 		@Test
+		@Disabled("Needs to be reimplemented when the new File API is available")
 		void shouldHaveVorgangId() {
 			when(restClient.getForObject(matches(postfachProperties.getServer() + DOWNLOAD_URI), any())).thenReturn("Test,Data".getBytes());
 			when(attachmentService.store(any(), any())).thenReturn(OzgCloudFileId.from(new ObjectId().toHexString()));
 
 			var antwort = elsterTransferService.getAntwort(AntwortDetailsTestFactory.create());
 
-			assertThat(antwort.getVorgangId()).isEqualTo(VORGANG_ID);
+			assertThat(antwort.getVorgangId()).isEqualTo(NACHRICHT_ID);
 		}
 
 		@Test
@@ -370,6 +373,7 @@ class ElsterTransferRemoteServiceTest {
 
 	@Nested
 	class TestExceptionHandling {
+		byte[] data = "test data".getBytes();
 		@Test
 		void shouldThrowTechnicalExceptionOnUpload() throws IOException {
 			doThrow(IOException.class).when(elsterTransferService).uploadFile(any());
@@ -381,11 +385,11 @@ class ElsterTransferRemoteServiceTest {
 		@Test
 		void shouldThrowTechnicalExceptionOnStore() throws IOException {
 			var downloadAnhangDetails = AntwortDetailsTestFactory.createDownloadAnhangDetails();
-			when(restClient.getForObject(eq("null" + downloadAnhangDetails.getDownloadUrl()), any())).thenReturn("data".getBytes());
+
 			doThrow(IOException.class).when(elsterTransferService).storeToOzgCloud(any(), any(), any());
 
 			assertThatExceptionOfType(TechnicalException.class).isThrownBy(
-			  () -> elsterTransferService.downloadAnhang(downloadAnhangDetails, VORGANG_ID)
+			  () -> elsterTransferService.saveAnhang(data, downloadAnhangDetails, NACHRICHT_ID)
 			);
 		}
 	}
@@ -418,6 +422,7 @@ class ElsterTransferRemoteServiceTest {
 		}
 
 		@Test
+		@Disabled("Needs to be reimplemented when the new File API is available")
 		void shouldHaveVorgangId() {
 			var file = ElsterTransferRemoteService.createOzgCloudUploadFile(downloadAnhangDetails, vorgangId);
 
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/MukPostfachMessageMapperTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/MukPostfachMessageMapperTest.java
index 9f68f9e..a83eac8 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/MukPostfachMessageMapperTest.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/MukPostfachMessageMapperTest.java
@@ -64,14 +64,14 @@ class MukPostfachMessageMapperTest {
 		void shouldMapVorgangIdToEmpfaengerreferenz() {
 			var result = map();
 
-			assertThat(result.getEmpfaengerreferenz()).isEqualTo(VORGANG_ID);
+			assertThat(result.getEmpfaengerreferenz()).isEqualTo(NACHRICHT_ID);
 		}
 
 		@Test
 		void shouldMapVorgangIdToGeschaeftszeichen() {
 			var result = map();
 
-			assertThat(result.getEmpfaengerreferenz()).isEqualTo(VORGANG_ID);
+			assertThat(result.getEmpfaengerreferenz()).isEqualTo(NACHRICHT_ID);
 		}
 
 		@Test
-- 
GitLab