Skip to content
Snippets Groups Projects
Commit edfef8e7 authored by Jan Zickermann's avatar Jan Zickermann
Browse files

OZG-4094 Replace old osi-postfach with osvi2-postfach

parent 1a3b519f
No related branches found
No related tags found
No related merge requests found
Showing
with 6 additions and 738 deletions
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
<bayernid-proxy-interface.version>0.7.0</bayernid-proxy-interface.version> <bayernid-proxy-interface.version>0.7.0</bayernid-proxy-interface.version>
<vorgang-manager.version>2.17.0</vorgang-manager.version> <vorgang-manager.version>2.17.0</vorgang-manager.version>
<muk-postfach.version>0.1.0</muk-postfach.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> <api-lib.version>0.13.0</api-lib.version>
<ozgcloud-common.version>4.5.0</ozgcloud-common.version> <ozgcloud-common.version>4.5.0</ozgcloud-common.version>
</properties> </properties>
...@@ -88,6 +89,11 @@ ...@@ -88,6 +89,11 @@
<artifactId>muk-postfach</artifactId> <artifactId>muk-postfach</artifactId>
<version>${muk-postfach.version}</version> <version>${muk-postfach.version}</version>
</dependency> </dependency>
<dependency>
<groupId>de.ozgcloud.osiv2</groupId>
<artifactId>osiv2-postfach</artifactId>
<version>${osiv2-postfach.version}</version>
</dependency>
<dependency> <dependency>
<groupId>de.ozgcloud.info</groupId> <groupId>de.ozgcloud.info</groupId>
......
/*
* 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;
}
/*
* 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;
}
/*
* 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);
}
}
/*
* 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
/*
* 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
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
/*
* 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;
}
}
/*
* 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
/*
* 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
/*
* 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;
}
}
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment