libeufin

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

commit c7471702ab241ab16b0ad6c13a22201c4077c1e0
parent 6413e6e2117d6f52dffdb81660a4cfad02690b41
Author: Antoine A <>
Date:   Wed, 28 Aug 2024 16:42:07 +0200

bank: fix some TODO

Diffstat:
Mbank/src/main/kotlin/tech/libeufin/bank/cli/CreateAccount.kt | 8+++++---
Mbank/src/main/kotlin/tech/libeufin/bank/db/AccountDAO.kt | 25+++++++++++++++++--------
Mdatabase-versioning/libeufin-conversion-setup.sql | 1-
3 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/bank/src/main/kotlin/tech/libeufin/bank/cli/CreateAccount.kt b/bank/src/main/kotlin/tech/libeufin/bank/cli/CreateAccount.kt @@ -71,7 +71,9 @@ class CreateAccountOption: OptionGroup() { val min_cashout: TalerAmount? by option( help = "Custom minimum cashout amount for this account" ).convert { TalerAmount(it) } - + val tan_channel: TanChannel? by option( + help = "Enables 2FA and set the TAN channel used for challenges" + ).convert { TanChannel.valueOf(it) } } class CreateAccount : CliktCommand( @@ -83,7 +85,6 @@ class CreateAccount : CliktCommand( private val options by CreateAccountOption().cooccurring() override fun run() = cliCmd(logger, common.log) { - // TODO support setting tan bankConfig(common.config).withDb { db, cfg -> val req = json ?: options?.run { RegisterAccountRequest( @@ -99,7 +100,8 @@ class CreateAccount : CliktCommand( cashout_payto_uri = cashout_payto_uri, payto_uri = payto_uri, debit_threshold = debit_threshold, - min_cashout = min_cashout + min_cashout = min_cashout, + tan_channel = tan_channel ) } req?.let { diff --git a/bank/src/main/kotlin/tech/libeufin/bank/db/AccountDAO.kt b/bank/src/main/kotlin/tech/libeufin/bank/db/AccountDAO.kt @@ -61,27 +61,36 @@ class AccountDAO(private val db: Database) { AND email IS NOT DISTINCT FROM ? AND phone IS NOT DISTINCT FROM ? AND cashout_payto IS NOT DISTINCT FROM ? + AND tan_channel IS NOT DISTINCT FROM ?::tan_enum AND (NOT ? OR internal_payto_uri=?) AND is_public=? AND is_taler_exchange=? - AND tan_channel IS NOT DISTINCT FROM ?::tan_enum + AND max_debt=(?,?)::taler_amount + AND ${if (minCashout == null) "min_cashout IS NULL" else "min_cashout IS NOT DISTINCT FROM (?,?)::taler_amount"} ,internal_payto_uri, name FROM customers JOIN bank_accounts ON customer_id=owning_customer_id WHERE login=? """) { - // TODO check max debt and min checkout ? setString(1, name) setString(2, email) setString(3, phone) setString(4, cashoutPayto?.full(name)) - setBoolean(5, checkPaytoIdempotent) - setString(6, internalPayto.canonical) - setBoolean(7, isPublic) - setBoolean(8, isTalerExchange) - setString(9, tanChannel?.name) - setString(10, login) + setString(5, tanChannel?.name) + setBoolean(6, checkPaytoIdempotent) + setString(7, internalPayto.canonical) + setBoolean(8, isPublic) + setBoolean(9, isTalerExchange) + setLong(10, maxDebt.value) + setInt(11, maxDebt.frac) + if (minCashout != null) { + setLong(12, minCashout.value) + setInt(13, minCashout.frac) + setString(14, login) + } else { + setString(12, login) + } oneOrNull { Pair( pwCrypto.checkpw(password, it.getString(1)).match && it.getBoolean(2), diff --git a/database-versioning/libeufin-conversion-setup.sql b/database-versioning/libeufin-conversion-setup.sql @@ -8,7 +8,6 @@ LANGUAGE plpgsql AS $$ now_date INT8; payto_uri TEXT; BEGIN - -- TODO should send to an exchange IF NEW.local_transaction IS NOT NULL THEN SELECT transaction_date INTO now_date FROM libeufin_bank.bank_account_transactions