commit c7471702ab241ab16b0ad6c13a22201c4077c1e0
parent 6413e6e2117d6f52dffdb81660a4cfad02690b41
Author: Antoine A <>
Date: Wed, 28 Aug 2024 16:42:07 +0200
bank: fix some TODO
Diffstat:
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