From 733a2626280d227fec2fca874352138c405e697f Mon Sep 17 00:00:00 2001 From: dankl Date: Fri, 25 Oct 2019 23:55:04 +0200 Subject: [PATCH] Implemented sending tan in Signaturabschluss (BenutzerdefinitereSignatur --- .../net/dankito/fints/messages/MessageBuilder.kt | 14 +++++++++++--- .../implementierte/signatur/PinOrTan.kt | 3 ++- .../signatur/BenutzerdefinierteSignatur.kt | 5 +++-- .../segmente/implementierte/Signaturabschluss.kt | 7 ++++--- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/MessageBuilder.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/MessageBuilder.kt index 00c2a6af..e79bbcee 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/MessageBuilder.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/MessageBuilder.kt @@ -154,10 +154,16 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg open fun createSignedMessage(bank: BankData, customer: CustomerData, dialogData: DialogData, payloadSegments: List): String { + return createSignedMessage(bank, customer, dialogData, null, payloadSegments) + } + + open fun createSignedMessage(bank: BankData, customer: CustomerData, dialogData: DialogData, + tan: String? = null, payloadSegments: List): String { + val date = utils.formatDateTodayAsInt() val time = utils.formatTimeNowAsInt() - val signedPayload = signPayload(2, bank, customer, date, time, payloadSegments) + val signedPayload = signPayload(2, bank, customer, date, time, tan, payloadSegments) val encryptedPayload = encryptPayload(bank, customer, date, time, signedPayload) @@ -181,7 +187,8 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg protected open fun signPayload(headerSegmentNumber: Int, bank: BankData, customer: CustomerData, date: Int, time: Int, - payloadSegments: List): List { + tan: String? = null, payloadSegments: List): List { + val controlReference = createControlReference() val signatureHeader = PinTanSignaturkopf( @@ -196,7 +203,8 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg val signatureEnding = Signaturabschluss( generator.getNextSegmentNumber(), controlReference, - customer.pin + customer.pin, + tan ) return listOf(signatureHeader, *payloadSegments.toTypedArray(), signatureEnding) diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelemente/implementierte/signatur/PinOrTan.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelemente/implementierte/signatur/PinOrTan.kt index 3eef4666..fbe26fec 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelemente/implementierte/signatur/PinOrTan.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelemente/implementierte/signatur/PinOrTan.kt @@ -4,4 +4,5 @@ import net.dankito.fints.messages.Existenzstatus import net.dankito.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement -open class PinOrTan(pinOrTan: String) : AlphanumerischesDatenelement(pinOrTan, Existenzstatus.Mandatory) \ No newline at end of file +open class PinOrTan(pinOrTan: String?, existenzstatus: Existenzstatus) + : AlphanumerischesDatenelement(pinOrTan, existenzstatus, 99) \ No newline at end of file diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelementgruppen/implementierte/signatur/BenutzerdefinierteSignatur.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelementgruppen/implementierte/signatur/BenutzerdefinierteSignatur.kt index 7d0f6818..83591d1c 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelementgruppen/implementierte/signatur/BenutzerdefinierteSignatur.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelementgruppen/implementierte/signatur/BenutzerdefinierteSignatur.kt @@ -30,7 +30,8 @@ import net.dankito.fints.messages.datenelementgruppen.Datenelementgruppe * des Sicherheitsverfahrens HBCI darf die DEG nicht belegt werden. Ihr Inhalt wird * in diesem Fall ignoriert. */ -open class BenutzerdefinierteSignatur(pinOrTan: String) +open class BenutzerdefinierteSignatur @JvmOverloads constructor(pin: String, tan: String? = null) : Datenelementgruppe(listOf( - PinOrTan(pinOrTan) + PinOrTan(pin, Existenzstatus.Mandatory), + PinOrTan(tan, Existenzstatus.Optional) ), Existenzstatus.Mandatory) \ No newline at end of file diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Signaturabschluss.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Signaturabschluss.kt index d5dc7211..2dc7c225 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Signaturabschluss.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Signaturabschluss.kt @@ -12,14 +12,15 @@ import net.dankito.fints.messages.segmente.id.MessageSegmentId * Der Signaturabschluss stellt die Verbindung mit dem dazugehörigen Signaturkopf * her und enthält als "Validierungsresultat" die elektronische Signatur. */ -open class Signaturabschluss( +open class Signaturabschluss @JvmOverloads constructor( segmentNumber: Int, securityControlReference: String, - pinOrTan: String + pin: String, + tan: String? = null ) : Segment(listOf( Segmentkopf(MessageSegmentId.SignatureEnding, 2, segmentNumber), Sicherheitskontrollreferenz(securityControlReference), // has to be the same as in Signaturkopf NotAllowedDatenelement(), // only used for HBCI, not allowed for PIN/TAN - BenutzerdefinierteSignatur(pinOrTan) + BenutzerdefinierteSignatur(pin, tan) )) \ No newline at end of file