From ecfaa7e175fbbc9b2282b283cb8f8b393843655f Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Tue, 23 Apr 2024 15:33:05 +0200 Subject: [PATCH] OZG-5402 outsource nachrichten-manager in external repository --- nachrichten-manager/lombok.config | 30 - nachrichten-manager/pom.xml | 349 -------- .../NachrichtenManagerProperties.java | 16 - .../antragraum/AntragraumGrpcService.java | 60 -- .../antragraum/AntragraumNachrichtMapper.java | 61 -- .../antragraum/AntragraumProperties.java | 68 -- .../antragraum/AntragraumService.java | 102 --- .../antragraum/BayernIdSamlConfiguration.java | 242 ------ .../antragraum/Saml2Decrypter.java | 105 --- .../nachrichten/antragraum/Saml2Parser.java | 74 -- .../nachrichten/antragraum/Saml2Verifier.java | 90 -- .../ClientAttributeRemoteService.java | 72 -- .../attributes/ClientAttributeService.java | 49 -- .../ClientAttributeTestFactory.java | 30 - .../errorhandling/FunctionalException.java | 33 - .../errorhandling/TechnicalException.java | 38 - ...ichtenCallContextAttachingInterceptor.java | 82 -- .../nachrichten/email/EMailService.java | 158 ---- .../nachrichten/email/EmailGrpcService.java | 65 -- .../nachrichten/email/MailRecipient.java | 30 - .../nachrichten/email/MailSendErrorEvent.java | 47 - .../nachrichten/email/MailSendRequest.java | 61 -- .../nachrichten/email/MailSentEvent.java | 41 - .../nachrichten/email/MailService.java | 40 - .../info/InfoManagerRemoteService.java | 28 - .../nachrichten/info/InfoManagerRequest.java | 14 - .../nachrichten/info/InfoManagerService.java | 35 - .../info/InfomanagerNachrichtMapper.java | 14 - .../info/InfomanagerProperties.java | 25 - .../nachrichten/postfach/AttachmentFile.java | 53 -- .../postfach/BinaryFileService.java | 36 - .../ozgcloud/nachrichten/postfach/FileId.java | 48 -- .../postfach/GrpcPostfachNachrichtMapper.java | 27 - .../postfach/NotConfiguredException.java | 35 - .../PersistPostfachNachrichtService.java | 64 -- .../nachrichten/postfach/Postfach.java | 13 - .../nachrichten/postfach/PostfachAddress.java | 19 - .../postfach/PostfachAddressIdentifier.java | 5 - .../postfach/PostfachBadRequestException.java | 33 - .../postfach/PostfachEventListener.java | 125 --- .../postfach/PostfachException.java | 45 - .../postfach/PostfachGrpcService.java | 106 --- .../postfach/PostfachMailSentEvent.java | 36 - .../postfach/PostfachMailSentFailedEvent.java | 35 - .../nachrichten/postfach/PostfachMapper.java | 9 - .../postfach/PostfachMessageCode.java | 39 - .../postfach/PostfachNachricht.java | 89 -- .../postfach/PostfachNachrichtMapper.java | 159 ---- .../postfach/PostfachRemoteService.java | 16 - .../postfach/PostfachRuntimeException.java | 33 - .../postfach/PostfachScheduler.java | 50 -- .../nachrichten/postfach/PostfachService.java | 244 ------ .../SendPostfachNachrichtResponse.java | 36 - .../postfach/StringBasedIdentifier.java | 11 - .../postfach/bayernid/Absender.java | 23 - .../postfach/bayernid/BayernIdAttachment.java | 38 - .../bayernid/BayernIdAttachmentService.java | 68 -- .../BayernIdPostfachNachrichtMapper.java | 73 -- .../BayernIdPostfachRemoteService.java | 132 --- .../BayernIdPostfachResponseHandler.java | 21 - .../postfach/bayernid/BayernIdProperties.java | 26 - .../postfach/bayernid/BayernIdResponse.java | 37 - .../bayernid/BayernIdServerException.java | 30 - .../postfach/bayernid/FileSender.java | 132 --- .../bayernid/MailSendingResponseStatus.java | 43 - .../bayernid/MessageWithFilesSender.java | 132 --- .../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 | 84 -- .../postfach/osi/OsiPostfachProperties.java | 63 -- .../osi/OsiPostfachRemoteService.java | 147 ---- .../OsiPostfachServerProcessException.java | 36 - .../postfach/osi/PostfachConfiguration.java | 99 --- .../nachrichten/postfach/osi/ReplyOption.java | 17 - ...ot.autoconfigure.AutoConfiguration.imports | 20 - .../main/resources/application-bayern.yaml | 3 - .../resources/application-bayernlocal.yaml | 7 - .../PostfachnachrichtenServiceBy.wsdl | 108 --- .../bayernid/bspnachrichten-2.13.xsd | 343 -------- .../bayernid/metadata/bayernid-idp-infra.xml | 45 - .../antragraum/AntragraumGrpcServiceTest.java | 128 --- .../AntragraumNachrichtMapperTest.java | 125 --- .../antragraum/AntragraumServiceTest.java | 119 --- .../BayernIdSamlConfigurationTest.java | 87 -- .../GrpcFindRueckfrageRequestTestFactory.java | 40 - .../antragraum/GrpcNachrichtTestFactory.java | 21 - .../GrpcRueckfrageAnswerTestFactory.java | 23 - ...endRueckfrageAnswerRequestTestFactory.java | 19 - .../antragraum/Saml2DecrypterTest.java | 126 --- .../antragraum/Saml2ParserTest.java | 72 -- .../antragraum/Saml2VerifierTest.java | 66 -- .../ClientAttributeRemoteServiceTest.java | 122 --- .../ClientAttributeServiceTest.java | 63 -- .../GrpcClientAttributeTestFactory.java | 42 - ...cSetClientAttributeRequestTestFactory.java | 49 -- .../nachrichten/email/EMailServiceTest.java | 258 ------ .../email/EmailGrpcServiceTest.java | 104 --- ...GrpcNotificationRecipientsTestFactory.java | 40 - .../email/GrpcRecipientTestFactory.java | 38 - .../email/MailRecipientTestFactory.java | 42 - .../email/MailSendErrorEventTestFactory.java | 33 - .../email/MailSendRequestTestFactory.java | 69 -- .../email/MailSentEventTestFactory.java | 33 - .../info/InfoManagerRemoteServiceTest.java | 94 -- .../info/InfoManagerRequestTestFactory.java | 21 - .../info/InfoManagerServiceTest.java | 104 --- .../info/InfomanagerNachrichtMapperTest.java | 47 - .../GrpcPostfachAddressTestFactory.java | 28 - .../postfach/GrpcPostfachMailTestFactory.java | 52 -- ...cResendPostfachMailRequestTestFactory.java | 46 - ...cSaveNachrichtDraftRequestTestFactory.java | 16 - ...rpcSendPostfachMailRequestTestFactory.java | 47 - .../postfach/PostfachAddressTestFactory.java | 24 - .../postfach/PostfachEventListenerTest.java | 215 ----- .../postfach/PostfachGrpcServiceTest.java | 331 ------- .../postfach/PostfachMapperTest.java | 25 - .../postfach/PostfachNachrichtMapperTest.java | 209 ----- .../PostfachNachrichtTestFactory.java | 109 --- .../postfach/PostfachSchedulerTest.java | 51 -- .../postfach/PostfachServiceTest.java | 815 ------------------ .../postfach/PostfachTestFactory.java | 20 - ...dPostfachNachrichtResponseTestFactory.java | 40 - .../bayernid/AbsenderTestFactory.java | 26 - .../bayernid/AbsenderTypeTestFactory.java | 17 - .../BayernIdAttachmentServiceTest.java | 179 ---- .../BayernIdAttachmentTestFactory.java | 52 -- .../BayernIdPostfachNachrichtMapperTest.java | 272 ------ .../BayernIdPostfachRemoteServiceTest.java | 455 ---------- .../BayernIdPostfachResponseHandlerTest.java | 43 - .../bayernid/BayernIdPropertiesITCase.java | 88 -- .../bayernid/BayernIdResponseTestFactory.java | 21 - .../bayernid/BspNachrichtTestFactory.java | 16 - .../bayernid/EmpfaengerTypeTestFactory.java | 16 - .../postfach/bayernid/FileSenderTest.java | 214 ----- .../bayernid/FreiTextTypeTestFactory.java | 15 - ...endBayernIdMessageResponseTestFactory.java | 43 - ...dentifikationNachrichtTypeTestFactory.java | 36 - .../MailSendingResponseStatusTest.java | 18 - .../bayernid/MessageWithFilesSenderTest.java | 405 --------- .../NachrichtenInhaltTypeTestFactory.java | 14 - .../NachrichtenKopfTypeTestFactory.java | 22 - ...ndBspNachrichtNativeOutputTestFactory.java | 15 - .../bayernid/ZuVorgangTypeTestFactory.java | 16 - .../osi/MessageAttachmentServiceTest.java | 131 --- .../osi/MessageAttachmentTestFactory.java | 40 - .../osi/MessageJsonReplyTestFactory.java | 37 - .../postfach/osi/MessageTestFactory.java | 64 -- .../osi/OsiPostfachMessageMapperTest.java | 200 ----- .../osi/OsiPostfachRemoteServiceTest.java | 337 -------- ...fachServerProcessExceptionTestFactory.java | 9 - .../src/test/resources/BspQuittung.xml | 6 - .../src/test/resources/BspQuittungError.xml | 11 - .../org.junit.jupiter.api.extension.Extension | 1 - .../src/test/resources/SamlResponse.xml | 128 --- .../test/resources/application-bayern.yaml | 15 - .../src/test/resources/application.yaml | 0 .../src/test/resources/bayernid-idp-infra.xml | 45 - .../src/test/resources/bayernid.p12 | Bin 6349 -> 0 bytes .../test/resources/junit-platform.properties | 1 - .../org.mockito.plugins.MockMaker | 1 - notification-manager/pom.xml | 16 +- pom.xml | 1 - .../src/main/protobuf/antragraum.model.proto | 64 -- .../src/main/protobuf/antragraum.proto | 41 - .../src/main/protobuf/email.model.proto | 45 - .../src/main/protobuf/email.proto | 37 - .../src/main/protobuf/postfach.model.proto | 140 --- .../src/main/protobuf/postfach.proto | 55 -- vorgang-manager-server/pom.xml | 24 +- .../vorgang/files/GrpcBinaryFileService.java | 2 +- 173 files changed, 27 insertions(+), 12864 deletions(-) delete mode 100644 nachrichten-manager/lombok.config delete mode 100644 nachrichten-manager/pom.xml delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerProperties.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumProperties.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfiguration.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Decrypter.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Parser.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Verifier.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeTestFactory.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/FunctionalException.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/TechnicalException.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/grpc/NachrichtenCallContextAttachingInterceptor.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EMailService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EmailGrpcService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailRecipient.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendErrorEvent.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendRequest.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSentEvent.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRequest.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapper.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerProperties.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/FileId.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachNachrichtMapper.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/NotConfiguredException.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/Postfach.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachBadRequestException.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachEventListener.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachException.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentEvent.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentFailedEvent.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMapper.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMessageCode.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachricht.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRemoteService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRuntimeException.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachScheduler.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponse.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/Absender.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachment.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandler.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdProperties.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponse.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdServerException.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSender.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatus.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSender.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java delete mode 100644 nachrichten-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports delete mode 100644 nachrichten-manager/src/main/resources/application-bayern.yaml delete mode 100644 nachrichten-manager/src/main/resources/application-bayernlocal.yaml delete mode 100644 nachrichten-manager/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl delete mode 100644 nachrichten-manager/src/main/resources/bayernid/bspnachrichten-2.13.xsd delete mode 100644 nachrichten-manager/src/main/resources/bayernid/metadata/bayernid-idp-infra.xml delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfigurationTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcNachrichtTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcSendRueckfrageAnswerRequestTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2DecrypterTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2ParserTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2VerifierTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcClientAttributeTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcSetClientAttributeRequestTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EMailServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EmailGrpcServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcNotificationRecipientsTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcRecipientTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailRecipientTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendErrorEventTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendRequestTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSentEventTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRequestTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapperTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachAddressTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachMailTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcResendPostfachMailRequestTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSendPostfachMailRequestTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMapperTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachSchedulerTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponseTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTypeTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapperTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandlerTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPropertiesITCase.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponseTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BspNachrichtTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/EmpfaengerTypeTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSenderTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FreiTextTypeTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/GrpcSendBayernIdMessageResponseTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/IdentifikationNachrichtTypeTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatusTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSenderTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenInhaltTypeTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenKopfTypeTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/SendBspNachrichtNativeOutputTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/ZuVorgangTypeTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageJsonReplyTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceTest.java delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessExceptionTestFactory.java delete mode 100644 nachrichten-manager/src/test/resources/BspQuittung.xml delete mode 100644 nachrichten-manager/src/test/resources/BspQuittungError.xml delete mode 100644 nachrichten-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension delete mode 100644 nachrichten-manager/src/test/resources/SamlResponse.xml delete mode 100644 nachrichten-manager/src/test/resources/application-bayern.yaml delete mode 100644 nachrichten-manager/src/test/resources/application.yaml delete mode 100644 nachrichten-manager/src/test/resources/bayernid-idp-infra.xml delete mode 100644 nachrichten-manager/src/test/resources/bayernid.p12 delete mode 100644 nachrichten-manager/src/test/resources/junit-platform.properties delete mode 100644 nachrichten-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker delete mode 100644 vorgang-manager-interface/src/main/protobuf/antragraum.model.proto delete mode 100644 vorgang-manager-interface/src/main/protobuf/antragraum.proto delete mode 100644 vorgang-manager-interface/src/main/protobuf/email.model.proto delete mode 100644 vorgang-manager-interface/src/main/protobuf/email.proto delete mode 100644 vorgang-manager-interface/src/main/protobuf/postfach.model.proto delete mode 100644 vorgang-manager-interface/src/main/protobuf/postfach.proto diff --git a/nachrichten-manager/lombok.config b/nachrichten-manager/lombok.config deleted file mode 100644 index d07dd9b0e..000000000 --- a/nachrichten-manager/lombok.config +++ /dev/null @@ -1,30 +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. -# - -lombok.log.fieldName=LOG -lombok.log.slf4j.flagUsage = ERROR -lombok.log.log4j.flagUsage = ERROR -lombok.data.flagUsage = ERROR -lombok.nonNull.exceptionType = IllegalArgumentException -lombok.addLombokGeneratedAnnotation = true \ No newline at end of file diff --git a/nachrichten-manager/pom.xml b/nachrichten-manager/pom.xml deleted file mode 100644 index 263d7ed88..000000000 --- a/nachrichten-manager/pom.xml +++ /dev/null @@ -1,349 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - Copyright (C) 2022-2023 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. - ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>de.ozgcloud.common</groupId> - <artifactId>ozgcloud-common-parent</artifactId> - <version>4.0.1</version> - <relativePath/> - </parent> - - <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>nachrichten-manager</artifactId> - <version>2.7.0-SNAPSHOT</version> - <name>OZG-Cloud Nachrichten Manager</name> - - <properties> - <java.version>17</java.version> - <!-- TODO version management --> - <shedlock.version>4.25.0</shedlock.version> - <logcaptor.version>2.7.10</logcaptor.version> - <ozgcloud.license.version>1.3.0</ozgcloud.license.version> - <jaxb-maven-plugin.version>3.0.1</jaxb-maven-plugin.version> - <ozg-info-manager-interface.version>0.10.0-22.8503e49-20240124.071709-1</ozg-info-manager-interface.version> - <bayernid-proxy-interface.version>0.1.0</bayernid-proxy-interface.version> - </properties> - - <repositories> - <repository> - <id>shibboleth-releases</id> - <name>Shibboleth Releases Repository</name> - <url>https://build.shibboleth.net/maven/releases/</url> - <releases> - <enabled>true</enabled> - <checksumPolicy>warn</checksumPolicy> - </releases> - <snapshots> - <enabled>false</enabled> - </snapshots> - </repository> - <repository> - <id>shibboleth-thirdparty</id> - <name>Shibboleth Thirdparty Repository</name> - <url>https://build.shibboleth.net/maven/thirdparty/</url> - <releases> - <enabled>true</enabled> - <checksumPolicy>fail</checksumPolicy> - </releases> - <snapshots> - <enabled>false</enabled> - </snapshots> - </repository> - </repositories> - - <dependencies> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-base</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-interface</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>de.ozgcloud.command</groupId> - <artifactId>command-manager</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-utils</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>bayernid-proxy-interface</artifactId> - <version>${bayernid-proxy-interface.version}</version> - </dependency> - - <dependency> - <groupId>com.mgmtp.bup.ozg</groupId> - <artifactId>ozg-info-manager-interface</artifactId> - <version>${ozg-info-manager-interface.version}</version> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-mail</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-json</artifactId> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-web</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web-services</artifactId> - </dependency> - - <dependency> - <groupId>org.glassfish.jaxb</groupId> - <artifactId>jaxb-runtime</artifactId> - </dependency> - - <dependency> - <groupId>net.javacrumbs.shedlock</groupId> - <artifactId>shedlock-spring</artifactId> - <version>${shedlock.version}</version> - </dependency> - <dependency> - <groupId>net.javacrumbs.shedlock</groupId> - <artifactId>shedlock-provider-mongo</artifactId> - <version>${shedlock.version}</version> - </dependency> - - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-saml2-service-provider</artifactId> - </dependency> - - - <dependency> - <groupId>net.devh</groupId> - <artifactId>grpc-server-spring-boot-starter</artifactId> - </dependency> - <dependency> - <groupId>net.devh</groupId> - <artifactId>grpc-client-spring-boot-starter</artifactId> - </dependency> - - <!-- commons --> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-lang3</artifactId> - </dependency> - <dependency> - <groupId>org.apache.httpcomponents.client5</groupId> - <artifactId>httpclient5</artifactId> - </dependency> - <dependency> - <groupId>commons-beanutils</groupId> - <artifactId>commons-beanutils</artifactId> - </dependency> - - <!-- DEV --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-devtools</artifactId> - <scope>runtime</scope> - <optional>true</optional> - </dependency> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <optional>true</optional> - <scope>provided</scope> - </dependency> - - <!-- TEST --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-configuration-processor</artifactId> - <optional>true</optional> - </dependency> - <dependency> - <groupId>io.github.hakky54</groupId> - <artifactId>logcaptor</artifactId> - <version>${logcaptor.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-base</artifactId> - <version>${project.version}</version> - <type>test-jar</type> - <scope>test</scope> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <configuration> - <skip>true</skip> - </configuration> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>test-jar</goal> - </goals> - </execution> - </executions> - </plugin> - - <plugin> - <groupId>org.jvnet.jaxb</groupId> - <artifactId>jaxb-maven-plugin</artifactId> - <version>${jaxb-maven-plugin.version}</version> - <configuration> - <schemas> - <schema> - <fileset> - <directory>${basedir}/src/main/resources/bayernid</directory> - <includes> - <include>*.wsdl</include> - </includes> - </fileset> - </schema> - <schema> - <fileset> - <directory>${basedir}/src/main/resources/bayernid</directory> - <includes> - <include>*.xsd</include> - </includes> - </fileset> - </schema> - </schemas> - <episode>false</episode> - </configuration> - <executions> - <execution> - <goals> - <goal>generate</goal> - </goals> - </execution> - </executions> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - </plugin> - - <plugin> - <groupId>org.sonarsource.scanner.maven</groupId> - <artifactId>sonar-maven-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - </plugin> - - <plugin> - <groupId>com.mycila</groupId> - <artifactId>license-maven-plugin</artifactId> - <configuration> - <mapping> - <config>SCRIPT_STYLE</config> - </mapping> - <licenseSets> - <licenseSet> - <header>license/eupl_v1_2_de/header.txt</header> - <excludes> - <exclude>**/README</exclude> - <exclude>src/test/resources/**</exclude> - <exclude>src/main/resources/**</exclude> - </excludes> - </licenseSet> - </licenseSets> - </configuration> - <dependencies> - <dependency> - <groupId>de.ozgcloud.common</groupId> - <artifactId>ozgcloud-common-license</artifactId> - <version>${ozgcloud.license.version}</version> - </dependency> - </dependencies> - </plugin> - </plugins> - </build> - - <distributionManagement> - <repository> - <id>ozg-nexus</id> - <name>ozg-releases</name> - <url>https://nexus.ozg-sh.de/repository/ozg-releases/</url> - </repository> - <snapshotRepository> - <id>ozg-snapshots-nexus</id> - <name>ozg-snapshots</name> - <url>https://nexus.ozg-sh.de/repository/ozg-snapshots/</url> - </snapshotRepository> - </distributionManagement> -</project> diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerProperties.java deleted file mode 100644 index 0592f8010..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerProperties.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.nachrichten; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Configuration -@ConfigurationProperties(prefix = "ozgcloud.nachrichten-manager") -@Setter -@Getter -public class NachrichtenManagerProperties { - - private String url; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java deleted file mode 100644 index 4921595ed..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2024. 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.antragraum; - -import org.apache.commons.lang3.NotImplementedException; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; - -import de.ozgcloud.vorgang.grpc.command.GrpcCommand; -import io.grpc.stub.StreamObserver; -import lombok.RequiredArgsConstructor; -import net.devh.boot.grpc.server.service.GrpcService; - -@GrpcService -@RequiredArgsConstructor -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -class AntragraumGrpcService extends AntragraumServiceGrpc.AntragraumServiceImplBase { - private final AntragraumService antragraumService; - private final AntragraumNachrichtMapper mapper; - - @Override - public void findRueckfragen(GrpcFindRueckfragenRequest request, StreamObserver<GrpcFindRueckfragenResponse> streamObserver) { - var rueckfragen = antragraumService.findRueckfragen(request.getSamlToken()).map(mapper::toGrpc).toList(); - var response = GrpcFindRueckfragenResponse.newBuilder().addAllRueckfrage(rueckfragen).build(); - - streamObserver.onNext(response); - streamObserver.onCompleted(); - } - - @Override - public void sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequest request, StreamObserver<GrpcCommand> streamObserver) { - var answer = request.getAnswer(); - - var commandId = antragraumService.sendRueckfrageAnswer(request.getSamlToken(), answer.getRueckfrageId(), mapper.toPostfachNachricht(answer)); - - streamObserver.onNext(GrpcCommand.newBuilder().setId(commandId).build()); - streamObserver.onCompleted(); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java deleted file mode 100644 index cb54984ef..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2024. 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.antragraum; - -import org.mapstruct.CollectionMappingStrategy; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.NullValueCheckStrategy; - -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; - -@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) -interface AntragraumNachrichtMapper { - String DEFAULT_STATUS = "NEU"; - - @Mapping(source = "sentAt", target = "sentAt", dateFormat = "yyyy-MM-dd'T'HH:mm:ss") - @Mapping(source = "mailBody", target = "text") - @Mapping(source = "subject", target = "vorgangName") - @Mapping(source = "attachments", target = "attachmentFileIdList") - @Mapping(target = "status", constant = DEFAULT_STATUS) - GrpcRueckfrage toGrpc(PostfachNachricht postfachNachricht); - - @Mapping(target = "mailBody", source = "answerText") - @Mapping(target = "attachments", source = "attachmentFileIdList") - @Mapping(target = "createdAt", ignore = true) - @Mapping(target = "createdBy", ignore = true) - @Mapping(target = "direction", ignore = true) - @Mapping(target = "id", ignore = true) - @Mapping(target = "messageCode", ignore = true) - @Mapping(target = "messageId", source = "rueckfrageId") - @Mapping(target = "postfachAddress", ignore = true) - @Mapping(target = "postfachId", ignore = true) - @Mapping(target = "replyOption", ignore = true) - @Mapping(target = "sentAt", ignore = true) - @Mapping(target = "sentSuccessful", ignore = true) - @Mapping(target = "subject", ignore = true) - @Mapping(target = "vorgangId", ignore = true) - PostfachNachricht toPostfachNachricht(GrpcRueckfrageAnswer answer); -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumProperties.java deleted file mode 100644 index 9db391f6c..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumProperties.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2024. 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.antragraum; - -import jakarta.validation.constraints.NotEmpty; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.Resource; -import org.springframework.validation.annotation.Validated; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Configuration -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -@ConfigurationProperties(prefix = "ozgcloud.antragraum") -@Validated -public class AntragraumProperties { - - public static final String PROPERTY_ANTRAGSRAUM_URL = "ozgcloud.antragraum.url"; - - @NotEmpty - private String url; - - /** - * The entityId as defined the BayernId SAML Metadata - */ - @NotEmpty - private String entityId; - /** - * The uri where to load the idp Metadata from - */ - private Resource metadataUri; - /** - * The location of the private key for decrypting the saml token data - */ - private Resource decryptionPrivateKey; - /** - * The location of the certificate for decrypting the saml token data - */ - private Resource decryptionCertificate; - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java deleted file mode 100644 index 3d9ea7abd..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2024. 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.antragraum; - -import static java.util.Objects.*; - -import java.util.stream.Stream; - -import org.apache.commons.collections.CollectionUtils; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Service; - -import de.ozgcloud.nachrichten.NachrichtenManagerProperties; -import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import jakarta.annotation.PostConstruct; -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -public class AntragraumService { - private final PersistPostfachNachrichtService postfachNachrichtService; - private final Saml2Verifier verifier; - private final Saml2Parser parser; - private final Saml2Decrypter decrypter; - - static final String USER_NOTIFICATION_TEMPLATE = """ - Guten Tag, - - bei der Bearbeitung Ihres Antrags hat sich eine Rückfrage ergeben. Bitte beantworten Sie diese im Antragsraum: - - %s - - Vielen Dank, - Ihre digitale Verwaltung - """; - - private final AntragraumProperties properties; - private final NachrichtenManagerProperties nachrichtenManagerProperties; - - @PostConstruct - void init() { - if (isNull(nachrichtenManagerProperties.getUrl())) { - throw new IllegalStateException("Address of Nachrichten-Manager is not set"); - } - } - - public String getAntragsraumUrl() { - return properties.getUrl(); - } - - public String getUserNotificationText() { - return USER_NOTIFICATION_TEMPLATE.formatted(getAntragsraumUrl()); - } - - public Stream<PostfachNachricht> findRueckfragen(String samlToken) { - verifyToken(samlToken); - var postfachId = decrypter.decryptPostfachId(parser.parse(samlToken)); - - return postfachNachrichtService.findRueckfragen(postfachId); - } - - public Stream<PostfachNachricht> findRueckfrageAnswers(String rueckfrageId) { - return postfachNachrichtService.findAnswers(rueckfrageId); - } - - public String sendRueckfrageAnswer(String samlToken, String rueckfrageId, PostfachNachricht nachricht) { - verifyToken(samlToken); - - return postfachNachrichtService.persistAnswer(rueckfrageId, nachricht); - } - - void verifyToken(String token) { - var errors = verifier.verify(token); - if (CollectionUtils.isNotEmpty(errors)) { - throw new SecurityException("SAML Token verification failed. Errors: %s".formatted(errors)); - } - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfiguration.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfiguration.java deleted file mode 100644 index 096115547..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfiguration.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright (c) 2024. 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.antragraum; - -import java.io.IOException; -import java.io.InputStream; -import java.security.cert.CertificateException; -import java.security.cert.CertificateFactory; -import java.security.cert.X509Certificate; -import java.security.interfaces.RSAPrivateKey; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import jakarta.annotation.PostConstruct; - -import org.opensaml.core.config.ConfigurationService; -import org.opensaml.core.config.InitializationService; -import org.opensaml.core.criterion.EntityIdCriterion; -import org.opensaml.core.xml.XMLObject; -import org.opensaml.core.xml.config.XMLObjectProviderRegistry; -import org.opensaml.saml.common.xml.SAMLConstants; -import org.opensaml.saml.criterion.ProtocolCriterion; -import org.opensaml.saml.metadata.criteria.role.impl.EvaluableProtocolRoleDescriptorCriterion; -import org.opensaml.saml.saml2.metadata.EntitiesDescriptor; -import org.opensaml.saml.saml2.metadata.EntityDescriptor; -import org.opensaml.saml.saml2.metadata.KeyDescriptor; -import org.opensaml.security.credential.Credential; -import org.opensaml.security.credential.CredentialResolver; -import org.opensaml.security.credential.UsageType; -import org.opensaml.security.credential.criteria.impl.EvaluableEntityIDCredentialCriterion; -import org.opensaml.security.credential.criteria.impl.EvaluableUsageCredentialCriterion; -import org.opensaml.security.credential.impl.CollectionCredentialResolver; -import org.opensaml.security.criteria.UsageCriterion; -import org.opensaml.security.x509.BasicX509Credential; -import org.opensaml.xmlsec.config.impl.DefaultSecurityConfigurationBootstrap; -import org.opensaml.xmlsec.keyinfo.KeyInfoSupport; -import org.opensaml.xmlsec.signature.support.SignatureTrustEngine; -import org.opensaml.xmlsec.signature.support.impl.ExplicitKeySignatureTrustEngine; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.Resource; -import org.springframework.security.converter.RsaKeyConverters; -import org.springframework.security.saml2.Saml2Exception; -import org.springframework.security.saml2.core.Saml2X509Credential; -import org.springframework.util.Assert; - -import lombok.Getter; -import net.shibboleth.utilities.java.support.component.ComponentInitializationException; -import net.shibboleth.utilities.java.support.resolver.CriteriaSet; -import net.shibboleth.utilities.java.support.xml.BasicParserPool; -import net.shibboleth.utilities.java.support.xml.ParserPool; -import net.shibboleth.utilities.java.support.xml.XMLParserException; - -@Configuration -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -class BayernIdSamlConfiguration { - private XMLObjectProviderRegistry registry; - @Getter - private ParserPool parserPool; - @Autowired - private AntragraumProperties antragraumProperties; - - @PostConstruct - void initOpenSAML() { - try { - registry = new XMLObjectProviderRegistry(); - ConfigurationService.register(XMLObjectProviderRegistry.class, registry); - parserPool = initParserPool(); - - registry.setParserPool(parserPool); - InitializationService.initialize(); - } catch (Exception e) { - throw new RuntimeException("Initialization failed"); - } - } - - private ParserPool initParserPool() throws ComponentInitializationException { - var localParserPool = new BasicParserPool(); - - final var features = createFeatureMap(); - - localParserPool.setBuilderFeatures(features); - - localParserPool.setBuilderAttributes(new HashMap<>()); - - localParserPool.initialize(); - - return localParserPool; - } - - private Map<String, Boolean> createFeatureMap() { - final Map<String, Boolean> features = new HashMap<>(); - features.put("http://xml.org/sax/features/external-general-entities", Boolean.FALSE); - features.put("http://xml.org/sax/features/external-parameter-entities", Boolean.FALSE); - features.put("http://apache.org/xml/features/disallow-doctype-decl", Boolean.TRUE); - features.put("http://apache.org/xml/features/validation/schema/normalized-value", Boolean.FALSE); - features.put("http://javax.xml.XMLConstants/feature/secure-processing", Boolean.TRUE); - return features; - } - - SignatureTrustEngine getTrustEngine() { - Set<Credential> credentials = new HashSet<>(); - Collection<Saml2X509Credential> keys = getCertificatesFromMetadata(); - - for (Saml2X509Credential key : keys) { - var cred = new BasicX509Credential(key.getCertificate()); - cred.setUsageType(UsageType.SIGNING); - cred.setEntityId(antragraumProperties.getEntityId()); - credentials.add(cred); - } - - CredentialResolver credentialsResolver = new CollectionCredentialResolver(credentials); - return new ExplicitKeySignatureTrustEngine(credentialsResolver, - DefaultSecurityConfigurationBootstrap.buildBasicInlineKeyInfoCredentialResolver()); - } - - CriteriaSet getVerificationCriteria() { - var criteria = new CriteriaSet(); - criteria.add(new EvaluableEntityIDCredentialCriterion(new EntityIdCriterion(antragraumProperties.getEntityId()))); - criteria.add(new EvaluableProtocolRoleDescriptorCriterion(new ProtocolCriterion("urn:oasis:names:tc:SAML:2.0:protocol"))); - criteria.add(new EvaluableUsageCredentialCriterion(new UsageCriterion(UsageType.SIGNING))); - return criteria; - } - - Saml2X509Credential getDecryptionCredential() { - var privateKey = readPrivateKey(antragraumProperties.getDecryptionPrivateKey()); - var certificate = readCertificateFromResource(antragraumProperties.getDecryptionCertificate()); - return new Saml2X509Credential(privateKey, certificate, Saml2X509Credential.Saml2X509CredentialType.DECRYPTION); - } - - private RSAPrivateKey readPrivateKey(Resource location) { - Assert.state(location != null, "No private key location specified"); - Assert.state(location.exists(), () -> "Private key location '" + location + "' does not exist"); - try (var inputStream = location.getInputStream()) { - return RsaKeyConverters.pkcs8().convert(inputStream); - } catch (IOException e) { - throw new IllegalArgumentException(e); - } - } - - private X509Certificate readCertificateFromResource(Resource location) { - Assert.state(location != null, "No certificate location specified"); - Assert.state(location.exists(), () -> "Certificate location '" + location + "' does not exist"); - try (var inputStream = location.getInputStream()) { - - return (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(inputStream); - } catch (IOException | CertificateException e) { - throw new IllegalArgumentException(e); - } - } - - List<Saml2X509Credential> getCertificatesFromMetadata() { - try (var metadata = antragraumProperties.getMetadataUri().getInputStream()) { - var xmlObject = xmlObject(metadata); - if (xmlObject instanceof EntitiesDescriptor descriptors) { - for (EntityDescriptor descriptor : descriptors.getEntityDescriptors()) { - if (descriptor.getIDPSSODescriptor(SAMLConstants.SAML20P_NS) != null) { - return getVerificationCertificates(descriptor); - } - } - } - } catch (IOException e) { - throw new Saml2Exception("Error reading idp metadata.", e); - } catch (ComponentInitializationException | XMLParserException e) { - throw new Saml2Exception("Error initializing parser pool.", e); - } - - throw new Saml2Exception("No IDPSSO Descriptors found"); - } - - private XMLObject xmlObject(InputStream inputStream) throws ComponentInitializationException, XMLParserException { - var document = getParserPool().parse(inputStream); - var element = document.getDocumentElement(); - var unmarshaller = this.registry.getUnmarshallerFactory().getUnmarshaller(element); - if (unmarshaller == null) { - throw new Saml2Exception("Unsupported element of type " + element.getTagName()); - } - try { - return unmarshaller.unmarshall(element); - } catch (Exception ex) { - throw new Saml2Exception(ex); - } - } - - List<Saml2X509Credential> getVerificationCertificates(EntityDescriptor descriptor) { - var idpssoDescriptor = descriptor.getIDPSSODescriptor(SAMLConstants.SAML20P_NS); - if (idpssoDescriptor == null) { - throw new Saml2Exception("Metadata response is missing the necessary IDPSSODescriptor element"); - } - List<Saml2X509Credential> verification = new ArrayList<>(); - for (KeyDescriptor keyDescriptor : idpssoDescriptor.getKeyDescriptors()) { - if (keyDescriptor.getUse().equals(UsageType.SIGNING)) { - var certificates = certificates(keyDescriptor); - for (X509Certificate certificate : certificates) { - verification.add(Saml2X509Credential.verification(certificate)); - } - } - } - if (verification.isEmpty()) { - throw new Saml2Exception( - "Metadata response is missing verification certificates, necessary for verifying SAML assertions"); - } - - return verification; - } - - private List<X509Certificate> certificates(KeyDescriptor keyDescriptor) { - try { - return KeyInfoSupport.getCertificates(keyDescriptor.getKeyInfo()); - } catch (CertificateException ex) { - throw new Saml2Exception(ex); - } - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Decrypter.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Decrypter.java deleted file mode 100644 index 9728ddba8..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Decrypter.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c) 2024. 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.antragraum; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; - -import jakarta.annotation.PostConstruct; - -import org.opensaml.core.xml.schema.XSString; -import org.opensaml.saml.saml2.core.AttributeStatement; -import org.opensaml.saml.saml2.core.EncryptedAssertion; -import org.opensaml.saml.saml2.core.Response; -import org.opensaml.saml.saml2.encryption.Decrypter; -import org.opensaml.saml.saml2.encryption.EncryptedElementTypeEncryptedKeyResolver; -import org.opensaml.security.credential.Credential; -import org.opensaml.security.credential.CredentialSupport; -import org.opensaml.xmlsec.encryption.support.ChainingEncryptedKeyResolver; -import org.opensaml.xmlsec.encryption.support.EncryptedKeyResolver; -import org.opensaml.xmlsec.encryption.support.InlineEncryptedKeyResolver; -import org.opensaml.xmlsec.encryption.support.SimpleRetrievalMethodEncryptedKeyResolver; -import org.opensaml.xmlsec.keyinfo.KeyInfoCredentialResolver; -import org.opensaml.xmlsec.keyinfo.impl.CollectionKeyInfoCredentialResolver; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.security.saml2.Saml2Exception; -import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -class Saml2Decrypter { - private final BayernIdSamlConfiguration configuration; - - public static final String LEGACY_POSTKORB_HANDLE_KEY = "legacyPostkorbHandle"; - private Decrypter decrypter; - private static final EncryptedKeyResolver encryptedKeyResolver = new ChainingEncryptedKeyResolver( - Arrays.asList(new InlineEncryptedKeyResolver(), new EncryptedElementTypeEncryptedKeyResolver(), - new SimpleRetrievalMethodEncryptedKeyResolver())); - - @PostConstruct - void init() { - Collection<Credential> credentials = new ArrayList<>(); - var decryptionX509Credential = configuration.getDecryptionCredential(); - - Credential cred = CredentialSupport.getSimpleCredential(decryptionX509Credential.getCertificate(), decryptionX509Credential.getPrivateKey()); - credentials.add(cred); - - KeyInfoCredentialResolver resolver = new CollectionKeyInfoCredentialResolver(credentials); - var setupDecrypter = new Decrypter(null, resolver, encryptedKeyResolver); - setupDecrypter.setRootInNewDocument(true); - - decrypter = setupDecrypter; - } - - void decryptResponseElements(Response response) { - for (EncryptedAssertion encryptedAssertion : response.getEncryptedAssertions()) { - try { - var assertion = decrypter.decrypt(encryptedAssertion); - response.getAssertions().add(assertion); - } catch (Exception ex) { - throw new Saml2Exception(ex); - } - } - } - - String decryptPostfachId(Response response) { - decryptResponseElements(response); - - var samlAssertion = response.getAssertions().get(0); - var statements = (AttributeStatement) samlAssertion.getStatements().get(1); - var attributes = statements.getAttributes(); - var postfachIdOptional = attributes.stream().filter(attribute -> LEGACY_POSTKORB_HANDLE_KEY.equals(attribute.getFriendlyName())).findFirst(); - - return postfachIdOptional.map(postfachIdAttribute -> { - var values = postfachIdAttribute.getAttributeValues(); - return ((XSString) values.get(0)).getValue(); - }).orElseThrow(); - - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Parser.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Parser.java deleted file mode 100644 index fa23252ab..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Parser.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2024. 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.antragraum; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.Objects; - -import org.opensaml.core.xml.XMLObject; -import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport; -import org.opensaml.core.xml.io.UnmarshallingException; -import org.opensaml.saml.saml2.core.Response; -import org.opensaml.saml.saml2.core.impl.ResponseUnmarshaller; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.security.saml2.Saml2Exception; -import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; -import net.shibboleth.utilities.java.support.xml.XMLParserException; - -@Service -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -@RequiredArgsConstructor -class Saml2Parser { - private final BayernIdSamlConfiguration configuration; - private ResponseUnmarshaller unmarshaller; - - Response parse(String request) { - return (Response) xmlObject(new ByteArrayInputStream(request.getBytes(StandardCharsets.UTF_8))); - } - - XMLObject xmlObject(InputStream inputStream) throws Saml2Exception { - try { - var document = configuration.getParserPool().parse(inputStream); - var element = document.getDocumentElement(); - return getUnmarshaller().unmarshall(element); - } catch (XMLParserException | UnmarshallingException e) { - throw new Saml2Exception("Failed to deserialize LogoutRequest", e); - } - } - - private ResponseUnmarshaller getUnmarshaller() { - if (Objects.nonNull(unmarshaller)) { - return unmarshaller; - } - - unmarshaller = (ResponseUnmarshaller) XMLObjectProviderRegistrySupport.getUnmarshallerFactory() - .getUnmarshaller(Response.DEFAULT_ELEMENT_NAME); - return unmarshaller; - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Verifier.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Verifier.java deleted file mode 100644 index e8cdf4d18..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Verifier.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2024. 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.antragraum; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import jakarta.annotation.PostConstruct; - -import org.opensaml.saml.security.impl.SAMLSignatureProfileValidator; -import org.opensaml.xmlsec.signature.support.SignatureTrustEngine; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.security.saml2.core.Saml2Error; -import org.springframework.security.saml2.core.Saml2ErrorCodes; -import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; -import net.shibboleth.utilities.java.support.resolver.CriteriaSet; - -@Log4j2 -@RequiredArgsConstructor -@Service -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -class Saml2Verifier { - public static final String INVALID_SIGNATURE = "Invalid signature for object [%s]: "; - public static final String SIGNATURE_MISSING = "Signature missing"; - private final Saml2Parser parser; - private final BayernIdSamlConfiguration configuration; - private SignatureTrustEngine trustEngine; - private CriteriaSet verificationCriteria; - - @PostConstruct - void init() { - trustEngine = configuration.getTrustEngine(); - verificationCriteria = configuration.getVerificationCriteria(); - } - - List<Saml2Error> verify(String samlToken) { - var response = parser.parse(samlToken); - - List<Saml2Error> errors = new ArrayList<>(); - var signature = response.getSignature(); - var profileValidator = new SAMLSignatureProfileValidator(); - if (Objects.nonNull(signature)) { - try { - profileValidator.validate(signature); - } catch (Exception ex) { - LOG.error("Error validating SAML Token: ", ex); - errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, INVALID_SIGNATURE.formatted(response.getID()))); - } - - try { - if (!trustEngine.validate(signature, verificationCriteria)) { - errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, INVALID_SIGNATURE.formatted(response.getID()))); - } - } catch (Exception ex) { - LOG.error("Error validating SAML Token: ", ex); - errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, INVALID_SIGNATURE.formatted(response.getID()))); - } - } else { - errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, SIGNATURE_MISSING)); - } - - return errors; - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteService.java deleted file mode 100644 index 1263c973b..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteService.java +++ /dev/null @@ -1,72 +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.attributes; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.nachrichten.common.grpc.NachrichtenCallContextAttachingInterceptor; -import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc.ClientAttributeServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class ClientAttributeRemoteService { - - @GrpcClient("pluto") - private ClientAttributeServiceBlockingStub stub; - - public void setBooleanReadOnlyClientAttribute(String vorgangId, String attributeName, boolean value) { - stub.withInterceptors(new NachrichtenCallContextAttachingInterceptor()) - .set(buildRequest(vorgangId, attributeName, value)); - } - - private GrpcSetClientAttributeRequest buildRequest(String vorgangId, String attributeName, boolean value) { - return buildRequest(vorgangId, GrpcClientAttribute.newBuilder() - .setAccess(GrpcAccessPermission.READ_ONLY) - .setAttributeName(attributeName) - .setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(value).build()).build()); - } - - public void setBooleanWriteableClientAttribute(String vorgangId, String attributeName, boolean value) { - stub.withInterceptors(new NachrichtenCallContextAttachingInterceptor()) - .set(buildRequestForWritableAttribute(vorgangId, attributeName, value)); - } - - private GrpcSetClientAttributeRequest buildRequestForWritableAttribute(String vorgangId, String attributeName, boolean value) { - return buildRequest(vorgangId, GrpcClientAttribute.newBuilder() - .setAccess(GrpcAccessPermission.READ_WRITE) - .setAttributeName(attributeName) - .setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(value).build()).build()); - } - - private GrpcSetClientAttributeRequest buildRequest(String vorgangId, GrpcClientAttribute attribute) { - return GrpcSetClientAttributeRequest.newBuilder() - .setVorgangId(vorgangId) - .setAttribute(attribute) - .build(); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeService.java deleted file mode 100644 index 758893618..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeService.java +++ /dev/null @@ -1,49 +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.attributes; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -@Service("nachrichtenClientAttributeService") -public class ClientAttributeService { - - static final String ATTRIBUTE_NAME_HAS_POSTFACH_NACHRICHT = "hasPostfachNachricht"; - - static final String ATTRIBUTE_NAME_HAS_NEW_POSTFACH_NACHRICHT = "hasNewPostfachNachricht"; - - @Autowired - private ClientAttributeRemoteService remoteService; - - @Async - public void setHasPostfachNachricht(String vorgangId) { - remoteService.setBooleanReadOnlyClientAttribute(vorgangId, ATTRIBUTE_NAME_HAS_POSTFACH_NACHRICHT, true); - } - - @Async - public void setHasNewPostfachNachricht(String vorgangId) { - remoteService.setBooleanWriteableClientAttribute(vorgangId, ATTRIBUTE_NAME_HAS_NEW_POSTFACH_NACHRICHT, true); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeTestFactory.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeTestFactory.java deleted file mode 100644 index 1938b59ea..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeTestFactory.java +++ /dev/null @@ -1,30 +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.attributes; - -public class ClientAttributeTestFactory { - - static final String ATTRIBUTE_NAME = "TestAttribute"; - static final String VALUE = "TestStringValue"; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/FunctionalException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/FunctionalException.java deleted file mode 100644 index df6be012c..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/FunctionalException.java +++ /dev/null @@ -1,33 +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.common.errorhandling; - -public class FunctionalException extends RuntimeException { - - private static final long serialVersionUID = 1L; - - public FunctionalException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/TechnicalException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/TechnicalException.java deleted file mode 100644 index 307353add..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/TechnicalException.java +++ /dev/null @@ -1,38 +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.common.errorhandling; - -@Deprecated /** please use {@link de.ozgcloud.common.errorhandling.TechnicalException} */ -public class TechnicalException extends RuntimeException { - - private static final long serialVersionUID = 1L; - - public TechnicalException(String message) { - super(message); - } - - public TechnicalException(String message, Throwable cause) { - super(message, cause); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/grpc/NachrichtenCallContextAttachingInterceptor.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/grpc/NachrichtenCallContextAttachingInterceptor.java deleted file mode 100644 index d3fa03da9..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/grpc/NachrichtenCallContextAttachingInterceptor.java +++ /dev/null @@ -1,82 +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.common.grpc; - -import static de.ozgcloud.common.grpc.GrpcUtil.*; - -import java.util.UUID; - -import io.grpc.CallOptions; -import io.grpc.Channel; -import io.grpc.ClientCall; -import io.grpc.ClientInterceptor; -import io.grpc.ForwardingClientCall.SimpleForwardingClientCall; -import io.grpc.Metadata; -import io.grpc.MethodDescriptor; - -public class NachrichtenCallContextAttachingInterceptor implements ClientInterceptor { - - static final String KEY_USER_ID = "USER_ID-bin"; - static final String KEY_CLIENT_NAME = "CLIENT_NAME-bin"; - static final String KEY_REQUEST_ID = "REQUEST_ID-bin"; - - public static final String NACHRICHTEN_MANAGER_CLIENT_NAME = "OzgCloud_NachrichtenManager"; - static final String NACHRICHTEN_MANAGER_SENDER_USER_ID = "system-nachrichten_manager-sender"; - - // <A> = Request, <B> = Response - @Override - public <A, B> ClientCall<A, B> interceptCall(MethodDescriptor<A, B> method, CallOptions callOptions, Channel next) { - return new CallContextAttachingClientCall<>(next.newCall(method, callOptions)); - } - - final class CallContextAttachingClientCall<A, B> extends SimpleForwardingClientCall<A, B> { - - protected CallContextAttachingClientCall(ClientCall<A, B> delegate) { - super(delegate); - } - - @Override - public void start(Listener<B> responseListener, Metadata headers) { - headers.merge(buildCallContextMetadata()); - super.start(responseListener, headers); - } - - private Metadata buildCallContextMetadata() { - var metadata = new Metadata(); - - metadata.put(createKeyOf(KEY_USER_ID), NACHRICHTEN_MANAGER_SENDER_USER_ID.getBytes()); - metadata.put(createKeyOf(KEY_CLIENT_NAME), NACHRICHTEN_MANAGER_CLIENT_NAME.getBytes()); - metadata.put(createKeyOf(KEY_REQUEST_ID), generateRequestId().getBytes()); - - return metadata; - } - - // TODO OZG-1974 requestId zentraler erzeugen - private String generateRequestId() { - return UUID.randomUUID().toString(); - } - - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EMailService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EMailService.java deleted file mode 100644 index 8f5c54e5d..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EMailService.java +++ /dev/null @@ -1,158 +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.email; - -import java.util.Objects; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.mail.MailException; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.mail.javamail.MimeMessageHelper; -import org.springframework.stereotype.Service; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.email.MailSendRequest.MailAttachment; -import jakarta.mail.MessagingException; -import jakarta.mail.internet.MimeMessage; -import lombok.extern.log4j.Log4j2; - -@Service -@Log4j2 -class EMailService { - - static final String HEADER_READ_RECEIPT = "Read-Receipt-To"; - static final String HEADER_CONFIRM_READING = "X-Confirm-reading-to"; - static final String HEADER_DISPOSITION_NOTIFICATION = "Disposition-Notification-To"; - static final String HEADER_SENSITIVITY = "Sensitivity"; // RFC2156 - static final String VALUE_SENSITIVITY = "Company-Confidential"; - - @Autowired - private JavaMailSender sender; - - @Autowired - private ApplicationEventPublisher publisher; - - public void sendEmail(MailSendRequest request) { - MimeMessage message = sender.createMimeMessage(); - prepareAndSendMail(message, request); - } - - void prepareAndSendMail(MimeMessage message, MailSendRequest request) { - MimeMessageHelper helper = buildMultipartHelper(message); - - writeEmail(helper, request); - addAttachments(helper, request); - if (request.isReceiptRequired()) { - requestReceipt(message, request); - } - addHeader(message, "Content-Transfer-Encoding", "quoted-printable"); - send(message, request); - } - - void writeEmail(MimeMessageHelper helper, MailSendRequest request) { - try { - var toAddresses = request.getToAddresses().stream().map(this::formatEmailAddress).toArray(String[]::new); - helper.setTo(toAddresses); - helper.setFrom(request.getFromAddress()); - helper.setSubject(request.getSubject()); - helper.setText(request.getBody()); - // TODO replyTo ausbauen - setReplyTo(helper, request); - } catch (MessagingException e) { - throw new TechnicalException("Error writing mail", e); - } - } - - private String formatEmailAddress(MailRecipient mailRecipient) { - if (StringUtils.isAllBlank(mailRecipient.firstName(), mailRecipient.lastName())) { - return mailRecipient.email(); - } - var builder = new StringBuilder(); - if (StringUtils.isNotEmpty(mailRecipient.firstName())) { - builder.append(mailRecipient.firstName()).append(" "); - } - if (StringUtils.isNotEmpty(mailRecipient.lastName())) { - builder.append(mailRecipient.lastName()).append(" "); - } - return builder.append("<").append(mailRecipient.email()).append(">").toString(); - } - - private void setReplyTo(MimeMessageHelper helper, MailSendRequest request) throws MessagingException { - if (Objects.nonNull(request.getReplyTo())) { - helper.setReplyTo(request.getReplyTo()); - } - } - - void requestReceipt(MimeMessage message, MailSendRequest request) { - addHeader(message, HEADER_READ_RECEIPT, request.getFromAddress()); - addHeader(message, HEADER_CONFIRM_READING, request.getFromAddress()); - addHeader(message, HEADER_DISPOSITION_NOTIFICATION, request.getFromAddress()); - } - - private void addHeader(MimeMessage message, String header, String value) { - try { - message.addHeader(header, value); - } catch (MessagingException e) { - throw new TechnicalException(String.format("Error adding header '%s' with value '%s'", header, value), e); - } - } - - void addAttachments(MimeMessageHelper helper, MailSendRequest request) { - request.getAttachments().forEach(attachment -> addAttachment(helper, attachment)); - } - - private void addAttachment(MimeMessageHelper helper, MailAttachment attachment) { - try { - if (Objects.isNull(attachment.getContentId())) { - helper.addAttachment(attachment.getDataSource().getName(), attachment.getDataSource()); - } else { - helper.addInline(attachment.getContentId(), attachment.getDataSource()); - - } - - } catch (MessagingException e) { - throw new TechnicalException("Error adding Attachment.", e); - } - } - - private MimeMessageHelper buildMultipartHelper(MimeMessage message) { - try { - return new MimeMessageHelper(message, true); - } catch (MessagingException e) { - throw new TechnicalException("Error creating multipart message helper.", e); - } - } - - void send(MimeMessage message, MailSendRequest request) { - try { - sender.send(message); - publisher.publishEvent(new MailSentEvent(request)); - } catch (MailException e) { - LOG.error("Error sending mail", e); - publisher.publishEvent(new MailSendErrorEvent(request, e.getMessage())); - } - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EmailGrpcService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EmailGrpcService.java deleted file mode 100644 index 4a53a505a..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EmailGrpcService.java +++ /dev/null @@ -1,65 +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.email; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; - -import de.ozgcloud.nachrichten.email.MailSendRequest.MailSendRequestBuilder; -import io.grpc.stub.StreamObserver; -import net.devh.boot.grpc.server.service.GrpcService; - -@GrpcService -public class EmailGrpcService extends EmailServiceGrpc.EmailServiceImplBase { - - @Autowired - private MailService mailService; - - @Value("${ozgcloud.notification.mail-from}") - private String mailFrom; - - @Override - public void sendEmail(GrpcSendEmailRequest grpcRequest, StreamObserver<GrpcSendEmailResponse> responseObserver) { - createSendMailRequests(grpcRequest).forEach(mailService::sendMail); - responseObserver.onNext(GrpcSendEmailResponse.newBuilder().build()); - responseObserver.onCompleted(); - } - - private List<MailSendRequest> createSendMailRequests(GrpcSendEmailRequest grpcRequest) { - var subject = grpcRequest.getSubject(); - var body = grpcRequest.getBody(); - return grpcRequest.getRecipientsList().stream() - .map(this::prepareMailSendRequest) - .map(builder -> builder.subject(subject).body(body).build()) - .toList(); - } - - private MailSendRequestBuilder prepareMailSendRequest(GrpcRecipient recipient) { - var mailRecipient = MailRecipient.builder().firstName(recipient.getFirstName()).lastName(recipient.getLastName()).email(recipient.getEmail()) - .build(); - return MailSendRequest.builder().fromAddress(mailFrom).toAddress(mailRecipient); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailRecipient.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailRecipient.java deleted file mode 100644 index e5f76ec83..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailRecipient.java +++ /dev/null @@ -1,30 +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.email; - -import lombok.Builder; - -@Builder -public record MailRecipient(String firstName, String lastName, String email) { -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendErrorEvent.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendErrorEvent.java deleted file mode 100644 index 0bb7d78e7..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendErrorEvent.java +++ /dev/null @@ -1,47 +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.email; - -import org.springframework.context.ApplicationEvent; - -import lombok.Getter; - -public class MailSendErrorEvent extends ApplicationEvent { - - private static final long serialVersionUID = 1L; - - @Getter - private final String errorMessage; - - MailSendErrorEvent(MailSendRequest source, String errorMessage) { - super(source); - this.errorMessage = errorMessage; - } - - @Override - public MailSendRequest getSource() { - return (MailSendRequest) super.getSource(); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendRequest.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendRequest.java deleted file mode 100644 index 8026f7cc8..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendRequest.java +++ /dev/null @@ -1,61 +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.email; - -import java.util.Collection; - -import jakarta.activation.DataSource; -import lombok.Builder; -import lombok.Getter; -import lombok.Singular; - -@Getter -@Builder -public class MailSendRequest { - - private String fromAddress; - @Singular - private Collection<MailRecipient> toAddresses; - - private String replyTo; - - private String subject; - private String body; - @Singular - private Collection<MailAttachment> attachments; - - private boolean receiptRequired; - - private Object requestReference; - - @Getter - @Builder - public static class MailAttachment { - - private DataSource dataSource; - private String contentId; - - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSentEvent.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSentEvent.java deleted file mode 100644 index 1c69e781b..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSentEvent.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.email; - -import org.springframework.context.ApplicationEvent; - -public class MailSentEvent extends ApplicationEvent { - - private static final long serialVersionUID = 1L; - - MailSentEvent(MailSendRequest source) { - super(source); - } - - @Override - public MailSendRequest getSource() { - return (MailSendRequest) super.getSource(); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailService.java deleted file mode 100644 index 1dd1bbde8..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailService.java +++ /dev/null @@ -1,40 +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.email; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -@Service -public class MailService { - - @Autowired - private EMailService emailService; - - @Async - public void sendMail(MailSendRequest request) { - emailService.sendEmail(request); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteService.java deleted file mode 100644 index 47e348e46..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteService.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.info.nachricht.GrpcNewNachrichtRequest; -import de.ozgcloud.info.nachricht.NachrichtServiceGrpc.NachrichtServiceBlockingStub; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class InfoManagerRemoteService { - - @GrpcClient("info-manager") - private NachrichtServiceBlockingStub nachrichtServiceStub; - - @Autowired - private InfomanagerNachrichtMapper nachrichtMapper; - - public String sendNotification(InfoManagerRequest nachricht) { - var grpcNewNachrichtReply = nachrichtServiceStub.saveNewNachricht(buildNachrichtRequest(nachricht)); - return grpcNewNachrichtReply.getStatus(); - } - - GrpcNewNachrichtRequest buildNachrichtRequest(InfoManagerRequest nachricht) { - return GrpcNewNachrichtRequest.newBuilder().setNachricht(nachrichtMapper.toGrpc(nachricht)).build(); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRequest.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRequest.java deleted file mode 100644 index 639de00a4..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRequest.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class InfoManagerRequest { - - private String nachrichtId; - private String vorgangId; - private String postfachId; - private String nachrichtenManagerUrl; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java deleted file mode 100644 index 0894f2612..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; - -import de.ozgcloud.nachrichten.NachrichtenManagerProperties; -import de.ozgcloud.nachrichten.antragraum.AntragraumProperties; -import de.ozgcloud.nachrichten.postfach.PostfachException; -import de.ozgcloud.nachrichten.postfach.PostfachMessageCode; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -public class InfoManagerService { - - private final InfoManagerRemoteService infomanagerRemoteService; - private final NachrichtenManagerProperties nachrichtenManagerProperties; - - public void notifyInfoManager(PostfachNachricht postfachNachricht) { - try { - infomanagerRemoteService.sendNotification(builInfomanagerRequest(postfachNachricht)); - } catch (RuntimeException e) { - throw new PostfachException("Error while sending notification to Antragsraum", PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE, e); - } - } - - InfoManagerRequest builInfomanagerRequest(PostfachNachricht postfachNachricht) { - return InfoManagerRequest.builder() - .nachrichtId(postfachNachricht.getId()) - .vorgangId(postfachNachricht.getVorgangId()) - .postfachId(postfachNachricht.getPostfachId()) - .nachrichtenManagerUrl(nachrichtenManagerProperties.getUrl()) - .build(); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapper.java deleted file mode 100644 index 655bdc3f7..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -import de.ozgcloud.info.nachricht.GrpcNachricht; - -@Mapper -interface InfomanagerNachrichtMapper { - - @Mapping(target = "nachrichtenListUrl", source = "nachrichtenManagerUrl") - GrpcNachricht toGrpc(InfoManagerRequest infomanagerNachricht); - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerProperties.java deleted file mode 100644 index eb89410dc..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerProperties.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import jakarta.validation.constraints.NotEmpty; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.validation.annotation.Validated; - -import de.ozgcloud.nachrichten.antragraum.AntragraumProperties; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Configuration -@ConfigurationProperties(prefix = "grpc.client.info-manager") -@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL) -@Validated -public class InfomanagerProperties { - - @NotEmpty - private String address; - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java deleted file mode 100644 index 013363686..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 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; - -import static java.util.Objects.*; - -import java.io.InputStream; -import java.util.function.Supplier; - -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.ToString; - -@Builder -@Getter -@ToString -public class AttachmentFile { - private String name; - private String contentType; - @Getter(AccessLevel.NONE) - @ToString.Exclude - private Supplier<InputStream> content; - - public InputStream getContent() { - if (isNull(content)) { - return InputStream.nullInputStream(); - } - return content.get(); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.java deleted file mode 100644 index 6f7465cea..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.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; - -import java.io.InputStream; - -import com.mongodb.client.gridfs.model.GridFSFile; - -//Temporally replacement for using GRPC Api -public interface BinaryFileService { - - InputStream getUploadedFileStream(FileId fileId); - - GridFSFile getFile(FileId fileId); -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/FileId.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/FileId.java deleted file mode 100644 index 785167921..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/FileId.java +++ /dev/null @@ -1,48 +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; - -import java.util.UUID; - -import de.ozgcloud.common.datatype.StringBasedValue; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -public class FileId extends StringBasedValue { - - private static final long serialVersionUID = 1L; - - FileId(String fileId) { - super(fileId); - } - - public static FileId createNew() { - return from(UUID.randomUUID().toString()); - } - - public static FileId from(String fileId) { - return new FileId(fileId); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachNachrichtMapper.java deleted file mode 100644 index 53a1512d6..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachNachrichtMapper.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -import de.ozgcloud.vorgang.common.GrpcObject; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; - -@Mapper(uses = GrpcObjectMapper.class) -public interface GrpcPostfachNachrichtMapper { - - @Mapping(target = "attachments", source = "attachmentList") - @Mapping(target = "createdAt", ignore = true) - @Mapping(target = "createdBy", ignore = true) - @Mapping(target = "direction", constant = "OUT") - @Mapping(target = "messageCode", ignore = true) - @Mapping(target = "messageId", ignore = true) - @Mapping(target = "postfachId", ignore = true) - @Mapping(target = "sentAt", ignore = true) - @Mapping(target = "sentSuccessful", ignore = true) - @Mapping(target = "vorgangId", ignore = true) - PostfachNachricht mapFromGrpc(GrpcPostfachNachricht nachricht); - - default PostfachAddressIdentifier map(GrpcObject value) { - return StringBasedIdentifier.builder().postfachId(value.getProperty(0).getValue(0)).build(); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/NotConfiguredException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/NotConfiguredException.java deleted file mode 100644 index a677491d2..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/NotConfiguredException.java +++ /dev/null @@ -1,35 +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; - -public class NotConfiguredException extends PostfachException { // NOSONAR - - private static final long serialVersionUID = 1L; - - public NotConfiguredException() { - super("Postfach is not completely configured. Sending and receiving of postfach mails is not possible.", - PostfachMessageCode.SERVER_CONNECTION_FAILED_MESSAGE_CODE); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java deleted file mode 100644 index e25434580..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java +++ /dev/null @@ -1,64 +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; - -import java.util.Map; -import java.util.Optional; -import java.util.stream.Stream; - -//Temporally replacement for usign GRPC Api -public interface PersistPostfachNachrichtService { - - void persistNachricht(Optional<String> userId, PostfachNachricht nachricht); - - Stream<Map<String, Object>> findByVorgangAsMap(String vorgangId); - - Optional<Map<String, Object>> findById(String nachrichtId); - - void patch(String postfachMailId, Map<String, Object> propertyMap); - - Map<String, Object> getById(String itemId); - - // TODO use file id as soon it is available - String persistAttachment(String vorgangId, AttachmentFile attachment); - - Stream<PostfachNachricht> findRueckfragen(String postfachId); - - /** - * Persists the given answer - * - * @param answer The given answer - * @param rueckfrageId The ID of the original Rueckfrage - * @return - */ - String persistAnswer(String rueckfrageId, PostfachNachricht answer); - - /** - * Returns all Answers given for the Rueckfrage identified by id - * - * @param rueckfrageId ID of the Rueckfrage to load answers for. - * @return all Answers - */ - Stream<PostfachNachricht> findAnswers(String rueckfrageId); -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/Postfach.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/Postfach.java deleted file mode 100644 index 4177ff1a1..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/Postfach.java +++ /dev/null @@ -1,13 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -class Postfach { - - private String type; - - private boolean isReplyAllowed; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java deleted file mode 100644 index 29ce7bec0..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class PostfachAddress { - - public static final String VERSION_FIELD = "version"; - public static final String TYPE_FIELD = "type"; - public static final String IDENTIFIER_FIELD = "identifier"; - public static final String SERVICEKONTO_TYPE_FIELD = "serviceKontoType"; - - private String version; - private int type; - private PostfachAddressIdentifier identifier; - private String serviceKontoType; -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java deleted file mode 100644 index 5d60cfbd4..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java +++ /dev/null @@ -1,5 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -public interface PostfachAddressIdentifier { - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachBadRequestException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachBadRequestException.java deleted file mode 100644 index 6b9fdea6c..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachBadRequestException.java +++ /dev/null @@ -1,33 +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; - -public class PostfachBadRequestException extends PostfachException { - - private static final long serialVersionUID = 1L; - - public PostfachBadRequestException(Throwable cause) { - super("Bad-Request Received from Postfach Server", PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE, cause); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachEventListener.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachEventListener.java deleted file mode 100644 index 98dc2be90..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachEventListener.java +++ /dev/null @@ -1,125 +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; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Predicate; - -import org.apache.commons.collections.MapUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Component; - -import de.ozgcloud.command.Command; -import de.ozgcloud.command.CommandCreatedEvent; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; -import lombok.extern.log4j.Log4j2; - -@Component -@Log4j2 -public class PostfachEventListener { - - private static final String IS_SEND_POSTFACH_NACHRICHT_COMMAND = "{T(de.ozgcloud.nachrichten.postfach.PostfachEventListener).IS_SEND_POSTFACH_NACHRICHT.test(event.getSource())}"; - - public static final Predicate<Command> IS_SEND_POSTFACH_NACHRICHT = command -> command.getOrder().equals("SEND_POSTFACH_NACHRICHT"); - - @Autowired - private PostfachService service; - - @EventListener(condition = IS_SEND_POSTFACH_NACHRICHT_COMMAND) - public void sendPostfachNachricht(CommandCreatedEvent event) { - var command = event.getSource(); - try { - service.sendMail(command.getId(), command.getCreatedBy(), buildNachricht(command, command.getBodyObject())); - } catch (RuntimeException e) { - service.publishMailSentFailedEvent(command.getId(), "Error on sending Postfach Nachricht: " + e.getMessage()); - LOG.error("Error on sending Postfach Nachricht.", e); - } - } - - private PostfachNachricht buildNachricht(Command command, Map<String, Object> commandBody) { - var postfachMailBuilder = PostfachNachricht.builder() - .id(isNewNachricht(command) ? null : command.getRelationId()) - .vorgangId(command.getVorgangId()) - .postfachId(MapUtils.getString(commandBody, PostfachNachricht.FIELD_POSTFACH_ID)) - .replyOption(PostfachNachricht.ReplyOption.valueOf(MapUtils.getString(commandBody, PostfachNachricht.FIELD_REPLY_OPTION))) - .createdBy(command.getCreatedBy()) - .direction(Direction.OUT) - .subject(MapUtils.getString(commandBody, PostfachNachricht.FIELD_SUBJECT)) - .mailBody(MapUtils.getString(commandBody, PostfachNachricht.FIELD_MAIL_BODY)) - .attachments(getStringListValue(commandBody, PostfachNachricht.FIELD_ATTACHMENTS)); - - Optional.ofNullable(getPostfachAddress(commandBody)).map(this::buildPostfachAddress).ifPresent(postfachMailBuilder::postfachAddress); - - return postfachMailBuilder.build(); - } - - private boolean isNewNachricht(Command command) { - return Objects.isNull(command.getRelationId()) || StringUtils.equals(command.getVorgangId(), command.getRelationId()); - } - - private PostfachAddress buildPostfachAddress(Map<String, Object> postfachAddress) { - return PostfachAddress.builder() - .type(MapUtils.getIntValue(postfachAddress, PostfachAddress.TYPE_FIELD)) - .version(MapUtils.getString(postfachAddress, PostfachAddress.VERSION_FIELD)) - .identifier(buildIdentifier(postfachAddress)) - .serviceKontoType(MapUtils.getString(postfachAddress, PostfachAddress.SERVICEKONTO_TYPE_FIELD)) - .build(); - } - - @SuppressWarnings("unchecked") - private Map<String, Object> getPostfachAddress(Map<String, Object> commandBody) { - return (Map<String, Object>) commandBody.get(PostfachNachricht.POSTFACH_ADDRESS_FIELD); - } - - private PostfachAddressIdentifier buildIdentifier(Map<String, Object> postfachAddress) { - var identifier = getIdentifier(postfachAddress); - return StringBasedIdentifier.builder().postfachId(MapUtils.getString(identifier, PostfachNachricht.FIELD_POSTFACH_ID)).build(); - } - - @SuppressWarnings("unchecked") - private Map<String, Object> getIdentifier(Map<String, Object> postfachAddress) { - return (Map<String, Object>) postfachAddress.get(PostfachAddress.IDENTIFIER_FIELD); - } - - List<String> getStringListValue(Map<String, Object> commandBody, String fieldName) { - return Optional.ofNullable(commandBody.get(fieldName)) - .map(this::mapObjectToList) - .orElse(Collections.emptyList()); - } - - private List<String> mapObjectToList(Object object) { - if (object instanceof Collection<?> objects) { - return objects.stream().map(Objects::toString).toList(); - } else { - return List.of(object.toString()); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachException.java deleted file mode 100644 index 26717bcba..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachException.java +++ /dev/null @@ -1,45 +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; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.Getter; - -public class PostfachException extends TechnicalException { - - private static final long serialVersionUID = 1L; - @Getter - private final PostfachMessageCode messageCode; - - public PostfachException(String message, PostfachMessageCode messageCode) { - super(message); - this.messageCode = messageCode; - } - - public PostfachException(String message, PostfachMessageCode messageCode, Throwable cause) { - super(message, cause); - - this.messageCode = messageCode; - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcService.java deleted file mode 100644 index 6a9cb1177..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcService.java +++ /dev/null @@ -1,106 +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; - -import org.apache.commons.collections.CollectionUtils; -import org.springframework.beans.factory.annotation.Autowired; - -import de.ozgcloud.nachrichten.postfach.PostfachServiceGrpc.PostfachServiceImplBase; -import io.grpc.stub.StreamObserver; -import net.devh.boot.grpc.server.service.GrpcService; - -@GrpcService -class PostfachGrpcService extends PostfachServiceImplBase { - - @Autowired - private PostfachService service; - @Autowired - private PostfachNachrichtMapper mapper; - @Autowired - private PostfachMapper postfachMapper; - - @Autowired - private GrpcPostfachNachrichtMapper nachrichtMapper; - - @Override - public void saveNachrichtDraft(GrpcSaveNachrichtDraftRequest request, StreamObserver<GrpcSaveNachrichtDraftResponse> response) { - service.saveDraft(request.getVorgangId(), nachrichtMapper.mapFromGrpc(request.getNachricht())); - - response.onNext(GrpcSaveNachrichtDraftResponse.newBuilder().build()); - response.onCompleted(); - } - - @Override - public void sendPostfachMail(GrpcSendPostfachMailRequest req, StreamObserver<GrpcSendPostfachMailResponse> response) { - service.sendMail(req.getCommandId(), req.getContext().getUser().getId(), mapper.fromGrpcMail(req.getMail())); - - response.onNext(GrpcSendPostfachMailResponse.newBuilder().build()); - response.onCompleted(); - } - - @Override - public void findPostfachMail(GrpcFindPostfachMailRequest req, StreamObserver<GrpcFindPostfachMailResponse> response) { - var responseBuilder = GrpcFindPostfachMailResponse.newBuilder(); - service.findById(req.getNachrichtId()).map(mapper::fromMap).ifPresent(responseBuilder::setNachricht); - - response.onNext(responseBuilder.build()); - response.onCompleted(); - } - - @Override - public void findPostfachMails(GrpcFindPostfachMailsRequest req, StreamObserver<GrpcFindPostfachMailsResponse> response) { - var mails = service.findByVorgang(req.getVorgangId()).map(mapper::fromMap).toList(); - - response.onNext(GrpcFindPostfachMailsResponse.newBuilder().addAllMails(mails).build()); - response.onCompleted(); - } - - @Override - public void resendPostfachMail(GrpcResendPostfachMailRequest request, StreamObserver<GrpcResendPostfachMailResponse> response) { - service.resendMail(request.getCommandId(), request.getPostfachMailId()); - - response.onNext(GrpcResendPostfachMailResponse.newBuilder().build()); - response.onCompleted(); - } - - @Override - public void isPostfachConfigured(GrpcIsPostfachConfiguredRequest request, StreamObserver<GrpcIsPostfachConfiguredResponse> response) { - response.onNext(GrpcIsPostfachConfiguredResponse.newBuilder().setIsConfigured(service.isPostfachConfigured()).build()); - response.onCompleted(); - } - - @Override - public void getPostfachConfig(GrpcGetPostfachConfigRequest request, StreamObserver<GrpcGetPostfachConfigResponse> response) { - response.onNext(buildGetPostfachConfigResponse()); - response.onCompleted(); - } - - GrpcGetPostfachConfigResponse buildGetPostfachConfigResponse() { - var grpcPostfachs = service.getPostfachs().map(postfachMapper::toGrpc).toList(); - if (CollectionUtils.isEmpty(grpcPostfachs)) { - return GrpcGetPostfachConfigResponse.newBuilder().setConfigured(false).build(); - } - return GrpcGetPostfachConfigResponse.newBuilder().setConfigured(true).addAllPostfach(grpcPostfachs).build(); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentEvent.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentEvent.java deleted file mode 100644 index 84daf0b1b..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentEvent.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; - -import de.ozgcloud.command.CommandExecutedEvent; - -public class PostfachMailSentEvent extends CommandExecutedEvent { - - private static final long serialVersionUID = 1L; - - PostfachMailSentEvent(String commandId) { - super(commandId); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentFailedEvent.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentFailedEvent.java deleted file mode 100644 index c139a1167..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentFailedEvent.java +++ /dev/null @@ -1,35 +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; - -import de.ozgcloud.command.CommandFailedEvent; - -public class PostfachMailSentFailedEvent extends CommandFailedEvent { - - private static final long serialVersionUID = 1L; - - PostfachMailSentFailedEvent(String commandId, String errorMessage) { - super(commandId, errorMessage); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMapper.java deleted file mode 100644 index 5ef07c77b..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import org.mapstruct.Mapper; - -@Mapper -public interface PostfachMapper { - - GrpcPostfach toGrpc(Postfach postfach); -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMessageCode.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMessageCode.java deleted file mode 100644 index edcdb065c..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMessageCode.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; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@AllArgsConstructor(access = AccessLevel.PRIVATE) -public enum PostfachMessageCode { - - PROCESS_FAILED_MESSAGE_CODE("postfachnachricht.server.processing_failed"), - SERVER_CONNECTION_FAILED_MESSAGE_CODE("postfachnachricht.server.connection_failed"), - SEND_SUCCESSFUL_MESSAGE_CODE("postfachnachricht.successful"); - - @Getter - private String messageCode; -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachricht.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachricht.java deleted file mode 100644 index 54c5ccf38..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachricht.java +++ /dev/null @@ -1,89 +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; - -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; - -import jakarta.validation.constraints.NotNull; -import lombok.Builder; -import lombok.Getter; - -@Builder(toBuilder = true) -@Getter -public class PostfachNachricht { - - public enum ReplyOption { - POSSIBLE, MANDATORY, FORBIDDEN - } - - public static final String FIELD_ID = "id"; - public static final String FIELD_VORGANG_ID = "vorgangId"; - - public static final String FIELD_POSTFACH_ID = "postfachId"; - public static final String POSTFACH_ADDRESS_FIELD = "postfachAddress"; - - public static final String FIELD_MESSAGE_ID = "messageId"; - public static final String FIELD_CREATED_AT = "createdAt"; - public static final String FIELD_CREATED_BY = "createdBy"; - public static final String FIELD_SENT_AT = "sentAt"; - public static final String FIELD_SENT_SUCCESSFUL = "sentSuccessful"; - public static final String FIELD_MESSAGE_CODE = "messageCode"; - public static final String FIELD_DIRECTION = "direction"; - public static final String FIELD_SUBJECT = "subject"; - public static final String FIELD_MAIL_BODY = "mailBody"; - public static final String FIELD_REPLY_OPTION = "replyOption"; - public static final String FIELD_ATTACHMENTS = "attachments"; - - public enum Direction { - IN, OUT - } - - private String id; - - private String vorgangId; - private String postfachId; - private PostfachAddress postfachAddress; - private String messageId; - - @Builder.Default - private ZonedDateTime createdAt = ZonedDateTime.now().withNano(0); - private String createdBy; - - private ZonedDateTime sentAt; - private Boolean sentSuccessful; - private String messageCode; - - private Direction direction; - - private String subject; - private String mailBody; - - @NotNull - private ReplyOption replyOption; - - @Builder.Default - private List<String> attachments = Collections.emptyList(); -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java deleted file mode 100644 index d7b6ca635..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java +++ /dev/null @@ -1,159 +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; - -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import org.apache.commons.collections.MapUtils; -import org.apache.commons.lang3.StringUtils; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.MappingConstants; -import org.mapstruct.ReportingPolicy; -import org.mapstruct.ValueMapping; -import org.springframework.beans.factory.annotation.Autowired; - -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; -import de.ozgcloud.vorgang.common.GrpcObject; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; - -@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN) -public abstract class PostfachNachrichtMapper { - - @Autowired - private GrpcObjectMapper grpcObjectMapper; - - @Mapping(target = "attachments", source = "attachmentList") - @Mapping(target = "createdAt", ignore = true) - @Mapping(target = "createdBy", ignore = true) - @Mapping(target = "direction", ignore = true) - @Mapping(target = "messageId", ignore = true) - @Mapping(target = "sentAt", ignore = true) - @Mapping(target = "sentSuccessful", ignore = true) - @ValueMapping(source = "UNRECOGNIZED", target = MappingConstants.NULL) - @ValueMapping(source = "UNDEFINED", target = MappingConstants.NULL) - public abstract PostfachNachricht fromGrpcMail(GrpcPostfachMail grpcMail); - - public PostfachAddressIdentifier toPostfachAddressIdentifier(GrpcObject grpcObject) { - var postfachId = grpcObject.getPropertyList().get(0).getValue(0); - return StringBasedIdentifier.builder().postfachId(postfachId).build(); - } - - @SuppressWarnings("unchecked") - public GrpcPostfachMail fromMap(Map<String, Object> mailMap) { - var postfachMailBuilder = GrpcPostfachMail.newBuilder() - .setId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_ID)) - .setVorgangId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_VORGANG_ID)) - .setPostfachId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_POSTFACH_ID, StringUtils.EMPTY)) - .setCreatedAt(MapUtils.getString(mailMap, PostfachNachricht.FIELD_CREATED_AT)) - .setCreatedBy(MapUtils.getString(mailMap, PostfachNachricht.FIELD_CREATED_BY, StringUtils.EMPTY)) - .setSentAt(MapUtils.getString(mailMap, PostfachNachricht.FIELD_SENT_AT, StringUtils.EMPTY)) - .setSentSuccessful(MapUtils.getBooleanValue(mailMap, PostfachNachricht.FIELD_SENT_SUCCESSFUL, false)) - .setMessageCode(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MESSAGE_CODE, StringUtils.EMPTY)) - .setDirection(GrpcDirection.valueOf(MapUtils.getString(mailMap, PostfachNachricht.FIELD_DIRECTION))) - .setSubject(MapUtils.getString(mailMap, PostfachNachricht.FIELD_SUBJECT)) - .setMailBody(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MAIL_BODY)) - .setReplyOption(MapUtils.getString(mailMap, PostfachNachricht.FIELD_REPLY_OPTION)) - .addAllAttachment((Iterable<String>) mailMap.getOrDefault(PostfachNachricht.FIELD_ATTACHMENTS, Collections.emptyList())); - - Optional.ofNullable(getAsMap(mailMap, PostfachNachricht.POSTFACH_ADDRESS_FIELD)) - .filter(MapUtils::isNotEmpty) - .map(this::buildGrpcPostfachAddress) - .ifPresent(postfachMailBuilder::setPostfachAddress); - - return postfachMailBuilder.build(); - } - - GrpcPostfachAddress buildGrpcPostfachAddress(Map<String, Object> postfachAddressMap) { - var postfachAddressBuilder = GrpcPostfachAddress.newBuilder() - .setType(MapUtils.getIntValue(postfachAddressMap, PostfachAddress.TYPE_FIELD)) - .setVersion(MapUtils.getString(postfachAddressMap, PostfachAddress.VERSION_FIELD)) - .setIdentifier(grpcObjectMapper.fromMap(postfachAddressMap)); - Optional.ofNullable(MapUtils.getString(postfachAddressMap, PostfachAddress.SERVICEKONTO_TYPE_FIELD)) - .ifPresent(postfachAddressBuilder::setServiceKontoType); - return postfachAddressBuilder.build(); - } - - PostfachNachricht fromMapToPostfachMail(Map<String, Object> mailMap) { - var postfachMailBuilder = PostfachNachricht.builder() - .id(MapUtils.getString(mailMap, PostfachNachricht.FIELD_ID)) - .vorgangId(MapUtils.getString(mailMap, (PostfachNachricht.FIELD_VORGANG_ID))) - .postfachId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_POSTFACH_ID, StringUtils.EMPTY)) - .messageId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MESSAGE_ID)) - .createdAt(ZonedDateTime.parse(MapUtils.getString(mailMap, PostfachNachricht.FIELD_CREATED_AT))) - .createdBy(MapUtils.getString(mailMap, PostfachNachricht.FIELD_CREATED_BY)) - .sentAt(getString(mailMap, PostfachNachricht.FIELD_SENT_AT).map(ZonedDateTime::parse).orElse(null)) - .sentSuccessful(MapUtils.getBoolean(mailMap, PostfachNachricht.FIELD_SENT_SUCCESSFUL)) - .messageCode(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MESSAGE_CODE)) - .direction(Direction.valueOf(MapUtils.getString(mailMap, PostfachNachricht.FIELD_DIRECTION))) - .subject(MapUtils.getString(mailMap, PostfachNachricht.FIELD_SUBJECT)) - .mailBody(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MAIL_BODY)) - .replyOption(PostfachNachricht.ReplyOption.valueOf(MapUtils.getString(mailMap, PostfachNachricht.FIELD_REPLY_OPTION))) - .attachments(getAsList(mailMap, PostfachNachricht.FIELD_ATTACHMENTS)); - - Optional.ofNullable(getAsMap(mailMap, PostfachNachricht.POSTFACH_ADDRESS_FIELD)) - .filter(MapUtils::isNotEmpty) - .map(this::buildPostfachAddress) - .ifPresent(postfachMailBuilder::postfachAddress); - - return postfachMailBuilder.build(); - } - - private Optional<String> getString(Map<String, Object> mailMap, String key) { - return Optional.ofNullable(MapUtils.getString(mailMap, key)); - } - - @SuppressWarnings("unchecked") - private List<String> getAsList(Map<String, Object> mailMap, String fieldName) { - return (List<String>) mailMap.getOrDefault(fieldName, Collections.emptyList()); - } - - PostfachAddress buildPostfachAddress(Map<String, Object> postfachAddressMap) { - return PostfachAddress.builder() - .type(MapUtils.getIntValue(postfachAddressMap, PostfachAddress.TYPE_FIELD)) - .version(MapUtils.getString(postfachAddressMap, PostfachAddress.VERSION_FIELD)) - .identifier(buildIdentifier(postfachAddressMap)) - .serviceKontoType(MapUtils.getString(postfachAddressMap, PostfachAddress.SERVICEKONTO_TYPE_FIELD)) - .build(); - } - - PostfachAddressIdentifier buildIdentifier(Map<String, Object> postfachAddressMap) { - return StringBasedIdentifier.builder().postfachId(getPostfachId(postfachAddressMap)).build(); - } - - private String getPostfachId(Map<String, Object> postfachAddressMap) { - var identifier = getAsMap(postfachAddressMap, PostfachAddress.IDENTIFIER_FIELD); - return MapUtils.getString(identifier, PostfachNachricht.FIELD_POSTFACH_ID); - - } - - @SuppressWarnings("unchecked") - Map<String, Object> getAsMap(Map<String, Object> map, String fieldName) { - return MapUtils.getMap(map, fieldName, Collections.emptyMap()); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRemoteService.java deleted file mode 100644 index be4e1c28a..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRemoteService.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import java.util.stream.Stream; - -public interface PostfachRemoteService { - - void sendMessage(PostfachNachricht nachricht); - - Stream<PostfachNachricht> getAllMessages(); - - void deleteMessage(String messageId); - - String getPostfachType(); - - boolean isReplyAllowed(); -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRuntimeException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRuntimeException.java deleted file mode 100644 index c77551d18..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRuntimeException.java +++ /dev/null @@ -1,33 +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; - -public class PostfachRuntimeException extends PostfachException {// NOSONAR - - private static final long serialVersionUID = 1L; - - public PostfachRuntimeException(Throwable cause) { - super("Error executing Request to Postfach", PostfachMessageCode.SERVER_CONNECTION_FAILED_MESSAGE_CODE, cause); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachScheduler.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachScheduler.java deleted file mode 100644 index 58dfa87a7..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachScheduler.java +++ /dev/null @@ -1,50 +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; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Profile; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import net.javacrumbs.shedlock.spring.annotation.SchedulerLock; - -@Component -@Profile("!itcase") -@ConditionalOnBean(PostfachRemoteService.class) -@ConditionalOnProperty(name = { "ozgcloud.osi.postfach.scheduler.enabled" }) -class PostfachScheduler { - - @Autowired - private PostfachService service; - - @Scheduled(initialDelayString = "${ozgcloud.osi.postfach.scheduler.initialDelay:5000}", // - fixedDelayString = "${ozgcloud.osi.postfach.scheduler.fixedDelay:900000}") - @SchedulerLock(name = "PostfachScheduler") - void runGetMessagesTask() { - service.fetchAndPersistReplies(); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java deleted file mode 100644 index c00faf369..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java +++ /dev/null @@ -1,244 +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; - -import java.time.ZonedDateTime; -import java.util.EnumSet; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.function.Predicate; -import java.util.stream.Stream; - -import jakarta.validation.Valid; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import de.ozgcloud.nachrichten.antragraum.AntragraumService; -import de.ozgcloud.nachrichten.attributes.ClientAttributeService; -import de.ozgcloud.nachrichten.info.InfoManagerService; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption; -import de.ozgcloud.nachrichten.postfach.osi.OsiPostfachServerProcessException; -import de.ozgcloud.vorgang.callcontext.CurrentUserService; -import lombok.NonNull; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@Service -@Validated -class PostfachService { - - private static final Predicate<PostfachNachricht> IS_FROM_HUMAN_USER = nachricht -> !StringUtils.startsWith(nachricht.getCreatedBy(), "system"); - private static final Set<String> POSTFACH_TYPES_WITH_ANTRAGSRAUM = Set.of("BayernId"); - - @Autowired(required = false) - private PostfachRemoteService postfachRemoteService; - - private static final Set<ReplyOption> REPLY_POSSIBLE_OPTION = EnumSet.of(ReplyOption.POSSIBLE, ReplyOption.MANDATORY); - - @Autowired - private PostfachNachrichtMapper mapper; - - @Autowired - private PersistPostfachNachrichtService persistingService; - @Autowired - private ClientAttributeService clientAttributeService; - - @Autowired - private ApplicationEventPublisher publisher; - - @Autowired - private CurrentUserService userService; - - @Autowired - private Optional<InfoManagerService> infomanagerService; - @Autowired - private Optional<AntragraumService> antragraumService; - - public void saveDraft(String vorgangId, PostfachNachricht nachricht) { - persistMail(userService.getUser().getUserId(), - nachricht.toBuilder().vorgangId(vorgangId) - .createdBy(userService.getUser().getUserId().orElse(null)) - .build()); - } - - public void sendMail(String commandId, String userId, @Valid PostfachNachricht mail) { - var sendResponse = handleSendMail(commandId, mail); - persistSentMail(userId, addMailSentInformation(mail, sendResponse)); - } - - PostfachNachricht addMailSentInformation(PostfachNachricht mail, SendPostfachNachrichtResponse sendResponse) { - return mail.toBuilder().sentAt(ZonedDateTime.now()).sentSuccessful(sendResponse.isSentSuccessful()) - .messageCode(sendResponse.getMessageCode().getMessageCode()) - .build(); - } - - void persistSentMail(@NonNull String userId, PostfachNachricht mail) { - persistMail(Optional.of(userId), mail.toBuilder() - .direction(Direction.OUT) - .createdAt(ZonedDateTime.now().withNano(0)).createdBy(userId) - .build()); - - } - - public Optional<Map<String, Object>> findById(String nachrichtId) { - return persistingService.findById(nachrichtId); - } - - public Stream<Map<String, Object>> findByVorgang(String vorgangId) { - return persistingService.findByVorgangAsMap(vorgangId); - } - - public void fetchAndPersistReplies() { - ifPostfachConfigured(() -> postfachRemoteService.getAllMessages().forEach(this::persistReceivedMail)); - } - - private void persistReceivedMail(PostfachNachricht nachricht) { - persistMail(Optional.empty(), nachricht); - clientAttributeService.setHasNewPostfachNachricht(nachricht.getVorgangId()); - - postfachRemoteService.deleteMessage(nachricht.getMessageId()); - } - - void persistMail(Optional<String> userId, PostfachNachricht mail) { - persistingService.persistNachricht(userId, mail); - - if (IS_FROM_HUMAN_USER.test(mail)) { - clientAttributeService.setHasPostfachNachricht(mail.getVorgangId()); - } - } - - public void resendMail(String commandId, String postfachMailId) { - PostfachNachricht nachricht = mapper.fromMapToPostfachMail(persistingService.getById(postfachMailId)); - - var sendResponse = handleSendMail(commandId, nachricht); - patchMail(nachricht.getId(), createResendPatchMap(sendResponse)); - } - - SendPostfachNachrichtResponse handleSendMail(String commandId, PostfachNachricht mail) { - try { - var processedPostfachNachricht = processForAntragsraum(mail).orElse(mail); - doSendMail(processedPostfachNachricht); - - publishMailSentEvent(commandId); - return buildSendNachrichtResponse(true, PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE); - } catch (OsiPostfachServerProcessException e) { - return proceedwithWarnException(commandId, e); - - } catch (PostfachException e) { - return proceedWithErrorException(commandId, e); - } - } - - Optional<PostfachNachricht> processForAntragsraum(PostfachNachricht mail) { - if (isNotifyAntragsraum(mail.getReplyOption())) { - infomanagerService.ifPresent(infoManager -> infoManager.notifyInfoManager(mail)); - return adjustMail(mail); - } - return Optional.empty(); - } - - boolean isNotifyAntragsraum(ReplyOption replyOption) { - return REPLY_POSSIBLE_OPTION.contains(replyOption) && isPostfachWithAntragsraum(postfachRemoteService); - } - - Optional<PostfachNachricht> adjustMail(PostfachNachricht nachricht) { - return antragraumService.map(antragraum -> nachricht.toBuilder().mailBody(antragraum.getUserNotificationText()).build()); - } - - SendPostfachNachrichtResponse proceedwithWarnException(String commandId, OsiPostfachServerProcessException e) { - LOG.warn(e.getMessage(), e); - return proceedWithException(commandId, e); - } - - SendPostfachNachrichtResponse proceedWithErrorException(String commandId, PostfachException e) { - LOG.error(e.getMessage(), e); - return proceedWithException(commandId, e); - } - - private SendPostfachNachrichtResponse proceedWithException(String commandId, PostfachException e) { - publishMailSentFailedEvent(commandId, e.getMessage()); - return buildSendNachrichtResponse(false, e.getMessageCode()); - - } - - void doSendMail(PostfachNachricht nachricht) { - ifPostfachConfigured(() -> postfachRemoteService.sendMessage(nachricht)); - } - - private void publishMailSentEvent(String commandId) { - publisher.publishEvent(new PostfachMailSentEvent(commandId)); - } - - public void publishMailSentFailedEvent(String commandId, String message) { - publisher.publishEvent(new PostfachMailSentFailedEvent(commandId, message)); - } - - private SendPostfachNachrichtResponse buildSendNachrichtResponse(boolean sentSuccesful, PostfachMessageCode messageCode) { - return SendPostfachNachrichtResponse.builder().sentSuccessful(sentSuccesful).messageCode(messageCode).build(); - } - - Map<String, Object> createResendPatchMap(SendPostfachNachrichtResponse sendResponse) { - return Map.of(PostfachNachricht.FIELD_SENT_AT, ZonedDateTime.now().withNano(0).toString(), - PostfachNachricht.FIELD_SENT_SUCCESSFUL, sendResponse.isSentSuccessful(), - PostfachNachricht.FIELD_MESSAGE_CODE, sendResponse.getMessageCode().getMessageCode()); - } - - private void patchMail(String postfachMailId, Map<String, Object> propertyMap) { - persistingService.patch(postfachMailId, propertyMap); - } - - public boolean isPostfachConfigured() { - return postfachRemoteService != null; - } - - public Stream<Postfach> getPostfachs() { - return isPostfachConfigured() ? Stream.of(buildPostfach(postfachRemoteService)) : Stream.empty(); - } - - Postfach buildPostfach(PostfachRemoteService postfachRemoteService) { - return Postfach.builder().type(postfachRemoteService.getPostfachType()).isReplyAllowed(isReplyAllowed(postfachRemoteService)).build(); - } - - boolean isReplyAllowed(PostfachRemoteService postfachRemoteService) { - return isPostfachWithAntragsraum(postfachRemoteService) || postfachRemoteService.isReplyAllowed(); - } - - boolean isPostfachWithAntragsraum(PostfachRemoteService postfachRemoteService) { - return POSTFACH_TYPES_WITH_ANTRAGSRAUM.contains(postfachRemoteService.getPostfachType()) && infomanagerService.isPresent(); - } - - private void ifPostfachConfigured(Runnable block) { - if (!isPostfachConfigured()) { - throw new NotConfiguredException(); - } - block.run(); - } - -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponse.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponse.java deleted file mode 100644 index 841d4b9b3..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponse.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; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -@AllArgsConstructor -class SendPostfachNachrichtResponse { - private boolean sentSuccessful; - private PostfachMessageCode messageCode; -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java deleted file mode 100644 index da37d0e5d..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java +++ /dev/null @@ -1,11 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class StringBasedIdentifier implements PostfachAddressIdentifier { - - private String postfachId; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/Absender.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/Absender.java deleted file mode 100644 index cdf3b85f3..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/Absender.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.Pattern; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -@AllArgsConstructor -class Absender { - @Pattern(regexp = "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}") - private String postkorbId; - @NotBlank - private String name; - private String anschrift; - @NotBlank - private String dienst; - @NotBlank - private String mandant; - private String gemeindeSchluessel; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachment.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachment.java deleted file mode 100644 index 1e248904d..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachment.java +++ /dev/null @@ -1,38 +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.bayernid; - -import java.io.InputStream; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class BayernIdAttachment { - - private String fileName; - private String contentType; - private InputStream content; -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java deleted file mode 100644 index 0110fcc97..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java +++ /dev/null @@ -1,68 +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.bayernid; - -import java.io.InputStream; -import java.util.Optional; - -import org.bson.Document; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Service; - -import com.mongodb.client.gridfs.model.GridFSFile; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.BinaryFileService; -import de.ozgcloud.nachrichten.postfach.FileId; - -@Service -@ConditionalOnProperty(prefix = "ozgcloud.bayernid", name = { "enabled" }) -public class BayernIdAttachmentService { - - static final String NAME_KEY = "name"; - static final String CONTENT_TYPE_KEY = "contentType"; - - @Autowired - private BinaryFileService binaryFileService; - - public BayernIdAttachment getMessageAttachment(FileId fileId) { - return Optional.ofNullable(binaryFileService.getFile(fileId)) - .map(GridFSFile::getMetadata) - .map(metadata -> buildBayernIdAttachment(metadata, getAttachmentContentStream(fileId))) - .orElseThrow(() -> new TechnicalException("Can not find attachment with id " + fileId)); - } - - BayernIdAttachment buildBayernIdAttachment(Document metadata, InputStream attachmentContent) { - return BayernIdAttachment.builder() - .fileName(metadata.getString(NAME_KEY)) - .contentType(metadata.getString(CONTENT_TYPE_KEY)) - .content(attachmentContent) - .build(); - } - - InputStream getAttachmentContentStream(FileId fileId) { - return binaryFileService.getUploadedFileStream(fileId); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java deleted file mode 100644 index 3224a98ca..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java +++ /dev/null @@ -1,73 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import java.time.ZonedDateTime; -import java.util.GregorianCalendar; -import java.util.Objects; - -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; - -import org.mapstruct.Condition; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.ReportingPolicy; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.PostfachAddress; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.StringBasedIdentifier; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAbsender; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachmentMetadata; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; - -@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) -interface BayernIdPostfachNachrichtMapper { - - String MESSAGE_LEVEL = "LEVEL_1"; - - @Mapping(target = "attachments", ignore = true) - @Mapping(target = "messageMetadata", expression = "java(toBayernIdMessageMetadata(nachricht, absender))") - GrpcSendBayernIdMessageRequest toSendBayernIdMessageMetadataRequest(PostfachNachricht nachricht, Absender absender); - - @Mapping(target = "messageId", source = "nachricht.messageId") - @Mapping(target = "createdAt", expression = "java(convertZonedDateTime(nachricht.getCreatedAt()))") - @Mapping(target = "subject", source = "nachricht.subject") - @Mapping(target = "storkQaaLevel", constant = MESSAGE_LEVEL) - @Mapping(target = "vorgangId", source = "nachricht.vorgangId") - @Mapping(target = "text", source = "nachricht.mailBody") - @Mapping(target = "empfaenger.postkorbId", source = "nachricht.postfachAddress") - GrpcBayernIdMessageMetadata toBayernIdMessageMetadata(PostfachNachricht nachricht, Absender absender); - - @Mapping(target = "gemeindeschluessel", source = "gemeindeSchluessel") - GrpcAbsender toAbsender(Absender absender); - - @Mapping(target = "messageMetadata", ignore = true) - @Mapping(target = "attachments.content", ignore = true) - @Mapping(target = "attachments.attachmentMetadata", expression = "java(toAttachmentMetadata(bayernIdAttachment))") - GrpcSendBayernIdMessageRequest toSendBayernIdAttachmentsMetadataRequest(BayernIdAttachment bayernIdAttachment); - - @Mapping(target = "fileType", source = "contentType") - GrpcAttachmentMetadata toAttachmentMetadata(BayernIdAttachment attachment); - - default String convertZonedDateTime(ZonedDateTime zonedDateTime) { - try { - return DatatypeFactory.newInstance().newXMLGregorianCalendar(GregorianCalendar.from(zonedDateTime)).toString(); - } catch (DatatypeConfigurationException e) { - throw new TechnicalException("Error creating XMLGregorianCalendar which should not happen in this case.", e); - } - } - - BayernIdResponse fromSendBayernIdMessageResponse(GrpcSendBayernIdMessageResponse response); - - default String toPostkorbId(PostfachAddress postfachAddress) { - return ((StringBasedIdentifier) postfachAddress.getIdentifier()).getPostfachId(); - } - - @Condition - default boolean nonNull(String value) { - return Objects.nonNull(value); - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteService.java deleted file mode 100644 index 33915314a..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteService.java +++ /dev/null @@ -1,132 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.function.BiFunction; -import java.util.function.Function; -import java.util.stream.Stream; - -import jakarta.annotation.PostConstruct; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Component; - -import com.google.protobuf.ByteString; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.FileId; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachRemoteService; -import de.ozgcloud.nachrichten.postfach.PostfachRuntimeException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.BayernIdProxyServiceGrpc.BayernIdProxyServiceStub; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachments; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; -import io.grpc.stub.CallStreamObserver; -import io.grpc.stub.StreamObserver; -import lombok.extern.log4j.Log4j2; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Log4j2 -@ConditionalOnProperty(prefix = "ozgcloud.bayernid", name = { "enabled" }, havingValue = "true") -@Component -class BayernIdPostfachRemoteService implements PostfachRemoteService { - - static final String POSTFACH_TYPE = "BayernId"; - - @GrpcClient("bayern-id") - private BayernIdProxyServiceStub bayernIdProxyServiceStub; - - @Autowired - private BayernIdProperties bayernIdProperties; - @Autowired - private BayernIdPostfachResponseHandler responseHandler; - @Autowired - private BayernIdPostfachNachrichtMapper mapper; - @Autowired - private BayernIdAttachmentService bayernIdAttachmentService; - - @PostConstruct - void init() { - LOG.info("BayernID Postfach remote service initialized."); - } - - @Override - public void sendMessage(PostfachNachricht nachricht) { - try { - var sender = createMessageWithFilesSender(nachricht).send(); - var response = waitUntilTransferCompleted(sender); - responseHandler.handleResponse(mapper.fromSendBayernIdMessageResponse(response)); - } catch (BayernIdServerException e) { - throw e; - } catch (RuntimeException e) { - throw new PostfachRuntimeException(e); - } - } - - MessageWithFilesSender createMessageWithFilesSender(PostfachNachricht nachricht) { - return MessageWithFilesSender.builder() - .reqObserverBuilder(buildCallStreamObserverBuilder()) - .messageMetadata(mapper.toSendBayernIdMessageMetadataRequest(nachricht, bayernIdProperties.getAbsender())) - .attachmentIds(nachricht.getAttachments()) - .toAttachment(buildAttachmentBuilder()) - .attachmentMetadataMapper(buildAttachmentMetadataMapper()) - .chunkBuilder(buildChunkRequest()) - .build(); - } - - Function<StreamObserver<GrpcSendBayernIdMessageResponse>, CallStreamObserver<GrpcSendBayernIdMessageRequest>> buildCallStreamObserverBuilder() { - return responseObserver -> - (CallStreamObserver<GrpcSendBayernIdMessageRequest>) bayernIdProxyServiceStub.sendMessageAsStream(responseObserver); - } - - Function<String, BayernIdAttachment> buildAttachmentBuilder() { - return attachmentId -> bayernIdAttachmentService.getMessageAttachment(FileId.from(attachmentId)); - } - - BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> buildChunkRequest() { - return (bytes, length) -> GrpcSendBayernIdMessageRequest.newBuilder() - .setAttachments(GrpcAttachments.newBuilder().setContent(ByteString.copyFrom(bytes, 0, length)).build()) - .build(); - } - - Function<BayernIdAttachment, GrpcSendBayernIdMessageRequest> buildAttachmentMetadataMapper() { - return mapper::toSendBayernIdAttachmentsMetadataRequest; - } - - GrpcSendBayernIdMessageResponse waitUntilTransferCompleted(MessageWithFilesSender sender) { - try { - return sender.getResultFuture().get(2, TimeUnit.MINUTES); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - sender.cancelOnError(e); - throw new TechnicalException("Waiting for finishing upload was interrupted.", e); - } catch (ExecutionException | TimeoutException e) { - sender.cancelOnTimeout(); - throw new TechnicalException("Error / Timeout on uploading data.", e); - } - } - - @Override - public Stream<PostfachNachricht> getAllMessages() { - throw new UnsupportedOperationException("Bayern ID doesn't support this operation."); - } - - @Override - public void deleteMessage(String messageId) { - throw new UnsupportedOperationException("Bayern ID doesn't support this operation."); - } - - @Override - public String getPostfachType() { - return POSTFACH_TYPE; - } - - @Override - public boolean isReplyAllowed() { - return false; - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandler.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandler.java deleted file mode 100644 index 86b970880..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandler.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Component; - -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@Component -@ConditionalOnProperty(prefix = "ozgcloud.bayernid", name = { "enabled" }) -class BayernIdPostfachResponseHandler { - - public void handleResponse(BayernIdResponse bayernIdResponse) { - if (bayernIdResponse.isSuccess()) { - return; - } - var message = StringUtils.defaultIfBlank(bayernIdResponse.getMessage(), "Cannot send message to BayernID."); - throw new BayernIdServerException(message, MailSendingResponseStatus.fromSchluessel(bayernIdResponse.getStatus())); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdProperties.java deleted file mode 100644 index a4c8d2b27..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdProperties.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import jakarta.validation.constraints.NotNull; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.ConfigurationPropertiesScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.validation.annotation.Validated; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Validated -@Configuration -@ConfigurationProperties(prefix = "ozgcloud.bayernid") -@ConditionalOnProperty(prefix = "ozgcloud.bayernid", name = { "enabled" }) -@ConfigurationPropertiesScan -class BayernIdProperties { - - @NotNull - private Absender absender; - -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponse.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponse.java deleted file mode 100644 index 329282c74..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponse.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2024 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.bayernid; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class BayernIdResponse { - - private boolean success; - private String status; - private String message; - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdServerException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdServerException.java deleted file mode 100644 index 76b186249..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdServerException.java +++ /dev/null @@ -1,30 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.ozgcloud.nachrichten.postfach.PostfachException; -import de.ozgcloud.nachrichten.postfach.PostfachMessageCode; - -class BayernIdServerException extends PostfachException { - - static final String TABELLE_NUMMER_EMPFANG_ERGEBNISSTATUS = "9006"; - private static final String ERROR_MESSAGE_TEMPLATE = TABELLE_NUMMER_EMPFANG_ERGEBNISSTATUS + " / %s / %s / %s"; - - private final MailSendingResponseStatus mailSendingResponseStatus; - - public BayernIdServerException(String message) { - super(message, PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE); - this.mailSendingResponseStatus = null; - } - - public BayernIdServerException(String message, MailSendingResponseStatus mailSendingResponseStatus) { - super(message, PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE); - this.mailSendingResponseStatus = mailSendingResponseStatus; - } - - @Override - public String getMessage() { - if (mailSendingResponseStatus == null) { - return super.getMessage(); - } - return ERROR_MESSAGE_TEMPLATE.formatted(mailSendingResponseStatus.getSchluessel(), mailSendingResponseStatus.getMessage(), super.getMessage()); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSender.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSender.java deleted file mode 100644 index 610b3808b..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSender.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2024 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.bayernid; - -import java.io.IOException; -import java.io.InputStream; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.BiFunction; - -import org.apache.commons.io.IOUtils; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import io.grpc.stub.CallStreamObserver; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -class FileSender { - - static final int CHUNK_SIZE = 4 * 1024; - - private final AtomicBoolean metaDataSent = new AtomicBoolean(false); - private final AtomicBoolean done = new AtomicBoolean(false); - - private final BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder; - private final CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - private final GrpcSendBayernIdMessageRequest metadata; - private final StreamReader streamReader; - - public FileSender(BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder, - CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver, GrpcSendBayernIdMessageRequest metadata, - InputStream inputStream) { - this.chunkBuilder = chunkBuilder; - this.requestObserver = requestObserver; - this.metadata = metadata; - this.streamReader = new StreamReader(inputStream); - } - - public void send() { - if (!done.get()) { - sendMetadata(); - while (!done.get() && requestObserver.isReady()) { - LOG.debug("Sending next chunk."); - sendNextChunk(); - } - LOG.debug("Finished or waiting to become ready."); - } - } - - void sendMetadata() { - if (metaDataSent.getAndSet(true)) { - return; - } - LOG.debug("Sending Attachment Metadata."); - requestObserver.onNext(metadata); - } - - long sendNextChunk() { - byte[] contentToSend = streamReader.getNextData(); - - if (streamReader.getLastReadSize() > 0) { - sendChunk(contentToSend, streamReader.getLastReadSize()); - } else { - endTransfer(); - } - return contentToSend.length; - } - - void endTransfer() { - done.set(true); - LOG.debug("File Transfer done. Closing stream."); - streamReader.close(); - } - - void sendChunk(byte[] content, int length) { - LOG.debug("Sending {} byte Data.", length); - var chunk = chunkBuilder.apply(content, length); - requestObserver.onNext(chunk); - } - - @RequiredArgsConstructor - class StreamReader { - - private final InputStream inStream; - private final byte[] buffer = new byte[CHUNK_SIZE]; - @Getter - private int lastReadSize = 0; - @Getter - private final AtomicBoolean done = new AtomicBoolean(false); - - byte[] getNextData() { - readNext(); - return buffer; - } - - void close() { - IOUtils.closeQuietly(inStream); - } - - void readNext() { - try { - lastReadSize = inStream.read(buffer, 0, CHUNK_SIZE); - } catch (IOException e) { - throw new TechnicalException("Error on reading a single chunk", e); - } - } - } - -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatus.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatus.java deleted file mode 100644 index f95f2db2a..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatus.java +++ /dev/null @@ -1,43 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -enum MailSendingResponseStatus { - SUCCESS("0", "Nachricht wurde erfolgreich übernommen"), - OK_KOMM_SCHEMA_ERROR("10", "Fehler im OK.KOMM-Schema"), - OK_KOMM_INVALID_SCHEMA_PARAMETER("11", "Ungültige Parameter im OK.KOMM-Schema"), - ERROR_IN_MESSAGE_SCHEMA("20", "Fehler im BSP-Nachrichtenschema"), - INVALID_POSTKORB_ID("30", "Ungültiger Postkorb-Handle"), - IMPROPER_MESSAGE_CONTENT("31", "Unzulässiger Nachrichteninhalt"), - IMPROPER_MESSAGE_ATTACHMENT("32", "Unzulässiger Nachrichtenanhang"), - TECHNICAL_ERROR("99", "Sonstiger technischer Fehler"), - UNKNOWN("-1", "Unbekannte Server Antwort"); - - private String schluessel; - private String message; - - MailSendingResponseStatus(String schluessel, String message) { - this.schluessel = schluessel; - this.message = message; - } - - public static MailSendingResponseStatus fromSchluessel(String schluessel) { - return switch (schluessel) { - case "0" -> MailSendingResponseStatus.SUCCESS; - case "10" -> MailSendingResponseStatus.OK_KOMM_SCHEMA_ERROR; - case "11" -> MailSendingResponseStatus.OK_KOMM_INVALID_SCHEMA_PARAMETER; - case "20" -> MailSendingResponseStatus.ERROR_IN_MESSAGE_SCHEMA; - case "30" -> MailSendingResponseStatus.INVALID_POSTKORB_ID; - case "31" -> MailSendingResponseStatus.IMPROPER_MESSAGE_CONTENT; - case "32" -> MailSendingResponseStatus.IMPROPER_MESSAGE_ATTACHMENT; - case "99" -> MailSendingResponseStatus.TECHNICAL_ERROR; - default -> MailSendingResponseStatus.UNKNOWN; - }; - } - - public String getSchluessel() { - return schluessel; - } - - public String getMessage() { - return message; - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSender.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSender.java deleted file mode 100644 index 29457e1e4..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSender.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2024 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.bayernid; - -import static java.util.Objects.*; - -import java.util.Collections; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.BiFunction; -import java.util.function.Function; - -import de.ozgcloud.common.binaryfile.BinaryFileUploadStreamObserver; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; -import io.grpc.stub.CallStreamObserver; -import io.grpc.stub.StreamObserver; -import lombok.Builder; -import lombok.Getter; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@Builder -public class MessageWithFilesSender { - - static final int CHUNK_SIZE = 4 * 1024; - - @Getter - private final CompletableFuture<GrpcSendBayernIdMessageResponse> resultFuture = new CompletableFuture<>(); - private final AtomicBoolean done = new AtomicBoolean(false); - private final AtomicBoolean metaDataSent = new AtomicBoolean(false); - - private final Function<StreamObserver<GrpcSendBayernIdMessageResponse>, CallStreamObserver<GrpcSendBayernIdMessageRequest>> reqObserverBuilder; - private final GrpcSendBayernIdMessageRequest messageMetadata; - @Builder.Default - private final List<String> attachmentIds = Collections.emptyList(); - private final Function<String, BayernIdAttachment> toAttachment; - private final Function<BayernIdAttachment, GrpcSendBayernIdMessageRequest> attachmentMetadataMapper; - private final BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder; - - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - private List<FileSender> fileSenders; - - public MessageWithFilesSender send() { - var responseStreamObserver = BinaryFileUploadStreamObserver.create(resultFuture, this::sendNext); - requestObserver = reqObserverBuilder.apply(responseStreamObserver); - return this; - } - - public void sendNext() { - if (done.get()) { - return; - } - waitForObserver(); - sendMetadata(); - sendAttachments(); - } - - synchronized void waitForObserver() { - while (isNull(requestObserver)) { - try { - LOG.debug("wait for observer"); - wait(300); - } catch (InterruptedException e) { - LOG.error("Error on waiting for request Observer.", e); - Thread.currentThread().interrupt(); - } - } - } - - void sendMetadata() { - if (metaDataSent.getAndSet(true)) { - return; - } - requestObserver.onNext(messageMetadata); - } - - void sendAttachments() { - if (isNull(fileSenders)) { - fileSenders = createFileSenders(); - } - fileSenders.forEach(FileSender::send); - completeRequest(); - } - - List<FileSender> createFileSenders() { - return attachmentIds.stream().map(toAttachment).map(this::buildFileSender).toList(); - } - - FileSender buildFileSender(BayernIdAttachment attachment) { - return new FileSender(chunkBuilder, requestObserver, attachmentMetadataMapper.apply(attachment), attachment.getContent()); - } - - void completeRequest() { - done.set(true); - requestObserver.onCompleted(); - } - - public void cancelOnTimeout() { - LOG.warn("File transfer canceled on timeout"); - resultFuture.cancel(true); - requestObserver.onError(new TechnicalException("Timeout on waiting for upload.")); - } - - public void cancelOnError(Throwable t) { - resultFuture.cancel(true); - requestObserver.onError(t); - } -} diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java deleted file mode 100644 index 0af5a298f..000000000 --- a/nachrichten-manager/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/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java deleted file mode 100644 index 58bfba6a0..000000000 --- a/nachrichten-manager/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/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java deleted file mode 100644 index c6c217013..000000000 --- a/nachrichten-manager/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/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java deleted file mode 100644 index 0664694bb..000000000 --- a/nachrichten-manager/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/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java deleted file mode 100644 index 364d8bea4..000000000 --- a/nachrichten-manager/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/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java deleted file mode 100644 index ad900a06f..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java +++ /dev/null @@ -1,84 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.osi; - -import java.util.List; -import java.util.Optional; - -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(); - } - - @Mapping(target = "attachment", ignore = true) - @Mapping(target = "messageId", ignore = true) - String toPostfachId(PostfachNachricht nachricht) { - return Optional.ofNullable(nachricht.getPostfachAddress()) - .map(PostfachAddress::getIdentifier) - .filter(StringBasedIdentifier.class::isInstance) - .map(StringBasedIdentifier.class::cast) - .map(StringBasedIdentifier::getPostfachId) - .orElse(nachricht.getPostfachId()); - } - - 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("&", "&")).orElse(null); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java deleted file mode 100644 index 5b3b3065f..000000000 --- a/nachrichten-manager/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/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java deleted file mode 100644 index a355f1a63..000000000 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java +++ /dev/null @@ -1,147 +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(); - } - } - - 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/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java deleted file mode 100644 index 4d2bcf43f..000000000 --- a/nachrichten-manager/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/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java deleted file mode 100644 index 669c30cfd..000000000 --- a/nachrichten-manager/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/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java deleted file mode 100644 index 92fb16805..000000000 --- a/nachrichten-manager/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 diff --git a/nachrichten-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/nachrichten-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 08abec6c5..000000000 --- a/nachrichten-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1,20 +0,0 @@ -net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcClientMetricAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcClientHealthAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcClientSecurityAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcClientTraceAutoConfiguration -net.devh.boot.grpc.client.autoconfigure.GrpcDiscoveryClientAutoConfiguration -net.devh.boot.grpc.common.autoconfigure.GrpcCommonCodecAutoConfiguration -net.devh.boot.grpc.common.autoconfigure.GrpcCommonTraceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcAdviceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcHealthServiceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataConsulConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataEurekaConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataNacosConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcMetadataZookeeperConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcReflectionServiceAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerFactoryAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerMetricAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerSecurityAutoConfiguration -net.devh.boot.grpc.server.autoconfigure.GrpcServerTraceAutoConfiguration diff --git a/nachrichten-manager/src/main/resources/application-bayern.yaml b/nachrichten-manager/src/main/resources/application-bayern.yaml deleted file mode 100644 index f8fcba293..000000000 --- a/nachrichten-manager/src/main/resources/application-bayern.yaml +++ /dev/null @@ -1,3 +0,0 @@ -ozgcloud: - antragraum: - entityId: https://antragsraum.ozgcloud.de/ \ No newline at end of file diff --git a/nachrichten-manager/src/main/resources/application-bayernlocal.yaml b/nachrichten-manager/src/main/resources/application-bayernlocal.yaml deleted file mode 100644 index 898a6a6d7..000000000 --- a/nachrichten-manager/src/main/resources/application-bayernlocal.yaml +++ /dev/null @@ -1,7 +0,0 @@ -ozgcloud: - antragraum: - url: https://dev.antragsraum.de/ - entityId: https://antragsraum.ozgcloud.de/ - metadataUri: "classpath:/bayernid/metadata/bayernid-idp-infra.xml" - decryptionPrivateKey: "classpath:/bayernid/bayernid-test-enc.key" - decryptionCertificate: "classpath:/bayernid/bayernid-test-enc.crt" \ No newline at end of file diff --git a/nachrichten-manager/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl b/nachrichten-manager/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl deleted file mode 100644 index a2df76060..000000000 --- a/nachrichten-manager/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl +++ /dev/null @@ -1,108 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<definitions name="PostkorbKommService" - xmlns="http://schemas.xmlsoap.org/wsdl/" - xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" - xmlns:bsp="http://akdb.de/portal/gehaltsabrechnungen-bspnachricht" - xmlns:tns="urn:akdb:bsp:postkorb:komm:webservice" - xmlns:xsd="http://www.w3.org/2001/XMLSchema" - targetNamespace="urn:akdb:bsp:postkorb:komm:webservice"> - <types> - <xs:schema - targetNamespace='urn:akdb:bsp:postkorb:komm:webservice' version='1.1' - xmlns:tns='urn:akdb:bsp:postkorb:komm:webservice' - xmlns:xs='http://www.w3.org/2001/XMLSchema'> - <xs:element name='sendBspNachricht' - type='tns:sendBspNachricht' /> - <xs:complexType name='sendBspNachricht'> - <xs:sequence> - <xs:element minOccurs='1' name='okKommBspNachrichtInput' - type='xs:base64Binary' /> - </xs:sequence> - </xs:complexType> - <xs:element name='sendBspNachrichtOutput' - type='tns:sendBspNachrichtOutput' /> - <xs:complexType name='sendBspNachrichtOutput'> - <xs:sequence> - <xs:element minOccurs='1' - name='okKommBspNachrichtOutput' type='xs:base64Binary' /> - </xs:sequence> - </xs:complexType> - <xs:element name='sendBspNachrichtNative' - type='tns:sendBspNachrichtNative' /> - <xs:complexType name='sendBspNachrichtNative'> - <xs:sequence> - <xs:element minOccurs='1' name='bspNachricht' - type='xs:string' /> - </xs:sequence> - </xs:complexType> - <xs:element name='sendBspNachrichtNativeOutput' - type='tns:sendBspNachrichtNativeOutput' /> - <xs:complexType name='sendBspNachrichtNativeOutput'> - <xs:sequence> - <xs:element minOccurs='1' name='bspQuittung' - type='xs:string' /> - </xs:sequence> - </xs:complexType> - </xs:schema> - </types> - <message name='PostkorbKommService_sendBspNachrichtInput'> - <part element='tns:sendBspNachricht' - name='okKommBspNachrichtInput'></part> - </message> - <message name='PostkorbKommService_sendBspNachrichtOutput'> - <part element='tns:sendBspNachrichtOutput' - name='sendBspNachrichtOutput'></part> - </message> - <message name='PostkorbKommService_sendBspNachrichtNativeInput'> - <part element='tns:sendBspNachrichtNative' - name='sendBspNachrichtNative'></part> - </message> - <message - name='PostkorbKommService_sendBspNachrichtNativeOutput'> - <part element='tns:sendBspNachrichtNativeOutput' - name='bspQuittung'></part> - </message> - <portType name='PostkorbKommPortType'> - <operation name='sendBspNachricht'> - <input message='tns:PostkorbKommService_sendBspNachrichtInput'></input> - <output - message='tns:PostkorbKommService_sendBspNachrichtOutput'></output> - </operation> - <operation name='sendBspNachrichtNative'> - <input - message='tns:PostkorbKommService_sendBspNachrichtNativeInput'></input> - <output - message='tns:PostkorbKommService_sendBspNachrichtNativeOutput'></output> - </operation> - </portType> - <binding name="PostkorbKommBinding" - type="tns:PostkorbKommPortType"> - <soap:binding style="document" - transport="http://schemas.xmlsoap.org/soap/http" /> - <operation name='sendBspNachricht'> - <soap:operation soapAction='' /> - <input> - <soap:body use='literal' /> - </input> - <output> - <soap:body use="literal" /> - </output> - </operation> - <operation name='sendBspNachrichtNative'> - <soap:operation soapAction='' /> - <input> - <soap:body use='literal' /> - </input> - <output> - <soap:body use="literal" /> - </output> - </operation> - </binding> - <service name="PostkorbKommService"> - <port name="PostkorbKommPort" binding="tns:PostkorbKommBinding"> - <!-- <soap:address location="${web-services-base- url}/bspservices/postkorbkomm" - /> --> - <soap:address location="http://localhost:8080/bspx-postkorb-okkomm-ws/bspservices/postkorbkomm" /> - </port> - </service> -</definitions> diff --git a/nachrichten-manager/src/main/resources/bayernid/bspnachrichten-2.13.xsd b/nachrichten-manager/src/main/resources/bayernid/bspnachrichten-2.13.xsd deleted file mode 100644 index 23b0e247d..000000000 --- a/nachrichten-manager/src/main/resources/bayernid/bspnachrichten-2.13.xsd +++ /dev/null @@ -1,343 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - Service- und Portalplattform - AKDB München, Geschäftsfeld eGovernment - - Copyright (c) AKDB - ---> -<xsd:schema targetNamespace="http://www.akdb.de/egov/bsp/nachrichten" - xmlns:xsd="http://www.w3.org/2001/XMLSchema" - xmlns:bsp="http://www.akdb.de/egov/bsp/nachrichten" - elementFormDefault="qualified"> - - <xsd:element name="BspNachricht"> - <xsd:annotation> - <xsd:appinfo> - <title>Nachricht für die Kommunikation zwischen Bürgerservice-Portal - und externen Fachverfahren</title> - </xsd:appinfo> - <xsd:documentation>Einheitliches Nachrichtenschema für die - Kommunikation zwischen Bürgerservice-Portal und externem Verfahren. - Nachrichten vom Bürgerservice-Portal an den Postkorb eines - Verfahrens - oder Nachrichten von den Verfahren an das Bürgerservice-Portal müssen - gemäß diesem Schema aufgebaut sein. - </xsd:documentation> - </xsd:annotation> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="NachrichtenKopf" type="bsp:NachrichtenKopfType"/> - <xsd:element name="NachrichtenInhalt" type="bsp:NachrichtenInhaltType"/> - </xsd:sequence> - <xsd:attribute name="version" use="required"> - <xsd:annotation> - <xsd:documentation>Dieses Attribut kennzeichnet die - Nachrichten-Version, z. B. "1.0", "1.1".</xsd:documentation> - </xsd:annotation> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:enumeration value="1.1"/> - <xsd:enumeration value="1.2"/> - <xsd:enumeration value="1.3"/> - <xsd:enumeration value="1.4"/> - <xsd:enumeration value="1.5"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:attribute> - <xsd:attribute name="fassung" use="required" > - <xsd:annotation> - <xsd:documentation>Dieses Attribut kennzeichnet das Datum, an dem - die diesen Schemata im Status final produziert wurde. Format: - YYYY-MM-DD.</xsd:documentation> - </xsd:annotation> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:enumeration value="2017-03-15"/> - <xsd:enumeration value="2018-04-01"/> - <xsd:enumeration value="2018-11-01"/> - <xsd:enumeration value="2019-06-28"/> - <xsd:enumeration value="2020-03-15"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:attribute> - <xsd:attribute name="produkt" type="xsd:string" use="optional"> - <xsd:annotation> - <xsd:documentation>In diesem Attribut ist der Name des Produktes - (der Software) einzutragen, mit dem diese Nachricht erstellt - worden ist. z.B. BSP, PWS</xsd:documentation> - </xsd:annotation> - </xsd:attribute> - <xsd:attribute name="produkthersteller" type="xsd:string" use="optional"/> - <xsd:attribute name="produktversion" type="xsd:string" use="optional"/> - </xsd:complexType> - </xsd:element> - - <xsd:element name="BspQuittung"> - <xsd:annotation> - <xsd:appinfo> - <title>Quittung über den Empfang einer BSO-Nachricht</title> - </xsd:appinfo> - <xsd:documentation>Zu einer empfangenen BSP-Nachricht wird eine - Quittung geliefert, die bestätigt, dass die Nachricht übernommen wurde - oder aufgrund eines technischen oder fachlichen Fehlers abgewiesen wurde. - </xsd:documentation> - </xsd:annotation> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="AnnahmeErfolgreich" type="xsd:boolean" minOccurs="1" maxOccurs="1"/> - <xsd:element name="ErgebnisStatus" type="bsp:SchluesseltabelleType" minOccurs="1" maxOccurs="1"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9006 (0 (erfolgreich angenommen), 99 (sonstiger technischer Fehler), ...)</xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="ErgaenzendeHinweise" type="xsd:string" minOccurs="0" maxOccurs="1"/> - </xsd:sequence> - <xsd:attribute name="version" use="required"> - <xsd:annotation> - <xsd:documentation>Dieses Attribut kennzeichnet die - Nachrichten-Version, z. B. "1.0", "1.1".</xsd:documentation> - </xsd:annotation> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:enumeration value="1.1"/> - <xsd:enumeration value="1.2"/> - <xsd:enumeration value="1.3"/> - <xsd:enumeration value="1.4"/> - <xsd:enumeration value="1.5"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:attribute> - <xsd:attribute name="fassung" use="required"> - <xsd:annotation> - <xsd:documentation>Dieses Attribut kennzeichnet das Datum, an dem - die diesen Schemata im Status final produziert wurde. Format: - YYYY-MM-DD.</xsd:documentation> - </xsd:annotation> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:enumeration value="2017-03-15"/> - <xsd:enumeration value="2018-04-01"/> - <xsd:enumeration value="2018-11-01"/> - <xsd:enumeration value="2019-06-28"/> - <xsd:enumeration value="2020-03-15"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:attribute> - <xsd:attribute name="produkt" type="xsd:string" use="optional"> - <xsd:annotation> - <xsd:documentation>In diesem Attribut ist der Name des Produktes - (der Software) einzutragen, mit dem diese Nachricht erstellt - worden ist. z.B. BSP, PWS</xsd:documentation> - </xsd:annotation> - </xsd:attribute> - <xsd:attribute name="produkthersteller" type="xsd:string" use="optional"/> - <xsd:attribute name="produktversion" type="xsd:string" use="optional"/> - </xsd:complexType> - </xsd:element> - - <xsd:complexType name="NachrichtenKopfType"> - <xsd:sequence> - <xsd:element name="Identifikation.Nachricht" type="bsp:Identifikation.NachrichtType" maxOccurs="1" minOccurs="1"/> - <xsd:element name="Anwenderkennung" type="xsd:string" minOccurs="0"> - <xsd:annotation> - <xsd:documentation> Die Anwenderkennung stellt Informationen über die absendende Person - zur Verfügung und dient der Protokollierung. - Anhand dieser Kennung kann die absendende Person identifiziert werden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Absender" type="bsp:AbsenderType" maxOccurs="1" minOccurs="1"/> - <xsd:element name="Empfaenger" type="bsp:EmpfaengerType" maxOccurs="1" minOccurs="1"/> - <xsd:element name="AntwortAuf" type="xsd:string" maxOccurs="1" minOccurs="0"> - <xsd:annotation> - <xsd:documentation>Eine Nachricht kann mit einer exisiterenden - Nachricht in Beziehung gebracht werden als Antwortnachricht oder - weitergeleitete Nachricht. Der Bezug erfolgt hierbei über die - NachrichtenId. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="WeiterleitungZu" type="xsd:string" minOccurs="0"/> - <xsd:element name="lesebestaetigungAntwortAdresse" type="xsd:string" minOccurs="0"/> - </xsd:sequence> - </xsd:complexType> - <xsd:complexType name="Identifikation.NachrichtType"> - <xsd:sequence> - <xsd:element name="Ereignis" type="bsp:SchluesseltabelleType"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9001, Schluessel: BspNachricht - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Erstellungszeitpunkt" type="xsd:dateTime" maxOccurs="1" minOccurs="1"/> - <xsd:element name="NachrichtenId" type="xsd:string" maxOccurs="1" minOccurs="1"> - <xsd:annotation> - <xsd:documentation>eine beliebige, eindeutige ID, die durch den - erstellenden Client generiert wird. Zusammen mit - Erstellungszeitpunkt und Absender kann eine Nachricht bsp-global - eindeutig identifiziert werden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="AbsenderType"> - <xsd:sequence> - <xsd:element name="PostkorbId" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Verfahren" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Dienst" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Mandant" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Gemeindeschluessel" type="bsp:SchluesseltabelleType" minOccurs="0"> - <xsd:annotation> - <xsd:documentation>Der amtliche Gemeindeschlüssel (AGS). - Als Tabellennummer ist hier die 36 (OSCI-XMeld-Schlüsseltabelle "Amtlicher Gemeindeschluessel") zu verwenden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Name" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Anschrift" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Email" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Telefon" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Hyperlink" type="xsd:string" maxOccurs="1" minOccurs="0"/> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="EmpfaengerType"> - <xsd:sequence> - <xsd:element name="PostkorbId" type="xsd:string" maxOccurs="1" minOccurs="1"/> - <xsd:element name="Verfahren" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Dienst" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Mandant" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Gemeindeschluessel" type="bsp:SchluesseltabelleType" minOccurs="0"> - <xsd:annotation> - <xsd:documentation>Der amtliche Gemeindeschlüssel (AGS). - Als Tabellennummer ist hier die 36 (OSCI-XMeld-Schlüsseltabelle "Amtlicher Gemeindeschluessel") zu verwenden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Name" type="xsd:string" maxOccurs="1" minOccurs="0"/> - <xsd:element name="Anschrift" type="xsd:string" maxOccurs="1" minOccurs="0"/> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="NachrichtenInhaltType"> - <xsd:sequence> - <xsd:element name="Betreff" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="1"/> - <xsd:element name="Kategorie" type="bsp:SchluesseltabelleType" minOccurs="0"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9002 (KAT_STATUS, KAT_INFOBSP, ...) - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:choice minOccurs="0"> - <xsd:element name="StorkQaaLevel" type="bsp:StorkQaaLevel"/> - <xsd:element name="NpaGescheutzt" type="xsd:boolean" > - <!-- deprecated, wird durch StorkQaaLevel="STORK-QAA-Level-1" ersetzt --> - <xsd:annotation> - <xsd:documentation> - Diese Nachricht kann im BüsP-Postkorb nur nach - vorheriger Anmeldung mit dem nPA gelesen werden. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:choice> - <xsd:element name="ZuVorgang" type="bsp:ZuVorgangType" minOccurs="0"/> - <xsd:element name="FreiText" type="bsp:FreiTextType"/> - <xsd:element name="DataContainer" type="bsp:DataContainerType" minOccurs="0" maxOccurs="unbounded"/> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="ZuVorgangType"> - <xsd:annotation> - <xsd:documentation>VorgangsName oder VorgangsId müssen angegeben - werden. Es können auch beide angegeben werden.</xsd:documentation> - </xsd:annotation> - <xsd:sequence minOccurs="0"> - <xsd:element name="VorgangsName" type="xsd:string"/> - <xsd:element name="VorgangsId" type="xsd:string"/> - <xsd:element name="VorgangStatus" type="bsp:SchluesseltabelleType"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9003 (ST_ERHALTEN, ST_GELESEN,...) - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="FreiTextType"> - <xsd:sequence> - <xsd:element name="Encoding" type="bsp:SchluesseltabelleType" maxOccurs="1" minOccurs="1"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9004 (text/plain, text/html, ...) - </xsd:documentation> - </xsd:annotation> - </xsd:element> - <xsd:element name="Text" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="1"> - <xsd:annotation> - <xsd:documentation> - Wenn als Encoding text/plain festgelegt ist, so wird die Zeichensequenz "\n" als ein Zeilenvorschub interpretiert. - Das Backslash-Zeichen (\) wird mit einem weiteren Backslash-Zeichen entwertet. - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="DataContainerType"> - <xsd:sequence minOccurs="0"> - <xsd:element name="Inhalt" type="xsd:base64Binary" maxOccurs="1" minOccurs="1"/> - <xsd:element name="FileName" maxOccurs="1" minOccurs="0"> - <xsd:simpleType> - <xsd:restriction base="xsd:string"> - <xsd:maxLength value="255"/> - </xsd:restriction> - </xsd:simpleType> - </xsd:element> - <xsd:element name="FileType" type="bsp:SchluesseltabelleType" maxOccurs="1" minOccurs="1"> - <xsd:annotation> - <xsd:documentation>Schluesseltabelle 9005 (application/pdf, text/html, ...) - </xsd:documentation> - </xsd:annotation> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - - <xsd:complexType name="SchluesseltabelleType"> - <xsd:annotation> - <xsd:documentation>Dieser Datentyp wird für Schlüsselwerte benötigt. - Mit dem Datentyp SchluesseltabelleType übermittelt man den Schlüssel - und die Nummer der Tabelle, in der das Schlüssel-Wert Paar definiert - worden ist. - </xsd:documentation> - </xsd:annotation> - <xsd:sequence> - <xsd:element name="Tabelle" type="xsd:string"/> - <xsd:element name="Schluessel" type="xsd:string"/> - </xsd:sequence> - </xsd:complexType> - - <xsd:simpleType name="StorkQaaLevel"> - <xsd:restriction base="xsd:string"> - <!-- since version 1.2 - deprecated --> - <xsd:enumeration value="LEVEL_1"/> - <xsd:enumeration value="LEVEL_2"/> - <xsd:enumeration value="LEVEL_3"/> - <xsd:enumeration value="LEVEL_4"/> - <!-- since version 1.3 --> - <xsd:enumeration value="STORK-QAA-Level-1"/> - <xsd:enumeration value="STORK-QAA-Level-2"/> - <xsd:enumeration value="STORK-QAA-Level-3"/> - <xsd:enumeration value="STORK-QAA-Level-4"/> - </xsd:restriction> - </xsd:simpleType> - <xsd:simpleType name="NonEmptyString"> - <xsd:restriction base="xsd:string"> - <xsd:minLength value="1"/> - </xsd:restriction> - </xsd:simpleType> -</xsd:schema> - - diff --git a/nachrichten-manager/src/main/resources/bayernid/metadata/bayernid-idp-infra.xml b/nachrichten-manager/src/main/resources/bayernid/metadata/bayernid-idp-infra.xml deleted file mode 100644 index ec1ed7ca7..000000000 --- a/nachrichten-manager/src/main/resources/bayernid/metadata/bayernid-idp-infra.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?><md:EntitiesDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> - <md:EntityDescriptor entityID="https://infra-pre-id.bayernportal.de/idp"> - <md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> - <md:KeyDescriptor use="signing"> - <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> - <ds:X509Data> - <ds:X509Certificate>MIIFbzCCA1egAwIBAgIJAPdFXXarkBN2MA0GCSqGSIb3DQEBCwUAME4xCzAJBgNV - BAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVuMQ0wCwYD - VQQKDARBS0RCMQwwCgYDVQQLDANJRE0wHhcNMjAxMDI3MTMxODQxWhcNMjUxMDI2 - MTMxODQxWjBOMQswCQYDVQQGEwJERTEPMA0GA1UECAwGQmF5ZXJuMREwDwYDVQQH - DAhNdWVuY2hlbjENMAsGA1UECgwEQUtEQjEMMAoGA1UECwwDSURNMIICIjANBgkq - hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzDtWAEdC3J9FD+ti1exRhN1lzNgKWqO2 - gQNdJvlt7KGHA2VGGO7tqRogTuoqi/ydtiHJ8+lhp4kcWqyfv7i9HXOncvcsRRmR - dZjUY2Iui6ozJqD5LVm/vP5YfdP7vQPdbqyyfpoJhf3mbMEtdNDdGRnGIPUfDn+C - Fbo37f9tPwMgf3jgh4gxaujtLIhhr9gevVTEeZAFu9EvzLNd3kEtRb7MuXqIOdu1 - rW8HlGYFwwVLqEyBn8XG0QAIfhMmGjFMG7z+Kco2quwOmmZVzWQfeH/3AlN2KbcP - t7j+pl+6Bew2AAivP7O+95YKORqQjTu3rPWMF4txPId37MSjoytwBRyd5EACTvhQ - BOGrDFKQUOx6fTtRc8+7XGVz8MdQaZQWQXXh1ByU783twNdnRSrSVIyLdjiy1uCb - jvsSAtbzGBygPIvDo3skCNLNFXsChtHIfFFDK20KPGb0ghEDf2q3hDbFG3ZDGGyn - ZmJcZKuZhJqodJ/++sAXADyTJNAPVYDjKCF4ypELp2Eu/p1gaQPJEb74L/ZFZVOE - JFyXIiaqB9J+fcn/biqHHOmcCi8n9aIiNt1fatr1Z4lQRWoGtKaGU0+bzUSH4Bgs - 2EG4u1CI2MKDWqK2aEsHrtu8tbS9LrUmDVKtaEUOeul8xWVa036vp/YUIdiJNZSx - ZG4iTmSOATECAwEAAaNQME4wHQYDVR0OBBYEFFYeltslkaolOmcINXQeSe7nURwp - MB8GA1UdIwQYMBaAFFYeltslkaolOmcINXQeSe7nURwpMAwGA1UdEwQFMAMBAf8w - DQYJKoZIhvcNAQELBQADggIBAKqAlXoO41SAiycYUOrR90pfwTCysmbtHF5RWSCM - jF2aCG8URJ7bXwC0lBH8E5zCetFZwdqZziQtxzRkIOfhS5uWbH0RDhwuxZG+5RTP - yaHPAZI6e5xHDu8vHl/VbC3lnL/6K8l+Purr/yo8qkJqrPgThZRL9jBQyYRhDSsJ - UyIw5zcKKUQC/JWtMQAQcopbjekCs6xDT1HqIN90Sc/gOfYjNo0dGMNmro9mxcw8 - 2Iow18KNVdtEexfD+/6x4NPD61pzuQEe09TR+Cv3XyzBoGQ/2arijcPnGvth79ff - VFtRSf3fSs7wEKV9g3mEWXFDtPBhDj6K0kKU/kJfEZixkXl92MY+bmugrtTIrazj - tfrgMglIAHu9XCYWd/gef0J+PNfHsxgbTEr3XSC+5/xoFKPQSw3PgV8lkUDq4mJU - Ky/q4YmA37XQxourFR5pWvF03YACdtq6zPjtVeI7Cvkte6k0YW5S3cx9RmPv6YZh - laZ5ERpWNiv6IjokLsvNeemf2PApjO7Q2EDBIoHBYH31wwJSsyRDrSVmbaqLFI15 - fLXeh2A4YbaBDZdGvDiLOAk+dG1wdZ2aGw/uNBzMtc8VeKqI1HPcqIluBA3uUPpy - LLA+9hDPf6Pp4j0gkXxBikz+/h22bFxE1HmDiOSkEn+2NmOHuEFeA+D8jsCAL5VJ - 3emK</ds:X509Certificate> - </ds:X509Data> - </ds:KeyInfo> - </md:KeyDescriptor> - <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat> - <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://infra-pre-id.bayernportal.de/idp/profile/SAML2/POST/SSO"/> - <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://infra-pre-id.bayernportal.de/idp/profile/SAML2/Redirect/SSO"/> - </md:IDPSSODescriptor> - </md:EntityDescriptor> -</md:EntitiesDescriptor> \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java deleted file mode 100644 index 968c13b46..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2024. - * 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.antragraum; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.UUID; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.vorgang.grpc.command.GrpcCommand; -import io.grpc.stub.StreamObserver; - -class AntragraumGrpcServiceTest { - @Spy - @InjectMocks - private AntragraumGrpcService antragsraumGrpcService; - @Mock - private AntragraumService antragraumService; - @Mock - private AntragraumNachrichtMapper mapper; - - @Nested - class TestFindRueckfragen { - - @Nested - class TestFindRueckfragenGrpc { - @Mock - private StreamObserver<GrpcFindRueckfragenResponse> streamObserver; - - @BeforeEach - void setup() { - when(antragraumService.findRueckfragen(any())).thenReturn(Stream.of(PostfachNachrichtTestFactory.create())); - when(mapper.toGrpc(any(PostfachNachricht.class))).thenReturn(GrpcRueckfrage.getDefaultInstance()); - } - - @Test - void shouldCallMapper() { - antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver); - - verify(mapper).toGrpc(any(PostfachNachricht.class)); - } - - @Test - void shouldCallOnNext() { - antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver); - - verify(streamObserver).onNext(any(GrpcFindRueckfragenResponse.class)); - } - - @Test - void shouldCallOnCompleted() { - antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver); - - verify(streamObserver).onCompleted(); - } - } - } - - @Nested - class TestSendAnswer { - @Mock - private StreamObserver<GrpcCommand> streamObserver; - - @BeforeEach - void setup() { - when(antragraumService.sendRueckfrageAnswer(anyString(), anyString(), any(PostfachNachricht.class))) - .thenReturn(UUID.randomUUID().toString()); - when(mapper.toPostfachNachricht(any(GrpcRueckfrageAnswer.class))).thenReturn(PostfachNachrichtTestFactory.create()); - } - - @Test - void shouldCallMapper() { - antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver); - - verify(mapper).toPostfachNachricht(any(GrpcRueckfrageAnswer.class)); - } - - @Test - void shouldCallAntragraumService() { - antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver); - - verify(antragraumService).sendRueckfrageAnswer(anyString(), anyString(), any(PostfachNachricht.class)); - } - - @Test - void shouldCallOnNext() { - antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver); - - verify(streamObserver).onNext(any(GrpcCommand.class)); - } - - @Test - void shouldCallOnCompleted() { - antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver); - - verify(streamObserver).onCompleted(); - } - - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java deleted file mode 100644 index 5ff78a92e..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (c) 2024. - * 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.antragraum; - -import static org.assertj.core.api.Assertions.*; - -import java.time.format.DateTimeFormatter; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -class AntragraumNachrichtMapperTest { - - AntragraumNachrichtMapper mapper = Mappers.getMapper(AntragraumNachrichtMapper.class); - - @Nested - class TestMapRueckfrage { - - @Test - void shouldMapVorgangId() { - var result = map(); - - assertThat(result.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldMapId() { - var result = map(); - - assertThat(result.getId()).isEqualTo(PostfachNachrichtTestFactory.ID); - } - - @Test - void shouldMapVorgangName() { - var result = map(); - - assertThat(result.getVorgangName()).isEqualTo(MessageTestFactory.SUBJECT); - } - - @Test - void shouldMapStatus() { - var result = map(); - - assertThat(result.getStatus()).isEqualTo(AntragraumNachrichtMapper.DEFAULT_STATUS); - } - - @Test - void shouldMapSentAt() { - var result = map(); - - assertThat(result.getSentAt()).isEqualTo(PostfachNachrichtTestFactory.SENT_AT.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); - } - - @Test - void shouldMapText() { - var result = map(); - - assertThat(result.getText()).isEqualTo(PostfachNachrichtTestFactory.MAIL_BODY); - } - - @Test - void shouldMapAttachments() { - var result = map(); - - assertThat(result.getAttachmentFileIdCount()).isEqualTo(1); - assertThat(result.getAttachmentFileId(0)).isEqualTo(PostfachNachrichtTestFactory.ATTACHMENTS.get(0)); - } - - private GrpcRueckfrage map() { - return mapper.toGrpc(PostfachNachrichtTestFactory.create()); - } - - } - - @Nested - class TestMapAnswerToPostfachNachricht { - @Test - void shouldMapText() { - var result = map(); - - assertThat(result.getMailBody()).isEqualTo(GrpcRueckfrageAnswerTestFactory.TEXT); - } - - @Test - void shouldMapMessageId() { - var result = map(); - - assertThat(result.getMessageId()).isEqualTo(GrpcRueckfrageAnswerTestFactory.RUECKFRAGE_ID); - } - - @Test - void shouldMapAttachmentIds() { - var result = map(); - - assertThat(result.getAttachments()).isEqualTo(GrpcRueckfrageAnswerTestFactory.ATTACHMENT_ID_LIST); - } - - private PostfachNachricht map() { - return mapper.toPostfachNachricht(GrpcRueckfrageAnswerTestFactory.create()); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java deleted file mode 100644 index 1b8cfe1ed..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java +++ /dev/null @@ -1,119 +0,0 @@ -package de.ozgcloud.nachrichten.antragraum; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.UUID; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.opensaml.saml.saml2.core.Response; - -import de.ozgcloud.nachrichten.NachrichtenManagerProperties; -import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; - -class AntragraumServiceTest { - @Spy - @InjectMocks - private AntragraumService service; - - @Mock - private AntragraumProperties properties; - @Mock - private NachrichtenManagerProperties nachrichtenManagerProperties; - @Mock - private PersistPostfachNachrichtService postfachNachrichtService; - @Mock - private Saml2Verifier verifier; - @Mock - private Saml2Parser parser; - @Mock - private Saml2Decrypter decrypter; - - @Nested - class TestGetAntragsraumUrl { - - private static final String URL = "url"; - - @Test - void shouldReturnUrl() { - when(properties.getUrl()).thenReturn(URL); - - var url = service.getAntragsraumUrl(); - - assertThat(url).isEqualTo(URL); - } - - } - - @Nested - class TestFindRueckfragen { - static final String SAML_TOKEN = "TOKEN"; - - @Test - void shouldCallVerify() { - service.findRueckfragen(SAML_TOKEN); - - verify(service).verifyToken(anyString()); - } - - @Test - void shouldCallVerifier() { - service.findRueckfragen(SAML_TOKEN); - - verify(verifier).verify(anyString()); - } - - @Test - void shouldCallDecrypt() { - when(parser.parse(anyString())).thenReturn(mock(Response.class)); - - service.findRueckfragen(SAML_TOKEN); - - verify(decrypter).decryptPostfachId(any(Response.class)); - } - - @Test - void shouldCallPostfachService() { - when(decrypter.decryptPostfachId(any())).thenReturn(GrpcFindRueckfrageRequestTestFactory.POSTFACH_ID); - - service.findRueckfragen(SAML_TOKEN); - - verify(postfachNachrichtService).findRueckfragen(anyString()); - } - } - - @Nested - class TestSendRueckfragenAnswers { - static final String SAML_TOKEN = "TOKEN"; - static final String RUECKFRAGE_ID = UUID.randomUUID().toString(); - static final PostfachNachricht NACHRICHT = PostfachNachrichtTestFactory.create(); - - @Test - void shouldCallVerify() { - service.sendRueckfrageAnswer(SAML_TOKEN, RUECKFRAGE_ID, NACHRICHT); - - verify(service).verifyToken(anyString()); - } - - @Test - void shouldCallVerifier() { - service.findRueckfragen(SAML_TOKEN); - - verify(verifier).verify(anyString()); - } - - @Test - void shouldCallPostfachService() { - service.sendRueckfrageAnswer(SAML_TOKEN, RUECKFRAGE_ID, NACHRICHT); - - verify(postfachNachrichtService).persistAnswer(anyString(), any(PostfachNachricht.class)); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfigurationTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfigurationTest.java deleted file mode 100644 index 045f5caf4..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfigurationTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2024. - * 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.antragraum; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.core.io.InputStreamResource; - -import de.ozgcloud.common.test.TestUtils; - -class BayernIdSamlConfigurationTest { - @Mock - private AntragraumProperties properties; - @InjectMocks - private BayernIdSamlConfiguration bayernIdSamlConfiguration; - - @Nested - class TestCreationOfParserPool { - @BeforeEach - void setup() throws Exception { - bayernIdSamlConfiguration.initOpenSAML(); - } - - @Test - void shouldCreateParserPool() { - assertThat(bayernIdSamlConfiguration.getParserPool()).isNotNull(); - } - } - - @Nested - class TestCreatingTrustEngine { - @BeforeEach - void setup() throws Exception { - when(properties.getMetadataUri()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-idp-infra.xml"))); - when(properties.getEntityId()).thenReturn("https://antragsraum.ozgcloud.de/"); - bayernIdSamlConfiguration.initOpenSAML(); - } - - @Test - void shouldCreateTrustEngine() { - assertThat(bayernIdSamlConfiguration.getTrustEngine()).isNotNull(); - } - } - - @Nested - class TestLoadingVerficationData { - @Test - void shouldCreateVerificationCriteria() { - when(properties.getEntityId()).thenReturn("https://antragsraum.ozgcloud.de/"); - bayernIdSamlConfiguration.initOpenSAML(); - - assertThat(bayernIdSamlConfiguration.getVerificationCriteria()).isNotNull(); - } - - @Test - void shouldLoadVerificationCert() throws Exception { - when(properties.getMetadataUri()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-idp-infra.xml"))); - bayernIdSamlConfiguration.initOpenSAML(); - - assertThat(bayernIdSamlConfiguration.getCertificatesFromMetadata()).isNotNull(); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java deleted file mode 100644 index 9795428ab..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2024. - * 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.antragraum; - -import de.ozgcloud.common.test.TestUtils; - -import java.util.UUID; - -public class GrpcFindRueckfrageRequestTestFactory { - static final String POSTFACH_ID = UUID.randomUUID().toString(); - static final String SAML_TOKEN = TestUtils.loadTextFile("SamlResponse.xml"); - - static GrpcFindRueckfragenRequest create() { - return createBuilder().build(); - } - - static GrpcFindRueckfragenRequest.Builder createBuilder() { - return GrpcFindRueckfragenRequest.newBuilder() - .setPostfachId(POSTFACH_ID) - .setSamlToken(SAML_TOKEN); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcNachrichtTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcNachrichtTestFactory.java deleted file mode 100644 index 1218f303b..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcNachrichtTestFactory.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.ozgcloud.nachrichten.antragraum; - -import de.ozgcloud.info.nachricht.GrpcNachricht; -import de.ozgcloud.nachrichten.info.InfoManagerRequestTestFactory; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -public class GrpcNachrichtTestFactory { - - public static GrpcNachricht create() { - return createBuilder().build(); - } - - public static GrpcNachricht.Builder createBuilder() { - return GrpcNachricht.newBuilder() - .setNachrichtId(PostfachNachrichtTestFactory.ID) - .setVorgangId(MessageTestFactory.VORGANG_ID) - .setPostfachId(MessageTestFactory.POSTFACH_ID) - .setNachrichtenListUrl(InfoManagerRequestTestFactory.NACHRICHTEN_MANAGER_URL); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java deleted file mode 100644 index 6c0fb28f1..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.ozgcloud.nachrichten.antragraum; - -import java.util.List; -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -public class GrpcRueckfrageAnswerTestFactory { - static final String RUECKFRAGE_ID = UUID.randomUUID().toString(); - static final String TEXT = LoremIpsum.getInstance().getParagraphs(2, 4); - static final List<String> ATTACHMENT_ID_LIST = List.of(UUID.randomUUID().toString()); - - static GrpcRueckfrageAnswer create() { - return createBuilder().build(); - } - - static GrpcRueckfrageAnswer.Builder createBuilder() { - return GrpcRueckfrageAnswer.newBuilder() - .setRueckfrageId(RUECKFRAGE_ID) - .setAnswerText(TEXT) - .addAllAttachmentFileId(ATTACHMENT_ID_LIST); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcSendRueckfrageAnswerRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcSendRueckfrageAnswerRequestTestFactory.java deleted file mode 100644 index f1fa9bcfd..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcSendRueckfrageAnswerRequestTestFactory.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.ozgcloud.nachrichten.antragraum; - -import de.ozgcloud.common.test.TestUtils; - -public class GrpcSendRueckfrageAnswerRequestTestFactory { - static final String SAML_TOKEN = TestUtils.loadTextFile("SamlResponse.xml"); - static final GrpcRueckfrageAnswer ANSWER = GrpcRueckfrageAnswerTestFactory.create(); - - static GrpcSendRueckfrageAnswerRequest create() { - return createBuilder().build(); - } - - static GrpcSendRueckfrageAnswerRequest.Builder createBuilder() { - return GrpcSendRueckfrageAnswerRequest.newBuilder() - .setAnswer(ANSWER) - .setSamlToken(SAML_TOKEN); - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2DecrypterTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2DecrypterTest.java deleted file mode 100644 index 1dd94cea3..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2DecrypterTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (c) 2024. - * 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.antragraum; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.opensaml.saml.saml2.core.Attribute; -import org.opensaml.saml.saml2.core.AttributeStatement; -import org.opensaml.saml.saml2.core.Response; -import org.springframework.core.io.InputStreamResource; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.common.test.TestUtils; - -@Disabled("Passende certificat und key file muessen local vorhanden sein") -class Saml2DecrypterTest { - private Response samlResponse; - - @Mock - private AntragraumProperties properties; - - private BayernIdSamlConfiguration configuration; - - private Saml2Decrypter decrypter; - - @BeforeEach - void setup() throws Exception { - when(properties.getDecryptionCertificate()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-test-enc.crt"))); - when(properties.getDecryptionPrivateKey()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-test-enc.key"))); - - configuration = new BayernIdSamlConfiguration(); - ReflectionTestUtils.setField(configuration, "antragraumProperties", properties); - configuration.initOpenSAML(); - - var samlResponseString = TestUtils.loadTextFile("SamlResponse.xml"); - var parser = new Saml2Parser(configuration); - samlResponse = parser.parse(samlResponseString); - - decrypter = new Saml2Decrypter(configuration); - decrypter.init(); - } - - @Test - void shouldDecrypt() { - assertThat(samlResponse.getAssertions()).isEmpty(); - - decrypter.decryptResponseElements(samlResponse); - - assertThat(samlResponse.getAssertions()).isNotEmpty(); - } - - @Test - void shouldHaveSubject() { - decrypter.decryptResponseElements(samlResponse); - var samlAssertion = samlResponse.getAssertions().get(0); - - assertThat(samlAssertion.getSubject()).isNotNull(); - } - - @Test - void shouldHaveAuthnStatements() { - decrypter.decryptResponseElements(samlResponse); - var samlAssertion = samlResponse.getAssertions().get(0); - var authnStatements = samlAssertion.getAuthnStatements(); - - assertThat(authnStatements).isNotNull(); - } - - @Test - void shouldHaveStatements() { - decrypter.decryptResponseElements(samlResponse); - var samlAssertion = samlResponse.getAssertions().get(0); - var statements = samlAssertion.getStatements(); - - assertThat(statements).isNotNull(); - } - - @Test - void shouldHaveAttributes() { - decrypter.decryptResponseElements(samlResponse); - var samlAssertion = samlResponse.getAssertions().get(0); - var statements = (AttributeStatement) samlAssertion.getStatements().get(1); - var attributes = statements.getAttributes(); - assertThat(attributes).hasSize(7); - } - - @Test - void shouldHavePostfachId() { - decrypter.decryptResponseElements(samlResponse); - var samlAssertion = samlResponse.getAssertions().get(0); - var statements = (AttributeStatement) samlAssertion.getStatements().get(1); - var attributes = statements.getAttributes(); - var postfachIdOptional = attributes.stream().filter(attribute -> "legacyPostkorbHandle".equals(attribute.getFriendlyName())).findFirst(); - assertThat(postfachIdOptional).map(Attribute::getAttributeValues).isNotNull(); - } - - @Test - void shouldGetPostfachId() { - var postfachId = decrypter.decryptPostfachId(samlResponse); - - assertThat(postfachId).isEqualTo("28721c6f-b78f-4d5c-a048-19fd2fc429d2"); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2ParserTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2ParserTest.java deleted file mode 100644 index afcca2fbe..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2ParserTest.java +++ /dev/null @@ -1,72 +0,0 @@ - -package de.ozgcloud.nachrichten.antragraum; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.opensaml.saml.saml2.core.Response; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.common.test.TestUtils; - -class Saml2ParserTest { - private BayernIdSamlConfiguration configuration; - - @BeforeEach - void setup() { - var properties = mock(AntragraumProperties.class); - configuration = new BayernIdSamlConfiguration(); - ReflectionTestUtils.setField(configuration, "antragraumProperties", properties); - configuration.initOpenSAML(); - } - - @Test - void shouldInit() { - var parser = new Saml2Parser(configuration); - - assertThat(parser).isNotNull(); - } - - @Test - void shouldParseSamlToken() throws Exception { - var response = getResponse(); - assertThat(response).isNotNull(); - } - - @Test - void shouldHaveAssertions() throws Exception { - var response = getResponse(); - assertThat(response.getAssertions()).isNotNull(); - } - - @Test - void shouldHaveEncryptedAssertions() throws Exception { - var response = getResponse(); - assertThat(response.getEncryptedAssertions()).isNotNull(); - } - - @Test - void shouldHaveIssuer() throws Exception { - var response = getResponse(); - assertThat(response.getIssuer().getValue()).isEqualTo("https://infra-pre-id.bayernportal.de/idp"); - } - - @Test - void shouldGetXMLObject() throws Exception { - var parser = new Saml2Parser(configuration); - - try (var tokenStream = TestUtils.loadFile("SamlResponse.xml")) { - assertThat(parser.xmlObject(tokenStream)).isNotNull(); - } - } - - private Response getResponse() throws Exception { - var token = TestUtils.loadTextFile("SamlResponse.xml"); - var parser = new Saml2Parser(configuration); - - return parser.parse(token); - } - -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2VerifierTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2VerifierTest.java deleted file mode 100644 index 03dbcb598..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2VerifierTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2024. - * 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.antragraum; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.springframework.core.io.InputStreamResource; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.common.test.TestUtils; - -class Saml2VerifierTest { - private String samlResponse; - - private Saml2Verifier verifier; - - @Mock - private AntragraumProperties properties; - - private BayernIdSamlConfiguration configuration; - - @BeforeEach - void setup() throws Exception { - when(properties.getMetadataUri()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-idp-infra.xml"))); - when(properties.getEntityId()).thenReturn("https://antragsraum.ozgcloud.de"); - samlResponse = TestUtils.loadTextFile("SamlResponse.xml"); - - configuration = new BayernIdSamlConfiguration(); - ReflectionTestUtils.setField(configuration, "antragraumProperties", properties); - configuration.initOpenSAML(); - - var parser = new Saml2Parser(configuration); - - verifier = new Saml2Verifier(parser, configuration); - verifier.init(); - } - - @Test - void shouldGetVerificationError() { - var res = verifier.verify(samlResponse); - - assertThat(res).isNotEmpty(); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteServiceTest.java deleted file mode 100644 index bcd766f4b..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteServiceTest.java +++ /dev/null @@ -1,122 +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.attributes; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc.ClientAttributeServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest; - -class ClientAttributeRemoteServiceTest { - - @InjectMocks - private ClientAttributeRemoteService remoteService; - @Mock - private ClientAttributeServiceBlockingStub stub; - - @Captor - private ArgumentCaptor<GrpcSetClientAttributeRequest> requestCaptor; - - @BeforeEach - void prepareStubMock() { - when(stub.withInterceptors(any())).thenReturn(stub); - } - - @Nested - class TestSetBooleanReadOnlyClientAttribute { - - @Test - void shouldCallStub() { - callService(); - - verify(stub).set(any()); - } - - @Test - void shouldFillRequest() { - var expectedAttribute = GrpcClientAttributeTestFactory.createBuilder() - .setAccess(GrpcAccessPermission.READ_ONLY) - .setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(true).build()) - .build(); - - var request = callService(); - - assertThat(request).usingRecursiveComparison().isEqualTo(GrpcSetClientAttributeRequestTestFactory.createWithAttribute(expectedAttribute)); - } - - private GrpcSetClientAttributeRequest callService() { - remoteService.setBooleanReadOnlyClientAttribute(GrpcSetClientAttributeRequestTestFactory.VORGANG_ID, - ClientAttributeTestFactory.ATTRIBUTE_NAME, true); - - verify(stub).set(requestCaptor.capture()); - - return requestCaptor.getValue(); - } - } - - @Nested - class TestSetBooleanWritableClientAttribute { - - @Test - void shouldCallStub() { - callService(); - - verify(stub).set(any()); - } - - @Test - void shouldFillRequest() { - var expectedAttribute = GrpcClientAttributeTestFactory.createBuilder() - .setAccess(GrpcAccessPermission.READ_WRITE) - .setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(true).build()) - .build(); - - var request = callService(); - - assertThat(request).usingRecursiveComparison().isEqualTo(GrpcSetClientAttributeRequestTestFactory.createWithAttribute(expectedAttribute)); - } - - private GrpcSetClientAttributeRequest callService() { - remoteService.setBooleanWriteableClientAttribute(GrpcSetClientAttributeRequestTestFactory.VORGANG_ID, - ClientAttributeTestFactory.ATTRIBUTE_NAME, true); - - verify(stub).set(requestCaptor.capture()); - - return requestCaptor.getValue(); - } - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeServiceTest.java deleted file mode 100644 index 6a2bcc8bb..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeServiceTest.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.attributes; - -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -class ClientAttributeServiceTest { - - private static final String VORGANG_ID = "81"; - - @InjectMocks - private ClientAttributeService service; - @Mock - private ClientAttributeRemoteService remoteService; - - @Nested - class TestSetHasNachricht { - - @Test - void shouldCallRemoteService() { - service.setHasPostfachNachricht(VORGANG_ID); - - verify(remoteService).setBooleanReadOnlyClientAttribute(VORGANG_ID, ClientAttributeService.ATTRIBUTE_NAME_HAS_POSTFACH_NACHRICHT, true); - } - } - - @Nested - class TestSetHasNewNachricht { - @Test - void shouldCallRemoteService() { - service.setHasNewPostfachNachricht(VORGANG_ID); - - verify(remoteService).setBooleanWriteableClientAttribute(VORGANG_ID, ClientAttributeService.ATTRIBUTE_NAME_HAS_NEW_POSTFACH_NACHRICHT, - true); - } - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcClientAttributeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcClientAttributeTestFactory.java deleted file mode 100644 index aa74eb83c..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcClientAttributeTestFactory.java +++ /dev/null @@ -1,42 +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.attributes; - -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; - -public class GrpcClientAttributeTestFactory { - - public static final GrpcClientAttribute create() { - return createBuilder().build(); - } - - public static final GrpcClientAttribute.Builder createBuilder() { - return GrpcClientAttribute.newBuilder() - .setAttributeName(ClientAttributeTestFactory.ATTRIBUTE_NAME) - .setAccess(GrpcAccessPermission.READ_WRITE) - .setValue(GrpcClientAttributeValue.newBuilder().setStringValue(ClientAttributeTestFactory.VALUE).build()); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcSetClientAttributeRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcSetClientAttributeRequestTestFactory.java deleted file mode 100644 index 0558b0d93..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcSetClientAttributeRequestTestFactory.java +++ /dev/null @@ -1,49 +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.attributes; - -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest; - -class GrpcSetClientAttributeRequestTestFactory { - - static final String VORGANG_ID = "55"; - static final GrpcAccessPermission access = GrpcAccessPermission.READ_ONLY; - - public static GrpcSetClientAttributeRequest create() { - return createBuilder().build(); - } - - public static GrpcSetClientAttributeRequest createWithAttribute(GrpcClientAttribute attribute) { - return createBuilder().setAttribute(attribute).build(); - } - - public static GrpcSetClientAttributeRequest.Builder createBuilder() { - return GrpcSetClientAttributeRequest.newBuilder() - .setVorgangId(VORGANG_ID) - .setAttribute(GrpcClientAttributeTestFactory.create()); - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EMailServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EMailServiceTest.java deleted file mode 100644 index f749f48e4..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EMailServiceTest.java +++ /dev/null @@ -1,258 +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.email; - -import static de.ozgcloud.nachrichten.email.MailSendRequestTestFactory.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import jakarta.activation.DataSource; -import jakarta.mail.MessagingException; -import jakarta.mail.internet.MimeMessage; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.mail.MailSendException; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.mail.javamail.MimeMessageHelper; - -import lombok.SneakyThrows; - -class EMailServiceTest { - - @Spy // NOSONAR - @InjectMocks - private EMailService service; - - @Mock - private JavaMailSender sender; - @Mock - private ApplicationEventPublisher publisher; - - @Nested - class TestSendingEmail { - - @Nested - class TestSendEmail { - private MailSendRequest request = MailSendRequestTestFactory.create(); - - @Mock // NOSONAR - private MimeMessage message; - - @BeforeEach - void initTest() { - when(sender.createMimeMessage()).thenReturn(message); - } - - @Test - void shouldWriteEmail() { - service.sendEmail(request); - - verify(service).writeEmail(any(), eq(request)); - } - - @Test - void shouldAddAttachments() { - service.sendEmail(request); - - verify(service).addAttachments(any(), eq(request)); - } - - @Test - void shouldSendMessage() { - service.sendEmail(request); - - verify(service).send(message, request); - } - } - - @Nested - class TestWriteEmail { - - @Mock // NOSONAR - private MimeMessageHelper helper; - - private MailSendRequest request = MailSendRequestTestFactory.create(); - - @Test - void shouldSetToAddress() throws MessagingException { - service.writeEmail(helper, request); - - verify(helper).setTo(new String[] { formatMailRecipient(EMAIL_RECIPIENT) }); - } - - @SneakyThrows - @Test - void shouldFormatToEmailAddresses() { - var request = MailSendRequestTestFactory.createBuilder().clearToAddresses().toAddress(EMAIL_RECIPIENT).build(); - - service.writeEmail(helper, request); - - verify(helper).setTo(new String[] { formatMailRecipient(EMAIL_RECIPIENT) }); - } - - @SneakyThrows - @Test - void shouldFormatFromEmailAddresses() { - service.writeEmail(helper, request); - - verify(helper).setFrom(FROM); - } - - @Test - void shouldSetFromAddress() throws MessagingException { - service.writeEmail(helper, request); - - verify(helper).setFrom(MailSendRequestTestFactory.FROM); - } - - @Test - void shouldSetSubject() throws MessagingException { - service.writeEmail(helper, request); - - verify(helper).setSubject(MailSendRequestTestFactory.SUBJECT); - } - - @Test - void shouldSetBody() throws MessagingException { - service.writeEmail(helper, request); - - verify(helper).setText(MailSendRequestTestFactory.BODY); - } - - @Test - void shouldSetReplyTo() throws MessagingException { - service.writeEmail(helper, request); - - verify(helper).setReplyTo(MailSendRequestTestFactory.REPLY_TO); - } - - public static String formatMailRecipient(MailRecipient mailRecipient) { - return EMAIL_ADDRESS_TEMPLATE.formatted(mailRecipient.firstName(), mailRecipient.lastName(), mailRecipient.email()); - } - } - - @Nested - class TestAddAttachments { - - @Mock // NOSONAR - private MimeMessageHelper helper; - - private MailSendRequest request = MailSendRequestTestFactory.create(); - - @Test - void shouldAddInlineAttachment() throws MessagingException { - service.addAttachments(helper, request); - - verify(helper).addAttachment(eq(MailSendRequestTestFactory.ATTACHMENT_NAME), any(DataSource.class)); - } - } - - @Nested - class TestAddHeaders { - @Mock // NOSONAR - private MimeMessage message; - - private MailSendRequest request = MailSendRequestTestFactory.createBuilder().receiptRequired(true).build(); - - @Test - void shouldRequestReceipt() { - service.prepareAndSendMail(message, request); - - verify(service).requestReceipt(any(), any()); - } - - @Test - void shouldNotRequestReceipt() { - MailSendRequest request = MailSendRequestTestFactory.createBuilder().receiptRequired(false).build(); - - service.prepareAndSendMail(message, request); - - verify(service, never()).requestReceipt(any(), any()); - } - - @Nested - class RequestReceipt { - - @Test - void shouldAddReadReceiptToHeader() throws MessagingException { - service.requestReceipt(message, request); - - verify(message).addHeader(EMailService.HEADER_READ_RECEIPT, MailSendRequestTestFactory.FROM); - } - - @Test - void shouldAddConfirmReadingHeader() throws MessagingException { - service.requestReceipt(message, request); - - verify(message).addHeader(EMailService.HEADER_CONFIRM_READING, MailSendRequestTestFactory.FROM); - } - - @Test - void shouldAddDispositionNotificationHeader() throws MessagingException { - service.requestReceipt(message, request); - - verify(message).addHeader(EMailService.HEADER_DISPOSITION_NOTIFICATION, MailSendRequestTestFactory.FROM); - } - } - } - - @Nested - class TestSend { - - @Mock // NOSONAR - private MimeMessage message; - private MailSendRequest request = MailSendRequestTestFactory.create(); - - @Test - void shouldCallSender() { - service.send(message, request); - - verify(sender).send(message); - } - - @Test - void shouldTriggerEvent() { - service.send(message, request); - - verify(publisher).publishEvent(any(MailSentEvent.class)); - } - - @Test - void shouldTriggerEventOnError() { - doThrow(MailSendException.class).when(sender).send(any(MimeMessage.class)); - - service.send(message, request); - - verify(publisher).publishEvent(any(MailSendErrorEvent.class)); - verify(publisher, never()).publishEvent(any(MailSentEvent.class)); - } - } - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EmailGrpcServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EmailGrpcServiceTest.java deleted file mode 100644 index 06d0c091a..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EmailGrpcServiceTest.java +++ /dev/null @@ -1,104 +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.email; - -import io.grpc.stub.StreamObserver; -import lombok.SneakyThrows; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.test.util.ReflectionTestUtils; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -class EmailGrpcServiceTest { - - @Mock - private MailService mailService; - - @InjectMocks - private EmailGrpcService emailGrpcService; - - @Nested - @DisplayName("When called send email gRPC endpoint") - class TestSendEmail { - - @Mock - private StreamObserver<GrpcSendEmailResponse> streamObserver; - @Captor - private ArgumentCaptor<MailSendRequest> mailRequestCaptor; - - @BeforeEach - @SneakyThrows - public void init() { - ReflectionTestUtils.setField(emailGrpcService, "mailFrom", MailSendRequestTestFactory.FROM); - } - - @Test - void shouldSendEmail() { - var mailSendRequest = MailSendRequestTestFactory.createBuilder().clearToAddresses() - .toAddress(MailSendRequestTestFactory.EMAIL_RECIPIENT).clearAttachments() - .replyTo(null).requestReference(null).build(); - - emailGrpcService.sendEmail(GrpcNotificationRecipientsTestFactory.create(), streamObserver); - - verify(mailService).sendMail(mailRequestCaptor.capture()); - assertThat(mailRequestCaptor.getValue()).usingRecursiveComparison().isEqualTo(mailSendRequest); - } - - @Test - void shouldSendAllEmail() { - var request = GrpcNotificationRecipientsTestFactory.createBuilder().addRecipients(GrpcRecipientTestFactory.create()).build(); - - emailGrpcService.sendEmail(request, streamObserver); - - verify(mailService, times(2)).sendMail(any()); - } - - @Test - void shouldSendResponse() { - var notification = GrpcNotificationRecipientsTestFactory.create(); - - emailGrpcService.sendEmail(notification, streamObserver); - - verify(streamObserver, times(1)).onNext(GrpcSendEmailResponse.newBuilder().build()); - } - - @Test - void shouldCloseObserver() { - var notification = GrpcNotificationRecipientsTestFactory.create(); - - emailGrpcService.sendEmail(notification, streamObserver); - - verify(streamObserver, times(1)).onCompleted(); - } - } - -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcNotificationRecipientsTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcNotificationRecipientsTestFactory.java deleted file mode 100644 index ec2ac285d..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcNotificationRecipientsTestFactory.java +++ /dev/null @@ -1,40 +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.email; - -public class GrpcNotificationRecipientsTestFactory { - - public static final GrpcRecipient GRPC_EMAIL_RECIPIENT = GrpcRecipientTestFactory.create(); - - public static GrpcSendEmailRequest create() { - return createBuilder().build(); - } - - public static GrpcSendEmailRequest.Builder createBuilder() { - return GrpcSendEmailRequest.newBuilder() - .setSubject(MailSendRequestTestFactory.SUBJECT) - .setBody(MailSendRequestTestFactory.BODY) - .addRecipients(GRPC_EMAIL_RECIPIENT); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcRecipientTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcRecipientTestFactory.java deleted file mode 100644 index 6b378f814..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcRecipientTestFactory.java +++ /dev/null @@ -1,38 +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.email; - -public class GrpcRecipientTestFactory { - - public static GrpcRecipient create() { - return createBuilder().build(); - } - - public static GrpcRecipient.Builder createBuilder() { - return GrpcRecipient.newBuilder() - .setFirstName(MailRecipientTestFactory.FIRST_NAME) - .setLastName(MailRecipientTestFactory.LAST_NAME) - .setEmail(MailSendRequestTestFactory.TO); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailRecipientTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailRecipientTestFactory.java deleted file mode 100644 index b2c567ea4..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailRecipientTestFactory.java +++ /dev/null @@ -1,42 +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.email; - -public class MailRecipientTestFactory { - - public static final String FIRST_NAME = "first"; - public static final String LAST_NAME = "last"; - public static final String EMAIL = "default@email.local"; - - public static MailRecipient create() { - return createBuilder().build(); - } - - public static MailRecipient.MailRecipientBuilder createBuilder() { - return MailRecipient.builder() - .firstName(FIRST_NAME) - .lastName(LAST_NAME) - .email(EMAIL); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendErrorEventTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendErrorEventTestFactory.java deleted file mode 100644 index b2b9757a0..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendErrorEventTestFactory.java +++ /dev/null @@ -1,33 +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.email; - -public class MailSendErrorEventTestFactory { - - public static final String ERROR_MSG = "leider kaputt"; - - public static MailSendErrorEvent create(MailSendRequest request) { - return new MailSendErrorEvent(request, ERROR_MSG); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendRequestTestFactory.java deleted file mode 100644 index 3e7fea3f2..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendRequestTestFactory.java +++ /dev/null @@ -1,69 +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.email; - -import java.util.UUID; - -import de.ozgcloud.nachrichten.email.MailSendRequest.MailAttachment; -import jakarta.mail.util.ByteArrayDataSource; - -class MailSendRequestTestFactory { - - public static final String FROM = "from@mailinator.com"; - public static final String TO = "to@mailinator.com"; - - public static final String SUBJECT = "The Subject"; - public static final String BODY = "Lorem ipsum"; - - private static final String REFERENCE = UUID.randomUUID().toString(); - - public static final String ATTACHMENT_NAME = "aFile"; - public static final String ATTACHMENT = "BINARY_BLAH"; - - public static final String REPLY_TO = "replyTo@mailinator.com"; - - public static final MailRecipient EMAIL_RECIPIENT = MailRecipientTestFactory.createBuilder().email(TO).build(); - - public static final String EMAIL_ADDRESS_TEMPLATE = "%s %s <%s>"; - - public static MailSendRequest create() { - return createBuilder().build(); - } - - public static MailSendRequest.MailSendRequestBuilder createBuilder() { - var ds = new ByteArrayDataSource(ATTACHMENT.getBytes(), "plain/text"); - ds.setName(ATTACHMENT_NAME); - - return MailSendRequest.builder() - .fromAddress(FROM) - .toAddress(EMAIL_RECIPIENT) - .subject(SUBJECT) - .body(BODY) - .requestReference(REFERENCE) - .attachment(MailAttachment.builder() - .dataSource(ds) - .build()) - .replyTo(REPLY_TO); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSentEventTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSentEventTestFactory.java deleted file mode 100644 index 599956765..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSentEventTestFactory.java +++ /dev/null @@ -1,33 +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.email; - -public class MailSentEventTestFactory { - - public static MailSentEvent create(Object reference) { - - return new MailSentEvent(MailSendRequestTestFactory.createBuilder().requestReference(reference).build()); - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteServiceTest.java deleted file mode 100644 index 1410dd83c..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteServiceTest.java +++ /dev/null @@ -1,94 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.info.nachricht.GrpcNachricht; -import de.ozgcloud.info.nachricht.GrpcNewNachrichtReply; -import de.ozgcloud.info.nachricht.GrpcNewNachrichtRequest; -import de.ozgcloud.info.nachricht.NachrichtServiceGrpc.NachrichtServiceBlockingStub; - -class InfoManagerRemoteServiceTest { - - @Spy - @InjectMocks - private InfoManagerRemoteService service; - - @Mock - private NachrichtServiceBlockingStub nachrichtServiceStub; - @Mock - private InfomanagerNachrichtMapper nachrichtMapper; - - @Nested - class TestSendNotification { - - private static final String INFO_MANAGER_STATUS = "status"; - - @Mock - private GrpcNewNachrichtRequest grpcRequest; - @Mock - private GrpcNewNachrichtReply grpcReply; - - @BeforeEach - void setup() { - doReturn(grpcRequest).when(service).buildNachrichtRequest(any()); - when(nachrichtServiceStub.saveNewNachricht(any())).thenReturn(grpcReply); - } - - @Test - void shouldCallGrpcClient() { - sendNotification(); - - verify(nachrichtServiceStub).saveNewNachricht(grpcRequest); - } - - @Test - void shouldReturnStatus() { - when(grpcReply.getStatus()).thenReturn(INFO_MANAGER_STATUS); - - var status = sendNotification(); - - assertThat(status).isEqualTo(INFO_MANAGER_STATUS); - } - - private String sendNotification() { - return service.sendNotification(InfoManagerRequestTestFactory.create()); - } - } - - @Nested - class TestBuildNachrichtRequest { - - @Mock - private GrpcNachricht grpcNachricht; - - @BeforeEach - void setup() { - when(nachrichtMapper.toGrpc(any())).thenReturn(grpcNachricht); - } - - @Test - void shouldCallMapper() { - var nachricht = InfoManagerRequestTestFactory.create(); - - service.buildNachrichtRequest(nachricht); - - verify(nachrichtMapper).toGrpc(nachricht); - } - - @Test - void shouldSetNachricht() { - var grpcRequest = service.buildNachrichtRequest(InfoManagerRequestTestFactory.create()); - - assertThat(grpcRequest.getNachricht()).isEqualTo(grpcNachricht); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRequestTestFactory.java deleted file mode 100644 index 0690a6581..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRequestTestFactory.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -public class InfoManagerRequestTestFactory { - - public static final String NACHRICHTEN_MANAGER_URL = "nachrichten-manager"; - - public static InfoManagerRequest create() { - return createBuilder().build(); - } - - private static InfoManagerRequest.InfoManagerRequestBuilder createBuilder() { - return InfoManagerRequest.builder() - .nachrichtId(PostfachNachrichtTestFactory.ID) - .vorgangId(MessageTestFactory.VORGANG_ID) - .postfachId(MessageTestFactory.POSTFACH_ID) - .nachrichtenManagerUrl(NACHRICHTEN_MANAGER_URL); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java deleted file mode 100644 index 95e41db14..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java +++ /dev/null @@ -1,104 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.nachrichten.NachrichtenManagerProperties; -import de.ozgcloud.nachrichten.postfach.PostfachException; -import de.ozgcloud.nachrichten.postfach.PostfachMessageCode; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -class InfoManagerServiceTest { - - @Spy - @InjectMocks - private InfoManagerService service; - - @Mock - private InfoManagerRemoteService infomanagerRemoteService; - @Mock - private NachrichtenManagerProperties nachrichtenManagerProperties; - - @Nested - class TestNotifyInfoManager { - - private static final String NACHRICHTEN_MANAGER_URL = "nachrichtenManagerUrl"; - - private PostfachNachricht postfachNachricht = PostfachNachrichtTestFactory.create(); - - @Test - void shouldCallBuildInfomanagerNachricht() { - service.notifyInfoManager(postfachNachricht); - - verify(service).builInfomanagerRequest(postfachNachricht); - } - - @Test - void shouldCallInfoManagerRemoteService() { - var infomanagerNachricht = InfoManagerRequestTestFactory.create(); - doReturn(infomanagerNachricht).when(service).builInfomanagerRequest(any()); - - service.notifyInfoManager(postfachNachricht); - - verify(infomanagerRemoteService).sendNotification(infomanagerNachricht); - } - - @Test - void shouldThrowPostfachException() { - var causeException = new RuntimeException(); - when(infomanagerRemoteService.sendNotification(any())).thenThrow(causeException); - - var exception = assertThrows(PostfachException.class, () -> service.notifyInfoManager(postfachNachricht)); - assertThat(exception.getMessageCode()).isEqualTo(PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE); - } - - @Nested - class TestBuildInfomanagerNachricht { - - @Test - void shouldSetNachrichtId() { - var request = buildInfomanagerNachricht(); - - assertThat(request.getNachrichtId()).isEqualTo(PostfachNachrichtTestFactory.ID); - } - - @Test - void shouldSetVorgangId() { - var request = buildInfomanagerNachricht(); - - assertThat(request.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldSetPostfachId() { - var request = buildInfomanagerNachricht(); - - assertThat(request.getPostfachId()).isEqualTo(MessageTestFactory.POSTFACH_ID); - } - - @Test - void shouldSetNachrichtenManagerUrl() { - when(nachrichtenManagerProperties.getUrl()).thenReturn(NACHRICHTEN_MANAGER_URL); - - var request = buildInfomanagerNachricht(); - - assertThat(request.getNachrichtenManagerUrl()).isEqualTo(NACHRICHTEN_MANAGER_URL); - } - - private InfoManagerRequest buildInfomanagerNachricht() { - return service.builInfomanagerRequest(postfachNachricht); - } - } - - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapperTest.java deleted file mode 100644 index a9d67291f..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapperTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package de.ozgcloud.nachrichten.info; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -import de.ozgcloud.info.nachricht.GrpcNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -class InfomanagerNachrichtMapperTest { - - private InfomanagerNachrichtMapper mapper = Mappers.getMapper(InfomanagerNachrichtMapper.class); - - @Test - void shouldMapNachrichtId() { - var result = map(); - - assertThat(result.getNachrichtId()).isEqualTo(PostfachNachrichtTestFactory.ID); - } - - @Test - void shouldMapVorgangId() { - var result = map(); - - assertThat(result.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldMapPostfachId() { - var result = map(); - - assertThat(result.getPostfachId()).isEqualTo(MessageTestFactory.POSTFACH_ID); - } - - @Test - void shouldMapNachrichtenManagerUrl() { - var result = map(); - - assertThat(result.getNachrichtenListUrl()).isEqualTo(InfoManagerRequestTestFactory.NACHRICHTEN_MANAGER_URL); - } - - private GrpcNachricht map() { - return mapper.toGrpc(InfoManagerRequestTestFactory.create()); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachAddressTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachAddressTestFactory.java deleted file mode 100644 index 4e173a012..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachAddressTestFactory.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import de.ozgcloud.vorgang.common.GrpcObject; -import de.ozgcloud.vorgang.common.GrpcProperty; - -public class GrpcPostfachAddressTestFactory { - - public static GrpcPostfachAddress create() { - return createBuilder().build(); - } - - public static GrpcPostfachAddress.Builder createBuilder() { - return GrpcPostfachAddress.newBuilder() - .setType(PostfachAddressTestFactory.TYPE) - .setIdentifier(createIdentifier()) - .setVersion(PostfachAddressTestFactory.VERSION) - .setServiceKontoType(PostfachTestFactory.POSTFACH_TYPE); - } - - public static GrpcObject createIdentifier() { - return GrpcObject.newBuilder() - .addProperty(GrpcProperty.newBuilder() - .setName(PostfachNachricht.FIELD_POSTFACH_ID) - .addValue(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE) - .build()) - .build(); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachMailTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachMailTestFactory.java deleted file mode 100644 index 7f4399a3e..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachMailTestFactory.java +++ /dev/null @@ -1,52 +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; - -import static de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory.*; -import static de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory.*; - -public class GrpcPostfachMailTestFactory { - - public static GrpcPostfachMail create() { - return createBuilder().build(); - } - - public static GrpcPostfachMail.Builder createBuilder() { - return GrpcPostfachMail.newBuilder() - .setId(ID) - .setVorgangId(VORGANG_ID) - .setPostfachId(POSTFACH_ID) - .setPostfachAddress(GrpcPostfachAddressTestFactory.create()) - .setCreatedAt(CREATED_AT_STR) - .setCreatedBy(CREATED_BY) - .setSentAt(SENT_AT_STR) - .setSentSuccessful(SENT_SUCCESSFUL) - .setMessageCode(MESSAGE_CODE) - .setDirection(GrpcDirection.valueOf(DIRECTION.name())) - .setSubject(SUBJECT) - .setMailBody(PostfachNachrichtTestFactory.MAIL_BODY) - .setReplyOption(PostfachNachrichtTestFactory.REPLY_OPTION.name()) - .addAllAttachment(PostfachNachrichtTestFactory.ATTACHMENTS); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcResendPostfachMailRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcResendPostfachMailRequestTestFactory.java deleted file mode 100644 index 74968834e..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcResendPostfachMailRequestTestFactory.java +++ /dev/null @@ -1,46 +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; - -import java.util.UUID; - -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; -import de.ozgcloud.vorgang.grpc.command.GrpcUser; - -public class GrpcResendPostfachMailRequestTestFactory { - - public static final String COMMAND_ID = UUID.randomUUID().toString(); - public static final String USER_ID = UUID.randomUUID().toString(); - - public static GrpcResendPostfachMailRequest create() { - return createBuilder().build(); - } - - public static GrpcResendPostfachMailRequest.Builder createBuilder() { - return GrpcResendPostfachMailRequest.newBuilder() - .setContext(GrpcCallContext.newBuilder().setUser(GrpcUser.newBuilder().setId(USER_ID).build()).build()) - .setCommandId(COMMAND_ID) - .setPostfachMailId(PostfachNachrichtTestFactory.ID); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java deleted file mode 100644 index 0c5a79c00..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -public class GrpcSaveNachrichtDraftRequestTestFactory { - - static GrpcSaveNachrichtDraftRequest create() { - return createBuilder().build(); - } - - static GrpcSaveNachrichtDraftRequest.Builder createBuilder() { - return GrpcSaveNachrichtDraftRequest.newBuilder() - .setVorgangId(MessageTestFactory.VORGANG_ID); - - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSendPostfachMailRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSendPostfachMailRequestTestFactory.java deleted file mode 100644 index 076daa2e6..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSendPostfachMailRequestTestFactory.java +++ /dev/null @@ -1,47 +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; - -import java.util.UUID; - -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; -import de.ozgcloud.vorgang.grpc.command.GrpcUser; - -class GrpcSendPostfachMailRequestTestFactory { - - public static final String COMMAND_ID = UUID.randomUUID().toString(); - public static final String USER_ID = UUID.randomUUID().toString(); - - public static GrpcSendPostfachMailRequest create() { - return createBuilder().build(); - } - - public static GrpcSendPostfachMailRequest.Builder createBuilder() { - return GrpcSendPostfachMailRequest.newBuilder() - .setContext(GrpcCallContext.newBuilder().setUser(GrpcUser.newBuilder().setId(USER_ID).build()).build()) - .setCommandId(COMMAND_ID) - .setMail(GrpcPostfachMailTestFactory.createBuilder().clearCreatedAt().clearDirection().build()); - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java deleted file mode 100644 index 94f5df834..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java +++ /dev/null @@ -1,24 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -public class PostfachAddressTestFactory { - - public final static int TYPE = 1; - public static final String STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE = MessageTestFactory.POSTFACH_ID; - public final static StringBasedIdentifier IDENTIFIER = StringBasedIdentifier.builder().postfachId(STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE) - .build(); - public static final String VERSION = "1.0"; - - public static PostfachAddress create() { - return createBuilder().build(); - } - - public static PostfachAddress.PostfachAddressBuilder createBuilder() { - return PostfachAddress.builder() - .type(TYPE) - .identifier(IDENTIFIER) - .version(VERSION) - .serviceKontoType(PostfachTestFactory.POSTFACH_TYPE); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java deleted file mode 100644 index 3964f981a..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java +++ /dev/null @@ -1,215 +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; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.command.Command; -import de.ozgcloud.command.CommandCreatedEvent; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -class PostfachEventListenerTest { - - @InjectMocks - private PostfachEventListener listener; - - @Mock - private PostfachService service; - @Mock - private Command command; - - @Captor - private ArgumentCaptor<PostfachNachricht> nachrichtCaptor; - - @DisplayName("Send postfach nachricht") - @Nested - class TestSendPostfachNachricht { - - private static final String COMMAND_ID = UUID.randomUUID().toString(); - private static final String USER_ID = PostfachNachrichtTestFactory.CREATED_BY; - - @BeforeEach - void mockCommand() { - when(command.getId()).thenReturn(COMMAND_ID); - when(command.getCreatedBy()).thenReturn(USER_ID); - when(command.getVorgangId()).thenReturn(MessageTestFactory.VORGANG_ID); - when(command.getRelationId()).thenReturn(MessageTestFactory.VORGANG_ID); - when(command.getBodyObject()).thenReturn(buildCommandBody()); - } - - @Test - void shouldCallService() { - listener.sendPostfachNachricht(new CommandCreatedEvent(command)); - - verify(service).sendMail(eq(COMMAND_ID), eq(USER_ID), nachrichtCaptor.capture()); - assertThat(nachrichtCaptor.getValue()) - .usingRecursiveComparison().ignoringFields("id", "createdAt", "messageCode", "messageId", "sentAt", "sentSuccessful") - .isEqualTo(PostfachNachrichtTestFactory.createBuilder().direction(Direction.OUT).build()); - } - - @Test - void shouldNotHaveIdForNewNachricht() { - listener.sendPostfachNachricht(new CommandCreatedEvent(command)); - - verify(service).sendMail(eq(COMMAND_ID), eq(USER_ID), nachrichtCaptor.capture()); - assertThat(nachrichtCaptor.getValue().getId()).isNull(); - } - - @Test - void shouldHaveIdForSavedNachricht() { - when(command.getRelationId()).thenReturn(PostfachNachrichtTestFactory.ID); - - listener.sendPostfachNachricht(new CommandCreatedEvent(command)); - - verify(service).sendMail(eq(COMMAND_ID), eq(USER_ID), nachrichtCaptor.capture()); - assertThat(nachrichtCaptor.getValue().getId()).isEqualTo(PostfachNachrichtTestFactory.ID); - } - - @DisplayName("with postfachAddress") - @Nested - class TestWithPostfachAddress { - - @BeforeEach - void mockCommandBodyObject() { - var body = buildCommandBody(); - body.remove(PostfachNachricht.FIELD_POSTFACH_ID); - when(command.getBodyObject()).thenReturn(body); - } - - @Test - void shouldHandleEmptyPostfachId() { - var postfachMailToSend = sendPostfachNachricht(); - - assertThat(postfachMailToSend.getPostfachId()).isNull(); - } - } - - @DisplayName("with postfachId") - @Nested - class TestWithPostfachId { - - @BeforeEach - void mockCommandBodyObject() { - var body = buildCommandBody(); - body.remove(PostfachNachricht.POSTFACH_ADDRESS_FIELD); - when(command.getBodyObject()).thenReturn(body); - } - - @Test - void shouldHandleEmptyPostfachAddress() { - var postfachMailToSend = sendPostfachNachricht(); - - assertThat(postfachMailToSend.getPostfachAddress()).isNull(); - } - } - - private PostfachNachricht sendPostfachNachricht() { - listener.sendPostfachNachricht(new CommandCreatedEvent(command)); - - verify(service).sendMail(eq(COMMAND_ID), eq(USER_ID), nachrichtCaptor.capture()); - - return nachrichtCaptor.getValue(); - } - - private Map<String, Object> buildCommandBody() { - var map = new HashMap<String, Object>(); - map.putAll(Map.of( - PostfachNachricht.FIELD_VORGANG_ID, "fake", - PostfachNachricht.FIELD_POSTFACH_ID, MessageTestFactory.POSTFACH_ID, - PostfachNachricht.POSTFACH_ADDRESS_FIELD, // - Map.of(PostfachAddress.VERSION_FIELD, PostfachAddressTestFactory.VERSION, - PostfachAddress.TYPE_FIELD, PostfachAddressTestFactory.TYPE, - PostfachAddress.SERVICEKONTO_TYPE_FIELD, PostfachTestFactory.POSTFACH_TYPE, - PostfachAddress.IDENTIFIER_FIELD, // - Map.of(PostfachNachricht.FIELD_POSTFACH_ID, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE)), - PostfachNachricht.FIELD_SUBJECT, MessageTestFactory.SUBJECT, - PostfachNachricht.FIELD_MAIL_BODY, PostfachNachrichtTestFactory.MAIL_BODY, - PostfachNachricht.FIELD_REPLY_OPTION, PostfachNachrichtTestFactory.REPLY_OPTION.name(), - PostfachNachricht.FIELD_ATTACHMENTS, PostfachNachrichtTestFactory.ATTACHMENTS)); - return map; - } - } - - @DisplayName("Get string list value") - @Nested - class TestGetStringListValue { - - @Test - void shouldReturnMultipleValuesFieldAsStringList() { - var commandBodyMap = new HashMap<String, Object>(); - commandBodyMap.put(PostfachNachricht.FIELD_ATTACHMENTS, List.of("1", "2")); - - var list = listener.getStringListValue(commandBodyMap, PostfachNachricht.FIELD_ATTACHMENTS); - - assertThat(list).contains("1").contains("2"); - } - - @Test - void shouldReturnSingleValueFieldAsStringList() { - var commandBodyMap = new HashMap<String, Object>(); - commandBodyMap.put(PostfachNachricht.FIELD_ATTACHMENTS, List.of("1", "2")); - - var list = listener.getStringListValue(commandBodyMap, PostfachNachricht.FIELD_ATTACHMENTS); - - assertThat(list).contains("1").contains("2"); - } - - @Test - void shouldReturnEmptyFieldValueAsEmptyCollection() { - var commandBodyMap = new HashMap<String, Object>(); - commandBodyMap.put(PostfachNachricht.FIELD_ATTACHMENTS, Collections.emptyList()); - - var list = listener.getStringListValue(commandBodyMap, PostfachNachricht.FIELD_ATTACHMENTS); - - assertThat(list).isEmpty(); - } - - @Test - void shouldReturnEmptyFieldAsEmptyCollection() { - var commandBodyMap = new HashMap<String, Object>(); - - var list = listener.getStringListValue(commandBodyMap, PostfachNachricht.FIELD_ATTACHMENTS); - - assertThat(list).isEmpty(); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcServiceTest.java deleted file mode 100644 index dec866938..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcServiceTest.java +++ /dev/null @@ -1,331 +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; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; -import io.grpc.stub.StreamObserver; - -class PostfachGrpcServiceTest { - - @InjectMocks - private PostfachGrpcService service; - - @Mock - private PostfachService postfachService; - @Mock - private GrpcPostfachNachrichtMapper nachrichtMapper; - @Mock - private PostfachMapper postfachMapper; - - @Spy - private PostfachNachrichtMapper mapper = Mappers.getMapper(PostfachNachrichtMapper.class); - - @Nested - class TestSaveNachrichtDraft { - - @Mock - private StreamObserver<GrpcSaveNachrichtDraftResponse> responseObserver; - - @BeforeEach - void init() { - when(nachrichtMapper.mapFromGrpc(any())).thenReturn(PostfachNachrichtTestFactory.create()); - } - - @Test - void shouldCallService() { - var nachricht = PostfachNachrichtTestFactory.create(); - when(nachrichtMapper.mapFromGrpc(any())).thenReturn(nachricht); - - service.saveNachrichtDraft(GrpcSaveNachrichtDraftRequestTestFactory.create(), responseObserver); - - verify(postfachService).saveDraft(MessageTestFactory.VORGANG_ID, nachricht); - } - - @Test - void shouldSendResponse() { - service.saveNachrichtDraft(GrpcSaveNachrichtDraftRequestTestFactory.create(), responseObserver); - - verify(responseObserver).onNext(any()); - } - - @Test - void shouldCompleteCall() { - service.saveNachrichtDraft(GrpcSaveNachrichtDraftRequestTestFactory.create(), responseObserver); - - verify(responseObserver).onCompleted(); - } - - } - - @Nested - class TestSendMail { - - @Mock - private StreamObserver<GrpcSendPostfachMailResponse> responseObserver; - - @Captor - private ArgumentCaptor<PostfachNachricht> mailCaptor; - - @Test - void shouldCallPostfachServiceWithCommandId() { - service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(postfachService).sendMail(eq(GrpcSendPostfachMailRequestTestFactory.COMMAND_ID), anyString(), any()); - } - - @Test - void shouldCallServiceWithMail() { - service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(postfachService).sendMail(anyString(), anyString(), mailCaptor.capture()); - assertThat(mailCaptor.getValue()).usingRecursiveComparison() - .ignoringFields(PostfachNachricht.FIELD_MESSAGE_ID, PostfachNachricht.FIELD_CREATED_AT, PostfachNachricht.FIELD_CREATED_BY, - PostfachNachricht.FIELD_DIRECTION, PostfachNachricht.FIELD_SENT_SUCCESSFUL, PostfachNachricht.FIELD_SENT_AT, - PostfachNachricht.FIELD_MESSAGE_CODE, - PostfachNachricht.FIELD_ATTACHMENTS) // TODO remove this for sending attachments - .isEqualTo(PostfachNachrichtTestFactory.create()); - } - - @Test - void shouldCallServiceWithUserId() { - service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(postfachService).sendMail(anyString(), eq(GrpcSendPostfachMailRequestTestFactory.USER_ID), any()); - } - - @Test - void shouldSendResponse() { - service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(responseObserver).onNext(notNull()); - } - - @Test - void shouldCompleteCall() { - service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(responseObserver).onCompleted(); - } - } - - @Nested - class TestFindPostfachMail { - - private GrpcFindPostfachMailRequest request; - @Mock - private StreamObserver<GrpcFindPostfachMailResponse> responseObserver; - - @BeforeEach - void init() { - request = GrpcFindPostfachMailRequest.newBuilder().setNachrichtId(PostfachNachrichtTestFactory.ID).build(); - } - - @Test - void shouldCallService() { - service.findPostfachMail(request, responseObserver); - - verify(postfachService).findById(PostfachNachrichtTestFactory.ID); - } - - @Test - void shouldCallOnNext() { - service.findPostfachMail(request, responseObserver); - - verify(responseObserver).onNext(notNull()); - } - - @Test - void shouldCompleteCall() { - service.findPostfachMail(request, responseObserver); - - verify(responseObserver).onCompleted(); - } - } - - @Nested - class TestFindPostfachMails { - - private static final String VORGANG_ID = "42"; - private GrpcFindPostfachMailsRequest request; - - @Mock - private StreamObserver<GrpcFindPostfachMailsResponse> responseObserver; - - @BeforeEach - void init() { - request = GrpcFindPostfachMailsRequest.newBuilder().setVorgangId(VORGANG_ID).build(); - } - - @Test - void shouldCallService() { - service.findPostfachMails(request, responseObserver); - - verify(postfachService).findByVorgang(VORGANG_ID); - } - - @Test - void shouldCompleteCall() { - service.findPostfachMails(request, responseObserver); - - verify(responseObserver).onCompleted(); - } - - } - - @Nested - class TestResendMail { - - @Mock - private StreamObserver<GrpcResendPostfachMailResponse> responseObserver; - - @Test - void shouldCallPostfachService() { - service.resendPostfachMail(GrpcResendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(postfachService).resendMail(GrpcResendPostfachMailRequestTestFactory.COMMAND_ID, PostfachNachrichtTestFactory.ID); - } - - @Test - void shouldSendResponse() { - service.resendPostfachMail(GrpcResendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(responseObserver).onNext(notNull()); - } - - @Test - void shouldCompleteCall() { - service.resendPostfachMail(GrpcResendPostfachMailRequestTestFactory.create(), responseObserver); - - verify(responseObserver).onCompleted(); - } - } - - @Nested - class TestIsPostfachConfigured { - - private final GrpcIsPostfachConfiguredRequest request = GrpcIsPostfachConfiguredRequest.newBuilder().build(); - - @Mock - private StreamObserver<GrpcIsPostfachConfiguredResponse> responseObserver; - - @Test - void shouldCallPostfachService() { - service.isPostfachConfigured(request, responseObserver); - - verify(postfachService).isPostfachConfigured(); - } - - @Test - void shouldSendResponse() { - service.isPostfachConfigured(request, responseObserver); - - verify(responseObserver).onNext(notNull()); - } - - @Test - void shouldCompleteCall() { - service.isPostfachConfigured(request, responseObserver); - - verify(responseObserver).onCompleted(); - } - } - - @Nested - class TestGetPostfachConfig { - private GrpcGetPostfachConfigRequest request = GrpcGetPostfachConfigRequest.newBuilder().build(); - - @Mock - private StreamObserver<GrpcGetPostfachConfigResponse> responseObserver; - - @Test - void shouldSendResponse() { - service.getPostfachConfig(request, responseObserver); - - verify(responseObserver).onNext(notNull()); - } - - @Test - void shouldCompleteCall() { - service.getPostfachConfig(request, responseObserver); - - verify(responseObserver).onCompleted(); - } - - @Nested - class TestBuildGetPostfachConfigResponse { - - @Test - void shouldReturnNotConfigured() { - var response = service.buildGetPostfachConfigResponse(); - - assertThat(response).isEqualTo(GrpcGetPostfachConfigResponse.newBuilder().setConfigured(false).build()); - } - - @Nested - class TestConfigured { - - @Mock - private Postfach postfach; - @Mock - private GrpcPostfach grpcPostfach; - - @BeforeEach - void setup() { - when(postfachService.getPostfachs()).thenReturn(Stream.of(postfach)); - when(postfachMapper.toGrpc(postfach)).thenReturn(grpcPostfach); - } - - @Test - void shouldReturnPostfachs() { - var response = service.buildGetPostfachConfigResponse(); - - assertThat(response.getConfigured()).isTrue(); - } - - @Test - void shouldSetPostfach() { - var response = service.buildGetPostfachConfigResponse(); - - assertThat(response.getPostfachList()).containsExactly(grpcPostfach); - } - } - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMapperTest.java deleted file mode 100644 index fb1d7eecd..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMapperTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -class PostfachMapperTest { - - private PostfachMapper mapper = Mappers.getMapper(PostfachMapper.class); - - @Test - void shouldMapType() { - var result = mapper.toGrpc(PostfachTestFactory.create()); - - assertThat(result.getType()).isEqualTo(PostfachTestFactory.POSTFACH_TYPE); - } - - @Test - void shouldMapReplyAllowed() { - var result = mapper.toGrpc(PostfachTestFactory.create()); - - assertThat(result.getReplyAllowed()).isTrue(); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java deleted file mode 100644 index e0ea9bac9..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java +++ /dev/null @@ -1,209 +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; - -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Map; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import lombok.SneakyThrows; - -class PostfachNachrichtMapperTest { - - @InjectMocks - private PostfachNachrichtMapper mapper = Mappers.getMapper(PostfachNachrichtMapper.class); - @Mock - private GrpcObjectMapper grpcObjectMapper; - - @DisplayName("From map") - @Nested - class TestFromMap { - - @DisplayName("with existing postfachAddress") - @Nested - class TestWithExistingPostfachAddress { - - @BeforeEach - void mockGrpcObjectMapper() { - when(grpcObjectMapper.fromMap(any())).thenReturn(GrpcPostfachAddressTestFactory.createIdentifier()); - } - - @Test - void shouldFillGrpcMail() { - var grpcMail = fromMap(PostfachNachrichtTestFactory.asMap()); - - assertThat(grpcMail).usingRecursiveComparison().isEqualTo(GrpcPostfachMailTestFactory.create()); - } - - @Test - void shouldCallGrpcObjectMapper() { - fromMap(getMapWithoutProperty(PostfachNachricht.FIELD_SENT_SUCCESSFUL)); - - verify(grpcObjectMapper).fromMap(any()); - } - - @Test - void shouldIgnoreSentSuccessful() { - var grpcMail = fromMap(getMapWithoutProperty(PostfachNachricht.FIELD_SENT_SUCCESSFUL)); - - assertThat(grpcMail.getSentSuccessful()).isFalse(); - } - - @Test - void shouldIgnoreSentAt() { - var grpcMail = fromMap(getMapWithoutProperty(PostfachNachricht.FIELD_SENT_AT)); - - assertThat(grpcMail.getSentAt()).isEmpty(); - } - - @ParameterizedTest - @ValueSource(strings = PostfachNachricht.FIELD_POSTFACH_ID) - void shouldMapDefaultOnNonExistingValues(String fieldName) { - var mapped = fromMap(getMapWithoutProperty(fieldName)); - - var fieldValue = getAttributeFromGrpcObject(mapped, fieldName); - assertThat((String) fieldValue).isEmpty(); - } - } - - @DisplayName("with missing postfachAddress") - @Nested - class TestWithMissinPostfachAddress { - - @Test - void shouldNotThrowException() { - assertDoesNotThrow(() -> fromMap(getMapWithoutProperty(PostfachNachricht.POSTFACH_ADDRESS_FIELD))); - } - } - - private GrpcPostfachMail fromMap(Map<String, Object> map) { - return mapper.fromMap(map); - } - } - - @DisplayName("From map to postfachMail") - @Nested - class TestFromMapToPostfachMail { - - @Test - void shouldMap() { - var mail = fromMapToPostfachMail(PostfachNachrichtTestFactory.asMap()); - - assertThat(mail).usingRecursiveComparison().isEqualTo(PostfachNachrichtTestFactory.create()); - } - - @DisplayName("with missing postfachAddress") - @Nested - class TestWithMissinPostfachAddress { - - @Test - void shouldMapAsNull() { - var mail = fromMapToPostfachMail(getMapWithoutProperty(PostfachNachricht.POSTFACH_ADDRESS_FIELD)); - - assertThat(mail.getPostfachAddress()).isNull(); - } - - @Test - void shouldNotThrowExceptionOnMissingPostfachAddress() { - assertDoesNotThrow(() -> fromMapToPostfachMail(getMapWithoutProperty(PostfachNachricht.POSTFACH_ADDRESS_FIELD))); - } - } - - @ParameterizedTest - @ValueSource(strings = PostfachNachricht.FIELD_POSTFACH_ID) - void shouldMapDefaultOnNonExistingValues(String fieldName) { - var mapped = fromMapToPostfachMail(getMapWithoutProperty(fieldName)); - - var fieldValue = getAttributeFromObject(mapped, fieldName); - assertThat((String) fieldValue).isEmpty(); - } - - private PostfachNachricht fromMapToPostfachMail(Map<String, Object> map) { - return mapper.fromMapToPostfachMail(map); - } - } - - @DisplayName("From grpc mail") - @Nested - class TestFromGrpcMail { - - @Test - void shouldMapFields() { - var mapped = fromGrpcMail(GrpcPostfachMailTestFactory.create()); - - assertThat(mapped).usingRecursiveComparison() - .ignoringFields("createdAt", "createdBy", "direction", "messageId", "sentAt", "sentSuccessful", "memoizedHashCode") - .isEqualTo(PostfachNachrichtTestFactory.create()); - } - - @Test - void shouldHandleEmptyPostfachId() { - var postfachMailWithoutPostfachId = GrpcPostfachMailTestFactory.createBuilder().clearPostfachId().build(); - - assertDoesNotThrow(() -> fromGrpcMail(postfachMailWithoutPostfachId)); - } - - private PostfachNachricht fromGrpcMail(GrpcPostfachMail postfachMail) { - return mapper.fromGrpcMail(postfachMail); - } - } - - private Map<String, Object> getMapWithoutProperty(String entryKey) { - var map = PostfachNachrichtTestFactory.asMap(); - map.remove(entryKey); - return map; - } - - private Object getAttributeFromGrpcObject(Object obj, String name) { - return getAttributeFrom(obj, name + "_"); - } - - @SneakyThrows - private Object getAttributeFromObject(Object obj, String name) { - return getAttributeFrom(obj, name); - } - - @SneakyThrows - private Object getAttributeFrom(Object obj, String name) { - var clazz = obj.getClass(); - var field = clazz.getDeclaredField(name); - field.setAccessible(true); - - return field.get(obj); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java deleted file mode 100644 index 23276159b..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java +++ /dev/null @@ -1,109 +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; - -import static de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption.*; -import static de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory.*; - -import java.time.ZonedDateTime; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; - -public class PostfachNachrichtTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final String CREATED_AT_STR = "2020-04-01T10:30:10Z"; - public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR); - public static final String CREATED_BY = UUID.randomUUID().toString(); - public static final String MAIL_BODY = "Body\nString"; - - public static final String SENT_AT_STR = "2020-04-01T11:30:10Z"; - public static final ZonedDateTime SENT_AT = ZonedDateTime.parse(SENT_AT_STR); - public static final boolean SENT_SUCCESSFUL = true; - public static final String MESSAGE_CODE = PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE.getMessageCode(); - public static final PostfachNachricht.ReplyOption REPLY_OPTION = MANDATORY; - - public static final PostfachNachricht.Direction DIRECTION = Direction.IN; - - public static final String ATTACHMENT_FILE_ID = "21"; - public static final List<String> ATTACHMENTS = List.of(ATTACHMENT_FILE_ID); - - public static PostfachNachricht create() { - return createBuilder().build(); - } - - public static PostfachNachricht.PostfachNachrichtBuilder createBuilder() { - return PostfachNachricht.builder() - .id(ID) - .postfachId(POSTFACH_ID) - .postfachAddress(PostfachAddressTestFactory.create()) - .messageId(MESSAGE_ID) - .vorgangId(VORGANG_ID) - .direction(DIRECTION) - .createdAt(CREATED_AT) - .createdBy(CREATED_BY) - .sentAt(SENT_AT) - .sentSuccessful(SENT_SUCCESSFUL) - .messageCode(MESSAGE_CODE) - .replyOption(REPLY_OPTION) - .subject(SUBJECT) - .mailBody(MAIL_BODY) - .attachments(ATTACHMENTS); - } - - public static Map<String, Object> asMap() { - var map = new HashMap<String, Object>(); - map.put(PostfachNachricht.FIELD_ID, ID); - map.put(PostfachNachricht.FIELD_POSTFACH_ID, POSTFACH_ID); - map.put(PostfachNachricht.POSTFACH_ADDRESS_FIELD, getPostfachAddressAsMap()); - map.put(PostfachNachricht.FIELD_MESSAGE_ID, MESSAGE_ID); - map.put(PostfachNachricht.FIELD_VORGANG_ID, VORGANG_ID); - map.put(PostfachNachricht.FIELD_DIRECTION, DIRECTION.name()); - map.put(PostfachNachricht.FIELD_CREATED_AT, CREATED_AT_STR); - map.put(PostfachNachricht.FIELD_CREATED_BY, CREATED_BY); - map.put(PostfachNachricht.FIELD_SENT_AT, SENT_AT_STR); - map.put(PostfachNachricht.FIELD_SENT_SUCCESSFUL, SENT_SUCCESSFUL); - map.put(PostfachNachricht.FIELD_MESSAGE_CODE, MESSAGE_CODE); - map.put(PostfachNachricht.FIELD_REPLY_OPTION, REPLY_OPTION.name()); - map.put(PostfachNachricht.FIELD_SUBJECT, SUBJECT); - map.put(PostfachNachricht.FIELD_MAIL_BODY, MAIL_BODY); - map.put(PostfachNachricht.FIELD_ATTACHMENTS, ATTACHMENTS); - return map; - } - - private static Map<String, Object> getPostfachAddressAsMap() { - return Map.of(PostfachAddress.TYPE_FIELD, PostfachAddressTestFactory.TYPE, - PostfachAddress.VERSION_FIELD, PostfachAddressTestFactory.VERSION, - PostfachAddress.IDENTIFIER_FIELD, getPostfachAddressIdentifierAsMap(), - PostfachAddress.SERVICEKONTO_TYPE_FIELD, PostfachTestFactory.POSTFACH_TYPE); - } - - private static Map<String, Object> getPostfachAddressIdentifierAsMap() { - return Map.of(PostfachNachricht.FIELD_POSTFACH_ID, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachSchedulerTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachSchedulerTest.java deleted file mode 100644 index af624e27e..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachSchedulerTest.java +++ /dev/null @@ -1,51 +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; - -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -public class PostfachSchedulerTest { - - @InjectMocks // NOSONAR - private PostfachScheduler scheduler; - @Mock - private PostfachService service; - - @Nested - class TestRunGetMessagesTask { - - @Test - void shouldCallService() { - scheduler.runGetMessagesTask(); - - verify(service).fetchAndPersistReplies(); - } - - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java deleted file mode 100644 index 495a14faa..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java +++ /dev/null @@ -1,815 +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; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.time.ZonedDateTime; -import java.time.temporal.ChronoUnit; -import java.util.Optional; -import java.util.UUID; -import java.util.stream.Stream; - -import org.apache.logging.log4j.Logger; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.mapstruct.factory.Mappers; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.boot.logging.LogLevel; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.nachrichten.antragraum.AntragraumService; -import de.ozgcloud.nachrichten.attributes.ClientAttributeService; -import de.ozgcloud.nachrichten.info.InfoManagerService; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption; -import de.ozgcloud.nachrichten.postfach.osi.MessageAttachmentService; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; -import de.ozgcloud.nachrichten.postfach.osi.OsiPostfachServerProcessException; -import de.ozgcloud.nachrichten.postfach.osi.OsiPostfachServerProcessExceptionTestFactory; -import de.ozgcloud.vorgang.callcontext.CallContextUserTestFactory; -import de.ozgcloud.vorgang.callcontext.CurrentUserService; -import nl.altindag.log.LogCaptor; - -class PostfachServiceTest { - - @Spy - @InjectMocks - private PostfachService service; - @Mock - private PostfachRemoteService postfachRemoteService; - - @Mock - private PersistPostfachNachrichtService persistingService; - @Spy - private PostfachNachrichtMapper mapper = Mappers.getMapper(PostfachNachrichtMapper.class); - - @Mock - private ClientAttributeService clientAttributeService; - @Mock - private MessageAttachmentService messageAttachmentService; - @Mock - private ApplicationEventPublisher publisher; - - @Mock - private CurrentUserService userService; - @Spy - private Optional<AntragraumService> antragsraumService = Optional.of(mock(AntragraumService.class)); - @Spy - private Optional<InfoManagerService> infomanagerService = Optional.of(mock(InfoManagerService.class)); - - static final String COMMAND_ID = UUID.randomUUID().toString(); - static final String USER_ID = UUID.randomUUID().toString(); - - @Nested - class TestSaveDraft { - - @Captor - private ArgumentCaptor<Optional<String>> userIdCaptor; - @Captor - private ArgumentCaptor<PostfachNachricht> nachrichtCaptor; - - @BeforeEach - void init() { - doNothing().when(service).persistMail(any(), any()); - - when(userService.getUser()).thenReturn(CallContextUserTestFactory.create()); - } - - @Test - void shouldUseUserIdFromContext() { - service.saveDraft(MessageTestFactory.VORGANG_ID, PostfachNachrichtTestFactory.create()); - - verify(service).persistMail(userIdCaptor.capture(), any()); - assertThat(userIdCaptor.getValue()).contains(CallContextUserTestFactory.ID); - } - - @Test - void shouldPersistNachricht() { - service.saveDraft(MessageTestFactory.VORGANG_ID, PostfachNachrichtTestFactory.create()); - - verify(service).persistMail(any(), any()); - } - - @Test - void shouldAddVorgangId() { - service.saveDraft(MessageTestFactory.VORGANG_ID, PostfachNachrichtTestFactory.createBuilder().vorgangId(null).build()); - - verify(service).persistMail(any(), nachrichtCaptor.capture()); - assertThat(nachrichtCaptor.getValue().getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID); - } - } - - @Nested - class TestSendMail { - - @Test - void shouldCallDoSendMail() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - var mail = PostfachNachrichtTestFactory.create(); - - service.sendMail(COMMAND_ID, USER_ID, mail); - - verify(service).doSendMail(mail); - } - - @Test - void shouldCallPersistSentMail() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - var mail = PostfachNachrichtTestFactory.create(); - doReturn(mail).when(service).addMailSentInformation(any(PostfachNachricht.class), any(SendPostfachNachrichtResponse.class)); - - service.sendMail(COMMAND_ID, USER_ID, PostfachNachrichtTestFactory.create()); - - verify(service).persistSentMail(USER_ID, mail); - } - - @Test - void shouldAddMailSentInformation() { - var postfachMail = service.addMailSentInformation(PostfachNachrichtTestFactory.createBuilder().sentAt(null).sentSuccessful(null).build(), - SendPostfachNachrichtResponseTestFactory.create()); - - assertThat(postfachMail.getSentAt()).isNotNull(); - assertThat(postfachMail.getSentSuccessful()).isEqualTo(SendPostfachNachrichtResponseTestFactory.SENT_SUCCESSFUL); - assertThat(postfachMail.getMessageCode()).isEqualTo(SendPostfachNachrichtResponseTestFactory.MESSAGE_CODE.getMessageCode()); - } - - @Test - void shouldHandleSendMail() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - var mail = PostfachNachrichtTestFactory.create(); - service.sendMail(COMMAND_ID, USER_ID, mail); - - verify(service).handleSendMail(COMMAND_ID, mail); - } - - @Nested - class TestPersistSentMail { - - @Captor - private ArgumentCaptor<PostfachNachricht> mailCaptor; - - @Test - void shouldCallPersistingService() { - var mail = PostfachNachrichtTestFactory.create(); - - service.persistSentMail(USER_ID, mail); - - verify(persistingService).persistNachricht(any(), notNull()); - } - - @Test - void shouldSetDirectionToIN() { - service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.createBuilder().direction(null).build()); - - verify(persistingService).persistNachricht(any(), mailCaptor.capture()); - assertThat(mailCaptor.getValue().getDirection()).isEqualTo(Direction.OUT); - } - - @Test - void shouldSetCreatedAt() { - service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.createBuilder().createdAt(null).build()); - - verify(persistingService).persistNachricht(any(), mailCaptor.capture()); - assertThat(mailCaptor.getValue().getCreatedAt()).isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS)); - } - - @Test - void shouldSetCreatedBy() { - service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.createBuilder().createdBy(null).build()); - - verify(persistingService).persistNachricht(any(), mailCaptor.capture()); - assertThat(mailCaptor.getValue().getCreatedBy()).isEqualTo(USER_ID); - } - - @Test - void shouldSetUserId() { - var mail = PostfachNachrichtTestFactory.create(); - - service.persistSentMail(USER_ID, mail); - - verify(persistingService).persistNachricht(eq(Optional.of(USER_ID)), any()); - } - - @Test - void shouldSetClientAttribute() { - service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.create()); - - verify(clientAttributeService).setHasPostfachNachricht(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldNOTSetNewNachricht() { - service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.create()); - - verify(clientAttributeService, never()).setHasNewPostfachNachricht(any()); - } - } - - @Nested - class TestProcessForAntragsraum { - - @Mock - private PostfachNachricht modifiedMail; - - @Test - void shouldReturnEmpty() { - doReturn(false).when(service).isPostfachWithAntragsraum(any()); - - var result = service.processForAntragsraum(PostfachNachrichtTestFactory.create()); - - assertThat(result).isEmpty(); - } - - @Test - void shouldCallNotifyAntragsraum() { - doReturn(true).when(service).isPostfachWithAntragsraum(any()); - var mail = PostfachNachrichtTestFactory.create(); - - service.processForAntragsraum(mail); - - verify(infomanagerService.get()).notifyInfoManager(mail); - } - - @Test - void shouldReturnAdjustedMail() { - doReturn(true).when(service).isPostfachWithAntragsraum(any()); - doReturn(Optional.of(modifiedMail)).when(service).adjustMail(any()); - - var result = service.processForAntragsraum(PostfachNachrichtTestFactory.create()); - - assertThat(result).contains(modifiedMail); - } - - @DisplayName("Is notify antragsraum") - @Nested - class TestIsNotifyAntragsraum { - - @DisplayName("should return true if") - @ParameterizedTest(name = "replyOption is {0}") - @EnumSource(value = ReplyOption.class, names = { "FORBIDDEN" }, mode = EnumSource.Mode.EXCLUDE) - void shouldConfirm(ReplyOption replyOption) { - doReturn(true).when(service).isPostfachWithAntragsraum(any()); - - var result = service.isNotifyAntragsraum(replyOption); - - assertThat(result).isTrue(); - } - - @DisplayName("should return false if reply is forbidden") - @Test - void shouldDeclineIfForbidden() { - var result = service.isNotifyAntragsraum(ReplyOption.FORBIDDEN); - - assertThat(result).isFalse(); - } - - @DisplayName("should return false if antragsraum is not configured") - @Test - void shouldDeclineIfNotConfigured() { - doReturn(false).when(service).isPostfachWithAntragsraum(any()); - - var result = service.isNotifyAntragsraum(ReplyOption.POSSIBLE); - - assertThat(result).isFalse(); - } - } - - @Nested - class TestAdjustMail { - - @Mock - private PostfachNachricht mail; - - @Nested - class TestReplaceBody { - - @Test - void shouldReturnEmptyIfNoAntragsraum() { - ReflectionTestUtils.setField(service, "antragraumService", Optional.empty()); - - var result = adjustMail(); - - assertThat(result).isEmpty(); - } - - @Test - void shouldAdjustMailBody() { - when(mail.toBuilder()).thenReturn(PostfachNachrichtTestFactory.createBuilder()); - var expectedMailBody = "Antragsraum Text"; - when(antragsraumService.get().getUserNotificationText()).thenReturn(expectedMailBody); - - var result = adjustMail(); - - assertThat(result).isPresent().get().extracting(PostfachNachricht::getMailBody).isEqualTo(expectedMailBody); - } - } - - private Optional<PostfachNachricht> adjustMail() { - return service.adjustMail(mail); - } - } - - } - } - - @Nested - class TestFindById { - @Test - void shouldCallPersistingService() { - service.findById(PostfachNachrichtTestFactory.ID); - - verify(persistingService).findById(PostfachNachrichtTestFactory.ID); - } - } - - @Nested - class TestFindByVorgang { - - private static final String VORGANG_ID = UUID.randomUUID().toString(); - - @Test - void shouldCallPersistingService() { - service.findByVorgang(VORGANG_ID); - - verify(persistingService).findByVorgangAsMap(VORGANG_ID); - } - } - - @Nested - class TestFetchAndPersistReplies { - - private static final PostfachNachricht nachricht = PostfachNachrichtTestFactory.create(); - - @BeforeEach - void initTest() { - lenient().when(postfachRemoteService.getAllMessages()).thenReturn(Stream.of(nachricht)); - } - - @Test - void shouldCallGetAllMessages() { - service.fetchAndPersistReplies(); - - verify(postfachRemoteService).getAllMessages(); - } - - @Test - void shouldCallPersistingService() { - service.fetchAndPersistReplies(); - - verify(persistingService).persistNachricht(eq(Optional.empty()), any()); - } - - @Test - void shouldCallDelete() { - service.fetchAndPersistReplies(); - - verify(postfachRemoteService).deleteMessage(MessageTestFactory.MESSAGE_ID); - } - - @Test - void shouldSetNewPostfachNachricht() { - service.fetchAndPersistReplies(); - - verify(clientAttributeService).setHasNewPostfachNachricht(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldCallClientAttributeService() { - service.fetchAndPersistReplies(); - - verify(clientAttributeService).setHasNewPostfachNachricht(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldThrowNotConfiguredException() { - doReturn(false).when(service).isPostfachConfigured(); - - assertThatExceptionOfType(NotConfiguredException.class).isThrownBy(() -> service.fetchAndPersistReplies()); - verify(postfachRemoteService, never()).getAllMessages(); - } - } - - @Nested - class TestPeristMail { - @Test - void shouldPersistMail() { - PostfachNachricht mail = PostfachNachrichtTestFactory.create(); - - service.persistMail(Optional.of(USER_ID), mail); - - verify(persistingService).persistNachricht(eq(Optional.of(USER_ID)), same(mail)); - } - - @Test - void shouldSetHasPostfachNachricht() { - var mail = PostfachNachrichtTestFactory.create(); - - service.persistMail(Optional.of(USER_ID), mail); - - verify(clientAttributeService).setHasPostfachNachricht(MessageTestFactory.VORGANG_ID); - } - - @Test - @DisplayName("should NOT set hasPostfachNachricht if Nachricht is sent from system") - void shouldNOTSetHasNachrichtForSystemNachricht() { - var mail = PostfachNachrichtTestFactory.createBuilder().createdBy("system-123").build(); - - service.persistMail(Optional.of(USER_ID), mail); - - verify(clientAttributeService, never()).setHasPostfachNachricht(MessageTestFactory.VORGANG_ID); - } - } - - @Nested - class TestResendPostfachMail { - - static final String COMMAND_ID = UUID.randomUUID().toString(); - static final PostfachNachricht mail = PostfachNachrichtTestFactory.create(); - - @BeforeEach - void mockService() { - when(persistingService.getById(anyString())).thenReturn(PostfachNachrichtTestFactory.asMap()); - doReturn(mail).when(mapper).fromMapToPostfachMail(anyMap()); - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - } - - @Test - void shouldCallPersistingServiceGetById() { - service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID); - - verify(persistingService).getById(PostfachNachrichtTestFactory.ID); - } - - @Test - void shouldMapFromMapToPostfachMail() { - service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID); - - verify(mapper).fromMapToPostfachMail(PostfachNachrichtTestFactory.asMap()); - } - - @Test - void shouldSendMail() { - service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID); - - verify(postfachRemoteService).sendMessage(any(PostfachNachricht.class)); - } - - @Test - void shouldPatchMail() { - service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID); - - verify(persistingService).patch(anyString(), anyMap()); - } - - @Test - void shouldHandleSentMail() { - service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID); - - verify(service).handleSendMail(COMMAND_ID, mail); - } - } - - @Nested - class TestCreateResendPatchMap { - - @Test - void shouldContainsSentAt() { - var map = service.createResendPatchMap(SendPostfachNachrichtResponseTestFactory.create()); - - assertThat(map).containsKey(PostfachNachricht.FIELD_SENT_AT); - assertThat(ZonedDateTime.parse(map.get(PostfachNachricht.FIELD_SENT_AT).toString())).isCloseTo(ZonedDateTime.now(), - within(2, ChronoUnit.SECONDS)); - } - - @Test - void shouldContainsSentSuccessful() { - var map = service.createResendPatchMap(SendPostfachNachrichtResponseTestFactory.create()); - - assertThat(map).containsEntry(PostfachNachricht.FIELD_SENT_SUCCESSFUL, true); - } - - @Test - void shouldContainsMessageCode() { - var map = service.createResendPatchMap(SendPostfachNachrichtResponseTestFactory.create()); - - assertThat(map).containsEntry(PostfachNachricht.FIELD_MESSAGE_CODE, - SendPostfachNachrichtResponseTestFactory.MESSAGE_CODE.getMessageCode()); - } - } - - @DisplayName("Handle send mail") - @Nested - class TestHandleSendMail { - - final String COMMAND_ID = UUID.randomUUID().toString(); - final PostfachNachricht mail = PostfachNachrichtTestFactory.create(); - - @Test - void shouldDoSendMail() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - - service.handleSendMail(COMMAND_ID, mail); - - verify(service).doSendMail(mail); - } - - @Nested - class TestSentSuccess { - - @Captor - private ArgumentCaptor<PostfachMailSentEvent> eventCaptor; - - @Mock - private PostfachNachricht modifiedMail; - - @Test - void shouldDoSendMail() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - - service.handleSendMail(COMMAND_ID, mail); - - verify(service).doSendMail(mail); - } - - @Test - void shouldPublishEvent() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - - service.handleSendMail(COMMAND_ID, mail); - - verify(publisher).publishEvent(eventCaptor.capture()); - assertThat(eventCaptor.getValue().getSource()).isEqualTo(COMMAND_ID); - } - - @Test - void shouldReturnResponse() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - - var response = service.handleSendMail(COMMAND_ID, mail); - - assertThat(response.isSentSuccessful()).isTrue(); - assertThat(response.getMessageCode()).isEqualTo(PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE); - } - - @Test - void shouldSendProcessedPostfachNachricht() { - doReturn(Optional.of(modifiedMail)).when(service).processForAntragsraum(any()); - - service.handleSendMail(COMMAND_ID, mail); - - verify(service).doSendMail(modifiedMail); - } - - } - - @DisplayName("receive") - @Nested - class TestSentFailed { - - @Captor - private ArgumentCaptor<PostfachMailSentFailedEvent> eventFailedCaptor; - - @DisplayName("OsiPostfachException") - @Nested - class TestOnOsiPostfachException { - - private final static String MESSAGE = "Osi Postfach throws an exception."; - - @BeforeEach - void mockService() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - doThrow(new PostfachException(MESSAGE, PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE)).when(postfachRemoteService) - .sendMessage(any()); - } - - @Test - void shouldPublishEvent() { - service.handleSendMail(COMMAND_ID, mail); - - verify(publisher).publishEvent(eventFailedCaptor.capture()); - assertThat(eventFailedCaptor.getValue().getSource()).isEqualTo(COMMAND_ID); - assertThat(eventFailedCaptor.getValue().getErrorMessage()).startsWith(MESSAGE); - } - - @Test - void shouldLogError() { - var logCaptor = LogCaptor.forClass(PostfachService.class); - - service.handleSendMail(COMMAND_ID, mail); - - verify(service).proceedWithErrorException(eq(COMMAND_ID), any(PostfachException.class)); - assertThat(logCaptor.getLogEvents().get(0).getLevel()).isEqualTo(LogLevel.ERROR.name()); - assertThat(logCaptor.getLogEvents().get(0).getMessage()).startsWith(MESSAGE); - } - - @Test - void shouldReturnResponse() { - var response = service.handleSendMail(COMMAND_ID, mail); - - assertThat(response.isSentSuccessful()).isFalse(); - assertThat(response.getMessageCode()).isEqualTo(PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE); - } - } - - @DisplayName("OsiPostfachServerProcessException") - @Nested - class TestOsiPostfachServerProcessException { - - private final static String MESSAGE = "Postfach server returned false"; - - @Mock - private Logger logger; - - @BeforeEach - void mockService() { - doThrow(OsiPostfachServerProcessExceptionTestFactory.create()).when(postfachRemoteService).sendMessage(any()); - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - } - - @Test - void shouldPublishEvent() { - service.handleSendMail(COMMAND_ID, mail); - - verify(publisher).publishEvent(eventFailedCaptor.capture()); - assertThat(eventFailedCaptor.getValue().getSource()).isEqualTo(COMMAND_ID); - assertThat(eventFailedCaptor.getValue().getErrorMessage()).startsWith(MESSAGE); - } - - @Test - void shouldLogWarning() { - var logCaptor = LogCaptor.forClass(PostfachService.class); - - service.handleSendMail(COMMAND_ID, mail); - - verify(service).proceedwithWarnException(eq(COMMAND_ID), any(OsiPostfachServerProcessException.class)); - assertThat(logCaptor.getLogEvents().get(0).getLevel()).isEqualTo(LogLevel.WARN.name()); - assertThat(logCaptor.getLogEvents().get(0).getMessage()).startsWith(MESSAGE); - } - - @Test - void shouldReturnResponse() { - var response = service.handleSendMail(COMMAND_ID, mail); - - assertThat(response.isSentSuccessful()).isFalse(); - assertThat(response.getMessageCode()).isEqualTo(PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE); - } - } - } - - } - - @Nested - class TestDoSendMail { - @Test - void shouldCallPostfachRemoteService() { - service.doSendMail(PostfachNachrichtTestFactory.create()); - - verify(postfachRemoteService).sendMessage(any()); - } - - @Nested - class WithoutRemoteService { - @InjectMocks - private PostfachService service; - - @Test - void shouldThrowNotConfiguredException() { - var nachricht = PostfachNachrichtTestFactory.create(); - - assertThatExceptionOfType(NotConfiguredException.class).isThrownBy(() -> service.doSendMail(nachricht)); - - verify(postfachRemoteService, never()).sendMessage(any()); - } - } - - } - - @Nested - class TestIsPostfachConfigured { - - @Test - void shouldReturnTrue() { - assertThat(service.isPostfachConfigured()).isTrue(); - } - } - - @Nested - class TestGetPostfachs { - - private Postfach postfach = PostfachTestFactory.create(); - - @Test - void shouldCallBuildPostfach() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - - service.getPostfachs(); - - verify(service).buildPostfach(postfachRemoteService); - } - - @Test - void shouldReturnPostfachs() { - doReturn(postfach).when(service).buildPostfach(any()); - - var result = service.getPostfachs(); - - assertThat(result).containsOnly(postfach); - } - - @Test - void shouldReturnEmptyStream() { - doReturn(false).when(service).isPostfachConfigured(); - - var result = service.getPostfachs(); - - assertThat(result).isEmpty(); - } - - @Nested - class TestBuildPostfach { - - @Test - void shouldSetPostfachType() { - when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); - - var result = service.buildPostfach(postfachRemoteService); - - assertThat(result.getType()).isEqualTo(PostfachTestFactory.POSTFACH_TYPE); - } - - @Test - void shouldSetIsReplyAllowed() { - doReturn(true).when(service).isReplyAllowed(any()); - - var result = service.buildPostfach(postfachRemoteService); - - assertThat(result.isReplyAllowed()).isTrue(); - } - } - - @Nested - class TestIsReplyAllowed { - - @Test - void shouldAllowWithAntragsraum() { - doReturn(true).when(service).isPostfachWithAntragsraum(postfachRemoteService); - - var result = service.isReplyAllowed(postfachRemoteService); - - assertThat(result).isTrue(); - } - - @Test - void shouldAllowWithPostfach() { - doReturn(false).when(service).isPostfachWithAntragsraum(postfachRemoteService); - when(postfachRemoteService.isReplyAllowed()).thenReturn(true); - - var result = service.isReplyAllowed(postfachRemoteService); - - assertThat(result).isTrue(); - } - - @Test - void shouldNotAllow() { - doReturn(false).when(service).isPostfachWithAntragsraum(postfachRemoteService); - - var result = service.isReplyAllowed(postfachRemoteService); - - assertThat(result).isFalse(); - } - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachTestFactory.java deleted file mode 100644 index 866a3700b..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachTestFactory.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.ozgcloud.nachrichten.postfach; - -import de.ozgcloud.nachrichten.postfach.Postfach.PostfachBuilder; - -public class PostfachTestFactory { - - public static final String POSTFACH_TYPE = "postfachType"; - - public static final boolean REPLY_ALLOWED = true; - - public static Postfach create() { - return createBuilder().build(); - } - - public static PostfachBuilder createBuilder() { - return Postfach.builder() - .type(POSTFACH_TYPE) - .isReplyAllowed(REPLY_ALLOWED); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponseTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponseTestFactory.java deleted file mode 100644 index 4db127586..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponseTestFactory.java +++ /dev/null @@ -1,40 +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; - -public class SendPostfachNachrichtResponseTestFactory { - - public static final boolean SENT_SUCCESSFUL = true; - public static final PostfachMessageCode MESSAGE_CODE = PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE; - - public static SendPostfachNachrichtResponse create() { - return createBuilder().build(); - } - - public static SendPostfachNachrichtResponse.SendPostfachNachrichtResponseBuilder createBuilder() { - return SendPostfachNachrichtResponse.builder() - .sentSuccessful(SENT_SUCCESSFUL) - .messageCode(MESSAGE_CODE); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTestFactory.java deleted file mode 100644 index 7be527b03..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTestFactory.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.ozgcloud.nachrichten.postfach.bayernid.Absender.AbsenderBuilder; - -public class AbsenderTestFactory { - public static final String POSTKORB_ID="28721c6f-b78f-4d5c-a048-19fd2fc429d2"; - public static final String NAME="test name"; - public static final String ANSCHRIFT="Niemalsgasse 5, 99999 Irgendwo Stadt"; - public static final String DIENST="Stadtverwaltung"; - public static final String MANDANT="Fürth"; - public static final String GEMEINDE_SCHLUESSEL="09563000"; - - public static Absender create(){ - return createBuilder().build(); - } - - public static AbsenderBuilder createBuilder(){ - return Absender.builder() - .postkorbId(POSTKORB_ID) - .name(NAME) - .anschrift(ANSCHRIFT) - .dienst(DIENST) - .mandant(MANDANT) - .gemeindeSchluessel(GEMEINDE_SCHLUESSEL); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTypeTestFactory.java deleted file mode 100644 index f404f056b..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTypeTestFactory.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.akdb.egov.bsp.nachrichten.AbsenderType; -import lombok.val; - -public class AbsenderTypeTestFactory { - public static final String DIENST = "Stadtverwaltung"; - public static final String MANDANT = "Fürth"; - - public static AbsenderType create() { - val absenderType = new AbsenderType(); - absenderType.setDienst(DIENST); - absenderType.setMandant(MANDANT); - return absenderType; - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java deleted file mode 100644 index 5db43d534..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java +++ /dev/null @@ -1,179 +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.bayernid; - -import static de.ozgcloud.nachrichten.postfach.bayernid.BayernIdAttachmentTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; - -import org.bson.Document; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import com.mongodb.client.gridfs.model.GridFSFile; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.BinaryFileService; -import de.ozgcloud.nachrichten.postfach.FileId; - -class BayernIdAttachmentServiceTest { - - private static final FileId FILE_ID = FileId.from("42"); - - @InjectMocks - @Spy - private BayernIdAttachmentService bayernIdAttachmentService; - - @Mock - private BinaryFileService fileService; - - @Mock - private GridFSFile gridFsfile; - - @Mock - private Document metadata; - - @Nested - class TestLoadingAttachment { - - @BeforeEach - void init() { - when(gridFsfile.getMetadata()).thenReturn(metadata); - when(fileService.getFile(any())).thenReturn(gridFsfile); - } - - @Test - void shouldCallGetFile() { - when(fileService.getUploadedFileStream(any())).thenReturn(new ByteArrayInputStream(CONTENT)); - - bayernIdAttachmentService.getMessageAttachment(FILE_ID); - - verify(fileService).getFile(FILE_ID); - } - - @Test - void shouldCallGetAttachmentContent() { - when(fileService.getUploadedFileStream(any())).thenReturn(new ByteArrayInputStream(CONTENT)); - - bayernIdAttachmentService.getMessageAttachment(FILE_ID); - - verify(bayernIdAttachmentService).getMessageAttachment(FILE_ID); - } - - @Test - void shouldCallBuildBayernIdAttachment() { - var contentStream = getContentStream(); - doReturn(contentStream).when(bayernIdAttachmentService).getAttachmentContentStream(any()); - - bayernIdAttachmentService.getMessageAttachment(FILE_ID); - - verify(bayernIdAttachmentService).buildBayernIdAttachment(metadata, contentStream); - } - - } - - @Nested - class TestLoadAttachmentError { - - @Test - @DisplayName("should throw TechnicalException if attachment not found") - void shouldThrowException() { - when(fileService.getFile(any())).thenReturn(null); - - assertThrows(TechnicalException.class, () -> bayernIdAttachmentService.getMessageAttachment(FILE_ID)); - } - - @Test - @DisplayName("should throw TechnicalException if metadata is null") - void shouldThrowExceptionIfNoMetadata() { - when(fileService.getFile(any())).thenReturn(gridFsfile); - when(gridFsfile.getMetadata()).thenReturn(null); - - assertThrows(TechnicalException.class, () -> bayernIdAttachmentService.getMessageAttachment(FILE_ID)); - } - } - - @Nested - class TestBuildBayernIdAttachment { - - @BeforeEach - void setup() { - when(metadata.getString(BayernIdAttachmentService.NAME_KEY)).thenReturn(BayernIdAttachmentTestFactory.FILENAME); - when(metadata.getString(BayernIdAttachmentService.CONTENT_TYPE_KEY)).thenReturn(BayernIdAttachmentTestFactory.CONTENT_TYPE); - } - - @Test - void shouldSetFileName() { - var attachment = buildBayernIdAttachment(); - - assertThat(attachment.getFileName()).isEqualTo(BayernIdAttachmentTestFactory.FILENAME); - } - - @Test - void shouldSetContent() { - var attachment = buildBayernIdAttachment(); - - assertThat(attachment.getContent()).hasSameContentAs(new ByteArrayInputStream(CONTENT)); - } - - @Test - void shouldSetContentType() { - var attachment = buildBayernIdAttachment(); - - assertThat(attachment.getContentType()).isEqualTo(BayernIdAttachmentTestFactory.CONTENT_TYPE); - } - - private BayernIdAttachment buildBayernIdAttachment() { - return bayernIdAttachmentService.buildBayernIdAttachment(metadata, getContentStream()); - } - } - - @Nested - class TestLoadingAttachmentContent { - - @BeforeEach - void init() { - when(fileService.getUploadedFileStream(any())) - .thenReturn(new ByteArrayInputStream(CONTENT)); - } - - @Test - void shouldGetInputStream() { - InputStream input = bayernIdAttachmentService.getAttachmentContentStream(FILE_ID); - - assertThat(input).hasSameContentAs(getContentStream()); - } - - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java deleted file mode 100644 index 2fe959b6e..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java +++ /dev/null @@ -1,52 +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.bayernid; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; - -import de.ozgcloud.nachrichten.postfach.bayernid.BayernIdAttachment.BayernIdAttachmentBuilder; - -public class BayernIdAttachmentTestFactory { - - public final static String FILENAME = "test.txt"; - public final static String CONTENT_TYPE = "text/plain"; - public static final byte[] CONTENT = "test".getBytes(); - public static final long SIZE = 4L; - - public static BayernIdAttachment create() { - return createBuilder().build(); - } - - public static BayernIdAttachmentBuilder createBuilder() { - return BayernIdAttachment.builder() - .fileName(FILENAME) - .content(new ByteArrayInputStream(CONTENT)) - .contentType(CONTENT_TYPE); - } - - public static InputStream getContentStream() { - return new ByteArrayInputStream(CONTENT); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapperTest.java deleted file mode 100644 index f8f9dee1e..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapperTest.java +++ /dev/null @@ -1,272 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.ZoneId; -import java.time.ZonedDateTime; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.Spy; - -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachmentMetadata; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachments; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; - -class BayernIdPostfachNachrichtMapperTest { - - @Spy - private BayernIdPostfachNachrichtMapper mapper = Mappers.getMapper(BayernIdPostfachNachrichtMapper.class); - - @Nested - class TestMapToSendBayernIdMessageMetadataRequest { - - private static final PostfachNachricht NACHRICHT = PostfachNachrichtTestFactory.create(); - private static final Absender ABSENDER = AbsenderTestFactory.create(); - - @Test - void shouldIgnoreAttachments() { - var request = mapper.toSendBayernIdMessageMetadataRequest(NACHRICHT, ABSENDER); - - assertThat(request.getAttachments()).isEqualTo(GrpcAttachments.getDefaultInstance()); - } - - @Test - void shouldCallToBayernIdMessageMetadata() { - mapper.toSendBayernIdMessageMetadataRequest(NACHRICHT, ABSENDER); - - verify(mapper).toBayernIdMessageMetadata(NACHRICHT, ABSENDER); - } - - @Nested - class TestMapToBayernIdMessageMetadata { - - @Test - void shouldSetMessageId() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getMessageId()).isEqualTo(MessageTestFactory.MESSAGE_ID); - } - - @Nested - class TestCreatedAt { - - @Test - void shouldCallConvertZonedDateTime() { - toMessageMetadata(); - - verify(mapper).convertZonedDateTime(PostfachNachrichtTestFactory.CREATED_AT); - } - - @Test - void shouldSetCreatedAt() { - doReturn(PostfachNachrichtTestFactory.CREATED_AT_STR).when(mapper).convertZonedDateTime(any()); - - var metadata = toMessageMetadata(); - - assertThat(metadata.getCreatedAt()).isEqualTo(PostfachNachrichtTestFactory.CREATED_AT_STR); - } - } - - @Test - void shouldSetSubject() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getSubject()).isEqualTo(MessageTestFactory.SUBJECT); - } - - @Test - void shouldSetStorkQaaLevel() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getStorkQaaLevel()).isEqualTo(BayernIdPostfachNachrichtMapper.MESSAGE_LEVEL); - } - - @Test - void shouldSetVorgangId() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldSetText() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getText()).isEqualTo(PostfachNachrichtTestFactory.MAIL_BODY); - } - - @Nested - class TestMapAbsender { - - @Test - void shouldSetName() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getAbsender().getName()).isEqualTo(AbsenderTestFactory.NAME); - } - - @Test - void shouldSetAnschrift() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getAbsender().getAnschrift()).isEqualTo(AbsenderTestFactory.ANSCHRIFT); - } - - @Test - void shouldSetDienst() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getAbsender().getDienst()).isEqualTo(AbsenderTestFactory.DIENST); - } - - @Test - void shouldSetMandant() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getAbsender().getMandant()).isEqualTo(AbsenderTestFactory.MANDANT); - } - - @Test - void shouldSetGemeindeschluessel() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getAbsender().getGemeindeschluessel()).isEqualTo(AbsenderTestFactory.GEMEINDE_SCHLUESSEL); - } - - } - - @Nested - class TestMapToEmpfaenger { - - @Test - void shouldSetPostkorbId() { - var metadata = toMessageMetadata(); - - assertThat(metadata.getEmpfaenger().getPostkorbId()).isEqualTo(MessageTestFactory.POSTFACH_ID); - } - } - - private GrpcBayernIdMessageMetadata toMessageMetadata() { - return mapper.toBayernIdMessageMetadata(NACHRICHT, ABSENDER); - } - } - } - - @Nested - class TestMapToSendBayernIdAttachmentsMetadata { - - private static final BayernIdAttachment ATTACHMENT = BayernIdAttachmentTestFactory.create(); - - @Test - void shouldIgnoreMessageMetadata() { - var request = toMessageRequest(); - - assertThat(request.getMessageMetadata()).isEqualTo(GrpcBayernIdMessageMetadata.getDefaultInstance()); - } - - @Test - void shouldIgnoreContent() { - var request = toMessageRequest(); - - assertThat(request.getAttachments().getContent()).isEmpty(); - } - - @Test - void shouldCallToAttachmentsMetadata() { - toMessageRequest(); - - verify(mapper).toAttachmentMetadata(ATTACHMENT); - } - - private GrpcSendBayernIdMessageRequest toMessageRequest() { - return mapper.toSendBayernIdAttachmentsMetadataRequest(ATTACHMENT); - } - } - - @Nested - class TestMapToAttachmentMetadata { - - @Test - void shouldSetFileName() { - var metadata = toMessageRequest(); - - assertThat(metadata.getFileName()).isEqualTo(BayernIdAttachmentTestFactory.FILENAME); - } - - @Test - void shouldSetFileType() { - var metadata = toMessageRequest(); - - assertThat(metadata.getFileType()).isEqualTo(BayernIdAttachmentTestFactory.CONTENT_TYPE); - } - - private GrpcAttachmentMetadata toMessageRequest() { - return mapper.toAttachmentMetadata(BayernIdAttachmentTestFactory.create()); - } - } - - @Nested - class TestMapToGregorianCalendar { - - @Test - void shouldReturnGregorianCalendar() { - var expectedDateTiem = "2024-02-14T23:29:25.000+01:00"; - var dateTiem = ZonedDateTime.of(2024, 2, 14, 23, 29, 25, 0, ZoneId.of("Europe/Berlin")); - - var calendar = mapper.convertZonedDateTime(dateTiem); - - assertThat(calendar).isEqualTo(expectedDateTiem); - } - } - - @Nested - class TestMapFromSendBayernIdMessageResponse { - - @Test - void shouldSetSuccess() { - var result = mapper.fromSendBayernIdMessageResponse(GrpcSendBayernIdMessageResponseTestFactory.create()); - - assertThat(result.isSuccess()).isTrue(); - } - - @Test - void shouldSetStatus() { - var result = mapper.fromSendBayernIdMessageResponse(GrpcSendBayernIdMessageResponseTestFactory.create()); - - assertThat(result.getStatus()).isEqualTo(GrpcSendBayernIdMessageResponseTestFactory.STATUS); - } - - @Test - void shouldSetMessage(){ - var result = mapper.fromSendBayernIdMessageResponse(GrpcSendBayernIdMessageResponseTestFactory.create()); - - assertThat(result.getMessage()).isEqualTo(GrpcSendBayernIdMessageResponseTestFactory.MESSAGE_TEXT); - } - } - - @Nested - class TestSkipNulls { - - @Test - void shouldNotSetNull() { - var bayernIdMessageMetadata = mapper.toBayernIdMessageMetadata(PostfachNachrichtTestFactory.createBuilder().messageId(null).build(), - AbsenderTestFactory.create()); - - assertThat(bayernIdMessageMetadata.getMessageId()).isEmpty(); - } - - @Test - void shouldReturnTrueIfNotNull() { - var result = mapper.nonNull("test"); - - assertThat(result).isTrue(); - } - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceTest.java deleted file mode 100644 index d9386a774..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceTest.java +++ /dev/null @@ -1,455 +0,0 @@ -/* - * Copyright (C) 2023 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.bayernid; - -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeoutException; -import java.util.function.BiFunction; -import java.util.function.Function; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.FileId; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.PostfachRuntimeException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.BayernIdProxyServiceGrpc; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; -import io.grpc.stub.CallStreamObserver; -import io.grpc.stub.StreamObserver; -import lombok.SneakyThrows; - -class BayernIdPostfachRemoteServiceTest { - - @Spy - @InjectMocks - private BayernIdPostfachRemoteService service; - - @Mock - private BayernIdProxyServiceGrpc.BayernIdProxyServiceStub bayernIdProxyServiceStub; - @Mock - private BayernIdProperties properties; - @Mock - private BayernIdPostfachResponseHandler responseHandler; - @Mock - private BayernIdPostfachNachrichtMapper mapper; - @Mock - private BayernIdAttachmentService attachmentService; - - @Nested - @DisplayName("Get all messages") - class TestGetAllMessages { - - @Test - void shouldThrowUnsupportedOperationException() { - assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(service::getAllMessages); - } - } - - @Nested - @DisplayName("Delete messages") - class TestDeleteMessages { - - @Test - void shouldThrowUnsupportedOperationException() { - assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(() -> service.deleteMessage(StringUtils.EMPTY)); - } - } - - @Nested - @DisplayName("Send message") - class TestSendMessage { - - @Mock - private GrpcSendBayernIdMessageResponse grpcResponse; - @Mock - private MessageWithFilesSender messageWithFilesSender; - @Mock - private BayernIdResponse bayernIdResponse; - - @Nested - class TestSend { - - @BeforeEach - void setup() { - doReturn(grpcResponse).when(service).waitUntilTransferCompleted(any()); - } - - @Test - void shouldCallCreateMessageWithFileSender() { - sendMessage(); - - verify(service).createMessageWithFilesSender(any()); - } - - @Test - void shouldCallSend() { - doReturn(messageWithFilesSender).when(service).createMessageWithFilesSender(any()); - - sendMessage(); - - verify(messageWithFilesSender).send(); - } - - @Test - void shouldCallWaitForResults() { - var expectedSender = mock(MessageWithFilesSender.class); - when(messageWithFilesSender.send()).thenReturn(expectedSender); - doReturn(messageWithFilesSender).when(service).createMessageWithFilesSender(any()); - - sendMessage(); - - verify(service).waitUntilTransferCompleted(expectedSender); - } - - @Test - void shouldCallMaapper() { - sendMessage(); - - verify(mapper).fromSendBayernIdMessageResponse(grpcResponse); - } - - @Test - void shouldCallResponseHandler() { - when(mapper.fromSendBayernIdMessageResponse(any())).thenReturn(bayernIdResponse); - - sendMessage(); - - verify(responseHandler).handleResponse(bayernIdResponse); - } - } - - @Nested - class TestExceptionHandling { - - @Test - void shouldHandleExceptionWhenSending() { - var thrownException = new RuntimeException("Test"); - when(messageWithFilesSender.send()).thenThrow(thrownException); - doReturn(messageWithFilesSender).when(service).createMessageWithFilesSender(any()); - - assertThrows(PostfachRuntimeException.class, TestSendMessage.this::sendMessage); - } - - @Test - void shouldHandleExceptionWhenWaiting() { - var thrownException = new RuntimeException("Test"); - doThrow(thrownException).when(service).waitUntilTransferCompleted(any()); - - assertThrows(PostfachRuntimeException.class, TestSendMessage.this::sendMessage); - } - - @Test - void shouldPassBayernIdServerException() { - doReturn(grpcResponse).when(service).waitUntilTransferCompleted(any()); - var thrownException = new BayernIdServerException("Test"); - doThrow(thrownException).when(responseHandler).handleResponse(any()); - - var resultException = assertThrows(BayernIdServerException.class, TestSendMessage.this::sendMessage); - assertThat(resultException).isEqualTo(thrownException); - } - } - - private void sendMessage() { - service.sendMessage(PostfachNachrichtTestFactory.create()); - } - } - - @Nested - class TestCreateMessageWithFileSender { - - @Mock - private Function<StreamObserver<GrpcSendBayernIdMessageResponse>, CallStreamObserver<GrpcSendBayernIdMessageRequest>> streamObserverBuilder; - @Mock - private GrpcSendBayernIdMessageRequest metadataRequest; - @Mock - private Function<String, BayernIdAttachment> attachmentBuilder; - @Mock - private Function<BayernIdAttachment, GrpcSendBayernIdMessageRequest> attachmentMetadataMapper; - @Mock - private BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder; - - @Test - void shouldSetStreamObserverBuilder() { - doReturn(streamObserverBuilder).when(service).buildCallStreamObserverBuilder(); - - var sender = createMessageWithFilesSender(); - - assertThat(sender).extracting("reqObserverBuilder").isEqualTo(streamObserverBuilder); - } - - @Test - void shouldCallMessageMetadataMapper() { - var absender = AbsenderTestFactory.create(); - when(properties.getAbsender()).thenReturn(absender); - var nachricht = PostfachNachrichtTestFactory.create(); - - service.createMessageWithFilesSender(nachricht); - - verify(mapper).toSendBayernIdMessageMetadataRequest(nachricht, absender); - } - - @Test - void shouldSetMessageMetadata() { - when(mapper.toSendBayernIdMessageMetadataRequest(any(), any())).thenReturn(metadataRequest); - - var sender = createMessageWithFilesSender(); - - assertThat(sender).extracting("messageMetadata").isEqualTo(metadataRequest); - } - - @Test - void shouldSetAttachmentIds() { - var nachricht = PostfachNachrichtTestFactory.create(); - - var sender = createMessageWithFilesSender(); - - assertThat(sender).extracting("attachmentIds").isEqualTo(nachricht.getAttachments()); - } - - @Test - void shouldSetAttachmentBuilder() { - doReturn(attachmentBuilder).when(service).buildAttachmentBuilder(); - - var sender = createMessageWithFilesSender(); - - assertThat(sender).extracting("toAttachment").isEqualTo(attachmentBuilder); - } - - @Test - void shouldSetAttachmentMetadataBuilder() { - doReturn(attachmentMetadataMapper).when(service).buildAttachmentMetadataMapper(); - - var sender = createMessageWithFilesSender(); - - assertThat(sender).extracting("attachmentMetadataMapper").isEqualTo(attachmentMetadataMapper); - } - - @Test - void shouldSetChunkBuilder() { - doReturn(chunkBuilder).when(service).buildChunkRequest(); - - var sender = createMessageWithFilesSender(); - - assertThat(sender).extracting("chunkBuilder").isEqualTo(chunkBuilder); - } - - private MessageWithFilesSender createMessageWithFilesSender() { - return service.createMessageWithFilesSender(PostfachNachrichtTestFactory.create()); - } - } - - @Nested - class TestBuildCallStreamObserverBuilder { - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - @Mock - private StreamObserver<GrpcSendBayernIdMessageResponse> responseObserver; - - @Test - void shouldCallSendMessageAsStream() { - service.buildCallStreamObserverBuilder().apply(responseObserver); - - verify(bayernIdProxyServiceStub).sendMessageAsStream(responseObserver); - } - - @Test - void shouldReturnRequestObserver() { - when(bayernIdProxyServiceStub.sendMessageAsStream(any())).thenReturn(requestObserver); - - var result = service.buildCallStreamObserverBuilder().apply(responseObserver); - - assertThat(result).isEqualTo(requestObserver); - } - } - - @Nested - class TestBuildAttachmentBuilder { - - @Captor - private ArgumentCaptor<FileId> attachmentIdCaptor; - - @Test - void shouldCallGetMessageAttachment (){ - var attachmentId = "test"; - - service.buildAttachmentBuilder().apply(attachmentId); - - verify(attachmentService).getMessageAttachment(attachmentIdCaptor.capture()); - assertThat(attachmentIdCaptor.getValue()).extracting(FileId::toString).isEqualTo(attachmentId); - } - - @Test - void shouldReturnAttachment() { - var attachment = BayernIdAttachmentTestFactory.create(); - when(attachmentService.getMessageAttachment(any())).thenReturn(attachment); - - var result = service.buildAttachmentBuilder().apply(StringUtils.EMPTY); - - assertThat(result).isEqualTo(attachment); - } - } - - @Nested - class TestBuildChunkRequest { - - @Captor - private ArgumentCaptor<byte[]> bytesCaptor; - @Captor - private ArgumentCaptor<Integer> lengthCaptor; - - @Test - void shouldReturnRequest() { - var bytes = new byte[] { 1, 2, 3 }; - var length = 3; - - var result = service.buildChunkRequest().apply(bytes, length); - - assertThat(result.getAttachments().getContent().toByteArray()).isEqualTo(bytes); - } - } - - @Nested - class TestBuildAttachmentMetadataMapper { - - private static final BayernIdAttachment ATTACHMENT = BayernIdAttachmentTestFactory.create(); - - @Mock - private GrpcSendBayernIdMessageRequest attachmentMetadataRequest; - - @Test - void shouldCallMapper() { - service.buildAttachmentMetadataMapper().apply(ATTACHMENT); - - verify(mapper).toSendBayernIdAttachmentsMetadataRequest(ATTACHMENT); - } - - @Test - void shouldReturnResult() { - when(mapper.toSendBayernIdAttachmentsMetadataRequest(any())).thenReturn(attachmentMetadataRequest); - - var result = service.buildAttachmentMetadataMapper().apply(ATTACHMENT); - - assertThat(result).isEqualTo(attachmentMetadataRequest); - } - } - - @Nested - class TestWaitUntilTransferCompleted { - - @Mock - private MessageWithFilesSender sender; - @Mock - private GrpcSendBayernIdMessageResponse grpcResponse; - @Mock - private CompletableFuture<GrpcSendBayernIdMessageResponse> resultFuture; - - @BeforeEach - void setup() { - doReturn(resultFuture).when(sender).getResultFuture(); - } - - @Test - void shouldCallGet() { - service.waitUntilTransferCompleted(sender); - - verify(sender).getResultFuture(); - } - - @Test - @SneakyThrows - void shouldReturnResult() { - when(resultFuture.get(anyLong(), any())).thenReturn(grpcResponse); - - var result = service.waitUntilTransferCompleted(sender); - - assertThat(result).isEqualTo(grpcResponse); - } - - @SneakyThrows - @Test - void shouldHandleInterruptedException() { - var interruptedException = new InterruptedException(); - - when(resultFuture.get(anyLong(), any())).thenThrow(interruptedException); - - assertThrows(TechnicalException.class, () -> service.waitUntilTransferCompleted(sender)); - verify(sender).cancelOnError(interruptedException); - } - - @Test - @SneakyThrows - void shouldHandleTimeout() { - when(resultFuture.get(anyLong(), any())).thenThrow(new TimeoutException()); - - assertThrows(TechnicalException.class, () -> service.waitUntilTransferCompleted(sender)); - verify(sender).cancelOnTimeout(); - } - - @Test - @SneakyThrows - void shouldHandleExecutionException() { - var executionException = new ExecutionException(new RuntimeException()); - when(resultFuture.get(anyLong(), any())).thenThrow(executionException); - - assertThrows(TechnicalException.class, () -> service.waitUntilTransferCompleted(sender)); - verify(sender).cancelOnTimeout(); - } - - } - - @Nested - class TestGetPostfach { - - @Test - void shouldHasTyp() { - var postfachType = service.getPostfachType(); - - assertThat(postfachType).isEqualTo(BayernIdPostfachRemoteService.POSTFACH_TYPE); - } - - @Test - void shouldSetReplyNotAllowed() { - var isReplyAllowed = service.isReplyAllowed(); - - assertThat(isReplyAllowed).isFalse(); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandlerTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandlerTest.java deleted file mode 100644 index f51750b66..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandlerTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.mockito.InjectMocks; - -class BayernIdPostfachResponseHandlerTest { - - @InjectMocks - private BayernIdPostfachResponseHandler handler; - - @Nested - @DisplayName("Test successful Postfachserver response") - class TestSuccessfulPostfachServerResponse { - - @Test - void shouldNotThrowAnyException() { - assertThatCode(() -> handler.handleResponse(BayernIdResponseTestFactory.create())).doesNotThrowAnyException(); - } - } - - @Nested - @DisplayName("Test faulty Postfachserver response ") - class TestFaultyPostfachserverResponse { - - @DisplayName("Fehler im OK.KOMM-Schema") - @ParameterizedTest(name = "when response status: {0}") - @EnumSource(value = MailSendingResponseStatus.class, mode = EnumSource.Mode.EXCLUDE, names = { "SUCCESS" }) - void shouldThrowPostfachBadRequestExceptionForSchluessel(MailSendingResponseStatus responseStatus) { - var bayernIdResponse = BayernIdResponseTestFactory.createBuilder().success(false).status(responseStatus.getSchluessel()).build(); - - var exception = Assertions.assertThrows(BayernIdServerException.class, () -> handler.handleResponse(bayernIdResponse)); - assertThat(exception.getMessage()).startsWith("9006 / %s / %s".formatted(responseStatus.getSchluessel(), responseStatus.getMessage())); - } - - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPropertiesITCase.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPropertiesITCase.java deleted file mode 100644 index 273962d09..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPropertiesITCase.java +++ /dev/null @@ -1,88 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.TestPropertySource; - -import de.ozgcloud.common.test.ITCase; - -@SpringBootTest(classes = { BayernIdProperties.class }) -@ITCase -class BayernIdPropertiesITCase { - - private static final String NAME = "test name"; - - @TestPropertySource(properties = { - "ozgcloud.bayernid.enabled=true", - "ozgcloud.bayernid.absender.postkorbId=28721c6f-b78f-4d5c-a048-19fd2fc429d2", - "ozgcloud.bayernid.absender.name=test name", - "ozgcloud.bayernid.absender.anschrift=Niemalsgasse 5, 99999 Irgendwo Stadt", - "ozgcloud.bayernid.absender.dienst=Stadtverwaltung", - "ozgcloud.bayernid.absender.mandant=Fürth", - "ozgcloud.bayernid.absender.gemeindeSchluessel=09563000", - }) - @DisplayName("Test loading bayernid configuration") - @Nested - class TestLoadingConfiguration { - - // TODO remove access data - private static final String POSTKORBID = "28721c6f-b78f-4d5c-a048-19fd2fc429d2"; - private static final String DIENST = "Stadtverwaltung"; - private static final String ANSCHRIFT = "Niemalsgasse 5, 99999 Irgendwo Stadt"; - private static final String PASSWORD = "SyPaRAxe97"; - private static final String RESOURCE_PATH = "bayernid.p12"; - private static final String MANDANT = "Fürth"; - private static final String GEMEINDE_SCHLUESSEL = "09563000"; - - @Autowired - private BayernIdProperties properties; - - @Test - void shouldHaveProperties() { - assertThat(properties).isNotNull(); - } - - @Test - void shouldHaveAbsender() { - assertThat(properties.getAbsender()) - .isNotNull() - .usingRecursiveComparison() - .isEqualTo(Absender.builder() - .anschrift(ANSCHRIFT) - .dienst(DIENST) - .name(NAME) - .mandant(MANDANT) - .gemeindeSchluessel(GEMEINDE_SCHLUESSEL) - .postkorbId(POSTKORBID).build()); - } - - } - - @TestPropertySource(properties = { "ozgcloud.other=test name" }) - @DisplayName("Test loading application context without bayerid properties") - @Nested - class TestLoadingOtherConfiguration { - - @Value("${ozgcloud.other}") - private String testValue; - - @Autowired(required = false) - private BayernIdProperties properties; - - @Test - void shouldLoadTestProperty() { - assertThat(testValue).isEqualTo(NAME); - } - - @Test - void shouldNotLoadBayernIdProperties() { - assertThat(properties).isNull(); - } - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponseTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponseTestFactory.java deleted file mode 100644 index 654daa5f5..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponseTestFactory.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.akdb.egov.bsp.nachrichten.BspQuittung; -import de.akdb.egov.bsp.nachrichten.SchluesseltabelleType; -import de.ozgcloud.nachrichten.postfach.bayernid.BayernIdResponse.BayernIdResponseBuilder; - -public class BayernIdResponseTestFactory { - public static final String ERGAENZENE_HINWEISE = "ergaenzenderHinweis"; - - public static BayernIdResponse create() { - return createBuilder().build(); - } - - public static BayernIdResponseBuilder createBuilder() { - return BayernIdResponse.builder() - .success(true) - .status("0") - .message(ERGAENZENE_HINWEISE); - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BspNachrichtTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BspNachrichtTestFactory.java deleted file mode 100644 index 53ebdd482..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BspNachrichtTestFactory.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.akdb.egov.bsp.nachrichten.BspNachricht; -import de.akdb.egov.bsp.nachrichten.NachrichtenKopfType; -import lombok.val; - -public class BspNachrichtTestFactory { - public static final NachrichtenKopfType NACHRICHTEN_KOPF_TYPE = NachrichtenKopfTypeTestFactory.create(); - - public static BspNachricht create() { - val bspNachricht = new BspNachricht(); - bspNachricht.setNachrichtenKopf(NACHRICHTEN_KOPF_TYPE); - return bspNachricht; - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/EmpfaengerTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/EmpfaengerTypeTestFactory.java deleted file mode 100644 index 7bb257f8a..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/EmpfaengerTypeTestFactory.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import java.util.UUID; - -import de.akdb.egov.bsp.nachrichten.EmpfaengerType; -import lombok.val; - -public class EmpfaengerTypeTestFactory { - public static final String POSTKORB_ID = UUID.randomUUID().toString(); - - public static EmpfaengerType create() { - val empfaengerType = new EmpfaengerType(); - empfaengerType.setPostkorbId(POSTKORB_ID); - return empfaengerType; - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSenderTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSenderTest.java deleted file mode 100644 index 75536d889..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSenderTest.java +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright (C) 2024 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.bayernid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.io.InputStream; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.BiFunction; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.nachrichten.postfach.bayernid.FileSender.StreamReader; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import io.grpc.stub.CallStreamObserver; -import lombok.SneakyThrows; - -class FileSenderTest { - - private FileSender fileSender; - - @Mock - private BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder; - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - @Mock - private GrpcSendBayernIdMessageRequest metadata; - @Mock - private InputStream inputStream; - - @BeforeEach - void setup() { - fileSender = spy(new FileSender(chunkBuilder, requestObserver, metadata, inputStream)); - } - - @Nested - class TestSend { - - @Test - void shouldCallSendMetadata() { - fileSender.send(); - - verify(fileSender).sendMetadata(); - } - - @Test - void shouldCallSendNextChunk() { - when(requestObserver.isReady()).thenReturn(true); - doAnswer(invocation -> { - ((AtomicBoolean) ReflectionTestUtils.getField(fileSender, "done")).set(true); - return null; - }).when(fileSender).sendNextChunk(); - - fileSender.send(); - - verify(fileSender).sendNextChunk(); - } - - @Test - void shouldNotCallSendNextChunkWhenDone() { - ((AtomicBoolean) ReflectionTestUtils.getField(fileSender, "done")).set(true); - - fileSender.send(); - - verify(fileSender, never()).sendNextChunk(); - } - - @Test - void shouldNotCallSendNextChunkWhenNotReady() { - fileSender.send(); - - verify(fileSender, never()).sendNextChunk(); - } - } - - @Nested - class TestSendMetadata { - - @Test - void shouldCallOnNextOnce() { - fileSender.sendMetadata(); - fileSender.sendMetadata(); - - verify(requestObserver).onNext(metadata); - } - - } - - @Nested - class TestSendNextChunk { - - @Test - void shouldCallSendChunk() { - var contentToSend = new byte[] { 1, 2, 3, 4, 5 }; - setContent(contentToSend); - - fileSender.sendNextChunk(); - - verify(fileSender).sendChunk(contentToSend, 5); - } - - @Test - void shouldReturnContentLength() { - var contentToSend = new byte[] { 1, 2, 3, 4, 5 }; - setContent(contentToSend); - - var length = fileSender.sendNextChunk(); - - assertThat(length).isEqualTo(contentToSend.length); - } - - @Test - void shouldCallEndTransfer() { - setContent(new byte[] {}); - - fileSender.sendNextChunk(); - - verify(fileSender).endTransfer(); - } - - @SneakyThrows - void setContent(byte[] contentToSend) { - var streamReader = getStreamReader(); - ReflectionTestUtils.setField(streamReader, "buffer", contentToSend); - when(inputStream.read(any(), anyInt(), anyInt())).thenReturn(contentToSend.length); - } - - } - - @Nested - class TestEndTransfer { - - @Mock - private StreamReader streamReader; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(fileSender, "streamReader", streamReader); - } - - @Test - void shouldSetDone() { - fileSender.endTransfer(); - - var done = (AtomicBoolean) ReflectionTestUtils.getField(fileSender, "done"); - assertThat(done.get()).isTrue(); - } - - @Test - void shouldCloseStream() { - fileSender.endTransfer(); - - verify(streamReader).close(); - } - } - - @Nested - class TestSendChunk { - - @Mock - private GrpcSendBayernIdMessageRequest chunkRequest; - - private byte[] contentToSend = new byte[] { 1, 2, 3, 4, 5 }; - private int length = 5; - - - @Test - void shouldCallChunkBuilder() { - fileSender.sendChunk(contentToSend, length); - - verify(chunkBuilder).apply(contentToSend, length); - } - - @Test - void shouldCallOnNext() { - when(chunkBuilder.apply(any(), anyInt())).thenReturn(chunkRequest); - - fileSender.sendChunk(contentToSend, length); - - verify(requestObserver).onNext(chunkRequest); - } - - } - - StreamReader getStreamReader() { - return (StreamReader) ReflectionTestUtils.getField(fileSender, "streamReader"); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FreiTextTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FreiTextTypeTestFactory.java deleted file mode 100644 index 27bcc4302..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FreiTextTypeTestFactory.java +++ /dev/null @@ -1,15 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.akdb.egov.bsp.nachrichten.FreiTextType; -import de.akdb.egov.bsp.nachrichten.SchluesseltabelleType; -import lombok.val; - -public class FreiTextTypeTestFactory { - public static final String MESSAGE_TEXT = "Test Nachricht\n\nHallo"; - - public FreiTextType create() { - val freiText = new FreiTextType(); - freiText.setText(MESSAGE_TEXT); - return freiText; - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/GrpcSendBayernIdMessageResponseTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/GrpcSendBayernIdMessageResponseTestFactory.java deleted file mode 100644 index 3aa0719d3..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/GrpcSendBayernIdMessageResponseTestFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2024 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.bayernid; - -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; - -public class GrpcSendBayernIdMessageResponseTestFactory { - - public static final String STATUS = "code"; - public static final String MESSAGE_TEXT = "messageText"; - - public static GrpcSendBayernIdMessageResponse create() { - return createBuilder().build(); - } - - public static GrpcSendBayernIdMessageResponse.Builder createBuilder() { - return GrpcSendBayernIdMessageResponse.newBuilder() - .setSuccess(true) - .setStatus(STATUS) - .setMessage(MESSAGE_TEXT); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/IdentifikationNachrichtTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/IdentifikationNachrichtTypeTestFactory.java deleted file mode 100644 index 26259ff56..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/IdentifikationNachrichtTypeTestFactory.java +++ /dev/null @@ -1,36 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import java.time.Instant; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.UUID; - -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; -import javax.xml.datatype.XMLGregorianCalendar; - -import de.akdb.egov.bsp.nachrichten.IdentifikationNachrichtType; -import de.akdb.egov.bsp.nachrichten.SchluesseltabelleType; -import lombok.val; - -class IdentifikationNachrichtTypeTestFactory { - public static final XMLGregorianCalendar ERSTELLUNGSZEITPUNKT = now(); - public static final String NACHRICHTEN_ID = UUID.randomUUID().toString(); - - private static XMLGregorianCalendar now() { - try { - val c = new GregorianCalendar(); - c.setTime(Date.from(Instant.now())); - return DatatypeFactory.newInstance().newXMLGregorianCalendar(c); - } catch (DatatypeConfigurationException e) { - throw new RuntimeException(e); - } - } - - public static IdentifikationNachrichtType create() { - IdentifikationNachrichtType identifikationNachrichtType = new IdentifikationNachrichtType(); - identifikationNachrichtType.setNachrichtenId(NACHRICHTEN_ID); - identifikationNachrichtType.setErstellungszeitpunkt(ERSTELLUNGSZEITPUNKT); - return identifikationNachrichtType; - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatusTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatusTest.java deleted file mode 100644 index 6fa7835b8..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatusTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Test; - -class MailSendingResponseStatusTest { - - @Test - void shouldCreateSuccessResult() { - assertThat(MailSendingResponseStatus.SUCCESS.getSchluessel()).isEqualTo("0"); - } - - @Test - void shouldCreateFromSchluessel() { - assertThat(MailSendingResponseStatus.fromSchluessel("20")).isEqualTo(MailSendingResponseStatus.ERROR_IN_MESSAGE_SCHEMA); - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSenderTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSenderTest.java deleted file mode 100644 index 1efd3e30e..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSenderTest.java +++ /dev/null @@ -1,405 +0,0 @@ -/* - * Copyright (C) 2024 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.bayernid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.io.InputStream; -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.BiFunction; -import java.util.function.Function; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.common.binaryfile.BinaryFileUploadStreamObserver; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest; -import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse; -import io.grpc.stub.CallStreamObserver; -import io.grpc.stub.StreamObserver; - -class MessageWithFilesSenderTest { - - private MessageWithFilesSender messageWithFilesSender; - - @Mock - private Function<StreamObserver<GrpcSendBayernIdMessageResponse>, CallStreamObserver<GrpcSendBayernIdMessageRequest>> reqObserverBuilder; - @Mock - private GrpcSendBayernIdMessageRequest messageMetadata; - @Mock - private List<String> attachmentIds; - @Mock - private Function<String, BayernIdAttachment> toAttachment; - @Mock - private Function<BayernIdAttachment, GrpcSendBayernIdMessageRequest> attachmentMetadataMapper; - @Mock - private BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder; - - @BeforeEach - void setup() { - messageWithFilesSender = spy( - MessageWithFilesSender.builder().reqObserverBuilder(reqObserverBuilder).messageMetadata(messageMetadata).toAttachment(toAttachment) - .attachmentMetadataMapper(attachmentMetadataMapper).chunkBuilder(chunkBuilder).build()); - } - - @Nested - class TestSend { - - @Mock - private BinaryFileUploadStreamObserver<GrpcSendBayernIdMessageRequest, GrpcSendBayernIdMessageResponse> responseStreamObserver; - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - - @Test - void shouldReturnSameObject() { - var result = messageWithFilesSender.send(); - - assertThat(result).isSameAs(messageWithFilesSender); - } - - @Test - void shouldCallRequestObserverBuilder() { - try (var createMock = Mockito.mockStatic(BinaryFileUploadStreamObserver.class)) { - createMock.when(() -> BinaryFileUploadStreamObserver.create(any(), any())).thenReturn(responseStreamObserver); - - messageWithFilesSender.send(); - - verify(reqObserverBuilder).apply(responseStreamObserver); - } - } - - @Test - void shouldSetRequestStreamObserver() { - when(reqObserverBuilder.apply(any())).thenReturn(requestObserver); - - messageWithFilesSender.send(); - - assertThat(messageWithFilesSender).extracting("requestObserver").isSameAs(requestObserver); - } - } - - @Nested - class TestSendNext { - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver); - } - - @Test - void shouldCheckIfDone() { - doNothing().when(messageWithFilesSender).waitForObserver(); - - messageWithFilesSender.sendNext(); - - verify(messageWithFilesSender).waitForObserver(); - } - - @Test - void shouldRetrunIfDone() { - ((AtomicBoolean) ReflectionTestUtils.getField(messageWithFilesSender, "done")).set(true); - - messageWithFilesSender.sendNext(); - - verify(messageWithFilesSender, never()).waitForObserver(); - } - - @Test - void shouldCallSendMetadata() { - doNothing().when(messageWithFilesSender).waitForObserver(); - - messageWithFilesSender.sendNext(); - - verify(messageWithFilesSender).sendMetadata(); - } - - @Test - void shouldCallSendAttachments() { - doNothing().when(messageWithFilesSender).waitForObserver(); - - messageWithFilesSender.sendNext(); - - verify(messageWithFilesSender).sendAttachments(); - } - } - - @Nested - class TestSendMetadata { - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver); - } - - @Test - void shouldCallOnNextOnce() { - messageWithFilesSender.sendMetadata(); - messageWithFilesSender.sendMetadata(); - - verify(requestObserver).onNext(messageMetadata); - } - - } - - @Nested - class TestSendAttachments { - - private String attachmentId = "id1"; - - @Mock - private FileSender fileSender; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "attachmentIds", List.of(attachmentId)); - doNothing().when(messageWithFilesSender).completeRequest(); - } - - @Test - void shouldCallCreateFileSenders() { - doReturn(fileSender).when(messageWithFilesSender).buildFileSender(any()); - - messageWithFilesSender.sendAttachments(); - - verify(messageWithFilesSender).createFileSenders(); - } - - @Test - void shouldNotRecreateFileSenders() { - ReflectionTestUtils.setField(messageWithFilesSender, "fileSenders", List.of(fileSender)); - - messageWithFilesSender.sendAttachments(); - - verify(messageWithFilesSender, never()).createFileSenders(); - } - - @Test - void shouldCallSendOnFileSender() { - doReturn(fileSender).when(messageWithFilesSender).buildFileSender(any()); - - messageWithFilesSender.sendAttachments(); - - verify(fileSender).send(); - } - - @Test - void shouldCallCompleteRequest() { - doReturn(fileSender).when(messageWithFilesSender).buildFileSender(any()); - - messageWithFilesSender.sendAttachments(); - - verify(messageWithFilesSender).completeRequest(); - } - } - - @Nested - class TestCreateFileSenders { - - private String attachmentId = "id1"; - - @Mock - private FileSender fileSender; - - @BeforeEach - void setup() { - doReturn(fileSender).when(messageWithFilesSender).buildFileSender(any()); - ReflectionTestUtils.setField(messageWithFilesSender, "attachmentIds", List.of(attachmentId)); - } - - @Test - void shouldCalToAttachment() { - messageWithFilesSender.createFileSenders(); - - verify(toAttachment).apply(attachmentId); - } - - @Test - void shouldCallBuildFileSender() { - messageWithFilesSender.createFileSenders(); - - verify(messageWithFilesSender).buildFileSender(any()); - } - - @Test - void shouldReturnFileSenders() { - var result = messageWithFilesSender.createFileSenders(); - - assertThat(result).containsExactly(fileSender); - } - } - - @Nested - class TestBuildFileSender { - - private String attachmentId = "id1"; - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - @Mock - private GrpcSendBayernIdMessageRequest attachmentMetadata; - - @Mock - private BayernIdAttachment attachment; - @Mock - private InputStream inputStream; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver); - } - - @Test - void shouldSetChunkBuilder() { - var result = messageWithFilesSender.buildFileSender(attachment); - - assertThat(result).extracting("chunkBuilder").isSameAs(chunkBuilder); - } - - @Test - void shouldSetRequestObserver() { - var result = messageWithFilesSender.buildFileSender(attachment); - - assertThat(result).extracting("requestObserver").isSameAs(requestObserver); - } - - @Test - void shouldCallAttachmentMetadataMapper() { - ReflectionTestUtils.setField(messageWithFilesSender, "attachmentMetadataMapper", attachmentMetadataMapper); - - messageWithFilesSender.buildFileSender(attachment); - - verify(attachmentMetadataMapper).apply(attachment); - } - - @Test - void shouldSetAttachmentMetadata() { - ReflectionTestUtils.setField(messageWithFilesSender, "attachmentMetadataMapper", attachmentMetadataMapper); - when(attachmentMetadataMapper.apply(any())).thenReturn(attachmentMetadata); - - var result = messageWithFilesSender.buildFileSender(attachment); - - assertThat(result).extracting("metadata").isSameAs(attachmentMetadata); - } - - @Test - void shouldGetContent() { - messageWithFilesSender.buildFileSender(attachment); - - verify(attachment).getContent(); - } - } - - @Nested - class TestCompleteRequest { - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver); - } - - @Test - void shouldSetDone() { - messageWithFilesSender.completeRequest(); - - var done = (AtomicBoolean) ReflectionTestUtils.getField(messageWithFilesSender, "done"); - assertThat(done.get()).isTrue(); - } - - @Test - void shouldCallOnCompleted() { - messageWithFilesSender.completeRequest(); - - verify(requestObserver).onCompleted(); - } - } - - @Nested - class TestCancelOnTimeout { - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver); - } - - @Test - void shouldCallCancelOnRequestObserver() { - messageWithFilesSender.cancelOnTimeout(); - - verify(requestObserver).onError(any(TechnicalException.class)); - } - - @Test - void shouldCancelResultFuture() { - messageWithFilesSender.cancelOnTimeout(); - - assertThat(messageWithFilesSender.getResultFuture()).isCancelled(); - } - } - - @Nested - class TestCancelOnError { - - @Mock - private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver); - } - - @Test - void shouldCallCancelOnRequestObserver() { - var exception = new RuntimeException("test"); - messageWithFilesSender.cancelOnError(exception); - - verify(requestObserver).onError(exception); - } - - @Test - void shouldCancelResultFuture() { - messageWithFilesSender.cancelOnError(new TechnicalException("test")); - - assertThat(messageWithFilesSender.getResultFuture()).isCancelled(); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenInhaltTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenInhaltTypeTestFactory.java deleted file mode 100644 index 81b662cf4..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenInhaltTypeTestFactory.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.akdb.egov.bsp.nachrichten.NachrichtenInhaltType; -import lombok.val; - -public class NachrichtenInhaltTypeTestFactory { - public static final String BETREFF = "Test Nachricht"; - - public NachrichtenInhaltType create() { - val nachrichtenInhalt = new NachrichtenInhaltType(); - nachrichtenInhalt.setBetreff(BETREFF); - return nachrichtenInhalt; - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenKopfTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenKopfTypeTestFactory.java deleted file mode 100644 index 9cb131869..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenKopfTypeTestFactory.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import de.akdb.egov.bsp.nachrichten.AbsenderType; -import de.akdb.egov.bsp.nachrichten.EmpfaengerType; -import de.akdb.egov.bsp.nachrichten.IdentifikationNachrichtType; -import de.akdb.egov.bsp.nachrichten.NachrichtenKopfType; -import lombok.val; - -public class NachrichtenKopfTypeTestFactory { - public static final IdentifikationNachrichtType IDENTIFIKATION_NACHRICHT_TYPE = IdentifikationNachrichtTypeTestFactory.create(); - public static final AbsenderType ABSENDER_TYPE = AbsenderTypeTestFactory.create(); - public static final EmpfaengerType EMPFAENGER_TYPE = EmpfaengerTypeTestFactory.create(); - - public static NachrichtenKopfType create() { - val nachrichtenKopfType = new NachrichtenKopfType(); - nachrichtenKopfType.setIdentifikationNachricht(IDENTIFIKATION_NACHRICHT_TYPE); - nachrichtenKopfType.setAbsender(ABSENDER_TYPE); - nachrichtenKopfType.setEmpfaenger(EMPFAENGER_TYPE); - return nachrichtenKopfType; - } - -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/SendBspNachrichtNativeOutputTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/SendBspNachrichtNativeOutputTestFactory.java deleted file mode 100644 index 39f1abeb8..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/SendBspNachrichtNativeOutputTestFactory.java +++ /dev/null @@ -1,15 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import akdb.bsp.postkorb.komm.webservice.SendBspNachrichtNativeOutput; -import lombok.val; - -public class SendBspNachrichtNativeOutputTestFactory { - - public static final String BSP_QUITTUNG = "quittung"; - - public static SendBspNachrichtNativeOutput create() { - val result = new SendBspNachrichtNativeOutput(); - result.setBspQuittung(BSP_QUITTUNG); - return result; - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/ZuVorgangTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/ZuVorgangTypeTestFactory.java deleted file mode 100644 index 5d2c0229f..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/ZuVorgangTypeTestFactory.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.bayernid; - -import java.util.UUID; - -import de.akdb.egov.bsp.nachrichten.ZuVorgangType; -import lombok.val; - -public class ZuVorgangTypeTestFactory { - public static final String VORGANG_ID = UUID.randomUUID().toString(); - - public static ZuVorgangType create() { - val vorgang = new ZuVorgangType(); - vorgang.setVorgangsId(VORGANG_ID); - return vorgang; - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentServiceTest.java deleted file mode 100644 index dc473e132..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentServiceTest.java +++ /dev/null @@ -1,131 +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 static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.sql.Date; -import java.time.Instant; - -import org.bson.BsonObjectId; -import org.bson.BsonValue; -import org.bson.Document; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import com.mongodb.client.gridfs.model.GridFSFile; - -import de.ozgcloud.nachrichten.postfach.BinaryFileService; -import de.ozgcloud.nachrichten.postfach.FileId; - -class MessageAttachmentServiceTest { - private static final FileId FILE_ID = FileId.from("42"); - - @InjectMocks - private MessageAttachmentService messageAttachmentService; - - @Mock - private BinaryFileService fileService; - - private GridFSFile gridFsfile; - - @Nested - class TestLoadingAttachment { - @BeforeEach - void init() { - Document metadata = new Document(); - metadata.put("name", MessageAttachmentTestFactory.FILENAME); - BsonValue id = new BsonObjectId(); - gridFsfile = new GridFSFile(id, FILE_ID.toString(), 0, 0, Date.from(Instant.now()), metadata); - - when(fileService.getFile(any())).thenReturn(gridFsfile); - when(fileService.getUploadedFileStream(any())) - .thenReturn(new ByteArrayInputStream(MessageAttachmentTestFactory.DECODED_CONTENT.getBytes())); - } - - @Test - void shouldHaveAttachmentWithFileName() { - MessageAttachment attachment = messageAttachmentService.getMessageAttachment(FILE_ID); - - assertThat(attachment.getFileName()).isEqualTo(MessageAttachmentTestFactory.FILENAME); - } - - @Test - void shouldHaveAttachmentContent() { - MessageAttachment attachment = messageAttachmentService.getMessageAttachment(FILE_ID); - - assertThat(attachment.getContent()).isEqualTo(MessageAttachmentTestFactory.CONTENT); - } - - } - - @Nested - class TestLoadingAttachmentContent { - @BeforeEach - void init() { - when(fileService.getUploadedFileStream(any())) - .thenReturn(new ByteArrayInputStream(MessageAttachmentTestFactory.DECODED_CONTENT.getBytes())); - } - - @Test - void shouldGetInputStream() { - InputStream input = messageAttachmentService.getAttachmentContentStream(FILE_ID); - - assertThat(input).isNotNull(); - } - - @Test - void shouldGetContent() throws IOException { - String input = messageAttachmentService.getAttachmentContent(FILE_ID); - - assertThat(input).isEqualTo(MessageAttachmentTestFactory.CONTENT); - } - } - - @Nested - class TestMapAttachmentFile { - - @Test - void shouldMapFileName() { - var attachmentFile = messageAttachmentService.mapAttachmentFile(MessageAttachmentTestFactory.create()); - - assertThat(attachmentFile.getName()).isEqualTo(MessageAttachmentTestFactory.FILENAME); - } - - @Test - void shouldMapContent() { - var attachmentFile = messageAttachmentService.mapAttachmentFile(MessageAttachmentTestFactory.create()); - - assertThat(attachmentFile.getContent()).hasContent(MessageAttachmentTestFactory.CONTENT); - } - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java deleted file mode 100644 index 17181b240..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java +++ /dev/null @@ -1,40 +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; - -public class MessageAttachmentTestFactory { - - public final static String FILENAME = "test.txt"; - public static final String CONTENT = "dGVzdA=="; - public static final String DECODED_CONTENT = "test"; - public static final long SIZE = 4L; - - public static MessageAttachment create() { - return createBuilder().build(); - } - - public static MessageAttachment.MessageAttachmentBuilder createBuilder() { - return MessageAttachment.builder().fileName(FILENAME).content(CONTENT); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageJsonReplyTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageJsonReplyTestFactory.java deleted file mode 100644 index 43dd50e2c..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageJsonReplyTestFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.osi; - -public class MessageJsonReplyTestFactory { - - private static final String REPLY_JSON_TMPL = """ - [{ - "messageId": "%s", - "nameIdentifier": "%s", - "body": "%s", - "isHtml": false, - "replyAction": %d, - "subject": "%s", - "sequenceNumber": "%s", - "eidasLevel": 1, - "isObligatory": true, - "attachments": [{ - "fileName": "%s", - "content": "%s" - }] - }]"""; - - public static String buildReplyJson() { - return buildReplyJson(MessageTestFactory.create(), MessageAttachmentTestFactory.create()); - } - - public static String buildReplyJson(Message msg, MessageAttachment attachement) { - return String.format(REPLY_JSON_TMPL, - msg.getMessageId(), - msg.getPostfachId(), - msg.getMailBody(), - msg.getReplyOption().toValue(), - msg.getSubject(), - msg.getVorgangId(), - attachement.getFileName(), - attachement.getContent()); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java deleted file mode 100644 index a60eb1180..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java +++ /dev/null @@ -1,64 +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 java.util.UUID; - -import de.ozgcloud.nachrichten.postfach.osi.Message.EidasLevel; - -public class MessageTestFactory { - - public static final String MESSAGE_ID = UUID.randomUUID().toString(); - public static final String POSTFACH_ID = UUID.randomUUID().toString(); - public static final String VORGANG_ID = UUID.randomUUID().toString(); - - public static final String MAIL_BODY = "Body<br>String"; - public static final boolean IS_HTML = false; - public static final ReplyOption REPLY_OPTION = ReplyOption.MANDATORY; - public static final String SUBJECT = "Test Subject"; - - public static final EidasLevel EIDAS_LEVEL = EidasLevel.MEDIUM; - public static final boolean RECHTSVERBINDLICH = true; - - public static final List<MessageAttachment> ATTACHMENTS = List.of(MessageAttachmentTestFactory.create()); - - public static Message create() { - return createBuilder().build(); - } - - public static Message.MessageBuilder createBuilder() { - return Message.builder() // - .messageId(MESSAGE_ID) // - .postfachId(POSTFACH_ID) // - .mailBody(MAIL_BODY) // - .isHtml(IS_HTML) // - .replyOption(REPLY_OPTION) // - .subject(SUBJECT) // - .vorgangId(VORGANG_ID) // - .eidasLevel(EIDAS_LEVEL) // - .rechtsverbindlich(RECHTSVERBINDLICH) // - .attachments(ATTACHMENTS); - } -} diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java deleted file mode 100644 index 03296b4b1..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java +++ /dev/null @@ -1,200 +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 static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.ZonedDateTime; -import java.time.temporal.ChronoUnit; -import java.util.List; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.nachrichten.postfach.FileId; -import de.ozgcloud.nachrichten.postfach.PostfachAddressTestFactory; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; - -class OsiPostfachMessageMapperTest { - - @InjectMocks - private OsiPostfachMessageMapper mapper = Mappers.getMapper(OsiPostfachMessageMapper.class); - @Mock - private MessageAttachmentService messageAttachmentService; - @Mock - private GrpcObjectMapper grpcObjectMapper; - - @DisplayName("To mail") - @Nested - class TestToNachricht { - - @Test - void shouldSetDirection() { - var mail = mapper.toPostfachNachricht(MessageTestFactory.create()); - - assertThat(mail.getDirection()).isEqualTo(Direction.IN); - } - - @Test - void shouldSetCreatedAt() { - var mail = mapper.toPostfachNachricht(MessageTestFactory.create()); - - assertThat(mail.getCreatedAt()).isNotNull().isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS)); - } - - @Test - void shouldIgnoreSentInformation() { - var mail = mapper.toPostfachNachricht(MessageTestFactory.create()); - - assertThat(mail.getSentAt()).isNull(); - assertThat(mail.getSentSuccessful()).isNull(); - } - - @Test - void shouldPersistAttachment() { - mapper.toPostfachNachricht(MessageTestFactory.create()); - - verify(messageAttachmentService).persistAttachment(MessageTestFactory.VORGANG_ID, MessageTestFactory.ATTACHMENTS.get(0)); - } - - @Test - void shouldSetPostfachAddress() { - var expectedPostfachAddress = PostfachAddressTestFactory.createBuilder().serviceKontoType(OsiPostfachRemoteService.POSTFACH_TYPE).build(); - - var mail = toMail(); - - assertThat(mail.getPostfachAddress()).usingRecursiveComparison().isEqualTo(expectedPostfachAddress); - } - - @Test - void shouldPreserveNewLineInBody() { - var bodyText = "line\nline"; - var mail = mapper.toPostfachNachricht(MessageTestFactory.createBuilder().mailBody(bodyText).build()); - - assertThat(mail.getMailBody()).isEqualTo(bodyText); - } - - @Test - void shouldRecodeAND() { - var mail = mapper.toPostfachNachricht(MessageTestFactory.createBuilder().mailBody("this&that").build()); - - assertThat(mail.getMailBody()).isEqualTo("this&that"); - } - - private PostfachNachricht toMail() { - return mapper.toPostfachNachricht(MessageTestFactory.create()); - } - } - - @DisplayName("To osi message") - @Nested - class TestToOsiMessage { - - @Test - void shouldCallAttachmentService() { - var fileId = FileId.from("42"); - - toOsiMessage(PostfachNachrichtTestFactory.createBuilder().attachments(List.of(fileId.toString())).build()); - - verify(messageAttachmentService).getMessageAttachment(fileId); - } - - @Test - void shouldMapFields() { - var message = toOsiMessage(PostfachNachrichtTestFactory.create()); - - assertThat(message.getSubject()).isEqualTo(MessageTestFactory.SUBJECT); - assertThat(message.getAttachments()).hasSize(1); - } - - @Test - void shouldMapMailBody() { - var message = toOsiMessage(PostfachNachrichtTestFactory.create()); - - assertThat(message.getMailBody()).isEqualTo(MessageTestFactory.MAIL_BODY); - } - - @Test - void shouldReplaceNewLineToHtml() { - var bodyText = "line\nline&"; - var message = toOsiMessage(PostfachNachrichtTestFactory.createBuilder().mailBody(bodyText).build()); - - assertThat(message.getMailBody()).isEqualTo("line<br>line&"); - } - - @DisplayName("build postfachId") - @Nested - class TestToPostfachId { - - @DisplayName("by existing postfachAddress") - @Nested - class TestWithExistingPostfachAddress { - - @Test - void shouldMapPostfachAddressToPostfachId() { - var message = toOsiMessage(PostfachNachrichtTestFactory.create()); - - assertThat(message.getPostfachId()).isEqualTo(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); - } - } - - @DisplayName("by postfachId if postfachAddress not exists") - @Nested - class TestWithoutPostfachAddress { - - @Test - void shouldMapPostfachAddressToPostfachId() { - var message = toOsiMessage(PostfachNachrichtTestFactory.createBuilder().postfachAddress(null).build()); - - assertThat(message.getPostfachId()).isEqualTo(MessageTestFactory.POSTFACH_ID); - } - } - } - - private Message toOsiMessage(PostfachNachricht postfachNachricht) { - return mapper.toOsiMessage(postfachNachricht); - } - } - - @DisplayName("To HTML body") - @Nested - class TestToHTMLBody { - - @Test - void shouldNotContainNewlines() { - var body = mapper.replaceNewlines(MessageTestFactory.MAIL_BODY); - - assertThat(body).doesNotContain("\n"); - } - - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceTest.java deleted file mode 100644 index 0681df0f4..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceTest.java +++ /dev/null @@ -1,337 +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 static de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.client.match.MockRestRequestMatchers.*; -import static org.springframework.test.web.client.response.MockRestResponseCreators.*; - -import java.util.stream.Collectors; - -import org.assertj.core.api.InstanceOfAssertFactories; -import org.assertj.core.util.Arrays; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.test.util.ReflectionTestUtils; -import org.springframework.test.web.client.ExpectedCount; -import org.springframework.test.web.client.MockRestServiceServer; -import org.springframework.test.web.client.ResponseActions; -import org.springframework.web.client.RestTemplate; - -import de.ozgcloud.nachrichten.postfach.NotConfiguredException; -import de.ozgcloud.nachrichten.postfach.PostfachBadRequestException; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; - -class OsiPostfachRemoteServiceTest { - - private static final String TEST_URL = "https://testUrl.local"; - private static final String TEST_API_KEY = "dummyApiKey"; - private static final String TEST_API_REALM = "dummyApiRealm"; - - @InjectMocks - private OsiPostfachRemoteService service; - - @Mock - private OsiPostfachMessageMapper mapper; - - @Spy - private RestTemplate restTemplate; - - @Spy - private OsiPostfachProperties properties = new OsiPostfachProperties(); - { - properties.setUrl(TEST_URL); - properties.setRealm(TEST_API_REALM); - properties.setKey(TEST_API_KEY); - } - - private MockRestServiceServer mockServer; - - @BeforeEach - void initMockServer() { - mockServer = MockRestServiceServer.createServer(restTemplate); - } - - @Nested - class TestGetAllMessages { - - @BeforeEach - void init() { - prepareMockServer(); - } - - @Test - void shouldCallRestTemplateExchange() { - service.getAllMessages(); - - mockServer.verify(); - } - - @Test - void shouldFillMessage() { - when(mapper.toPostfachNachricht(any())).thenReturn(PostfachNachrichtTestFactory.create()); - - var messages = service.getAllMessages(); - - assertThat(messages).hasSize(1).first().usingRecursiveComparison().isEqualTo(PostfachNachrichtTestFactory.create()); - } - - @Test - void shouldThrowExceptionIfNotConfigured() { - properties.setUrl(null); - - assertThrows(NotConfiguredException.class, () -> service.getAllMessages()); - } - - @Test - void shouldHaveAttachment() { - var messages = Arrays.array(MessageTestFactory.create()); - doReturn(ResponseEntity.ok().body(messages)).when(restTemplate).exchange(TEST_URL, HttpMethod.GET, null, Message[].class); - when(mapper.toPostfachNachricht(messages[0])).thenReturn(PostfachNachrichtTestFactory.create()); - - var postfachNachrichten = service.getAllMessages(); - - assertThat(postfachNachrichten).hasSize(1).first() - .extracting(PostfachNachricht::getAttachments, InstanceOfAssertFactories.LIST) - .hasSize(1) - .usingRecursiveComparison().isEqualTo(PostfachNachrichtTestFactory.ATTACHMENTS); - } - - @Test - void shouldCallMapper() { - prepareMockServer(); - - service.getAllMessages().collect(Collectors.toList()); - - verify(mapper).toPostfachNachricht(any()); - } - - private void prepareMockServer() { - mockServer.expect(ExpectedCount.once(), requestTo(TEST_URL)) - .andExpect(method(HttpMethod.GET)) - .andRespond(withSuccess(MessageJsonReplyTestFactory.buildReplyJson(), MediaType.APPLICATION_JSON)); - } - - } - - @Nested - class TestSendMessage { - - private PostfachNachricht message = PostfachNachrichtTestFactory.create(); - - @Test - void shouldCallRestTemplateExchange() { - prepareMockServer(); - - service.sendMessage(message); - - mockServer.verify(); - } - - @Test - void shouldThrowExceptionUrlIfNotConfigured() { - prepareMockServer(); - - properties.setUrl(null); - - assertThrows(NotConfiguredException.class, () -> service.sendMessage(message)); - } - - @Test - void shouldThrowExceptionKeyIfNotConfigured() { - prepareMockServer(); - - properties.setKey(null); - - assertThrows(NotConfiguredException.class, () -> service.sendMessage(message)); - } - - @Test - void shouldThrowExceptionIfNoRestTemplate() { - ReflectionTestUtils.setField(service, "restTemplate", null); - - assertThrows(NotConfiguredException.class, () -> service.sendMessage(message)); - } - - @Test - void shouldThrowBadRequestExceptionOnHttpClientError() { - prepareMockServer().andRespond(withStatus(HttpStatus.BAD_REQUEST)); - - assertThrows(PostfachBadRequestException.class, () -> service.sendMessage(message)); - } - - @Test - void shouldCallMapper() { - prepareMockServer(); - - service.sendMessage(message); - - verify(mapper).toOsiMessage(any()); - } - - @Nested - class TestResponse { - - @Test - void shouldThrowServerProcessExceptionOnResponseBodyFalse() { - prepareMockServerWithResponseBody(false); - - assertThrows(OsiPostfachServerProcessException.class, () -> service.sendMessage(message)); - - mockServer.verify(); - } - - void prepareMockServerWithResponseBody(boolean body) { - mockServer.expect(ExpectedCount.once(), requestTo(TEST_URL)) - .andExpect(method(HttpMethod.POST)) - .andRespond(withSuccess(String.valueOf(body), MediaType.APPLICATION_JSON)); - } - } - - @DisplayName("rest request body") - @Nested - class TestRestRequestBody { - - @Test - void shouldHaveVorgangIdAsSequenceNumber() { - var postfachNachricht = PostfachNachrichtTestFactory.create(); - when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create()); - - prepareMockServer().andExpect(jsonPath("$.sequenceNumber").value(VORGANG_ID)); - - service.sendMessage(postfachNachricht); - } - - @Test - void shouldHavePostfachIdAsNameIdentifier() { - var postfachNachricht = PostfachNachrichtTestFactory.create(); - when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create()); - - prepareMockServer().andExpect(jsonPath("$.nameIdentifier").value(POSTFACH_ID)); - - service.sendMessage(postfachNachricht); - } - - @Test - void shouldHaveSubject() { - var postfachNachricht = PostfachNachrichtTestFactory.create(); - when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create()); - - prepareMockServer().andExpect(jsonPath("$.subject").value(SUBJECT)); - - service.sendMessage(postfachNachricht); - } - - @Test - void shouldHaveMailBodyAsBody() { - var postfachNachricht = PostfachNachrichtTestFactory.create(); - when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create()); - - prepareMockServer().andExpect(jsonPath("$.body").value(MAIL_BODY)); - - service.sendMessage(postfachNachricht); - } - - @Test - void shouldHaveNumericReplyOptionAsReplyAction() { - var postfachNachricht = PostfachNachrichtTestFactory.create(); - when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create()); - - prepareMockServer().andExpect(jsonPath("$.replyAction").value(REPLY_OPTION.toValue())); - - service.sendMessage(postfachNachricht); - } - } - - private ResponseActions prepareMockServer() { - var responseAction = mockServer.expect(ExpectedCount.once(), requestTo(TEST_URL)) - .andExpect(method(HttpMethod.POST)); - - responseAction.andRespond(withSuccess()); - return responseAction; - } - } - - @Nested - class TestDeleteMessage { - - private final String DELETE_URL = TEST_URL + "?messageGuid=" + MessageTestFactory.MESSAGE_ID; - - @Test - void shouldCallRestTemplateExchange() { - prepareMockServer(); - - service.deleteMessage(MessageTestFactory.MESSAGE_ID); - - mockServer.verify(); - } - - @Test - void shouldThrowExceptionIfNotConfigured() { - prepareMockServer(); - - properties.setUrl(null); - - assertThrows(NotConfiguredException.class, () -> service.deleteMessage(MessageTestFactory.MESSAGE_ID)); - } - - private void prepareMockServer() { - mockServer.expect(ExpectedCount.once(), requestTo(DELETE_URL)) - .andExpect(method(HttpMethod.DELETE)) - .andRespond(withSuccess()); - } - } - - @Nested - class TestGetPostfach { - - @Test - void shouldHasTyp() { - var postfachType = service.getPostfachType(); - - assertThat(postfachType).isEqualTo(OsiPostfachRemoteService.POSTFACH_TYPE); - } - - @Test - void shouldAllowReplys(){ - var isReplyAllowed = service.isReplyAllowed(); - - assertThat(isReplyAllowed).isTrue(); - } - } -} \ No newline at end of file diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessExceptionTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessExceptionTestFactory.java deleted file mode 100644 index 15e4c59df..000000000 --- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessExceptionTestFactory.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.osi; - -public class OsiPostfachServerProcessExceptionTestFactory { - - public static OsiPostfachServerProcessException create() { - return new OsiPostfachServerProcessException(); - } - -} diff --git a/nachrichten-manager/src/test/resources/BspQuittung.xml b/nachrichten-manager/src/test/resources/BspQuittung.xml deleted file mode 100644 index 5ef6f03ba..000000000 --- a/nachrichten-manager/src/test/resources/BspQuittung.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<ns2:BspQuittung - xmlns:ns2="http://www.akdb.de/egov/bsp/nachrichten" - xmlns:ns3="urn:akdb:bsp:postkorb:komm:webservice"> - <ns2:AnnahmeErfolgreich>true</ns2:AnnahmeErfolgreich> -</ns2:BspQuittung> diff --git a/nachrichten-manager/src/test/resources/BspQuittungError.xml b/nachrichten-manager/src/test/resources/BspQuittungError.xml deleted file mode 100644 index e54e673e0..000000000 --- a/nachrichten-manager/src/test/resources/BspQuittungError.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<ns2:BspQuittung - xmlns:ns2="http://www.akdb.de/egov/bsp/nachrichten" - xmlns:ns3="urn:akdb:bsp:postkorb:komm:webservice"> - <ns2:AnnahmeErfolgreich>false</ns2:AnnahmeErfolgreich> - <ns2:ErgebnisStatus> - <ns2:Tabelle>9006</ns2:Tabelle> - <ns2:Schluessel>1</ns2:Schluessel> - </ns2:ErgebnisStatus> - <ns2:ErgaenzendeHinweise>Test error</ns2:ErgaenzendeHinweise> -</ns2:BspQuittung> diff --git a/nachrichten-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/nachrichten-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension deleted file mode 100644 index 79b126e6c..000000000 --- a/nachrichten-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension +++ /dev/null @@ -1 +0,0 @@ -org.mockito.junit.jupiter.MockitoExtension \ No newline at end of file diff --git a/nachrichten-manager/src/test/resources/SamlResponse.xml b/nachrichten-manager/src/test/resources/SamlResponse.xml deleted file mode 100644 index d28738585..000000000 --- a/nachrichten-manager/src/test/resources/SamlResponse.xml +++ /dev/null @@ -1,128 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ~ Copyright (c) 2024. - ~ 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. - --> - -<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" - Destination="https://deep-touching-condor.ngrok-free.app/login/saml2/sso/bayernid" - ID="_d75103771f4e3869ca4bf743efb51320" InResponseTo="ARQf371368-b6eb-4708-b90d-e8a9c5fc0ffd" - IssueInstant="2024-02-07T10:27:18.456Z" Version="2.0"> - <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">https://infra-pre-id.bayernportal.de/idp - </saml2:Issuer> - <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> - <ds:SignedInfo> - <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> - <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/> - <ds:Reference URI="#_d75103771f4e3869ca4bf743efb51320"> - <ds:Transforms> - <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> - <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> - </ds:Transforms> - <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> - <ds:DigestValue>y8O2/uKwgap3hb7Ym/sn+v0e3l+w0Z+wIFe11xXkSHU=</ds:DigestValue> - </ds:Reference> - </ds:SignedInfo> - <ds:SignatureValue> - G4fZCUS7Z+7PwDF7J+ZwXssM+iHBgxt34Uf4U3PWrbaYROrCZFD3hlVwCj35Z7RlQkDBi4q1m9RW6XGGVx2vpUDjT9dTkfbF7tB9PXa6l4mq3RyxuRELMwRpcbnamfe02qwtp0N7n9+gdjTVPb2xTMhp7FVG3OZ46OKwwJIm6jNLE+zVbKkNmxnv8XqGK+FgDS82CCG6Zi8nIZZkR80vHuRnSwrpStiInWSURoIYvG8nQfJ6u6IxbtMkDPtLrQHP6th9NMEyODe4RrjNwH8ERkbBl+rvtz406y3hngOW4uxNSTdQGOWj68t7LSn78S+Zc+5g/8up8gRIY6FWB5QxTl+GINIskcoWEfpyQcY932Jh9jGKFRBj2bcP0xALOeP+LTAz1O3hY0EZD0HpjILNhjp4/4Ki6SSeoVrp4UdEZGPpfFAMXdA9unjQGf5DqT3los5mH+KgkpAQoIU0725tIJuGojigXDIKgbNftB1oXjepcqcWvdnbRZlE9Kk4iU2YcVKGxHtEGi03+Qr2M37SqnooXw94Q0LxOQHU0jaOuw+nA8JbcvbpmHVbh7Qyg6OfrI/g+1pwhaQWrL6zEDDlgF3Fj6QxZGhMviCf43WJd8nPPwLIp0dFxXmbX5yBnpAPC4txJkf4idH8gze054O0Zf9G35vFH8oxELrA+d3qbPY= - </ds:SignatureValue> - <ds:KeyInfo> - <ds:X509Data> - <ds:X509Certificate>MIIFbzCCA1egAwIBAgIJAPdFXXarkBN2MA0GCSqGSIb3DQEBCwUAME4xCzAJBgNVBAYTAkRFMQ8w - DQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVuMQ0wCwYDVQQKDARBS0RCMQwwCgYDVQQL - DANJRE0wHhcNMjAxMDI3MTMxODQxWhcNMjUxMDI2MTMxODQxWjBOMQswCQYDVQQGEwJERTEPMA0G - A1UECAwGQmF5ZXJuMREwDwYDVQQHDAhNdWVuY2hlbjENMAsGA1UECgwEQUtEQjEMMAoGA1UECwwD - SURNMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzDtWAEdC3J9FD+ti1exRhN1lzNgK - WqO2gQNdJvlt7KGHA2VGGO7tqRogTuoqi/ydtiHJ8+lhp4kcWqyfv7i9HXOncvcsRRmRdZjUY2Iu - i6ozJqD5LVm/vP5YfdP7vQPdbqyyfpoJhf3mbMEtdNDdGRnGIPUfDn+CFbo37f9tPwMgf3jgh4gx - aujtLIhhr9gevVTEeZAFu9EvzLNd3kEtRb7MuXqIOdu1rW8HlGYFwwVLqEyBn8XG0QAIfhMmGjFM - G7z+Kco2quwOmmZVzWQfeH/3AlN2KbcPt7j+pl+6Bew2AAivP7O+95YKORqQjTu3rPWMF4txPId3 - 7MSjoytwBRyd5EACTvhQBOGrDFKQUOx6fTtRc8+7XGVz8MdQaZQWQXXh1ByU783twNdnRSrSVIyL - djiy1uCbjvsSAtbzGBygPIvDo3skCNLNFXsChtHIfFFDK20KPGb0ghEDf2q3hDbFG3ZDGGynZmJc - ZKuZhJqodJ/++sAXADyTJNAPVYDjKCF4ypELp2Eu/p1gaQPJEb74L/ZFZVOEJFyXIiaqB9J+fcn/ - biqHHOmcCi8n9aIiNt1fatr1Z4lQRWoGtKaGU0+bzUSH4Bgs2EG4u1CI2MKDWqK2aEsHrtu8tbS9 - LrUmDVKtaEUOeul8xWVa036vp/YUIdiJNZSxZG4iTmSOATECAwEAAaNQME4wHQYDVR0OBBYEFFYe - ltslkaolOmcINXQeSe7nURwpMB8GA1UdIwQYMBaAFFYeltslkaolOmcINXQeSe7nURwpMAwGA1Ud - EwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAKqAlXoO41SAiycYUOrR90pfwTCysmbtHF5RWSCM - jF2aCG8URJ7bXwC0lBH8E5zCetFZwdqZziQtxzRkIOfhS5uWbH0RDhwuxZG+5RTPyaHPAZI6e5xH - Du8vHl/VbC3lnL/6K8l+Purr/yo8qkJqrPgThZRL9jBQyYRhDSsJUyIw5zcKKUQC/JWtMQAQcopb - jekCs6xDT1HqIN90Sc/gOfYjNo0dGMNmro9mxcw82Iow18KNVdtEexfD+/6x4NPD61pzuQEe09TR - +Cv3XyzBoGQ/2arijcPnGvth79ffVFtRSf3fSs7wEKV9g3mEWXFDtPBhDj6K0kKU/kJfEZixkXl9 - 2MY+bmugrtTIrazjtfrgMglIAHu9XCYWd/gef0J+PNfHsxgbTEr3XSC+5/xoFKPQSw3PgV8lkUDq - 4mJUKy/q4YmA37XQxourFR5pWvF03YACdtq6zPjtVeI7Cvkte6k0YW5S3cx9RmPv6YZhlaZ5ERpW - Niv6IjokLsvNeemf2PApjO7Q2EDBIoHBYH31wwJSsyRDrSVmbaqLFI15fLXeh2A4YbaBDZdGvDiL - OAk+dG1wdZ2aGw/uNBzMtc8VeKqI1HPcqIluBA3uUPpyLLA+9hDPf6Pp4j0gkXxBikz+/h22bFxE - 1HmDiOSkEn+2NmOHuEFeA+D8jsCAL5VJ3emK - </ds:X509Certificate> - </ds:X509Data> - </ds:KeyInfo> - </ds:Signature> - <saml2p:Status xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"> - <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/> - </saml2p:Status> - <saml2:EncryptedAssertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"> - <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="_baed1174200b81b1bff3856cb4e6365c" - Type="http://www.w3.org/2001/04/xmlenc#Element"> - <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" - xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"/> - <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> - <xenc:EncryptedKey Id="_5a164760d15a61d269e1f7fdd9872a10" Recipient="https://antragsraum.ozgcloud.de/" - xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"> - <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" - xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"> - <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" - xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/> - </xenc:EncryptionMethod> - <ds:KeyInfo> - <ds:X509Data> - <ds:X509Certificate> - MIIDsTCCApmgAwIBAgIUdw/27be5+2vj+MhGtoJjDsMsdDEwDQYJKoZIhvcNAQELBQAwaDELMAkG - A1UEBhMCREUxDzANBgNVBAgMBkJheWVybjERMA8GA1UEBwwITXVlbmNoZW4xDzANBgNVBAoMBm1n - bSB0cDEkMCIGCSqGSIb3DQEJARYVamVucy5yZWVzZUBtZ20tdHAuY29tMB4XDTI0MDExNjEyMjI0 - OVoXDTI1MDExNTEyMjI0OVowaDELMAkGA1UEBhMCREUxDzANBgNVBAgMBkJheWVybjERMA8GA1UE - BwwITXVlbmNoZW4xDzANBgNVBAoMBm1nbSB0cDEkMCIGCSqGSIb3DQEJARYVamVucy5yZWVzZUBt - Z20tdHAuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/HBBWBDSrEgdwXkSy15V - 00EaVTyLgc4vh/JcDiGIYZSqmcMwBd+B1u36xbdBf/duEtCUymMNP48OMjgFZtR6xn0meuR4NR6Y - kn9mYGdU/GhldGuGv9XLAEAkVuTlo0H1QYyBS/6JwKQoSsHDkJ3YwDwKcyOt7QtpSadRZjQEN3gD - vWoRYjgXTxj2I1ovllmi0zOHsFi5PBIuiPWUdJvBrHxpD/XVS9R/qzJpHPu3bjQ6UVRmhiZCUF7H - 5F/PQNwk+qXvjV0ooBeSWWO5hywhk4OP4QEgbYMOSo20YukYX8TJEsum1pwIcQrw7kW4GyKaAycy - Rsa1fbM3tEkj+TiBKwIDAQABo1MwUTAdBgNVHQ4EFgQUfDL/6R33SJodsONCvxKy96AtU18wHwYD - VR0jBBgwFoAUfDL/6R33SJodsONCvxKy96AtU18wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B - AQsFAAOCAQEA+PCnvSwKU+bArTCIg5lfrwONbzKkjvPUymDNYX3oj1wVEN75hNf0RD7Rr0//ZYT3 - Rt0G193gjDcH1gbGIYhMLeGGkxEous2l3O+pRIQRR+hprjr6HzF8IphaJy1RbDwyGsXyLcyOylPL - 4cX9IjUdhklHiLZusBq95LSyw7hsCOAL2+vn816O7yv+28EWXXbnP2XEUjW36nxcZvR6oTJUplXy - HRuuJJTsOxGRNuXA3UVgNbkdm1HnoSGpnsGdUKsUFoEmEJkcSdQRwxeH21WzYGOZmKMcvx2gObaS - P8tafWh5z4Jx+Z7z5WP72Jt44/lnVjaV8aGo0KHXwgqQOtYftQ== - </ds:X509Certificate> - </ds:X509Data> - </ds:KeyInfo> - <xenc:CipherData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"> - <xenc:CipherValue> - ffr9pG/yL4QGQ4o1z/t6HH5XRG8pMHHjzlVTq6uC4eRpVvaNMz8XpUXqNAFGiB0Xbpkm++qOhGsOuz5Wffq5Qo78fMBfU95L1Lk9cVH1pUFfYyz5GV1LqlhStAZrCGHUdv5d0O7JLKgbi45JxxTc7ErAwPlOMqKLs95ZJuhl8Fp9XcYrdzW9IjuwmkB/HyPyjBWV066gaCMLImeBdCzBZc0pxuvH9jq8eX7h1B1eCd5F1LIoj35YDeU3PA/P/E6tLBxdGLFws+nYqNU3B5R2FPPoW+LP9zM7Q+SR20ti1Uh6TEMha05sJjWXFJU78PpJAtEl978ifqqO/23lYXYCrA== - </xenc:CipherValue> - </xenc:CipherData> - </xenc:EncryptedKey> - </ds:KeyInfo> - <xenc:CipherData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"> - <xenc:CipherValue> - YvHcO5br8vWMo/vreVcU8MQylgUmU6vxmvEoUJ07+8kSV0prHD46TtuXHXsLnsYKQMs+SM6bnTWMooNxIy8b0/BvIG4lg/l3m+SwoP56+lOMx26mTEwz9dJT+4BTFH25i3GbWQd86AbD4wT2X9juExE1t6uq1bhACqgeA1erhy/fjTS+1fKKbOTdC0DF35idejruc/YFyV/BNRMHncfj5BnFQFUmXT0b2Fg+WyUAIzflqwXmUhdzmQNl2uqZDL2Vaw4vQp1a9S0ePD3t+QCSGtCYcmqvg+FhooS1KfhqITNinzi07KaQNW6sY0uXpnq3/BGWxXrU58rmU24AQ5ozAgwPfpmOnZhyUURSikvKmvcpD8DPy8jMOxi+rd/tYlxokjPjFSV8ixh0fGZl+7mDAt/YvxBOSSln3nUEMVoKMNgUT3ax6cyUTBXOxt1EMLYuAcHRIBpF2R9MYasmaaR1RntlkKPiomaPdGqIgh1HtkmuwkS6npAH68d0ObD/SpRqu+vPuu++RxHPlbIjShbJWYUJIqPJlhtG7/p9VkC3514t/H1cgxALKstC95OXNH8S6b4m+atl1Wf4PELfHD7lT/QgYHwZk2/xhoWduKc18nauB4kc3v3FZ8nIO3iCgBkXT8qq+/1wJgOnVqAEFWs8w8AC99gHoTgm04q+JUw9XramIXEOdJ10/2Y8HW97XCt53KG+kbaJZe7DISx+2eh79ed3BxEzwgqcXlsrIVcezXWJAl2myFxUggn3c/N1ckgOWFwENOSDFXS6WAtSo/8dlXYvgZTYyKVvVO7l5oq5al2ESrFkHqB3WKu0q9LaWEKw7jMy6FnOawSOjJ2t5o43hfqs9+Wg3J7bgM8YjDuuNZIJ55SO7NIdeeFOkkgGMgcmF0svsxGKbHhdkvqa0t0BLtase7dNIgfWY5laXU7xBn+HEhrz9ZR1xnk8gK28KZwR1wO72rpcV9igsbek5cxEJ/hAk9NSHw7VXAgXZJ6VKZapJfoOqanE50FfK8z0TaoKBUbc1kfOAFnB0n9nUKpUXyyqfiu12w4n3lAs3tBB2S4w3UW5Mef1ZGdF8dqs/T0GUs819vrwYENVUM8u1usP44MnMdTw2i3eo6/VYrCOo1tsa31t46BbLEnercEdGDgpOOBjuda+C3G4NtlDEFzM8rN2FspLS5wphCvKiTB867Q9nrsXOQdDTiwXs2wOpVq1utASdV82Yam1ucVVfriDWlLlhFsFpZnUmwG4zwCPqah2t8inSwx9jramTbJnXpihRw75mFGFC5QAalnV/EAtZ58ecIz4PVTRq4zP7OKtwnN+qIOMm//8AOl6e5H/At7qWB5/dVjw8BUdIxaUF+e33NdQG6x8IEbMhlGFTGCjv5E0h27D/AbqCBU6PKrkGZowZHtKNtz7nITysa0hpyefM0rQkFHwf4NmR8uSHZ9YoT8VLStTtrF6daHSYlUT45EDXkiSA7NCAX8BIDbZNGxPGNCWR3reZxtQoJ89YPPdQngyqMn7sB1T4sP+euWpnAOOF5VDA2xyM2WtPzuKDZFD0XH5r3AqKf2jl+E1/jSBlhW1Y677WVLTLJm7+lMYYLK6YVaSsKQp10lOdhcNSoNF2iWUwmdCTfkrYIqM6Dz6FiYSrg1TTlOJb7Mg/z54eO6utHzIRFepBTL+pu9qP38Y21NtpUWu//jh0vpniXu1rzGQvuiuoNGIiqYA/dL39cpLB5JIwEVWNsnlHvzRcYQnqg2mhdkFMNZPhZwb3f+BV3GNA/dTziazHEgUN5G0esGl85PlZM7oLrPkXe1mYKh3pVRVHx9bScTQ/KR/Dll0NI1d5ul2SZa80Pmj29voelfMUa5Ml5q4zHzXK6N1E70ujMzWWJB025gLIb3e7aE9eN/5SJegL2ctob8uNQCTSouel6ko+Ykw/pstPL8IYWgsAwrckmzNJHasZi9MB9re639Zf+bDvflpigNboH6Jgzs7us5C2dozH1s5IzGP4XzgeALu8XP/T2coQxhj9xfaAJFrtqWRse9MM9gKIWCBEIzzIPeMa0+S7QAKAd7XRS/oZSDeqUFK2jRkrpbEnUxRErfX6lmHWlaY4CU8XKbSYU13LkuJcyzCm9EN/BU7f5cOwaVwSLMfOQeOx0GwJ5KRF4F30pVQIKfQmXt627TEmrutHr2mIgBLcte+S052JdumcRFMnlNLlmpl/rnOrU0bBeNDtXHQuYCWwfgiyZ47J2OZ+R68v0lA8mSdHFtJ81mbGnYQZn6PnZ/gbKz8uTu5WZE6CQ+n8IY6uvd8B0EYOjaoJK/FTQRjnYe6cBWTQFfmFzH441Ao3vcfKh6co4d5Ec1L9PXQWXidhCv4aJw1G06zgOTIcLCqvE3rbBpYOFUOmKlQbBmaIiKWqG+Xqk34jbQgzfHmcFO96sqh6B64/OzjPdjQupzCTM9hBNwSUABWoOAb9Yn0wtCUU5tRMTXf2DessFKbm5Jygvbh7KrBIQX3SGLQ1sHY+MYVbDpRTyi6/cATCCSWcekyT08mEh52KDKbrTR4CFdu2B7wsIqKxoiW4XiHOOc7DGtgVaCXgoce0nd9YXrtXbIjriMddx7wo/A5xvQbTOyaBuL/j3893Ny6eU10c18p8tZCzdBO1VOWH+R+8TkdvhkA995xzrdvjw7RoSdO7eqdyiOqkHBJGAp+OVSMWf0+/kHKRQf3LTT+CcwYN+7mx+Qz6Uw6Squ6/9JsxsEfIQ3VRsa84hUjcmmKf4QTpzy54RIteqPZc0kNQPobpKmvyWUUjldV0jgYi98XfErrdLQF3gyU/TG0kOsEPjuskIHoLEEka+nGXOjbtxj7HZe7onJ54kIluMkHeKfLWOMoZ2Qx9tqYMoGtbvLf6RrKh7METcaenirAS0waZfYWbIKS/XQQnlG0kWmK2VbUtKpKwAkjlEFEkYo8NtYRTqB1gYp7iyOhOcYT8Hdd6y+276P+sF+FuuXBAd1WJ8GWosOGcBOSMlvbxOyuaa58K10CUcBu3UNYMXfbifsNunrPPaJClyHK279gtweail/SVEc9XoyUh2uP/sL2eU3edeOBnscRj+0TXCkr+8auzW2BlMHrzDniQBXnFQelm94yDB4Ue3BfqKlkPmfC9QO+X/Jsjl6RtIQ6kqvwz9ZQ9uzFi4ZS5xd0I/IBp621GEXFkqIZhx13ohoiGa1KlhXS1AkDSRptzy7DlkW/ZDR3rh4WKGYsIF7/09WGtSPzicF8E3Mc9BS1OBksTuDuC1ayo6o0qxgEED0s3tNKE4GMQ5Kr9glfvoTbkMtgJst2R+Tq0/HozNCp5Dr4cqTcOZwOTtyPtZbdmzmdfT66mkdC4P1e8JPGugtHv+5HC8u0PSyBQGEewIo7g417mxC/5mf84Cp+1a/TLTe5mb4xqycaUexYM8+jLy4YdStpvR0NuTcx3ZzTwsi357S3NfACfLnU2BnD5WyvID9Y3uNd7Mawa4b+631WfuMdFWBOa3qQYifzdnzo98CpkpatCn5HSse87LqTxZ8Cm8ziu42g/uKcHuvGJXDzcFSD4wk0qclvpcdrSfhRZfU9H/YFK4JuW6q9aAvL24DgdD9mBDI2Gz94xFwu7u9iMivTQXEC5vgHD2lvdH9XtnpHxElqTBN4whFTujk9ZhjcEY50ntoaplQOs0N3S9XhQhLMjNz+g6CvY77jTq+3pdoGffuoecbD/hOWZqebdqaC5Oa7ytnH/YY2J6L3tCTaFloqNOetWvre3uaz5aNh4i6F4f4Z4CkTWGksHPcKdukMQDMNb0gm+JiWt9Wa2bHhQ1KmK+XQHZEIEM6GAhzIDCk0kMeKiyyE3zOwIJomqjHZVb5O4GmpJ1oONZzBSyvdBusaRYl1r8MT5BWgh0f8l34wc5pMxmvZUT11hZPDzawPfKLYCqHDAPvAEOR7JDkOBb3X8ILMRUIGslzzu17y0gP9qiOOuwadoyTcTHxvPJaEc6lQYn3j9E44C3TxDGpNOHl9rgT0EkRT4o2QNLNXXAoKPl2lFw/8goob9s73dMqtzeRwVVJdoC9kGv7TBzDJcs6yIXMM9EvExeuotANi99JdL4xLUZiRrtcv3+fJnIsJPdgczGYV/9ScODFIsa8N3fNFiIOe9b+5gPDwutGVYoSf2Fs+mzsbrxLv7/D+7vRAQxlya9WCvWtw8YjkTaBTEX+y8FUOHtHDBczu4XXEHaznZ1chnV/Pb5FkX78BiEO86ai1dB6v5+F2J/MLdEWhqEvEW8QYAPB6AYwfdEeVZX5igCF17mqbCqS/sg3z/hdW0iLSnjVeYqHXwTHbuFWM/c0MLCddnqvO49vZacWzXHk86wRyghbQTJUx3HUa/mJDGACZysvHLGzv2qjmlsKviokYLWA/Wsg2G1UV3eAmVq7VXt9s3v8nFvTRyqeWeHIkBpw45NFOR/H1sUjWAklBWOdiT/db0y6SOCvaTxVWqnk/6nL+/7vhhF3Zp9HrImt8+lk2vpeAS12YD8mHS/LJPWY+nLBWu1t0yI4aca70gJsBGJI5NvZbDGGe6f5SGfxbVHCr5NS/cBOUMOo+Oh87/IYv2XGZPwvD+7S9b84VnZVXdj9lQh0Et+v+zbaRkB4lquJMoGnF5UwcLtV0/RQybThfIpOYjNMs1LuW/6jPS6PCKlxeUGNwDvlKDCQlDhZkAQ1PPVPMlhA7QlMceaSYXnRLzI+IHJBQb6freSwWF6zBHYFI9H39CxxUUjIiR5sv5ViOi8tO5RgHtF3bsj3i8yQS43SdFTe0C4cxIuBuQMuSz7laE8/gZl3yGo7Wjgy/3RknSjla2sUt0d6PLQ2QQndxcWHKCNt19i6sYTttLqrywCHrjSyYwEBlWEC2nioEDONieaFc3iticbgSD/a5xzW9aefnQVFZWCRWkP0wVtBkf/tGtHl9PXau4+TV66rTq5X9aY3jEeU83OCnsuY5zBHFm3S5blMlvA+ebCcEWhyHDVwLfI7FAQ7fmcz3xO9cQf0waI6CK70yV+poRFAKDiCD1HELm6ij1KR/y2uWPF3LZ5P3pMGTr2W5hnC7Kvh+yqGvaID2L1athALmORgJHv1CDQzx0AzxfGMvUkgtQq8bCdjf0XvX1H4SKiPylc/2AwFM1PwS8eR429YnIMwJ6yyAQ68u5VyEGaFMdyrXX3I/vYStWcuUBrsN4oheWxIcNVKO1fFC0f6O0N5bRf8Kjyz9siRZK3z+vsU/zD1l6ShheQdoDeiXQKYgv91C7X3dJEx7fo60lRHVurySIUq1J5omLBMSl8b8F7Eqw1jTmZlVvSHcgzulhNYbv88MA1reVj6RQOfRA8LfaNID/RA89xAPYuEadd92uAjbQqExObqj5ELcNmhqOX/JrB+hn2aef3pWzSJmy98C9FdJuvF2l2XnZ5sDS25I9hnuCRAHeyHoAk4/VfjqEIjTN8BG1b0sTjSwJFBlHJCwBsKaaJviwXl5qynN1Z2f0IjoZ4gzwl9QDtcZDqYxk+qxbWDFqc9Nz/dhFLjGYTpX8VNEedNaa4/c/wTOpq7KioMEzASNlfwoIk9Ha6Xpph4PDoumFoeE6ONFEHNK3LgPDzEDfjj8HykTkq/VZIA7uN4BaaGFAi5Ah66FuVFFT7Mp9vUMvCfSH/Wdx/AYijS5WNBULlDpLJeLQ79oJfZ1ItrBOfD7oBSt5hIK7qoVM2aCMXwdOVSE6M34SJfgMPC9MCfcJudvQjDvYX31ZA42ZGGDgD4Iab75KMOXMdOR4aqlxCTb6FoLqqahzFTh6bMWtHEdqCz4uTVeHcH/FGUC/2j1BQE5FEKg3EIKl0uja5ztpSZa+3e59cmOHAPcyhlYE9ov+tU6GVzThHqBGs9Wd4zw6oNMvBt+YbbepNJotoU7YtuST1Z5mZIjpJaD+kDHqmmLyDYxlpWaHJFsPETkRsGj1Ko6lzgz1NYVMuejwOw2EwUtWQ+YKy7c3Y54dVk0hWD8oRaqOo8HNQ9YKURUjeIXXZ8OGst6WE5KtvoV/ga8VZQ8gE8SRc/XEWdXGrdDKc8tMxnVN03pSJQGIYquLQGU7QwUUftlJ6MYA8jgQFpGcW0FVBmsxl03zyxSL+FemGrtEoVwAOlfAiLaHuLV2QZ84j+dJAoWjdOFIF+uXwOzyeQNMPTwFg+ivSAkE9D23HFQJOnC34NYENFHBLCZfK+oICubzmXnFKHbLJrlNvlvbCONp+LiFK2iXMda3p8oGojI5o/92vlxF4mn5ZH4JZ8jRX6Xalj18Cw6H6j8UzO6w4cI5OV0RvFEKOwKmGvN/W7OvdHPMBMmg1oxFhAX6p8KdyULTdU+1C4JkX7mBND+Y5mjLv4/M3GIzyEcwyL6sxVTz0aqkKSCltyedUU/g9JmiuEp11d2Pk0skRo1o/gqPdJ5lbVG/fJXGcvxG6sIhAGcCOLIjHG873yWf2rJY7RRWk0W8lX5IjgvmDIWY9Tf8W8dNUWoRTbJ8IzAqL9YtYyOKDt4W8fdXKSRP+cljxQhmHmXTzyJ9mQkGpy0TWsf7VE96ki5aAhbRikjQ5mYN6xLyiLC1YKz8c/tZOb0bPH897bhFgjRHOtfzRbRm9p/Sqk4AMsStChqcVkZDM2bz3WOjNpBLI0/K8OCd+PDT+xg9ehjzBcM2WNjspKmch9rK6T58YRulEmbQbc9QT1+A2lPTnb2aXccptRrP+CwkQ2bsT/OMbUnE3NHvw0/G5Z3pSU0Qy6L10+lJ8SXzFGf4XTPoLuK+fNKj05IWFxJiHINtjo3WbwLdKZp8Kd97X+TW+z7XpP2qKqaRMfeYwzoc56y7w1NnOGzH48qicaC+DXipszT5mYmW6e1bxjwqNpo+E1JmXZQR/LeFi84XEGUYNxaaAciQfRX/6jO4b81TmdvWjyADWHwMonDXXHjO4YoSbh1M6pRKR2Psuw066/O/WvJh+WrIhlsJC6D9W2HtDK8gIU2F8SrpXOxd3hlntVFYsMo37s6kPAtFm2hu+eWN+NtX9/EO8psgAdiXvMNczCSFxV9cdEEXfDHHbQBmH/g+XilwtXYcjoZas9LqLS4xBSU4vLMnCqrtQ0qauh2g52wDFz6mAj7Z6OydXcVDwjK4QD2P2zfAYsfOqIhhg7xEzDJoumTy+eRbkGbFHraOet+LF5N8lKKplstYqiVamzJ56geEsZ6QP1NYv/KXdKk+OjtRC/KdoOZjrBXsoR8/CS8Az6JV/DyGqbTkwlo9gA5hnKaVKtRy9q7uNASl9asjj82WN/0VYIhMfLoR1CbW+vUrOSbAh/ilqbcq3HJ8c5+E2HuhKIbYRJRMQrfJrxKk7xKTRAgeSbA5dRzQACm31Ch2FSvoS5KnIpYXyqm4828lGGNApJiZ1aU0Q2mLUI/ZHAHrzMacshZtckhWG9n9MKIcDc8ld0gl7Tl5QFMOswgHvWyzuEqgTnuBxJqfhTprv6tbLJ4xcpNz2/v4fHE743YuVN5/lJG0SEfwUUq53MtXUqII9PRcjnTAN4TT3Y+cz6QWaW/l/tW0uSvniLha36gw3WlfA5qWdBuwE2uR0XMyYXE5d7WEkHUnAYzzJsRqrvhkqNwQO0V1jF14ApnUltMxqK3pbyWO3tw1o5+PIjcvKFeOFYCUucRa2lS0h4peA8FdiOcMkUabgHdtsAJuUrlxa+Vi39Y6PVg24XRyupLFIy80QmIF5H4GUY/aW5Ig687karDPyHVnr9M6PEJ3q3acV4yKwZSMBvlxqlvUFYgLm8NELucYtQvyI7CYRDl6LvSpdro+FK9IJSaOLXFghk90IlcJz4Ic74UY8a8+l+8tQKEjhVzFeYbLvrHGTv5A0OAs43fxIxAe5q/iqRFZUAXE+h0PUfky5af3xo/7zZXGhnzfz1Um8L58WUa5hTavUhbD0+zRqiajkJ7nyqIKj5b6nRTzHwG+lr7bxs5P5SPYycAoDdEqjT3TUqY3dz2tONxBh1lU7WX3BTxfO/WSqi0Zz+sEAOrvGu8io4SmIM4/Ka5RTXQscbG1I04g28x0fTm6KSXDFhAcNsNw0Mw8o2u5Lxa42szqPdapNqo6lrOP2N6RQ0pzOUJ6d/f/4Yqt1/r6XtoTqCPE70IwyZvaAWjqTX1XoLmvQ4uajXSpxDA84kZ1fFNd96Y892wh4ygX6RMg6vUd67kkRKcrmAckL8UmAklWAJryol61L8fPBt8o32hDuVCE2itZBjVn/4vEZVMARe0U7X/NOb6NDdrbP8TCM4g4+XeV7Jej+MnqvdA0c19fSUqxU1fhrSQL4cuNcdPKbdPSyPzptcmrxngxL9Yotv6/Ah2c4kL8dt1m7uQE8cdunn3qMB176itdJQu6lEF3p/gg/kuBO70VtY6gVISN1cNPnv8EiKYKzLhCf89np5f/fCDWOhciRKDwWRzULf3jZvHDJ8cd25p5JA3UppQIqy/8C9g6UrJwmYWZ8f8z0+sGCY25gGwsQs5UREaq9GQKE//vFneh09XAVdDhzDkqspkWjL6RmLDWdIpttc0N5NTdX2DdqR9JVikvEkg9OBHpYxkxYr0RQMp5bphj0ee6KsYcbZ4x06gbJFeGSgKZjuR4EpDJ8yPJXFFxldxmUtsrCMr/z9NA9olxU7+l4OD+dXd0AEAfMtpIK+g98cuLM0HNfslZ5/YgWBxFF2zmKJFunA9bb/agMyUR9AGAVr/HER9lxJEwdbwKtHQy9vwiMF8G+452JLK/t0/j0mvspENFA9z2ZJPL9jFbSRuF34ppQ3mV/E14IZeGP29NIv2uOHOxL1uzKwNydi1YbLIJRDE25zm0Zh/ulUBJWEnMqUfmzDqo1V8qy4VxfXeym4xccedSOiEyyLna/lP08giG6hUmQLxnvzrMHK2AEe+ggm3RGoS8Rown66LX+See1iohZqnbqxISRf6rNBpM45XPvxph3Q3pKcjDvoeq9eaUFSA92VfxpnVBO/tXtiQGBLYuBSZpqxTWd6G4RP/PFdrmUOhVkRsUXBufoj2MKSgNx6Ab+KMUg5qY52yrkYGKt8O6CubJt0/GJnIlCRODd3ZdcuCNaVWx2PN5+LK6Jy4jEFKtw/f+Ub+piXcpBL02TiO1SCI7qU0MznFxbs5CYrYOo5uQe/CaxWIN8Pq57WuPJ4UT+FHcRW6eiVYxa5hQTAf/ai3XsH5xP2LT/CWdWB175xA8uN8iZ6ai3yJysIENsHcRD6bpGEZ6gc+IIFu+JEhm4zMxIhu9CqjscKnyUIIzasUxdo2Ioa6hZaq4exO0dC/5gQbL4vR23nf5/PfxEzggWNQyDhM+UupTXtBIO2yqV6/wotUPibw5rOcqU+Amua0hAt+7RVXHwvfnFVfCo8E6mdD8wv8xSK2i1mElL9KiW/eVZWBRNE8gSBYQ8DpaNF193CPDyWKxPHz3Hg/aehKa5P4GPE7ugkqhjsYVMUo9Pvq7wXrjAs6U8EKDEh9zsRfFyg91RJaRSqSMNaUbuTkqKYq7KalV3WErKQRL6SxCZa3xGwJ8H5t5bYU+J3lCbtQjtDZ8O66PwKPPvyx1zuiiMjQcwv+JNGNIlFraoEgz5MlGkrBEgIRGXZDuS6ZVAa8L8lqE+/en4pHcj6HNlKtriDeosSDduttT+zi45k4bkgXWgO0a8d7gdqZ3UJR29T2KFIOSrm2Eqat9SF4S8lc33+LUUePfo82x/nQilk3+Eu+HhupyjfM5PGq1dglQ4wG/lJYazW0LlJ774pf/fwHYuPGjVC0CgsOjDzN8o2F6koQV+o90KCDPNkmqpGuAx8+43UGbtxxZGt0OpiFwi3tp8JyYExjdfni19OpI6SI48mM4pZCQXpkhvbZnbvD9hHigF+ERZJfzZZRGExPctz5QL8eQNAFI/KuL4DC23teZmSi1RNxU26PZTrfmtXwgciXXMyvm8j2ACq5n3+x4PyKdvh+SAVEvOQpc1SO7JDZf4+1L+fmB31RWMENRock5xOJ6H2UdMncn+nU9plECElvoLRnImET+mfWHT1fAfrR6iA1Yks9UXu3F2KHIc/wAeChopbz8RCkHQGxOQEVSbujBdd/Hjod1X8g4kF4MsefT+gd4n0UGoUgd30zeGmabC7h7W29PhizM8IZvfZbzVFdLPLU5X8s+wmdN65Woyld4B+BVEQ+w1GA4J4K6WVcSki7AeL4Gv6v3DXYBgdHl5aHXI1epDe0MxtdxvyPhHxoO3pHodmCkdJ1udrGu1167EDHXzknCB5r5U9cxI/UFt54Xxr5LPwrfONSxhMj3DqfGLSQQfxf2cSWWFig3jGf2mOfQ+XzH62mfn3Dv0KSS2M12rilop/c5iFK5ApaiFse2g== - </xenc:CipherValue> - </xenc:CipherData> - </xenc:EncryptedData> - </saml2:EncryptedAssertion> -</saml2p:Response> diff --git a/nachrichten-manager/src/test/resources/application-bayern.yaml b/nachrichten-manager/src/test/resources/application-bayern.yaml deleted file mode 100644 index 765940c40..000000000 --- a/nachrichten-manager/src/test/resources/application-bayern.yaml +++ /dev/null @@ -1,15 +0,0 @@ -ozgcloud: - antragraum: - url: https://dev.antragsraum.de/ - entityId: https://antragsraum.ozgcloud.de/ - metadataUri: "classpath:/bayernid/metadata/bayernid-idp-infra.xml" - decryptionPrivateKey: "classpath:/bayernid/bayernid-test-enc.key" - decryptionCertificate: "classpath:/bayernid/bayernid-test-enc.crt" - nachrichten-manager: - url: static://localhost:9091 -grpc: - client: - info-manager: - address: static://localhost:9091 - server: - port: 9092 \ No newline at end of file diff --git a/nachrichten-manager/src/test/resources/application.yaml b/nachrichten-manager/src/test/resources/application.yaml deleted file mode 100644 index e69de29bb..000000000 diff --git a/nachrichten-manager/src/test/resources/bayernid-idp-infra.xml b/nachrichten-manager/src/test/resources/bayernid-idp-infra.xml deleted file mode 100644 index ec1ed7ca7..000000000 --- a/nachrichten-manager/src/test/resources/bayernid-idp-infra.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?><md:EntitiesDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> - <md:EntityDescriptor entityID="https://infra-pre-id.bayernportal.de/idp"> - <md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> - <md:KeyDescriptor use="signing"> - <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> - <ds:X509Data> - <ds:X509Certificate>MIIFbzCCA1egAwIBAgIJAPdFXXarkBN2MA0GCSqGSIb3DQEBCwUAME4xCzAJBgNV - BAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVuMQ0wCwYD - VQQKDARBS0RCMQwwCgYDVQQLDANJRE0wHhcNMjAxMDI3MTMxODQxWhcNMjUxMDI2 - MTMxODQxWjBOMQswCQYDVQQGEwJERTEPMA0GA1UECAwGQmF5ZXJuMREwDwYDVQQH - DAhNdWVuY2hlbjENMAsGA1UECgwEQUtEQjEMMAoGA1UECwwDSURNMIICIjANBgkq - hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzDtWAEdC3J9FD+ti1exRhN1lzNgKWqO2 - gQNdJvlt7KGHA2VGGO7tqRogTuoqi/ydtiHJ8+lhp4kcWqyfv7i9HXOncvcsRRmR - dZjUY2Iui6ozJqD5LVm/vP5YfdP7vQPdbqyyfpoJhf3mbMEtdNDdGRnGIPUfDn+C - Fbo37f9tPwMgf3jgh4gxaujtLIhhr9gevVTEeZAFu9EvzLNd3kEtRb7MuXqIOdu1 - rW8HlGYFwwVLqEyBn8XG0QAIfhMmGjFMG7z+Kco2quwOmmZVzWQfeH/3AlN2KbcP - t7j+pl+6Bew2AAivP7O+95YKORqQjTu3rPWMF4txPId37MSjoytwBRyd5EACTvhQ - BOGrDFKQUOx6fTtRc8+7XGVz8MdQaZQWQXXh1ByU783twNdnRSrSVIyLdjiy1uCb - jvsSAtbzGBygPIvDo3skCNLNFXsChtHIfFFDK20KPGb0ghEDf2q3hDbFG3ZDGGyn - ZmJcZKuZhJqodJ/++sAXADyTJNAPVYDjKCF4ypELp2Eu/p1gaQPJEb74L/ZFZVOE - JFyXIiaqB9J+fcn/biqHHOmcCi8n9aIiNt1fatr1Z4lQRWoGtKaGU0+bzUSH4Bgs - 2EG4u1CI2MKDWqK2aEsHrtu8tbS9LrUmDVKtaEUOeul8xWVa036vp/YUIdiJNZSx - ZG4iTmSOATECAwEAAaNQME4wHQYDVR0OBBYEFFYeltslkaolOmcINXQeSe7nURwp - MB8GA1UdIwQYMBaAFFYeltslkaolOmcINXQeSe7nURwpMAwGA1UdEwQFMAMBAf8w - DQYJKoZIhvcNAQELBQADggIBAKqAlXoO41SAiycYUOrR90pfwTCysmbtHF5RWSCM - jF2aCG8URJ7bXwC0lBH8E5zCetFZwdqZziQtxzRkIOfhS5uWbH0RDhwuxZG+5RTP - yaHPAZI6e5xHDu8vHl/VbC3lnL/6K8l+Purr/yo8qkJqrPgThZRL9jBQyYRhDSsJ - UyIw5zcKKUQC/JWtMQAQcopbjekCs6xDT1HqIN90Sc/gOfYjNo0dGMNmro9mxcw8 - 2Iow18KNVdtEexfD+/6x4NPD61pzuQEe09TR+Cv3XyzBoGQ/2arijcPnGvth79ff - VFtRSf3fSs7wEKV9g3mEWXFDtPBhDj6K0kKU/kJfEZixkXl92MY+bmugrtTIrazj - tfrgMglIAHu9XCYWd/gef0J+PNfHsxgbTEr3XSC+5/xoFKPQSw3PgV8lkUDq4mJU - Ky/q4YmA37XQxourFR5pWvF03YACdtq6zPjtVeI7Cvkte6k0YW5S3cx9RmPv6YZh - laZ5ERpWNiv6IjokLsvNeemf2PApjO7Q2EDBIoHBYH31wwJSsyRDrSVmbaqLFI15 - fLXeh2A4YbaBDZdGvDiLOAk+dG1wdZ2aGw/uNBzMtc8VeKqI1HPcqIluBA3uUPpy - LLA+9hDPf6Pp4j0gkXxBikz+/h22bFxE1HmDiOSkEn+2NmOHuEFeA+D8jsCAL5VJ - 3emK</ds:X509Certificate> - </ds:X509Data> - </ds:KeyInfo> - </md:KeyDescriptor> - <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat> - <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://infra-pre-id.bayernportal.de/idp/profile/SAML2/POST/SSO"/> - <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://infra-pre-id.bayernportal.de/idp/profile/SAML2/Redirect/SSO"/> - </md:IDPSSODescriptor> - </md:EntityDescriptor> -</md:EntitiesDescriptor> \ No newline at end of file diff --git a/nachrichten-manager/src/test/resources/bayernid.p12 b/nachrichten-manager/src/test/resources/bayernid.p12 deleted file mode 100644 index fa82ce9007cc50831496073cdb03d8b6a92b5ee4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6349 zcmXqLk~qo4$ZXIg(Zt57)#lOmotKfFaY2(rF-wy~zCn{jwm}o?bQCGp4wfd?7K0|% z27@Nn8a8gIE*>sMrUgwbzYUsLz8h$=alwQcnGK{_M3!p?sR<gE^S*x5W)*a{xogRa zPoJ5X8BQ>;G_jmeShiixahKAKj)Ft)e?79=_3qXt3D&RLZ@=oaCCvRb`x(psV&U~w zFB8wGgx_|`cD(d+-5VWa>zbX$NxpL>R@_P8mWU6%FmqF7Xw9{jyQ@=@o~EBtNnBGq zp>L<qEl=sWbq(j<DOmC|M?Tq=m=%9TXtLs@#5=!S7;B`h9)?W5d8GJ~?D;mSw5GxZ zDbfAuE8agn?`3=M#z%|Q*YZCaCR}D{J7MtUfJUBYGh69I+m$XWkG;26o_d?JYw<4m zV+SvtKM=((|5WjYlKiFO=VISI-q>l1iiW-qwQc`zmA;|Q(d^8;xdr#46;8H2^GOx% zQdOvRR=RLu{turiGqxY*P>yU>w+@K-)ArFg>aECpt%Yu>iW|6_?o4sGvva+j^_u2h z-P+x6R+yPTnO2tneCm9Yq`Sp}t&5k&s_vTn>So%TQ`Oq(QJ?2<2`c1#n7eO7{>Ovg zimrXTayH0(HS?c9S9#3@Hs@)AOT=9Qd~P+F_ZiG=eLpwug6fx3wXv0lR$2L#_moW3 ziR9h5aN)Po-hUV073bSkFXG$bUtsR%G2yF-y#0#6;CVNne4O5Y>!$bYuiw{k+}UFL zP=CU)-UPm{t4ca!-%QGCE;0A0{k162Ddp>~U#6dUCyK1x6mgPg($?i2M|lgXirLz% z5Bb|S-{w9P`~D?Yf%lbYo2S+*3)j2y3hDZDs?XmOAC#lFCiIq*?xd%c=CV^Z_;_z< zNW04CAFRA<`}}r>%G)RH_uaLh&hhx)O`R3XB(KloQhcW*IJx_z3UhL5$*0mSC6Nbn z_Q(B--2Zer2jjp0d0TJsu=cmrFK+x5uMjdf``c=*Q_Wr64<<9e3JhUAAXdV^^q2Dg z>lUAORwmlNR=y|oTCbJM;kR$a?puwl>O$V19yT3de|GuIk^a&Lk9M+bd-p)7^7p)} z+gfhk{5^f2c(47LrR^uCeSGaAlD9b`E$ZgJfGUB>fh(Cg7aQ=Gtm)E!#?nzR<^0C9 zW&c-iXL;P2#_)K~S%qZ>D_?rM6wBUmxuMlFLm>O)CynQpr<Mhmc5Vz@<$GX9Y|B-( zf{O57S1su?WzQ}z(LN@8`N*OZw|`BoTH+*JW1#10bw{l-OY{%RC9ShrtJu`$9%)Lh z>Zotxoam5#{pX$9#uGkQ`#paOu^ra0-muz7eT{`%?k|gtH?OXX-1@B2%RXvecIQHc zLtmvGv>skxlTpmHCwN-y9Jy+%byhu5ahHB)X<agYpf^j(Gtq3G&!l>njETl`oO?Fp zRymf~Jj>WE+2Ys}BlJ^-FPM9QeciUzdp;J`9NRhZ;r;Mwm6whk)^IrCdpP>EeZ%H} zZ*ouW9bR`@V|8>`VRO){X3g)}D{X@pYM6;mifKRS!Y{S;jOH)q7x@bxhT9&GGA+BP zHqEB&Ku?p1){niMExXsrE}bAHF_ZIV1nX3eFD55{IQr+$-u5+IE<8JZ)$~Ps>t6q1 z=$p9zxae;!%WzJ!^s4&6U7Hv8a=fkb_;l-`XhiD11YQo+4-e+8^J0n66pmW^_~pTW zxvjJLzGNt@icxpJFf*_vzDR#ld(j&)wi(y%9XNZYTX%Zt$u0MD8;?58aJ(^LO7fI@ z)4nHuE}nA!#-)m*53T$i_V*Ol-7K(R@X?fR|DAop;M7)S_PMXNE}pTJ{rvTIvHW0L zN%<_pJOgETQOPN4D8?d^mXZ{6)?QWkq*<0hWbmGE=3?8*4crlmL=3IuEEwDwf*1lA ztQZs+Tp0ow92p`RbQwYzTp5BHLKqYnd>Pysd>P^y{28Jc+!^8-oEdT$@)=4QQVg1e z&cKagXIs!DwAY|XXeSdRgF%zfCWH(lN_or%Dvwtmmd>iniA(X>VZ7vH@WB?Dqy5t0 z^0=W%sABoK+(j-&c&a)?UWLxuvOAztC!)Cg^wEa}H_ug1C@-Amx`K6$++X?KSBr)3 zDZbN<=F^c?xcm6P)vb%Zf4)}Czjvy7nb}5VsmI!kbLAfzybb9t52}{_P%PYMe{5~k z{M;ms8@7&J+;^{klTP-zB&Dq(*8kexd)cjnlWLAQO#R0G{M6xptJj{@(3v#vdyt~X z;{%LaTlFp-y7{Cx=n3P`gAu2Wy|38jb=g;_#N|oJO=jhYBVm*F>=a?x#kTi(;hWI# zEFZ~$v&;1NMT<7)_bB`n;PY!`oq6_`ebR+XXSQ#;I>$NipjCo?i^TO=K5yrK+oZkQ z)x|SZ<;SJX?Sb`C6V4{azAoR$Gu_eEY7hI1ipif2uM9kXJHvpn>|X9FX34nXLzX|y z_}-fcxf&?fmYm%`>C0+vgFx%W!J$|4Y&?C>mYAl5)V>amkI=2#w0_Q(OLfK9dFDz@ zNo?_WA0K98%W`qUr_b@Z(-ys%Q+)o(gn~0G+m`6p@hwl={^aY*oRC*pmzJHkIW2OK zap#Ady>W*vTI)7%`tW)F?tt}&H(XEO`t`tsC09D7dBk<JEqsjGA4JIg*s;HKms`5M z)0Ii4K^$s3&QA@W`LOv`deWP=kSQf*EKh5icCbE^V%f%fM?7ze6?32@oAmM*sl1<l zKl#Sk^vpYQ|Mj~0%*!TbrMHFEl-N%?`}W_7<{rkgtHLKfS9Y4_XBj3oKc-UZO1gcc zd&HVOiwr`HID9NqBo8xHIzEY$OlrOIH(<`ZKY?3UPPO;0RSh=r+id+?-6+_2v#E-j zNrV4}Y_FFUd23u)lAo$(uy_ZCPDwa%B)Rv@Wu5}3``P#9O|%>Ke!JY(vvb3>Rnu*J zKkQch7p<mzq-J|lZ}LY=MP<v3#5cPRD1;p<FgyNs3+o2krYW7ATMo9q5k4Pm*teqM zsoh@1kFn(kS{B`3!mn5RvGCgkA9o$`<~7;tJ#4IhbUi+qzu}(i!T4Oi2P`>X1w}VK z7v8mcjb8l4cMpvk8h7*MNluL7vR^vi-@U*h^wd@t=X-pTJH#DkEuNox+V<%Su?zE* zU)`ymA#J(-i1_!JOQu~oU3D)kooU5dEtSP)oG({o&n~vP#aSP{+vS*7$8(FRdqNJp zd4KvBQ(L&d@T|Vzm4%k7e79~c?sPTkYdiAsW$a^*Yd*&`5*RA?+-Zw)+q(F=0q5J- zs%-zRsI+8F{k}au<IBy@$0Vg!%vSna@H8U*)3IoYzn=x}3QuQ?+dijHU9(Z@q;J|y z9*-~Ge-~KmYdv}B7RT%Jsd~XxkpnAEUHiG-@6U~Iz4I1ioH%#NEdGPQi=<`xE56;{ zr|?>ESx(<_jaPLywm7UP{Ov2T<9^&K_vcP;eH3PX5MI{!>!!q$Ltp<~y?P|!FW=%~ zJ=W+jowetp+b>oA;tvSSdSSZKLzpckv_UuI%8bIm%_<Fnp1ZSab03%;yDJ;w<h^12 zy+a)_rc=_m_$-@d|6a~2SMHEL|De+ISGz-76BCyQu>R-eK9w=`;G@fTe~4@OYM*Nq zkl`q>m{#zs=T5lM|Ic#K&%Uf)W7lbXOXS?UJ#E~Z?PjlHsCa5u+7{<qYxeHu1)(J~ z-j(QnTF;#4?Xly{x(g5b3Kh9#c>cL?@tJJ=YPHRi{h#jQUtKKd!6Xp<rsTBI*QjHM zR_19${JVYJaK_CiyL;tt8~$C)+4irwhQDXAs7asvE|qkV2Rb|UMJ!G<lQs;S_q5#D zTvm5Vm}kzX{gb8^n1oss2B)WQUGgqq!P3<_?<N)`UVL^j^Gtz#y{Zde>(&L#cV(u$ zTDsuCkB*kAotb%tWq0lGrigP#SLLxSbGRv5K4F^K`AyP?z7|w(n_^e+-CNam>7w|6 z)dh1d@>u3*E>KQc5nnUc@iN=Q@7JDP(n{o3^fgfAest66Sm~wCNwZIh>TESBsb60D z;=Wvn@B@Bs#gh+jO`CheFSq^Dgv!JRtXI>wK3&LtKVQ!62JfCCgM*v1Yi7IH$lEOq z)Xw>^W8sn`doC_i{B&otc}c{ttcE|w-5xF0YiV|FQ4#OFQ+&aRGi{^Uan(Zt-(ufM za5MO%W!6h<a^to+Z+6&9<NurxzvX5&`~M3Tf9~mM&x~;TvqVSANAe_Z_5NS)INP!= zzcbqMJHY%;LGSJD1|c=kw#;JE36}m*ks{XnrDmV{vdv)8wtcPa9+MWG&z-x6Csyd( ziO9acA!@u;t8e+|z6d<=x9a_Jlg@{Rn`eIiY^zor{renqKvLEAhEKJXDQu5_sEe_` zww|)8N@YrMw<Sw&+y$%aOCleg2;Z)>@z%aro7+V-l}neoITkMqndr;@`k0%4uFO0p zJ^lHAxa`svUOc7g-W0^UEbR&hTjVXj>5?D0i_{Jnu9mb_vM#FZy}`tL>!;2+0r$8+ z+YLYb46NDbt-OE9i$w=7p7r^?!$@!InrAt2;mjKv|0upZUuO5-$i%Xn;eXxKf{k__ zo934M%1gQT^6f?=pIxcB5`SecWNuHs9=>qfOWtP_%wu+Xrbu$<?QRfeR#=p@!pHc~ zfnPQ2kNcedbztst(_;yzPkDQNNr|%eEcmIpEK_?^&!S0x3NAj%w5xaJ-?#nQx?GFr z0TQ$BZD18(N|wp-pJ#FA?%Uges@m6iZfdg6tWRn@V0Ghyd~5Fl<qt<M+)EcfnKoxj zv_jBHL+;h0i`g&!R;)fB9(QW#%G{ELsc|8*KXdS;%A0*rmF0UVQa0aOGqiK(fdaO( z+pX(m&ez6lDW0apxg?>u=XA@o%R!O4C7+okXTN6kW9{NpztT3<!OeBDUZC%ztvLew z|FwEv?y8tHVKH~dUV(|fYyRuJR55jvk?RtVVEeL+ot5p@6~RTTw~9Rv)%wcQG&8sR zK>NX0SN^LxNo!rMZOr($t5WvUqB;5t4@p=ptNL#4)6ce*H8jFu%`?M2>u%&UPEuJM zeP&w63&uH&*Yf{x9C^B>!#aum#>^>Sk9tPCm@m4c)_#w-V7VU0_9>GjzPHpTnJF<W z`@3LSW3KUMTb}YOh2^^?fBXq;kovTj^X_RiOWw3t-FH1lO}3dtPZB?MyY*ELhZDmy z*)|Iv;mff}{TIr<b!9xX3Ve8=WrfHyiR1lDUp6-wztY~Uo2RQRx9=6tp&8m6r*Yl$ z-8<vz;_FY}S?1};JhX6D{yuHHPtx%ifk|PfXK3s@roV4WXMu6q3ZZu|Ju~ud9(@#_ z=%TATr=-#%-tMNrV~g{5Z29>9a$K1a^?Od_rQ0cy_iJC?x0ekG+4q~TaT9~YC5_!% znS}c`F4*XpASzX8CRALO5E3kDWcun!@ZX!^$*cTt#xDJHU+cW8OYI8_y-&F_H1iD; zeBNu^SP=Q*Q}2xHzSA{o9C+G_iZypE-0>|lzT^AbzpJ|yZp|wA%d|gDC-u;~D+W~y zl79b7a4-L4&3EqcVW*-irA&POPi-%pySUM!Qab76lCbdo&o4`>3S4vEk}h-bLS=c< z@{Rj9N2dlSoozWc=Xi6i>G>As-fven-|AtOGQSfc`9>ym=bXbbKQu!m3v*dgtj>OU zmhEG6Hu4YCp}&8-H!S>PU*z$xjnA>}cJ!&8JyCUEJYyGVomu*K|BI~qag&!fs+9-r zta8wJTbQutUisv{Blkjn%D>b;Hk);I-s;;NCps?*+%4j;usH8_tLf^cIXBpTC^D^_ ztF+3?y8fQI(rl*Bc6?dW{nvXu>C@`dI2PV<?4-z6^|-RV(|*|HTe++?4>wA?{_2_g zhbM>bzD&AsYo6HTwKJ_I|1xa3bV$?g|I0Ii%=5QY@0==jiMve8WWnsfPX=Guw6{cu z>$o3gTPppE!NLF0h1;?J&t!hQ-I*|<^Zf&TGw&CX%1o6rJw2tYyjTBt{qcgWXRX6p zFQH4P|6l7|nQDGxLU;$)Y@3UQB_Ais|I@tS9eh7%^<|-IrG0-NIVN2{-?Cp`wdhS} z?agc@Yi*%jk;_vp4$s^6@WZK#4-d>#J}B|L=jE}(mpI#1&w9l?U}f0)_yAMY*8ffG zf2_YJdN0<xyU9T6s)p-?klzy(Y(=<)xYy6~jCr+w<CC2M-&d=vneA=rQeb&8EyE_` z*2D>`r3$UOr4wg%PCfqBLGih__36^8Id?gqUXLs<6AGHqp?`Oh!>znizkj*xz9hP| ztZ{~NmEpP@$8rl3-X7hPeN5NPaZSIcS^J_K$;T2ZKPGhXuf1QUy8GlVW?8+<MM}2r z0*_bzS)Ja=SLAmmPu$t->kO^)FD=(<3#xW<99*KC`QG&UQ=RD2e{<rGa}=Knd?a!? z+fyKg|6rlkncaeCHnDBkxc86#Wnq5p^d$$?-8X*oD3w1fr+Zvn<feyH#Wn}A&q3Et z*1N9U{JU8&gm-;Gt^G6Cdq1u!HUx@!o+@7_ep4-`a6;gkL&fTU3JMSR2>v~@_e)a5 zp~cpFHd;7MJiPDvY;&u~NfI5c2W{VdoW1GroF4}Nywr1L{_Hk=^<+tRU=s7D*I^oY zIoFk^`P~&@x$~eZF}TO}{>4X`oGaE^=aw&$f9lJ%X_MRGzQ1R#ZvPY@Q1JOtz2w_j zkIqc95@F_;dnj`L{7?K#PDrcRxTl;pnUnOUT~+mMBkRe>*A5!Be2M+O(NQ(v^rzGh zHlgebjE#28|9*6(+Rg=z0tR9UACK)?V^n{*d4jy{tLqWx=32yRT&gv=!nNYqu9c51 zSq1sGvuB<V4XwHRv#BO=*YZF0(vjXr4XgJ)W;d-3Zam8TTh;33=^xpF2g|I!-Trbb zeEB7{ohj4#;>;puuGM6}8un0Sj!A;Z-`#9MNlGP_|0Sz9;(4X&)twK^BuqYcV#QOv zkf}%HHMjVmec^aRg7dSPa8BvPXKIt$xqP<Ogew)O>G-ZMC@|8<JhXlJ`Ig2QK^exh zMJvx%U4L8gIn`|P+3@)?7e5L7zj*ofia*_RxBt9ev6Zdr`x&)K&ZQ>WLg}?8TK|tN zuQ|=~Ch5h3%Elj2ev86IcCf7#v1y;+_b}Jw_vv<3sjWVoC%<0O*n0e&^t$+YVq9F? zJ7?@nUfHIae&~s+?{SaqI<=L4MM@ks%SsovcPCe#nJc}f_d^0>s*kw=_oU)y9||x2 zx!P_}=D9D7_3*kw>ttIa4+_s*b8zd~uQwNSf4y9mwDQL49Y<PAw&j~A-kPYo&E2_? z$JFHB490#ImWP2ejv6f!zkH_hlZwzu`*Z0YGq3MdElSxavXC?U-{t9DtJ-hReSXW< zJbzu}Y?DLp8eR&r{@X4vzxDc82e*5kMU!%B)C-SkoBi3pTH?*UON)gsU5N=zzjim! z-SCJ@_8P@09=AK@#Yk|?czsMHPjIP(o9&|7+QLI^k6T{|UFmncm@846aIS88u+PQC z*=$#gj3+OOJYewW$iaL=!!7~I5{o8{wcpihr50`wo3T6k(c8Yba0Z5lv*w)JceR0E zS~a|V=L!F|bMba_ymp;ld|#&jtD4!S8S^gJy=3D%!tv&#wAr~mSB>vab601VV6MN+ z#Nqsy`+e`VqlOGC^=rG=mi|>_KYT%c@sALdlXg-Hm#hB<PJOrXjIoY5%hJ+vY1_R0 zVecc3sqyCpTy&W({9(tgEdJs}3$Aq3`&>NsTj%7o<aM9lTiMUr&#uIfmEE^3!JGA) zsg1{XyY*lACLecM>$cm?p0jtZ_*{*qdalHe<xAe1nx&WCSLB-LrgmpfK`rOq?GfMP z{8I1nPq4chp`v(asn65)1->3lOo@IryeAg$u{8aAGU<Lneg6~#K90MMHsLxC&-7hL znm*s;X}8rWqXn9a6fV7uIxb$8JxO<}grzK_+!lc&u5T@8Ds*S8nIyr>qI7*{-`OWg zeX^-c8PAt_>MRa=x#0Hy^&eDO8+oG~*R?sxKb3!ZrS*Epu?6?MISQP`+SZ?t(E0JF zBk9(WH-`6wio%P6{2h*e_i;aet2rXc&CK#~%lb26D+SpWOlLARD`%X^xkP?_#P7EK zkM<UNt@t12{O`oowK1uSr2N+2O^H_xS2#Ake{byeEnCm++Om6ot_Y*&x=pKs#cSW1 zSM5KXX8f)5;?c7CQ@9^8Pit|A*Di0buXo(CRb%qZJO5{HwLX}~7*KJP<B#c$`+-pr zC4Zt+Cx$xp<}BQ>D|1mom!j2gRZ*KSN3Za2>HM)&-}CXOxFz~$OO{<SY7DArTCrm7 zq2QHnyUYG<7U=l&P>NqeSx%}@KXqcEpi$Rt`}ybM*q!(6wVb1{&+d#J({-c7it8u0 zaH>2go++54a4nc4I*Enh*#omU$ql;u(}nKO>74Fxo2T#F+kA$O25$Kxr(V(Xr!H}s zrHLGK|9@lhdg~O^$!`_J(*M*QnJfBx_iD3V*$K}|%+e-n%v-f=Yh3y=iBE1k3)^Qs z(XTz~d0vf4zroUTwvTT6%89%I=e9^$b1cobQ*!z-^)&BH?ebk#Yi>Wz{vi?An&_7z zWMF5YXu!$Fs?EpDB*n_WBC_|=0)w=*Udx@*zi=q&e4pVM_P~!t#D|Ml<;OLVKJ|B3 Tvzv}ZT5L>J)@Nd7oWKA8<KO^t diff --git a/nachrichten-manager/src/test/resources/junit-platform.properties b/nachrichten-manager/src/test/resources/junit-platform.properties deleted file mode 100644 index 1cebb76d5..000000000 --- a/nachrichten-manager/src/test/resources/junit-platform.properties +++ /dev/null @@ -1 +0,0 @@ -junit.jupiter.extensions.autodetection.enabled = true \ No newline at end of file diff --git a/nachrichten-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/nachrichten-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker deleted file mode 100644 index ca6ee9cea..000000000 --- a/nachrichten-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +++ /dev/null @@ -1 +0,0 @@ -mock-maker-inline \ No newline at end of file diff --git a/notification-manager/pom.xml b/notification-manager/pom.xml index 2820255a9..66b146e4d 100644 --- a/notification-manager/pom.xml +++ b/notification-manager/pom.xml @@ -41,6 +41,7 @@ <properties> <user-manager-interface.version>2.0.0</user-manager-interface.version> <ozgcloud.license.version>1.6.0</ozgcloud.license.version> + <nachrichten-manager.version>2.7.0-SNAPSHOT</nachrichten-manager.version> </properties> <dependencies> @@ -49,6 +50,11 @@ <artifactId>vorgang-manager-interface</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>de.ozgcloud.nachrichten</groupId> + <artifactId>nachrichten-manager-interface</artifactId> + <version>${nachrichten-manager.version}</version> + </dependency> <dependency> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-utils</artifactId> @@ -87,11 +93,11 @@ <groupId>net.devh</groupId> <artifactId>grpc-client-spring-boot-starter</artifactId> </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-devtools</artifactId> - <scope>runtime</scope> - </dependency> + <!-- <dependency>--> + <!-- <groupId>org.springframework.boot</groupId>--> + <!-- <artifactId>spring-boot-devtools</artifactId>--> + <!-- <scope>runtime</scope>--> + <!-- </dependency>--> <!-- tools --> <dependency> diff --git a/pom.xml b/pom.xml index a1a8be566..4283b4128 100644 --- a/pom.xml +++ b/pom.xml @@ -41,7 +41,6 @@ <modules> <module>vorgang-manager-interface</module> <module>vorgang-manager-server</module> - <module>nachrichten-manager</module> <module>vorgang-manager-utils</module> <module>notification-manager</module> <module>vorgang-manager-command</module> diff --git a/vorgang-manager-interface/src/main/protobuf/antragraum.model.proto b/vorgang-manager-interface/src/main/protobuf/antragraum.model.proto deleted file mode 100644 index 062c92b7c..000000000 --- a/vorgang-manager-interface/src/main/protobuf/antragraum.model.proto +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -syntax = "proto3"; - -package de.ozgcloud.nachrichten.antragraum; - -import "postfach.model.proto"; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.antragraum"; -option java_outer_classname = "AntragraumModelProto"; - -message GrpcFindRueckfragenRequest { - string samlToken = 1; - string postfachId = 2; -} - -message GrpcFindRueckfragenResponse { - repeated GrpcRueckfrage rueckfrage = 1; -} - -message GrpcRueckfrage { - string id = 1; - string vorgangId = 2; - string vorgangName = 3; - string sentAt = 4; - string answeredAt = 5; - string status = 6; - string text = 7; - repeated string attachmentFileId = 8; - repeated GrpcRueckfrageAnswer answers = 9; -} - -message GrpcSendRueckfrageAnswerRequest { - string samlToken = 1; - GrpcRueckfrageAnswer answer = 2; -} - -message GrpcRueckfrageAnswer { - string rueckfrageId = 1; - string answerText = 2; - repeated string attachmentFileId = 3; -} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/antragraum.proto b/vorgang-manager-interface/src/main/protobuf/antragraum.proto deleted file mode 100644 index 0fa6d67df..000000000 --- a/vorgang-manager-interface/src/main/protobuf/antragraum.proto +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -syntax = "proto3"; - -package de.ozgcloud.nachrichten.antragraum; - -import "antragraum.model.proto"; -import "command.model.proto"; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.antragraum"; -option java_outer_classname = "AntragraumProto"; - -service AntragraumService { - rpc FindRueckfragen(GrpcFindRueckfragenRequest) returns (GrpcFindRueckfragenResponse) { - } - - rpc SendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequest) returns (de.ozgcloud.vorgang.grpc.command.GrpcCommand) { - } -} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/email.model.proto b/vorgang-manager-interface/src/main/protobuf/email.model.proto deleted file mode 100644 index 257713683..000000000 --- a/vorgang-manager-interface/src/main/protobuf/email.model.proto +++ /dev/null @@ -1,45 +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. - */ -syntax = "proto3"; - -package de.ozgcloud.nachrichten.email; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.email"; -option java_outer_classname = "EmailModelProto"; - -message GrpcRecipient { - string firstName = 1; - string lastName = 2; - string email = 3; -} - -message GrpcSendEmailRequest { - repeated GrpcRecipient recipients = 1; - string subject = 2; - string body = 3; -} - -message GrpcSendEmailResponse { -} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/email.proto b/vorgang-manager-interface/src/main/protobuf/email.proto deleted file mode 100644 index 2f6eb15bf..000000000 --- a/vorgang-manager-interface/src/main/protobuf/email.proto +++ /dev/null @@ -1,37 +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. - */ -syntax = "proto3"; - -package de.ozgcloud.nachrichten.email; - -import "email.model.proto"; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.email"; -option java_outer_classname = "EmailProto"; - - -service EmailService { - rpc sendEmail(GrpcSendEmailRequest) returns (GrpcSendEmailResponse); -} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/postfach.model.proto b/vorgang-manager-interface/src/main/protobuf/postfach.model.proto deleted file mode 100644 index e87eec8e3..000000000 --- a/vorgang-manager-interface/src/main/protobuf/postfach.model.proto +++ /dev/null @@ -1,140 +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. - */ -syntax = "proto3"; - -package de.ozgcloud.nachrichten.postfach; - -import "callcontext.proto"; -import "vorgang.model.proto"; -import "common.model.proto"; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.postfach"; -option java_outer_classname = "PostfachMailModelProto"; - -message GrpcSendPostfachMailRequest { - de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1; - string commandId = 2; - GrpcPostfachMail mail = 5; -} - -message GrpcSaveNachrichtDraftRequest { - string vorgangId = 1; - GrpcPostfachNachricht nachricht = 2; -} - -message GrpcSaveNachrichtDraftResponse { -} - -message GrpcSendPostfachMailResponse { -} - -message GrpcFindPostfachMailRequest { - de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1; - string nachrichtId = 2; -} - -message GrpcFindPostfachMailResponse { - GrpcPostfachMail nachricht = 1; -} - -message GrpcFindPostfachMailsRequest { - de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1; - string vorgangId = 2; -} - -message GrpcFindPostfachMailsResponse { - repeated GrpcPostfachMail mails = 1; -} - -enum GrpcDirection { - UNDEFINED = 0; - IN = 1; - OUT = 2; -} - -message GrpcPostfachNachricht { - string id = 1; - string createdAt = 2; - de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress postfachAddress = 3; - string subject = 4; - string mailBody = 5; - string replyOption = 6; - repeated string attachment = 7; -} - -message GrpcPostfachMail { - string id = 1; - string vorgangId = 2; - string postfachId = 3 [deprecated = true]; - GrpcPostfachAddress postfachAddress = 14; - string createdAt = 4; - string createdBy = 5; - string sentAt = 6; - bool sentSuccessful = 7; - string messageCode = 8; - GrpcDirection direction = 9; - string subject = 10; - string mailBody = 11; - string replyOption = 12; - repeated string attachment = 13; - GrpcPostfachAddress address = 15; -} - -message GrpcPostfachAddress { - string version = 1; - de.ozgcloud.vorgang.common.GrpcObject identifier = 2; - int32 type = 3; - string serviceKontoType = 4; -} - -message GrpcResendPostfachMailRequest { - de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1; - string commandId = 2; - string postfachMailId = 3; -} - -message GrpcResendPostfachMailResponse { -} - -message GrpcIsPostfachConfiguredRequest { - de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1; -} - -message GrpcIsPostfachConfiguredResponse { - bool isConfigured = 1; -} - -message GrpcGetPostfachConfigRequest { -} - -message GrpcGetPostfachConfigResponse { - bool configured = 1; - repeated GrpcPostfach postfach = 2; -} - -message GrpcPostfach { - string type = 1; - bool replyAllowed = 2; -} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/postfach.proto b/vorgang-manager-interface/src/main/protobuf/postfach.proto deleted file mode 100644 index 13cd376f9..000000000 --- a/vorgang-manager-interface/src/main/protobuf/postfach.proto +++ /dev/null @@ -1,55 +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. - */ -syntax = "proto3"; - -package de.ozgcloud.nachrichten.postfach; - -import "postfach.model.proto"; - -option java_multiple_files = true; -option java_package = "de.ozgcloud.nachrichten.postfach"; -option java_outer_classname = "MailProto"; - -service PostfachService { - rpc SaveNachrichtDraft(GrpcSaveNachrichtDraftRequest) returns (GrpcSaveNachrichtDraftResponse) { - } - - rpc SendPostfachMail(GrpcSendPostfachMailRequest) returns (GrpcSendPostfachMailResponse) { - } - - rpc FindPostfachMail(GrpcFindPostfachMailRequest) returns (GrpcFindPostfachMailResponse) { - } - - rpc FindPostfachMails(GrpcFindPostfachMailsRequest) returns (GrpcFindPostfachMailsResponse) { - } - - rpc ResendPostfachMail(GrpcResendPostfachMailRequest) returns (GrpcResendPostfachMailResponse) { - } - - rpc IsPostfachConfigured(GrpcIsPostfachConfiguredRequest) returns (GrpcIsPostfachConfiguredResponse) { - } - - rpc GetPostfachConfig(GrpcGetPostfachConfigRequest) returns (GrpcGetPostfachConfigResponse) { - } -} \ No newline at end of file diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml index b4e570b95..dc51b60f3 100644 --- a/vorgang-manager-server/pom.xml +++ b/vorgang-manager-server/pom.xml @@ -56,6 +56,7 @@ <bescheid-manager.version>1.10.0</bescheid-manager.version> <processor-manager.version>0.4.0</processor-manager.version> <ozgcloud-starter.version>0.7.0</ozgcloud-starter.version> + <nachrichten-manager.version>2.7.0-SNAPSHOT</nachrichten-manager.version> <zip.version>2.11.1</zip.version> <jsoup.version>1.15.3</jsoup.version> @@ -78,8 +79,13 @@ <dependency> <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>nachrichten-manager</artifactId> - <version>${project.version}</version> + <artifactId>nachrichten-manager-postfach-interface</artifactId> + <version>${nachrichten-manager.version}</version> + </dependency> + <dependency> + <groupId>de.ozgcloud.nachrichten</groupId> + <artifactId>nachrichten-manager-postfach-interface</artifactId> + <version>${nachrichten-manager.version}</version> </dependency> <dependency> @@ -232,12 +238,12 @@ </dependency> <!-- Dev --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-devtools</artifactId> - <scope>runtime</scope> - <optional>true</optional> - </dependency> + <!-- <dependency>--> + <!-- <groupId>org.springframework.boot</groupId>--> + <!-- <artifactId>spring-boot-devtools</artifactId>--> + <!-- <scope>runtime</scope>--> + <!-- <optional>true</optional>--> + <!-- </dependency>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> @@ -253,7 +259,7 @@ <!-- Test --> <dependency> <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>nachrichten-manager</artifactId> + <artifactId>nachrichten-manager-postfach-interface</artifactId> <version>${project.version}</version> <type>test-jar</type> <scope>test</scope> diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcBinaryFileService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcBinaryFileService.java index 0db0d205d..5f0881308 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcBinaryFileService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcBinaryFileService.java @@ -35,7 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired; import com.google.protobuf.ByteString; -import de.ozgcloud.nachrichten.common.errorhandling.TechnicalException; +import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.vorgang.common.security.PolicyService; import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc.BinaryFileServiceImplBase; import de.ozgcloud.vorgang.grpc.binaryFile.GrpcBinaryFilesRequest; -- GitLab