commit ac9f2f33489d4a40e1984d28e7eccc6e6c6bd9d1
parent 28d3c8f0608632174cb88379a75742a6c0b1d375
Author: Antoine A <>
Date: Tue, 21 Nov 2023 14:57:08 +0000
Fix currency and currency_specification
Diffstat:
9 files changed, 40 insertions(+), 29 deletions(-)
diff --git a/bank/src/main/kotlin/tech/libeufin/bank/BankIntegrationApi.kt b/bank/src/main/kotlin/tech/libeufin/bank/BankIntegrationApi.kt
@@ -32,7 +32,8 @@ import tech.libeufin.bank.WithdrawalDAO.*
fun Routing.bankIntegrationApi(db: Database, ctx: BankConfig) {
get("/taler-integration/config") {
call.respond(TalerIntegrationConfigResponse(
- currency = ctx.regional_currency
+ currency = ctx.regionalCurrency,
+ currency_specification = ctx.regionalCurrencySpec
))
}
diff --git a/bank/src/main/kotlin/tech/libeufin/bank/Config.kt b/bank/src/main/kotlin/tech/libeufin/bank/Config.kt
@@ -37,7 +37,8 @@ data class BankConfig(
/**
* Main, regional currency of the bank.
*/
- val regional_currency: CurrencySpecification,
+ val regionalCurrency: String,
+ val regionalCurrencySpec: CurrencySpecification,
/**
* Restrict account registration to the administrator.
*/
@@ -76,7 +77,8 @@ data class BankConfig(
*/
val spaCaptchaURL: String?,
val allowConversion: Boolean,
- val fiatCurrency: CurrencySpecification?,
+ val fiatCurrency: String?,
+ val fiatCurrencySpec: CurrencySpecification?,
val conversionInfo: ConversionInfo?,
val tanSms: String?,
val tanEmail: String?,
@@ -122,27 +124,30 @@ fun TalerConfig.loadServerConfig(): ServerConfig = catchError {
}
fun TalerConfig.loadBankConfig(): BankConfig = catchError {
- val currency = requireString("libeufin-bank", "currency")
- var fiatCurrencySpecification: CurrencySpecification? = null
+ val regionalCurrency = requireString("libeufin-bank", "currency")
+ var fiatCurrency: String? = null;
+ var fiatCurrencySpec: CurrencySpecification? = null
var conversionInfo: ConversionInfo? = null;
val allowConversion = lookupBoolean("libeufin-bank", "allow_conversion") ?: false;
if (allowConversion) {
- val fiatCurrency = requireString("libeufin-bank", "fiat_currency");
- fiatCurrencySpecification = currencySpecificationFor(fiatCurrency)
- conversionInfo = loadConversionInfo(currency, fiatCurrency)
+ fiatCurrency = requireString("libeufin-bank", "fiat_currency");
+ fiatCurrencySpec = currencySpecificationFor(fiatCurrency)
+ conversionInfo = loadConversionInfo(regionalCurrency, fiatCurrency)
}
BankConfig(
- regional_currency = currencySpecificationFor(currency),
+ regionalCurrency = regionalCurrency,
+ regionalCurrencySpec = currencySpecificationFor(regionalCurrency),
restrictRegistration = lookupBoolean("libeufin-bank", "restrict_registration") ?: false,
- defaultCustomerDebtLimit = requireAmount("libeufin-bank", "default_customer_debt_limit", currency),
+ defaultCustomerDebtLimit = requireAmount("libeufin-bank", "default_customer_debt_limit", regionalCurrency),
registrationBonusEnabled = lookupBoolean("libeufin-bank", "registration_bonus_enabled") ?: false,
- registrationBonus = requireAmount("libeufin-bank", "registration_bonus", currency),
+ registrationBonus = requireAmount("libeufin-bank", "registration_bonus", regionalCurrency),
suggestedWithdrawalExchange = lookupString("libeufin-bank", "suggested_withdrawal_exchange"),
- defaultAdminDebtLimit = requireAmount("libeufin-bank", "default_admin_debt_limit", currency),
+ defaultAdminDebtLimit = requireAmount("libeufin-bank", "default_admin_debt_limit", regionalCurrency),
spaCaptchaURL = lookupString("libeufin-bank", "spa_captcha_url"),
restrictAccountDeletion = lookupBoolean("libeufin-bank", "restrict_account_deletion") ?: true,
allowConversion = allowConversion,
- fiatCurrency = fiatCurrencySpecification,
+ fiatCurrency = fiatCurrency,
+ fiatCurrencySpec = fiatCurrencySpec,
conversionInfo = conversionInfo,
tanSms = lookupPath("libeufin-bank", "tan_sms"),
tanEmail = lookupPath("libeufin-bank", "tan_email"),
@@ -173,7 +178,6 @@ private fun TalerConfig.loadConversionInfo(currency: String, fiatCurrency: Strin
private fun TalerConfig.loadCurrencySpecification(section: String): CurrencySpecification = catchError {
CurrencySpecification(
name = requireString(section, "name"),
- 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,8 +31,10 @@ fun Routing.conversionApi(db: Database, ctx: BankConfig) = conditional(ctx.allow
get("/conversion-info/config") {
call.respond(
ConversionConfig(
- regional_currency = ctx.regional_currency,
+ regional_currency = ctx.regionalCurrency,
+ regional_currency_specification = ctx.regionalCurrencySpec,
fiat_currency = ctx.fiatCurrency!!,
+ fiat_currency_specification = ctx.fiatCurrencySpec!!,
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,7 +48,8 @@ fun Routing.coreBankApi(db: Database, ctx: BankConfig) {
get("/config") {
call.respond(
Config(
- currency = ctx.regional_currency,
+ currency = ctx.regionalCurrency,
+ currency_specification = ctx.regionalCurrencySpec,
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
@@ -86,15 +86,15 @@ fun badRequest(
fun BankConfig.checkRegionalCurrency(amount: TalerAmount) {
- if (amount.currency != regional_currency.currency) throw badRequest(
- "Wrong currency: expected regional currency ${regional_currency.currency} got ${amount.currency}",
+ if (amount.currency != regionalCurrency) throw badRequest(
+ "Wrong currency: expected regional currency $regionalCurrency got ${amount.currency}",
TalerErrorCode.GENERIC_CURRENCY_MISMATCH
)
}
fun BankConfig.checkFiatCurrency(amount: TalerAmount) {
- if (amount.currency != fiatCurrency?.currency) throw badRequest(
- "Wrong currency: expected fiat currency ${fiatCurrency?.currency} got ${amount.currency}",
+ if (amount.currency != fiatCurrency) throw badRequest(
+ "Wrong currency: expected fiat currency $fiatCurrency 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
@@ -312,7 +312,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.regional_currency.currency, ctx.fiatCurrency?.currency)
+ val db = Database(dbCfg.dbConnStr, ctx.regionalCurrency, ctx.fiatCurrency)
runBlocking {
if (!maybeCreateAdminAccount(db, ctx)) // logs provided by the helper
exitProcess(1)
@@ -335,7 +335,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.regional_currency.currency, ctx.fiatCurrency?.currency)
+ val db = Database(dbCfg.dbConnStr, ctx.regionalCurrency, ctx.fiatCurrency)
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
@@ -213,7 +213,8 @@ data class BearerToken(
@Serializable
data class Config(
- val currency: CurrencySpecification,
+ val currency: String,
+ val currency_specification: CurrencySpecification,
val allow_conversion: Boolean,
val allow_registrations: Boolean,
val allow_deletions: Boolean
@@ -224,8 +225,10 @@ data class Config(
@Serializable
data class ConversionConfig(
- val regional_currency: CurrencySpecification,
- val fiat_currency: CurrencySpecification,
+ val regional_currency: String,
+ val regional_currency_specification: CurrencySpecification,
+ val fiat_currency: String,
+ val fiat_currency_specification: CurrencySpecification,
val cashin_ratio: DecimalNumber,
val cashin_fee: TalerAmount,
val cashin_tiny_amount: TalerAmount,
@@ -243,7 +246,8 @@ data class ConversionConfig(
@Serializable
data class TalerIntegrationConfigResponse(
- val currency: CurrencySpecification,
+ val currency: String,
+ val currency_specification: CurrencySpecification
) {
val name: String = "taler-bank-integration";
val version: String = "0:0:0";
@@ -348,7 +352,6 @@ data class BankAccountGetWithdrawalResponse(
@Serializable
data class CurrencySpecification(
val name: 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.regional_currency.currency
+ currency = ctx.regionalCurrency
))
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.regional_currency.currency, ctx.fiatCurrency?.currency).use {
+ Database(dbCfg.dbConnStr, ctx.regionalCurrency, ctx.fiatCurrency).use {
runBlocking {
ctx.conversionInfo?.run { it.conversion.updateConfig(this) }
lambda(it, ctx)