From 684b3fb40e5eb54fbba8549884701a2208012490 Mon Sep 17 00:00:00 2001 From: dankito Date: Tue, 15 Oct 2024 21:53:02 +0200 Subject: [PATCH] Fixed that if lastCreatedMesssage is a DialogInit message, that we don't sent it again as we just initialized a new dialog with initDialogWithStrongCustomerAuthentication() --- .../kotlin/net/codinux/banking/fints/FinTsJobExecutor.kt | 3 ++- .../banking/fints/messages/MessageBuilderResult.kt | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/FinTsJobExecutor.kt b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/FinTsJobExecutor.kt index 2c71fb96..213aaf60 100644 --- a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/FinTsJobExecutor.kt +++ b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/FinTsJobExecutor.kt @@ -590,7 +590,8 @@ Log.info { "Terminating waiting for TAN input" } // TODO: remove again val initDialogResponse = initDialogWithStrongCustomerAuthentication(context) - if (initDialogResponse.successful == false) { + // if lastCreatedMessage was a dialog init message, there's no need to send this message again, we just initialized a new dialog in initDialogWithStrongCustomerAuthentication() + if (initDialogResponse.successful == false || lastCreatedMessage.isDialogInitMessage()) { return initDialogResponse } else { val newMessage = messageBuilder.rebuildMessage(context, lastCreatedMessage) diff --git a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/messages/MessageBuilderResult.kt b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/messages/MessageBuilderResult.kt index 5c56f824..4b70d097 100644 --- a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/messages/MessageBuilderResult.kt +++ b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/messages/MessageBuilderResult.kt @@ -1,6 +1,8 @@ package net.codinux.banking.fints.messages +import net.codinux.banking.fints.messages.datenelementgruppen.implementierte.Segmentkopf import net.codinux.banking.fints.messages.segmente.Segment +import net.codinux.banking.fints.messages.segmente.implementierte.Verarbeitungsvorbereitung import net.codinux.banking.fints.messages.segmente.implementierte.ZweiSchrittTanEinreichung @@ -32,4 +34,10 @@ open class MessageBuilderResult( && messageBodySegments.first() is ZweiSchrittTanEinreichung } + open fun isDialogInitMessage(): Boolean = + messageBodySegments.any { it is Verarbeitungsvorbereitung } + + + override fun toString() = "${messageBodySegments.joinToString { (it.dataElementsAndGroups.firstOrNull() as? Segmentkopf)?.let { "${it.identifier}:${it.segmentVersion}" } ?: "" } }}" + } \ No newline at end of file