aboutsummaryrefslogtreecommitdiff
path: root/nexus/src
diff options
context:
space:
mode:
authorAntoine A <>2024-03-07 12:33:23 +0100
committerAntoine A <>2024-03-07 12:33:23 +0100
commitff7e7905f53e4a6b7f82a9a9c64694fd5b323d1a (patch)
tree76478258a826ea3f392e8027c39e2df7f9995ed5 /nexus/src
parent4044e69399c8c911dd926c4f8d4164964a08e0f0 (diff)
downloadlibeufin-ff7e7905f53e4a6b7f82a9a9c64694fd5b323d1a.tar.gz
libeufin-ff7e7905f53e4a6b7f82a9a9c64694fd5b323d1a.tar.bz2
libeufin-ff7e7905f53e4a6b7f82a9a9c64694fd5b323d1a.zip
Replace all Ebics3 JAXB logic with custom XML DSL
Diffstat (limited to 'nexus/src')
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt1
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/ebics/Ebics3.kt41
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsCommon.kt5
3 files changed, 28 insertions, 19 deletions
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt
index f42f2571..def32a62 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt
@@ -28,7 +28,6 @@ import io.ktor.client.plugins.*
import kotlinx.coroutines.*
import tech.libeufin.common.*
import tech.libeufin.ebics.*
-import tech.libeufin.ebics.ebics_h005.Ebics3Request
import tech.libeufin.nexus.ebics.*
import java.io.IOException
import java.io.InputStream
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 b4ff4877..f2d8c35c 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/Ebics3.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/Ebics3.kt
@@ -22,7 +22,6 @@ import io.ktor.client.*
import tech.libeufin.ebics.*
import tech.libeufin.common.*
import tech.libeufin.common.crypto.*
-import tech.libeufin.ebics.ebics_h005.Ebics3Request
import tech.libeufin.nexus.BankPublicKeysFile
import tech.libeufin.nexus.ClientPrivateKeysFile
import tech.libeufin.nexus.EbicsSetupConfig
@@ -45,6 +44,19 @@ import javax.xml.datatype.DatatypeFactory
fun Instant.xmlDate(): String = DateTimeFormatter.ISO_DATE.withZone(ZoneId.of("UTC")).format(this)
fun Instant.xmlDateTime(): String = DateTimeFormatter.ISO_OFFSET_DATE_TIME.withZone(ZoneId.of("UTC")).format(this)
+data class Ebics3Service(
+ val name: String,
+ val scope: String,
+ val messageName: String,
+ val messageVersion: String,
+ val container: String?
+)
+
+data class Ebics3Order(
+ val type: String,
+ val service: Ebics3Service
+)
+
class Ebics3Impl(
private val cfg: EbicsSetupConfig,
private val bankKeys: BankPublicKeysFile,
@@ -69,7 +81,7 @@ class Ebics3Impl(
return XMLUtil.convertDomToBytes(doc)
}
- fun uploadInitialization(preparedUploadData: PreparedUploadData): ByteArray {
+ fun uploadInitialization(service: Ebics3Service, preparedUploadData: PreparedUploadData): ByteArray {
val nonce = getNonce(128)
return signedRequest {
el("header") {
@@ -86,11 +98,11 @@ class Ebics3Impl(
el("AdminOrderType", "BTU")
el("BTUOrderParams") {
el("Service") {
- el("ServiceName", "MCT")
- el("Scope", "CH")
+ el("ServiceName", service.name)
+ el("Scope", service.scope)
el("MsgName") {
- attr("version", "09")
- text("pain.001")
+ attr("version", service.messageVersion)
+ text(service.messageName)
}
}
el("SignatureFlag", "true")
@@ -314,20 +326,19 @@ suspend fun submitPain001(
bankkeys: BankPublicKeysFile,
httpClient: HttpClient
): String {
- val orderService: Ebics3Request.OrderDetails.Service = Ebics3Request.OrderDetails.Service().apply {
- serviceName = "MCT"
- scope = "CH"
- messageName = Ebics3Request.OrderDetails.Service.MessageName().apply {
- value = "pain.001"
- version = "09"
- }
- }
+ val service = Ebics3Service(
+ name = "MCT",
+ scope = "CH",
+ messageName = "pain.001",
+ messageVersion = "09",
+ container = null
+ )
val maybeUploaded = doEbicsUpload(
httpClient,
cfg,
clientKeys,
bankkeys,
- orderService,
+ service,
pain001xml.toByteArray(Charsets.UTF_8),
)
logger.debug("Payment submitted, report text is: ${maybeUploaded.reportText}," +
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsCommon.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsCommon.kt
index 490156bb..157e53b2 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsCommon.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsCommon.kt
@@ -46,7 +46,6 @@ import io.ktor.utils.io.jvm.javaio.*
import tech.libeufin.common.*
import tech.libeufin.common.crypto.*
import tech.libeufin.ebics.*
-import tech.libeufin.ebics.ebics_h005.Ebics3Request
import tech.libeufin.nexus.*
import java.io.ByteArrayOutputStream
import java.io.InputStream
@@ -507,13 +506,13 @@ suspend fun doEbicsUpload(
cfg: EbicsSetupConfig,
clientKeys: ClientPrivateKeysFile,
bankKeys: BankPublicKeysFile,
- orderService: Ebics3Request.OrderDetails.Service,
+ service: Ebics3Service,
payload: ByteArray,
): EbicsResponseContent = withContext(NonCancellable) {
val impl = Ebics3Impl(cfg, bankKeys, clientKeys)
// TODO use a lambda and pass the order detail there for atomicity ?
val preparedPayload = prepareUploadPayload(cfg, clientKeys, bankKeys, payload)
- val initXml = impl.uploadInitialization(preparedPayload)
+ val initXml = impl.uploadInitialization(service, preparedPayload)
val initResp = postEbics( // may throw EbicsEarlyException
client,
cfg,