libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit f76e262a38c99bbb2834eb9e6d95d6683cd2bf7a
parent d87355ed5f7876dee4534ca9a7e8af3cb429bc2f
Author: Antoine A <>
Date:   Tue, 20 Feb 2024 16:55:15 +0100

Improve bank keys prompt and env config value format

Diffstat:
Mbank/src/main/kotlin/tech/libeufin/bank/Config.kt | 23+++++++++++++++--------
Mnexus/src/main/kotlin/tech/libeufin/nexus/EbicsSetup.kt | 3++-
2 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/bank/src/main/kotlin/tech/libeufin/bank/Config.kt b/bank/src/main/kotlin/tech/libeufin/bank/Config.kt @@ -97,13 +97,7 @@ fun TalerConfig.loadBankConfig(): BankConfig { val tanChannels = buildMap { for (channel in TanChannel.entries) { lookupPath("libeufin-bank", "tan_$channel")?.let { - val variables = lookupString("libeufin-bank", "tan_${channel}_env")?.let { env -> - env.split(' ').map { variable -> - variable.splitOnce("=") ?: - throw TalerConfigError.invalid("environment variables", "libeufin-bank", "tan_${channel}_env", "expected NAME=VALUE got '$variable'") - }.toMap() - } ?: mapOf() - put(channel, Pair(it, variables)) + put(channel, Pair(it, jsonMap("libeufin-bank", "tan_${channel}_env") ?: mapOf())) } } } @@ -171,9 +165,22 @@ private fun TalerConfig.loadCurrencySpecification(section: String): CurrencySpec num_fractional_input_digits = requireNumber(section, "fractional_input_digits"), num_fractional_normal_digits = requireNumber(section, "fractional_normal_digits"), num_fractional_trailing_zero_digits = requireNumber(section, "fractional_trailing_zero_digits"), - alt_unit_names = Json.decodeFromString(requireString(section, "alt_unit_names")) + alt_unit_names = requireJsonMap(section, "alt_unit_names") ) } + +private fun TalerConfig.jsonMap(section: String, option: String): Map<String, String>? { + val raw = lookupString(section, option) ?: return null + try { + return Json.decodeFromString(raw) + } catch (e: Exception) { + throw TalerConfigError.invalid("json key/value map", section, option, "'$raw' is malformed") + } +} + +private fun TalerConfig.requireJsonMap(section: String, option: String): Map<String, String> + = jsonMap(section, option) ?: throw TalerConfigError.missing("json key/value map", section, option) + private fun TalerConfig.amount(section: String, option: String, currency: String): TalerAmount? { val raw = lookupString(section, option) ?: return null val amount = try { diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsSetup.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsSetup.kt @@ -83,9 +83,10 @@ fun String.spaceEachTwo() = private fun askUserToAcceptKeys(bankKeys: BankPublicKeysFile): Boolean { val encHash = CryptoUtil.getEbicsPublicKeyHash(bankKeys.bank_encryption_public_key).toHexString() val authHash = CryptoUtil.getEbicsPublicKeyHash(bankKeys.bank_authentication_public_key).toHexString() - println("The bank has the following keys, type 'yes, accept' to accept them..\n") + println("The bank has the following keys:") println("Encryption key: ${encHash.spaceEachTwo()}") println("Authentication key: ${authHash.spaceEachTwo()}") + print("type 'yes, accept' to accept them: ") val userResponse: String? = readlnOrNull() return userResponse == "yes, accept" }