diff options
author | Antoine A <> | 2024-03-28 11:48:15 +0100 |
---|---|---|
committer | Antoine A <> | 2024-03-28 11:48:15 +0100 |
commit | 87b44b39a4f0813000aea1bec33b1aef579e7b82 (patch) | |
tree | 8bf3b17ab1473039f254ebfdf83c0668aa58064b /nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsAdministrative.kt | |
parent | dc03013dfcc3acc17bb8f54e842ccc6740caa040 (diff) | |
download | libeufin-87b44b39a4f0813000aea1bec33b1aef579e7b82.tar.gz libeufin-87b44b39a4f0813000aea1bec33b1aef579e7b82.tar.bz2 libeufin-87b44b39a4f0813000aea1bec33b1aef579e7b82.zip |
Run HEV and HKD in ebics-setup
Diffstat (limited to 'nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsAdministrative.kt')
-rw-r--r-- | nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsAdministrative.kt | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsAdministrative.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsAdministrative.kt new file mode 100644 index 00000000..464db37f --- /dev/null +++ b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsAdministrative.kt @@ -0,0 +1,89 @@ +/* + * This file is part of LibEuFin. + * Copyright (C) 2024 Taler Systems S.A. + + * LibEuFin is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3, or + * (at your option) any later version. + + * LibEuFin is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General + * Public License for more details. + + * You should have received a copy of the GNU Affero General Public + * License along with LibEuFin; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/> + */ + +package tech.libeufin.nexus.ebics + +import org.w3c.dom.Document +import tech.libeufin.common.crypto.CryptoUtil +import tech.libeufin.common.* +import tech.libeufin.nexus.* +import tech.libeufin.nexus.BankPublicKeysFile +import tech.libeufin.nexus.ClientPrivateKeysFile +import java.io.InputStream +import java.time.Instant +import java.time.ZoneId +import java.util.* +import javax.xml.datatype.DatatypeFactory +import java.security.interfaces.* +import tech.libeufin.nexus.ebics.EbicsKeyMng.Order.* + +data class VersionNumber(val number: Float, val schema: String) { + override fun toString(): String = "$number:$schema" +} + +data class AccountInfo( + val currency: String?, + val iban: String?, + val name: String? +) + +object EbicsAdministrative { + fun HEV(cfg: NexusConfig): ByteArray { + return XmlBuilder.toBytes("ebicsHEVRequest") { + attr("xmlns", "http://www.ebics.org/H000") + el("HostID", cfg.ebicsHostId) + } + } + + fun parseHEV(doc: Document): EbicsResponse<List<VersionNumber>> { + return XmlDestructor.fromDoc(doc, "ebicsHEVResponse") { + val technicalCode = one("SystemReturnCode") { + EbicsReturnCode.lookup(one("ReturnCode").text()) + } + val versions = map("VersionNumber") { + VersionNumber(text().toFloat(), attr("ProtocolVersion")) + } + EbicsResponse( + technicalCode = technicalCode, + bankCode = EbicsReturnCode.EBICS_OK, + content = versions + ) + } + } + + fun parseHKD(stream: InputStream): AccountInfo { + return XmlDestructor.fromStream(stream, "HKDResponseOrderData") { + var currency: String? = null + var iban: String? = null + var name: String? = null + one("PartnerInfo") { + name = opt("AddressInfo")?.one("Name")?.text() + opt("AccountInfo") { + currency = attr("Currency") + each("AccountNumber") { + if (attr("international") == "true") { + iban = text() + } + } + } + } + AccountInfo(currency, iban, name) + } + } +} |