libeufin

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

commit 348a6945996eed2c180ff0d115ef00dbb32a659a
parent 427e71c9586c8cbf4e71b7abf268a85c8e03bab2
Author: Antoine A <>
Date:   Mon, 20 Nov 2023 16:13:08 +0000

Apply new spec

Diffstat:
Mbank/src/main/kotlin/tech/libeufin/bank/BankIntegrationApi.kt | 3+--
Mbank/src/main/kotlin/tech/libeufin/bank/Config.kt | 18++++++------------
Mbank/src/main/kotlin/tech/libeufin/bank/ConversionApi.kt | 4+---
Mbank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt | 3+--
Mbank/src/main/kotlin/tech/libeufin/bank/Error.kt | 8++++----
Mbank/src/main/kotlin/tech/libeufin/bank/Main.kt | 4++--
Mbank/src/main/kotlin/tech/libeufin/bank/TalerMessage.kt | 14+++++---------
Mbank/src/main/kotlin/tech/libeufin/bank/WireGatewayApi.kt | 2+-
Mbank/src/test/kotlin/helpers.kt | 2+-
Mdatabase-versioning/libeufin-bank-procedures.sql | 1-
10 files changed, 22 insertions(+), 37 deletions(-)

diff --git a/bank/src/main/kotlin/tech/libeufin/bank/BankIntegrationApi.kt b/bank/src/main/kotlin/tech/libeufin/bank/BankIntegrationApi.kt @@ -32,8 +32,7 @@ import tech.libeufin.bank.WithdrawalDAO.* fun Routing.bankIntegrationApi(db: Database, ctx: BankConfig) { get("/taler-integration/config") { call.respond(TalerIntegrationConfigResponse( - currency = ctx.currency, - currency_specification = ctx.currencySpecification + currency = ctx.regional_currency )) } diff --git a/bank/src/main/kotlin/tech/libeufin/bank/Config.kt b/bank/src/main/kotlin/tech/libeufin/bank/Config.kt @@ -30,7 +30,6 @@ import tech.libeufin.util.DatabaseConfig private val logger: Logger = LoggerFactory.getLogger("tech.libeufin.bank.Config") private val BANK_CONFIG_SOURCE = ConfigSource("libeufin-bank", "libeufin-bank") - /** * Application the parsed configuration. */ @@ -38,8 +37,7 @@ data class BankConfig( /** * Main, regional currency of the bank. */ - val currency: String, - val currencySpecification: CurrencySpecification, + val regional_currency: CurrencySpecification, /** * Restrict account registration to the administrator. */ @@ -78,8 +76,7 @@ data class BankConfig( */ val spaCaptchaURL: String?, val allowConversion: Boolean, - val fiatCurrency: String?, - val fiatCurrencySpecification: CurrencySpecification?, + val fiatCurrency: CurrencySpecification?, val conversionInfo: ConversionInfo?, val tanSms: String?, val tanEmail: String?, @@ -126,18 +123,16 @@ fun TalerConfig.loadServerConfig(): ServerConfig = catchError { fun TalerConfig.loadBankConfig(): BankConfig = catchError { val currency = requireString("libeufin-bank", "currency") - var fiatCurrency: String? = null; var fiatCurrencySpecification: CurrencySpecification? = null var conversionInfo: ConversionInfo? = null; val allowConversion = lookupBoolean("libeufin-bank", "allow_conversion") ?: false; if (allowConversion) { - fiatCurrency = requireString("libeufin-bank", "fiat_currency"); + val fiatCurrency = requireString("libeufin-bank", "fiat_currency"); fiatCurrencySpecification = currencySpecificationFor(fiatCurrency) conversionInfo = loadConversionInfo(currency, fiatCurrency) } BankConfig( - currency = currency, - currencySpecification = currencySpecificationFor(currency), + regional_currency = currencySpecificationFor(currency), restrictRegistration = lookupBoolean("libeufin-bank", "restrict_registration") ?: false, defaultCustomerDebtLimit = requireAmount("libeufin-bank", "default_customer_debt_limit", currency), registrationBonusEnabled = lookupBoolean("libeufin-bank", "registration_bonus_enabled") ?: false, @@ -147,8 +142,7 @@ fun TalerConfig.loadBankConfig(): BankConfig = catchError { spaCaptchaURL = lookupString("libeufin-bank", "spa_captcha_url"), restrictAccountDeletion = lookupBoolean("libeufin-bank", "restrict_account_deletion") ?: true, allowConversion = allowConversion, - fiatCurrency = fiatCurrency, - fiatCurrencySpecification = fiatCurrencySpecification, + fiatCurrency = fiatCurrencySpecification, conversionInfo = conversionInfo, tanSms = lookupPath("libeufin-bank", "tan_sms"), tanEmail = lookupPath("libeufin-bank", "tan_email"), @@ -179,7 +173,7 @@ private fun TalerConfig.loadConversionInfo(currency: String, fiatCurrency: Strin private fun TalerConfig.loadCurrencySpecification(section: String): CurrencySpecification = catchError { CurrencySpecification( name = requireString(section, "name"), - code = requireString(section, "code"), + currency = requireString(section, "code"), 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"), diff --git a/bank/src/main/kotlin/tech/libeufin/bank/ConversionApi.kt b/bank/src/main/kotlin/tech/libeufin/bank/ConversionApi.kt @@ -31,10 +31,8 @@ fun Routing.conversionApi(db: Database, ctx: BankConfig) = conditional(ctx.allow get("/conversion-info/config") { call.respond( ConversionConfig( - regional_currency = ctx.currency, - regional_currency_specification = ctx.currencySpecification, + regional_currency = ctx.regional_currency, fiat_currency = ctx.fiatCurrency!!, - fiat_currency_specification = ctx.fiatCurrencySpecification!!, cashin_ratio = ctx.conversionInfo!!.cashin_ratio, cashin_fee = ctx.conversionInfo.cashin_fee, cashin_tiny_amount = ctx.conversionInfo.cashin_tiny_amount, diff --git a/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt b/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt @@ -48,8 +48,7 @@ fun Routing.coreBankApi(db: Database, ctx: BankConfig) { get("/config") { call.respond( Config( - currency = ctx.currency, - currency_specification = ctx.currencySpecification, + currency = ctx.regional_currency, allow_conversion = ctx.allowConversion, allow_registrations = !ctx.restrictRegistration, allow_deletions = !ctx.restrictAccountDeletion diff --git a/bank/src/main/kotlin/tech/libeufin/bank/Error.kt b/bank/src/main/kotlin/tech/libeufin/bank/Error.kt @@ -84,15 +84,15 @@ fun badRequest( fun BankConfig.checkRegionalCurrency(amount: TalerAmount) { - if (amount.currency != currency) throw badRequest( - "Wrong currency: expected regional currency $currency got ${amount.currency}", + if (amount.currency != regional_currency.currency) throw badRequest( + "Wrong currency: expected regional currency ${regional_currency.currency} got ${amount.currency}", TalerErrorCode.GENERIC_CURRENCY_MISMATCH ) } fun BankConfig.checkFiatCurrency(amount: TalerAmount) { - if (amount.currency != fiatCurrency) throw badRequest( - "Wrong currency: expected fiat currency $fiatCurrency got ${amount.currency}", + if (amount.currency != fiatCurrency?.currency) throw badRequest( + "Wrong currency: expected fiat currency ${fiatCurrency?.currency} got ${amount.currency}", TalerErrorCode.GENERIC_CURRENCY_MISMATCH ) } \ No newline at end of file diff --git a/bank/src/main/kotlin/tech/libeufin/bank/Main.kt b/bank/src/main/kotlin/tech/libeufin/bank/Main.kt @@ -299,7 +299,7 @@ class ServeBank : CliktCommand("Run libeufin-bank HTTP server", name = "serve") logger.info("Can only serve libeufin-bank via TCP") exitProcess(1) } - val db = Database(dbCfg.dbConnStr, ctx.currency, ctx.fiatCurrency) + val db = Database(dbCfg.dbConnStr, ctx.regional_currency.currency, ctx.fiatCurrency?.currency) runBlocking { if (!maybeCreateAdminAccount(db, ctx)) // logs provided by the helper exitProcess(1) @@ -322,7 +322,7 @@ class ChangePw : CliktCommand("Change account password", name = "passwd") { val cfg = talerConfig(configFile) val ctx = cfg.loadBankConfig() val dbCfg = cfg.loadDbConfig() - val db = Database(dbCfg.dbConnStr, ctx.currency, ctx.fiatCurrency) + val db = Database(dbCfg.dbConnStr, ctx.regional_currency.currency, ctx.fiatCurrency?.currency) runBlocking { if (!maybeCreateAdminAccount(db, ctx)) // logs provided by the helper exitProcess(1) diff --git a/bank/src/main/kotlin/tech/libeufin/bank/TalerMessage.kt b/bank/src/main/kotlin/tech/libeufin/bank/TalerMessage.kt @@ -201,8 +201,7 @@ data class BearerToken( @Serializable data class Config( - val currency: String, - val currency_specification: CurrencySpecification, + val currency: CurrencySpecification, val allow_conversion: Boolean, val allow_registrations: Boolean, val allow_deletions: Boolean @@ -213,10 +212,8 @@ data class Config( @Serializable data class ConversionConfig( - val regional_currency: String, - val regional_currency_specification: CurrencySpecification, - val fiat_currency: String, - val fiat_currency_specification: CurrencySpecification, + val regional_currency: CurrencySpecification, + val fiat_currency: CurrencySpecification, val cashin_ratio: DecimalNumber, val cashin_fee: TalerAmount, val cashin_tiny_amount: TalerAmount, @@ -234,8 +231,7 @@ data class ConversionConfig( @Serializable data class TalerIntegrationConfigResponse( - val currency: String, - val currency_specification: CurrencySpecification, + val currency: CurrencySpecification, ) { val name: String = "taler-bank-integration"; val version: String = "0:0:0"; @@ -340,7 +336,7 @@ data class BankAccountGetWithdrawalResponse( @Serializable data class CurrencySpecification( val name: String, - val code: String, + val currency: String, val num_fractional_input_digits: Int, val num_fractional_normal_digits: Int, val num_fractional_trailing_zero_digits: Int, diff --git a/bank/src/main/kotlin/tech/libeufin/bank/WireGatewayApi.kt b/bank/src/main/kotlin/tech/libeufin/bank/WireGatewayApi.kt @@ -38,7 +38,7 @@ private val logger: Logger = LoggerFactory.getLogger("tech.libeufin.nexus") fun Routing.wireGatewayApi(db: Database, ctx: BankConfig) { get("/taler-wire-gateway/config") { call.respond(TWGConfigResponse( - currency = ctx.currency + currency = ctx.regional_currency.currency )) return@get } diff --git a/bank/src/test/kotlin/helpers.kt b/bank/src/test/kotlin/helpers.kt @@ -55,7 +55,7 @@ fun setup( resetDatabaseTables(dbCfg, "libeufin-bank") initializeDatabaseTables(dbCfg, "libeufin-bank") val ctx = config.loadBankConfig() - Database(dbCfg.dbConnStr, ctx.currency, ctx.fiatCurrency).use { + Database(dbCfg.dbConnStr, ctx.regional_currency.currency, ctx.fiatCurrency?.currency).use { runBlocking { ctx.conversionInfo?.run { it.conversion.updateConfig(this) } lambda(it, ctx) diff --git a/database-versioning/libeufin-bank-procedures.sql b/database-versioning/libeufin-bank-procedures.sql @@ -973,7 +973,6 @@ CREATE OR REPLACE FUNCTION cashin( IN in_amount taler_amount, IN in_subject TEXT, -- Error status - OUT out_no_account BOOLEAN, OUT out_too_small BOOLEAN, OUT out_balance_insufficient BOOLEAN )