summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine A <>2024-03-07 12:43:52 +0100
committerAntoine A <>2024-03-07 12:43:52 +0100
commitc7344ce7d8466aa6d36d428dd730978d15ceb720 (patch)
tree7a23e5198c4ef8e30ab489565b52c3be1deac591
parentff7e7905f53e4a6b7f82a9a9c64694fd5b323d1a (diff)
downloadlibeufin-c7344ce7d8466aa6d36d428dd730978d15ceb720.tar.gz
libeufin-c7344ce7d8466aa6d36d428dd730978d15ceb720.tar.bz2
libeufin-c7344ce7d8466aa6d36d428dd730978d15ceb720.zip
Clean EBICS3 protocol logic
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt2
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/ebics/Ebics3.kt59
2 files changed, 28 insertions, 33 deletions
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt
index def32a62..d6ae13f6 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt
@@ -87,7 +87,7 @@ private suspend fun downloadHelper(
ctx.cfg,
ctx.bankKeys,
ctx.clientKeys
- ).downloadInitialization(doc, lastExecutionTime)
+ ).downloadInitializationDoc(doc, lastExecutionTime)
return ebicsDownload(
ctx.httpClient,
ctx.cfg,
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/Ebics3.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/Ebics3.kt
index f2d8c35c..deb25360 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/Ebics3.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/Ebics3.kt
@@ -52,11 +52,6 @@ data class Ebics3Service(
val container: String?
)
-data class Ebics3Order(
- val type: String,
- val service: Ebics3Service
-)
-
class Ebics3Impl(
private val cfg: EbicsSetupConfig,
private val bankKeys: BankPublicKeysFile,
@@ -179,7 +174,18 @@ class Ebics3Impl(
}
}
- fun downloadInitialization(whichDoc: SupportedDocument, startDate: Instant? = null, endDate: Instant? = null): ByteArray {
+ fun downloadInitializationDoc(whichDoc: SupportedDocument, startDate: Instant? = null, endDate: Instant? = null): ByteArray {
+ val (orderType, service) = when (whichDoc) {
+ SupportedDocument.PAIN_002 -> Pair("BTD", Ebics3Service("PSR", "CH", "pain.002", "10", "ZIP"))
+ SupportedDocument.CAMT_052 -> Pair("BTD", Ebics3Service("STM", "CH", "camt.052", "08", "ZIP"))
+ SupportedDocument.CAMT_053 -> Pair("BTD", Ebics3Service("EOP", "CH", "camt.053", "08", "ZIP"))
+ SupportedDocument.CAMT_054 -> Pair("BTD", Ebics3Service("REP", "CH", "camt.054", "08", "ZIP"))
+ SupportedDocument.PAIN_002_LOGS -> Pair("HAC", null)
+ }
+ return downloadInitialization(orderType, service)
+ }
+
+ fun downloadInitialization(orderType: String, service: Ebics3Service? = null, startDate: Instant? = null, endDate: Instant? = null): ByteArray {
val nonce = getNonce(128)
return signedRequest {
el("header") {
@@ -193,33 +199,22 @@ class Ebics3Impl(
// SystemID
// Product
el("OrderDetails") {
- if (whichDoc == SupportedDocument.PAIN_002_LOGS) {
- el("AdminOrderType", "HAC")
- } else {
- el("AdminOrderType", "BTD")
+ el("AdminOrderType", orderType)
+ if (orderType == "BTD") {
el("BTDOrderParams") {
- el("Service") {
- el("ServiceName", when (whichDoc) {
- SupportedDocument.PAIN_002 -> "PSR"
- SupportedDocument.CAMT_052 -> "STM"
- SupportedDocument.CAMT_053 -> "EOP"
- SupportedDocument.CAMT_054 -> "REP"
- SupportedDocument.PAIN_002_LOGS -> throw Exception("Unreachable")
- })
- val (msg_value, msg_version) = when (whichDoc) {
- SupportedDocument.PAIN_002 -> Pair("pain.002", "10")
- SupportedDocument.CAMT_052 -> Pair("pain.052", "08")
- SupportedDocument.CAMT_053 -> Pair("pain.053", "08")
- SupportedDocument.CAMT_054 -> Pair("camt.054", "08")
- SupportedDocument.PAIN_002_LOGS -> throw Exception("Unreachable")
- }
- el("Scope", "CH")
- el("Container") {
- attr("containerType", "ZIP")
- }
- el("MsgName") {
- attr("version", msg_version)
- text(msg_value)
+ if (service != null) {
+ el("Service") {
+ el("ServiceName", service.name)
+ el("Scope", service.scope)
+ if (service.container != null) {
+ el("Container") {
+ attr("containerType", service.container)
+ }
+ }
+ el("MsgName") {
+ attr("version", service.messageVersion)
+ text(service.messageName)
+ }
}
}
if (startDate != null) {