diff options
author | Antoine A <> | 2024-02-01 14:22:41 +0100 |
---|---|---|
committer | Antoine A <> | 2024-02-01 14:22:41 +0100 |
commit | ab6b90924a3f9c14c11ace80ea91772144ad4c84 (patch) | |
tree | db6729021099132a98282e4f22637969e411a3fd /bank | |
parent | 1f1c99b56623000c61b5b735604683ffe911e31b (diff) | |
download | libeufin-ab6b90924a3f9c14c11ace80ea91772144ad4c84.tar.gz libeufin-ab6b90924a3f9c14c11ace80ea91772144ad4c84.tar.bz2 libeufin-ab6b90924a3f9c14c11ace80ea91772144ad4c84.zip |
receiver-name everywhere
Diffstat (limited to 'bank')
9 files changed, 48 insertions, 40 deletions
diff --git a/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt b/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt index ca8c114f..6724eeef 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt @@ -138,7 +138,7 @@ private fun Routing.coreBankTokenApi(db: Database) { } } -suspend fun createAccount(db: Database, ctx: BankConfig, req: RegisterAccountRequest, isAdmin: Boolean): Pair<AccountCreationResult, IbanPayto> { +suspend fun createAccount(db: Database, ctx: BankConfig, req: RegisterAccountRequest, isAdmin: Boolean): Pair<AccountCreationResult, FullIbanPayto> { // Prohibit reserved usernames: if (RESERVED_ACCOUNTS.contains(req.username)) throw conflict( @@ -205,7 +205,7 @@ suspend fun createAccount(db: Database, ctx: BankConfig, req: RegisterAccountReq retry-- continue } - return Pair(res, internalPayto) + return Pair(res, internalPayto.withName(req.name)) } } @@ -264,10 +264,10 @@ private fun Routing.coreBankAccountsApi(db: Database, ctx: BankConfig) { TalerErrorCode.BANK_REGISTER_USERNAME_REUSE ) AccountCreationResult.PayToReuse -> throw conflict( - "Bank internalPayToUri reuse '${internalPayto.canonical}'", + "Bank internalPayToUri reuse '${internalPayto.payto}'", TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE ) - AccountCreationResult.Success -> call.respond(RegisterAccountResponse(internalPayto.canonical)) + AccountCreationResult.Success -> call.respond(RegisterAccountResponse(internalPayto)) } } } diff --git a/bank/src/main/kotlin/tech/libeufin/bank/Main.kt b/bank/src/main/kotlin/tech/libeufin/bank/Main.kt index daa27e2c..eb6d7ad7 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/Main.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/Main.kt @@ -141,10 +141,10 @@ fun Application.corebankWebApp(db: Database, ctx: BankConfig) { } install(StatusPages) { exception<Exception> { call, cause -> + logger.debug("request failed", cause) when (cause) { is LibeufinException -> call.err(cause) is SQLException -> { - logger.debug("request failed", cause) when (cause.sqlState) { PSQLState.SERIALIZATION_FAILURE.state -> call.err( HttpStatusCode.InternalServerError, @@ -194,7 +194,6 @@ fun Application.corebankWebApp(db: Database, ctx: BankConfig) { ) } else -> { - logger.debug("request failed", cause) call.err( HttpStatusCode.InternalServerError, cause.message, @@ -478,7 +477,7 @@ class CreateAccount : CliktCommand( AccountCreationResult.LoginReuse -> throw Exception("Account username reuse '${req.username}'") AccountCreationResult.PayToReuse -> - throw Exception("Bank internalPayToUri reuse '${internalPayto.canonical}'") + throw Exception("Bank internalPayToUri reuse '${internalPayto.payto}'") AccountCreationResult.Success -> logger.info("Account '${req.username}' created") } diff --git a/bank/src/main/kotlin/tech/libeufin/bank/RevenueApi.kt b/bank/src/main/kotlin/tech/libeufin/bank/RevenueApi.kt index 999503d2..8d37ecd5 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/RevenueApi.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/RevenueApi.kt @@ -43,7 +43,7 @@ fun Routing.revenueApi(db: Database, ctx: BankConfig) { if (items.isEmpty()) { call.respond(HttpStatusCode.NoContent) } else { - call.respond(RevenueIncomingHistory(items, bankAccount.internalPaytoUri)) + call.respond(RevenueIncomingHistory(items, bankAccount.payto)) } } } diff --git a/bank/src/main/kotlin/tech/libeufin/bank/TalerMessage.kt b/bank/src/main/kotlin/tech/libeufin/bank/TalerMessage.kt index 0464e1a7..a9e60e57 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/TalerMessage.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/TalerMessage.kt @@ -180,7 +180,7 @@ data class RegisterAccountRequest( @Serializable data class RegisterAccountResponse( - val internal_payto_uri: String + val internal_payto_uri: FullIbanPayto ) /** @@ -245,7 +245,7 @@ data class MonitorWithConversion( * from/to the database. */ data class BankInfo( - val internalPaytoUri: String, + val payto: FullIbanPayto, val bankAccountId: Long, val isTalerExchange: Boolean, ) @@ -341,7 +341,7 @@ data class Balance( data class AccountMinimalData( val username: String, val name: String, - val payto_uri: String, + val payto_uri: FullIbanPayto, val balance: Balance, val debit_threshold: TalerAmount, val is_public: Boolean, @@ -363,7 +363,7 @@ data class ListBankAccountsResponse( data class AccountData( val name: String, val balance: Balance, - val payto_uri: String, + val payto_uri: FullIbanPayto, val debit_threshold: TalerAmount, val contact_data: ChallengeContactData? = null, val cashout_payto_uri: String? = null, @@ -387,8 +387,8 @@ data class TransactionCreateResponse( or from GET /transactions */ @Serializable data class BankAccountTransactionInfo( - val creditor_payto_uri: String, - val debtor_payto_uri: String, + val creditor_payto_uri: FullIbanPayto, + val debtor_payto_uri: FullIbanPayto, val amount: TalerAmount, val direction: TransactionDirection, val subject: String, @@ -557,7 +557,7 @@ data class AddIncomingResponse( @Serializable data class IncomingHistory( val incoming_transactions: List<IncomingReserveTransaction>, - val credit_account: String // Receiver's Payto URI. + val credit_account: FullIbanPayto ) /** @@ -569,7 +569,7 @@ data class IncomingReserveTransaction( val row_id: Long, // DB row ID of the payment. val date: TalerProtocolTimestamp, val amount: TalerAmount, - val debit_account: String, // Payto of the sender. + val debit_account: FullIbanPayto, val reserve_pub: EddsaPublicKey ) @@ -579,7 +579,7 @@ data class IncomingReserveTransaction( @Serializable data class OutgoingHistory( val outgoing_transactions: List<OutgoingTransaction>, - val debit_account: String // Debitor's Payto URI. + val debit_account: FullIbanPayto ) /** @@ -590,7 +590,7 @@ data class OutgoingTransaction( val row_id: Long, // DB row ID of the payment. val date: TalerProtocolTimestamp, val amount: TalerAmount, - val credit_account: String, // Payto of the receiver. + val credit_account: FullIbanPayto, val wtid: ShortHashCode, val exchange_base_url: String, ) @@ -598,7 +598,7 @@ data class OutgoingTransaction( @Serializable data class RevenueIncomingHistory( val incoming_transactions : List<RevenueIncomingBankTransaction>, - val credit_account: String + val credit_account: FullIbanPayto ) @Serializable @@ -606,7 +606,7 @@ data class RevenueIncomingBankTransaction( val row_id: Long, val date: TalerProtocolTimestamp, val amount: TalerAmount, - val debit_account: String, + val debit_account: FullIbanPayto, val subject: String ) @@ -645,7 +645,7 @@ data class PublicAccountsResponse( @Serializable data class PublicAccount( val username: String, - val payto_uri: String, + val payto_uri: FullIbanPayto, val balance: Balance, val is_taler_exchange: Boolean, ) diff --git a/bank/src/main/kotlin/tech/libeufin/bank/WireGatewayApi.kt b/bank/src/main/kotlin/tech/libeufin/bank/WireGatewayApi.kt index bfca3d1e..0e62fdba 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/WireGatewayApi.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/WireGatewayApi.kt @@ -82,7 +82,7 @@ fun Routing.wireGatewayApi(db: Database, ctx: BankConfig) { } auth(db, TokenScope.readonly) { suspend fun <T> PipelineContext<Unit, ApplicationCall>.historyEndpoint( - reduce: (List<T>, String) -> Any, + reduce: (List<T>, FullIbanPayto) -> Any, dbLambda: suspend ExchangeDAO.(HistoryParams, Long) -> List<T> ) { val params = HistoryParams.extract(context.request.queryParameters) @@ -99,7 +99,7 @@ fun Routing.wireGatewayApi(db: Database, ctx: BankConfig) { if (items.isEmpty()) { call.respond(HttpStatusCode.NoContent) } else { - call.respond(reduce(items, bankAccount.internalPaytoUri)) + call.respond(reduce(items, bankAccount.payto)) } } get("/accounts/{USERNAME}/taler-wire-gateway/history/incoming") { diff --git a/bank/src/main/kotlin/tech/libeufin/bank/db/AccountDAO.kt b/bank/src/main/kotlin/tech/libeufin/bank/db/AccountDAO.kt index 4261a53c..8f12d02b 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/db/AccountDAO.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/db/AccountDAO.kt @@ -96,7 +96,7 @@ class AccountDAO(private val db: Database) { ,creation_time ) VALUES (?, ?) """).run { - setString(1, internalPaytoUri.iban) + setString(1, internalPaytoUri.iban.value) setLong(2, now) if (!executeUpdateViolation()) { conn.rollback() @@ -423,6 +423,7 @@ class AccountDAO(private val db: Database) { SELECT bank_account_id ,internal_payto_uri + ,name ,is_taler_exchange FROM bank_accounts JOIN customers @@ -432,7 +433,7 @@ class AccountDAO(private val db: Database) { stmt.setString(1, login) stmt.oneOrNull { BankInfo( - internalPaytoUri = it.getString("internal_payto_uri"), + payto = it.getFullPayto("internal_payto_uri", "name"), isTalerExchange = it.getBoolean("is_taler_exchange"), bankAccountId = it.getLong("bank_account_id") ) @@ -471,7 +472,7 @@ class AccountDAO(private val db: Database) { ), tan_channel = it.getString("tan_channel")?.run { TanChannel.valueOf(this) }, cashout_payto_uri = it.getString("cashout_payto"), - payto_uri = it.getString("internal_payto_uri"), + payto_uri = it.getFullPayto("internal_payto_uri", "name"), balance = Balance( amount = it.getAmount("balance", db.bankCurrency), credit_debit_indicator = @@ -499,8 +500,9 @@ class AccountDAO(private val db: Database) { (balance).frac AS balance_frac, has_debt, internal_payto_uri, - c.login - ,is_taler_exchange + c.login, + is_taler_exchange, + name FROM bank_accounts JOIN customers AS c ON owning_customer_id = c.customer_id WHERE is_public=true AND c.login LIKE ? AND @@ -512,7 +514,7 @@ class AccountDAO(private val db: Database) { ) { PublicAccount( username = it.getString("login"), - payto_uri = it.getString("internal_payto_uri"), + payto_uri = it.getFullPayto("internal_payto_uri", "name"), balance = Balance( amount = it.getAmount("balance", db.bankCurrency), credit_debit_indicator = if (it.getBoolean("has_debt")) { @@ -565,7 +567,7 @@ class AccountDAO(private val db: Database) { debit_threshold = it.getAmount("max_debt", db.bankCurrency), is_public = it.getBoolean("is_public"), is_taler_exchange = it.getBoolean("is_taler_exchange"), - payto_uri = it.getString("internal_payto_uri"), + payto_uri = it.getFullPayto("internal_payto_uri", "name"), ) } }
\ No newline at end of file diff --git a/bank/src/main/kotlin/tech/libeufin/bank/db/ExchangeDAO.kt b/bank/src/main/kotlin/tech/libeufin/bank/db/ExchangeDAO.kt index 8d1ddee9..0788a77d 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/db/ExchangeDAO.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/db/ExchangeDAO.kt @@ -40,6 +40,7 @@ class ExchangeDAO(private val db: Database) { ,(amount).val AS amount_val ,(amount).frac AS amount_frac ,debtor_payto_uri + ,debtor_name ,reserve_pub FROM taler_exchange_incoming AS tfr JOIN bank_account_transactions AS txs @@ -50,7 +51,7 @@ class ExchangeDAO(private val db: Database) { row_id = it.getLong("bank_transaction_id"), date = it.getTalerTimestamp("transaction_date"), amount = it.getAmount("amount", db.bankCurrency), - debit_account = it.getString("debtor_payto_uri"), + debit_account = it.getFullPayto("debtor_payto_uri", "debtor_name"), reserve_pub = EddsaPublicKey(it.getBytes("reserve_pub")), ) } @@ -67,6 +68,7 @@ class ExchangeDAO(private val db: Database) { ,(amount).val AS amount_val ,(amount).frac AS amount_frac ,creditor_payto_uri + ,creditor_name ,wtid ,exchange_base_url FROM taler_exchange_outgoing AS tfr @@ -78,7 +80,7 @@ class ExchangeDAO(private val db: Database) { row_id = it.getLong("bank_transaction_id"), date = it.getTalerTimestamp("transaction_date"), amount = it.getAmount("amount", db.bankCurrency), - credit_account = it.getString("creditor_payto_uri"), + credit_account = it.getFullPayto("creditor_payto_uri", "creditor_name"), wtid = ShortHashCode(it.getBytes("wtid")), exchange_base_url = it.getString("exchange_base_url") ) diff --git a/bank/src/main/kotlin/tech/libeufin/bank/db/TransactionDAO.kt b/bank/src/main/kotlin/tech/libeufin/bank/db/TransactionDAO.kt index 6dd9d364..82d4a7dd 100644 --- a/bank/src/main/kotlin/tech/libeufin/bank/db/TransactionDAO.kt +++ b/bank/src/main/kotlin/tech/libeufin/bank/db/TransactionDAO.kt @@ -145,7 +145,9 @@ class TransactionDAO(private val db: Database) { val stmt = conn.prepareStatement(""" SELECT creditor_payto_uri + ,creditor_name ,debtor_payto_uri + ,debtor_name ,subject ,(amount).val AS amount_val ,(amount).frac AS amount_frac @@ -161,8 +163,8 @@ class TransactionDAO(private val db: Database) { stmt.setString(2, login) stmt.oneOrNull { BankAccountTransactionInfo( - creditor_payto_uri = it.getString("creditor_payto_uri"), - debtor_payto_uri = it.getString("debtor_payto_uri"), + creditor_payto_uri = it.getFullPayto("creditor_payto_uri", "creditor_name"), + debtor_payto_uri = it.getFullPayto("debtor_payto_uri", "debtor_name"), amount = it.getAmount("amount", db.bankCurrency), direction = TransactionDirection.valueOf(it.getString("direction")), subject = it.getString("subject"), @@ -184,7 +186,9 @@ class TransactionDAO(private val db: Database) { ,(amount).val AS amount_val ,(amount).frac AS amount_frac ,debtor_payto_uri + ,debtor_name ,creditor_payto_uri + ,creditor_name ,subject ,direction FROM bank_account_transactions WHERE @@ -192,8 +196,8 @@ class TransactionDAO(private val db: Database) { BankAccountTransactionInfo( row_id = it.getLong("bank_transaction_id"), date = it.getTalerTimestamp("transaction_date"), - debtor_payto_uri = it.getString("debtor_payto_uri"), - creditor_payto_uri = it.getString("creditor_payto_uri"), + creditor_payto_uri = it.getFullPayto("creditor_payto_uri", "creditor_name"), + debtor_payto_uri = it.getFullPayto("debtor_payto_uri", "debtor_name"), amount = it.getAmount("amount", db.bankCurrency), subject = it.getString("subject"), direction = TransactionDirection.valueOf(it.getString("direction")) @@ -213,6 +217,7 @@ class TransactionDAO(private val db: Database) { ,(amount).val AS amount_val ,(amount).frac AS amount_frac ,debtor_payto_uri + ,debtor_name ,subject FROM bank_account_transactions WHERE direction='credit' AND """) { @@ -220,7 +225,7 @@ class TransactionDAO(private val db: Database) { row_id = it.getLong("bank_transaction_id"), date = it.getTalerTimestamp("transaction_date"), amount = it.getAmount("amount", db.bankCurrency), - debit_account = it.getString("debtor_payto_uri"), + debit_account = it.getFullPayto("debtor_payto_uri", "debtor_name"), subject = it.getString("subject") ) } diff --git a/bank/src/test/kotlin/CoreBankApiTest.kt b/bank/src/test/kotlin/CoreBankApiTest.kt index bd001feb..4eaddcda 100644 --- a/bank/src/test/kotlin/CoreBankApiTest.kt +++ b/bank/src/test/kotlin/CoreBankApiTest.kt @@ -206,7 +206,7 @@ class CoreBankAccountsApiTest { client.post("/accounts") { json(req) }.assertOkJson<RegisterAccountResponse> { - assertEquals(IbanPayto.canonical, it.internal_payto_uri) + assertEquals(IbanPayto.withName("Jane").full, it.internal_payto_uri.full) } // Testing idempotency client.post("/accounts") { @@ -902,10 +902,10 @@ class CoreBankTransactionsApiTest { } }.assertConflict(TalerErrorCode.BANK_SAME_ACCOUNT) // Transaction to admin - val adminPayto = db.account.bankInfo("admin")!!.internalPaytoUri + val adminPayto = db.account.bankInfo("admin")!!.payto client.postA("/accounts/merchant/transactions") { json(valid_req) { - "payto_uri" to "$adminPayto?message=payout" + "payto_uri" to "${adminPayto.payto}?message=payout" } }.assertConflict(TalerErrorCode.BANK_ADMIN_CREDITOR) |