From edfef8e7e8bd4eb72c077136470d275ee07625b2 Mon Sep 17 00:00:00 2001
From: Jan Zickermann <jan.zickermann@dataport.de>
Date: Wed, 11 Dec 2024 10:37:41 +0100
Subject: [PATCH] OZG-4094 Replace old osi-postfach with osvi2-postfach

---
 nachrichten-manager-server/pom.xml            |   6 +
 .../nachrichten/postfach/osi/Message.java     |  85 ----------
 .../postfach/osi/MessageAttachment.java       |  41 -----
 .../osi/MessageAttachmentService.java         |  88 -----------
 .../osi/MockOsiPostfachConfiguration.java     |  39 -----
 .../osi/MockOsiPostfachRestTemplate.java      |  39 -----
 .../osi/OsiPostfachMessageMapper.java         |  83 ----------
 .../postfach/osi/OsiPostfachProperties.java   |  63 --------
 .../osi/OsiPostfachRemoteService.java         | 148 ------------------
 .../OsiPostfachServerProcessException.java    |  36 -----
 .../postfach/osi/PostfachConfiguration.java   |  99 ------------
 .../nachrichten/postfach/osi/ReplyOption.java |  17 --
 12 files changed, 6 insertions(+), 738 deletions(-)
 delete mode 100644 nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java
 delete mode 100644 nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java
 delete mode 100644 nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java
 delete mode 100644 nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java
 delete mode 100644 nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java
 delete mode 100644 nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java
 delete mode 100644 nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java
 delete mode 100644 nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java
 delete mode 100644 nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java
 delete mode 100644 nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java
 delete mode 100644 nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java

diff --git a/nachrichten-manager-server/pom.xml b/nachrichten-manager-server/pom.xml
index 2983ff7..91b6a83 100644
--- a/nachrichten-manager-server/pom.xml
+++ b/nachrichten-manager-server/pom.xml
@@ -48,6 +48,7 @@
 		<bayernid-proxy-interface.version>0.7.0</bayernid-proxy-interface.version>
 		<vorgang-manager.version>2.17.0</vorgang-manager.version>
 		<muk-postfach.version>0.1.0</muk-postfach.version>
+		<osiv2-postfach.version>0.1.1-SNAPSHOT</osiv2-postfach.version>
 		<api-lib.version>0.13.0</api-lib.version>
 		<ozgcloud-common.version>4.5.0</ozgcloud-common.version>
 	</properties>
@@ -88,6 +89,11 @@
 			<artifactId>muk-postfach</artifactId>
 			<version>${muk-postfach.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>de.ozgcloud.osiv2</groupId>
+			<artifactId>osiv2-postfach</artifactId>
+			<version>${osiv2-postfach.version}</version>
+		</dependency>
 
 		<dependency>
 			<groupId>de.ozgcloud.info</groupId>
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java
deleted file mode 100644
index 0af5a29..0000000
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.nachrichten.postfach.osi;
-
-import java.util.List;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonValue;
-
-import lombok.AccessLevel;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.RequiredArgsConstructor;
-import lombok.Singular;
-import lombok.ToString;
-
-@Getter
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-@AllArgsConstructor
-@ToString
-@Builder
-public class Message {
-
-	@RequiredArgsConstructor
-	public enum EidasLevel {
-		LOW(0), MEDIUM(1), HIGH(2);
-
-		private final int numValue;
-
-		@JsonValue
-		public int toValue() {
-			return numValue;
-		}
-	}
-
-	private String messageId;
-
-	@JsonProperty("sequenceNumber")
-	private String vorgangId;
-
-	@JsonProperty("nameIdentifier")
-	private String postfachId;
-
-	private String subject;
-	@JsonProperty("body")
-	private String mailBody;
-
-	@JsonProperty("isHtml")
-	private boolean isHtml;
-
-	@JsonProperty("replyAction")
-	@Builder.Default
-	private ReplyOption replyOption = ReplyOption.FORBIDDEN;
-	@Builder.Default
-	private EidasLevel eidasLevel = EidasLevel.MEDIUM;
-
-	@JsonProperty("isObligatory")
-	private boolean rechtsverbindlich;
-
-	@Singular
-	private List<MessageAttachment> attachments;
-}
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java
deleted file mode 100644
index 58bfba6..0000000
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.nachrichten.postfach.osi;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.ToString;
-
-@ToString
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@Getter
-public class MessageAttachment {
-
-	private String fileName;
-	private String content;
-}
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java
deleted file mode 100644
index c6c2170..0000000
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.nachrichten.postfach.osi;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.util.Base64;
-
-import org.apache.commons.io.IOUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.AttachmentFile;
-import de.ozgcloud.nachrichten.postfach.BinaryFileService;
-import de.ozgcloud.nachrichten.postfach.FileId;
-import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService;
-import lombok.val;
-
-@Service
-public class MessageAttachmentService {
-
-	@Autowired
-	private PersistPostfachNachrichtService persistPostfachNachrichtService;
-
-	@Autowired
-	private BinaryFileService binaryFileService;
-
-	public MessageAttachment getMessageAttachment(FileId fileId) {
-		try {
-			val metadata = binaryFileService.getFile(fileId).getMetadata();
-			return MessageAttachment.builder()
-					.fileName(metadata.getString("name"))
-					.content(getAttachmentContent(fileId))
-					.build();
-		} catch (IOException e) {
-			throw new TechnicalException(e.getMessage(), e);
-		}
-	}
-
-	String getAttachmentContent(FileId fileId) throws IOException {
-		ByteArrayOutputStream contentStream = new ByteArrayOutputStream();
-		IOUtils.copy(getAttachmentContentStream(fileId), contentStream);
-		return encodeAttachmentContent(contentStream.toByteArray());
-	}
-
-	private String encodeAttachmentContent(byte[] content) {
-		return new String(Base64.getEncoder().encode(content));
-	}
-
-	public String persistAttachment(String vorgangId, MessageAttachment attachment) {
-		return persistPostfachNachrichtService.persistAttachment(vorgangId, mapAttachmentFile(attachment));
-	}
-
-	AttachmentFile mapAttachmentFile(MessageAttachment attachment) {
-		return AttachmentFile.builder()
-				.name(attachment.getFileName())
-				.content(() -> IOUtils.toInputStream(attachment.getContent(), Charset.defaultCharset())).build();
-	}
-
-	InputStream getAttachmentContentStream(FileId fileId) {
-		return binaryFileService.getUploadedFileStream(fileId);
-	}
-
-}
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java
deleted file mode 100644
index 0664694..0000000
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.nachrichten.postfach.osi;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import org.springframework.web.client.RestTemplate;
-
-@Profile("e2e")
-@Configuration
-public class MockOsiPostfachConfiguration {
-
-	@Bean
-	public RestTemplate restTemplate() {
-		return new MockOsiPostfachRestTemplate();
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java
deleted file mode 100644
index 364d8be..0000000
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.nachrichten.postfach.osi;
-
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.client.RestClientException;
-import org.springframework.web.client.RestTemplate;
-
-class MockOsiPostfachRestTemplate extends RestTemplate {
-
-	@Override
-	public <T> ResponseEntity<T> exchange(String url, HttpMethod method, HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables)
-			throws RestClientException {
-		return ResponseEntity.ok().build();
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java
deleted file mode 100644
index 38c7c4a..0000000
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.osi;
-
-import java.util.List;
-import java.util.Optional;
-
-import org.apache.commons.lang3.StringUtils;
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.Named;
-import org.mapstruct.ReportingPolicy;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import de.ozgcloud.nachrichten.postfach.FileId;
-import de.ozgcloud.nachrichten.postfach.PostfachAddress;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.StringBasedIdentifier;
-
-@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN)
-public abstract class OsiPostfachMessageMapper {
-
-	private static final String POSTFACH_ADDRESS_VERSION = "1.0";
-	private static final int POSTFACH_ADDRESS_TYPE = 1;
-
-	@Autowired
-	private MessageAttachmentService messageAttachmentService;
-
-	@Mapping(target = "attachment", ignore = true)
-	@Mapping(target = "isHtml", constant = "true")
-	@Mapping(target = "rechtsverbindlich", constant = "false")
-	@Mapping(target = "eidasLevel", constant = "MEDIUM")
-	@Mapping(target = "postfachId", expression = "java(toPostfachId(nachricht))")
-	@Mapping(target = "mailBody", qualifiedByName = "replaceNewLine")
-	public abstract Message toOsiMessage(PostfachNachricht nachricht);
-
-	@Mapping(target = "createdBy", ignore = true)
-	@Mapping(target = "id", ignore = true)
-	@Mapping(target = "messageCode", ignore = true)
-	@Mapping(target = "sentAt", ignore = true)
-	@Mapping(target = "sentSuccessful", ignore = true)
-	@Mapping(target = "createdAt", expression = "java(java.time.ZonedDateTime.now())")
-	@Mapping(target = "direction", constant = "IN")
-	@Mapping(target = "attachments", expression = "java(persistAttachements(message.getVorgangId() ,message.getAttachments()))")
-	@Mapping(target = "postfachAddress", expression = "java(buildPostfachAddressByPostfachId(message.getPostfachId()))")
-	@Mapping(target = "mailBody", qualifiedByName = "clearReceivedMessage")
-	public abstract PostfachNachricht toPostfachNachricht(Message message);
-
-	List<MessageAttachment> map(List<String> attachedFileIds) {
-		return attachedFileIds.stream().map(FileId::from).map(fileId -> messageAttachmentService.getMessageAttachment(fileId)).toList();
-	}
-
-	List<String> persistAttachements(String vorgangId, List<MessageAttachment> attachments) {
-		return attachments.stream().map(attachment -> messageAttachmentService.persistAttachment(vorgangId, attachment)).toList();
-	}
-
-	String toPostfachId(PostfachNachricht nachricht) {
-		return Optional.ofNullable(nachricht.getPostfachAddress())
-				.map(PostfachAddress::getIdentifier)
-				.filter(StringBasedIdentifier.class::isInstance)
-				.map(StringBasedIdentifier.class::cast)
-				.map(StringBasedIdentifier::getPostfachId)
-				.orElse(StringUtils.EMPTY);
-	}
-
-	PostfachAddress buildPostfachAddressByPostfachId(String postfachId) {
-		return PostfachAddress.builder()
-				.type(POSTFACH_ADDRESS_TYPE)
-				.version(POSTFACH_ADDRESS_VERSION)
-				.identifier(StringBasedIdentifier.builder().postfachId(postfachId).build())
-				.serviceKontoType(OsiPostfachRemoteService.POSTFACH_TYPE)
-				.build();
-
-	}
-
-	@Named("replaceNewLine")
-	String replaceNewlines(String nachricht) {
-		return Optional.ofNullable(nachricht).map(str -> str.replaceAll("(\r\n|\n)", "<br>")).orElse(null);
-	}
-
-	@Named("clearReceivedMessage")
-	String clearReceivedMessage(String nachricht) {
-		return Optional.ofNullable(nachricht).map(str -> str.replace("&amp;", "&")).orElse(null);
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java
deleted file mode 100644
index 5b3b306..0000000
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.nachrichten.postfach.osi;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Configuration
-@ConfigurationProperties(prefix = OsiPostfachProperties.PROXY_API_PREFIX)
-public class OsiPostfachProperties {
-
-	static final String PREFIX = "ozgcloud.osi.postfach";
-	static final String PROXY_API_PREFIX = PREFIX + ".proxyapi";
-
-	private String url;
-	private String key;
-	private String realm;
-
-	@Autowired
-	private ProxyConfiguration proxyConfiguration;
-
-	@Getter
-	@Setter
-	@Configuration
-	@ConfigurationProperties(prefix = ProxyConfiguration.PREFIX)
-	static class ProxyConfiguration {
-		static final String PREFIX = OsiPostfachProperties.PREFIX + ".http-proxy";
-
-		private String host;
-		private Integer port;
-
-		private boolean authenticationRequired;
-		private String username;
-		private String password;
-	}
-}
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java
deleted file mode 100644
index bde0737..0000000
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.nachrichten.postfach.osi;
-
-import java.util.Arrays;
-import java.util.Objects;
-import java.util.function.Supplier;
-import java.util.stream.Stream;
-
-import jakarta.annotation.PostConstruct;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Service;
-import org.springframework.web.client.HttpClientErrorException;
-import org.springframework.web.client.RestTemplate;
-import org.springframework.web.util.UriComponentsBuilder;
-
-import de.ozgcloud.nachrichten.postfach.NotConfiguredException;
-import de.ozgcloud.nachrichten.postfach.PostfachBadRequestException;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.PostfachRemoteService;
-import de.ozgcloud.nachrichten.postfach.PostfachRuntimeException;
-import lombok.extern.log4j.Log4j2;
-
-@Service
-@Log4j2
-@ConditionalOnProperty(prefix = OsiPostfachProperties.PROXY_API_PREFIX, name = { "url", "key", "realm" })
-class OsiPostfachRemoteService implements PostfachRemoteService {
-
-	static final String POSTFACH_TYPE = "OSI";
-
-	@Autowired
-	private OsiPostfachMessageMapper mapper;
-	@Autowired
-	private OsiPostfachProperties properties;
-	@Autowired(required = false)
-	private RestTemplate restTemplate;
-
-	@PostConstruct
-	public void init() {
-		LOG.info("OSI Postfach remote service initialized.");
-		if (isNotConfigured()) {
-			LOG.warn("OSI Postfach Api not configured. Failed to read config " + OsiPostfachProperties.PROXY_API_PREFIX);
-		}
-	}
-
-	@Override
-	public void sendMessage(PostfachNachricht nachricht) {
-		checkWhetherIsConfigured();
-
-		HttpEntity<Message> request = new HttpEntity<>(mapper.toOsiMessage(nachricht));
-
-		var response = executeHandlingException(
-				() -> restTemplate.exchange(properties.getUrl(), HttpMethod.POST, request, String.class));
-
-		sentFailed(response);
-	}
-
-	@Override
-	public Stream<PostfachNachricht> getAllMessages() {
-		checkWhetherIsConfigured();
-
-		ResponseEntity<Message[]> response = executeHandlingException(
-				() -> restTemplate.exchange(properties.getUrl(), HttpMethod.GET, null, Message[].class));
-
-		if (Objects.isNull(response.getBody())) {
-			LOG.warn("OSI Postfach response with an empty body");
-			return Stream.empty();
-		}
-		return Arrays.stream(response.getBody()).map(mapper::toPostfachNachricht);
-	}
-
-	private void sentFailed(ResponseEntity<String> response) {
-		if (isSentFailed(response)) {
-			throw new OsiPostfachServerProcessException();
-		}
-	}
-
-	private boolean isSentFailed(ResponseEntity<String> response) {
-		return StringUtils.equals(response.getBody(), String.valueOf(false));
-	}
-
-	@Override
-	public void deleteMessage(String messageId) {
-		checkWhetherIsConfigured();
-
-		UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(properties.getUrl()).queryParam("messageGuid", messageId);
-		executeHandlingException(() -> restTemplate.exchange(builder.toUriString(), HttpMethod.DELETE, null, String.class));
-	}
-
-	private void checkWhetherIsConfigured() {
-		if (isNotConfigured()) {
-			throw new NotConfiguredException(
-					"Postfach %s is not completely configured. Sending and receiving of postfach mails is not possible.".formatted(POSTFACH_TYPE));
-		}
-	}
-
-	private boolean isNotConfigured() {
-		return Objects.isNull(restTemplate) || Objects.isNull(properties.getUrl()) || Objects.isNull(properties.getKey());
-	}
-
-	private <T> T executeHandlingException(Supplier<T> runnable) {
-		try {
-			return runnable.get();
-		} catch (HttpClientErrorException e) {
-			throw new PostfachBadRequestException(e);
-		} catch (RuntimeException e) {
-			throw new PostfachRuntimeException(e);
-		}
-	}
-
-	@Override
-	public String getPostfachType() {
-		return POSTFACH_TYPE;
-	}
-
-	@Override
-	public boolean isReplyAllowed() {
-		return true;
-	}
-
-}
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java
deleted file mode 100644
index 4d2bcf4..0000000
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.nachrichten.postfach.osi;
-
-import de.ozgcloud.nachrichten.postfach.PostfachException;
-import de.ozgcloud.nachrichten.postfach.PostfachMessageCode;
-
-public class OsiPostfachServerProcessException extends PostfachException {// NOSONAR
-
-	private static final long serialVersionUID = 1L;
-
-	OsiPostfachServerProcessException() {
-		super("Postfach server returned false", PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE);
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java
deleted file mode 100644
index 669c30c..0000000
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.nachrichten.postfach.osi;
-
-import java.util.Objects;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.hc.client5.http.auth.AuthScope;
-import org.apache.hc.client5.http.auth.CredentialsProvider;
-import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
-import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
-import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
-import org.apache.hc.client5.http.impl.classic.HttpClients;
-import org.apache.hc.core5.http.HttpHost;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.web.client.RestTemplateBuilder;
-import org.springframework.boot.web.client.RestTemplateCustomizer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
-import org.springframework.web.client.RestTemplate;
-
-@Profile("!e2e")
-@Configuration
-public class PostfachConfiguration implements RestTemplateCustomizer {
-
-	static final String HEADER_API_KEY = "apiKey";
-	static final String HEADER_API_REALM = "realm";
-
-	@Autowired
-	private OsiPostfachProperties properties;
-
-	@Bean
-	@ConditionalOnProperty(prefix = OsiPostfachProperties.PROXY_API_PREFIX, name = { "url", "key", "realm" })
-	public RestTemplate restTemplate(RestTemplateBuilder builder, OsiPostfachProperties properties) {
-		return builder
-				.defaultHeader(HEADER_API_KEY, properties.getKey())
-				.defaultHeader(HEADER_API_REALM, properties.getRealm())
-				.build();
-	}
-
-	@Override
-	public void customize(RestTemplate restTemplate) {
-		if (StringUtils.isNotBlank(properties.getProxyConfiguration().getHost())) {
-			setProxy(restTemplate);
-		}
-	}
-
-	private void setProxy(RestTemplate restTemplate) {
-		var proxyConfig = properties.getProxyConfiguration();
-		var port = Objects.isNull(proxyConfig.getPort()) ? -1 : proxyConfig.getPort();
-		var proxy = new HttpHost(proxyConfig.getHost(), port);
-
-		var httpClient = HttpClientBuilder.create()
-				.setProxy(proxy).setDefaultCredentialsProvider(buildCredentialsProvider(proxy))
-				.build();
-
-		HttpClients.custom().build();
-		restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
-	}
-
-	private CredentialsProvider buildCredentialsProvider(HttpHost proxyHost) {
-		var proxyConfig = properties.getProxyConfiguration();
-
-		if (!proxyConfig.isAuthenticationRequired()) {
-			return null;
-		}
-
-		var credsProvider = new BasicCredentialsProvider();
-		credsProvider.setCredentials(
-				new AuthScope(proxyHost),
-				new UsernamePasswordCredentials(proxyConfig.getUsername(), proxyConfig.getPassword().toCharArray()));
-		return credsProvider;
-	}
-
-}
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java
deleted file mode 100644
index 92fb168..0000000
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.osi;
-
-import com.fasterxml.jackson.annotation.JsonValue;
-
-import lombok.RequiredArgsConstructor;
-
-@RequiredArgsConstructor
-public enum ReplyOption {
-	POSSIBLE(0), MANDATORY(1), FORBIDDEN(2);
-
-	private final int numValue;
-
-	@JsonValue
-	public int toValue() {
-		return numValue;
-	}
-}
\ No newline at end of file
-- 
GitLab