libeufin

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

commit b252736bab5d7bee04178b15c659ed0aaf222200
parent efe096a3c8c6122f0710d272e60e2e35feb32531
Author: MS <ms@taler.net>
Date:   Wed,  3 Feb 2021 09:42:04 +0100

add refund table

Diffstat:
Mnexus/src/main/kotlin/tech/libeufin/nexus/DB.kt | 17+++++++++++++++++
Mnexus/src/main/kotlin/tech/libeufin/nexus/Taler.kt | 29+++++++++++++++++++++++------
2 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt @@ -58,6 +58,23 @@ class TalerRequestedPaymentEntity(id: EntityID<Long>) : LongEntity(id) { var creditAccount by TalerRequestedPaymentsTable.creditAccount } +object TalerInvalidIncomingPaymentsTable : LongIdTable() { + val payment = reference("payment", NexusBankTransactionsTable) + val timestampMs = long("timestampMs") + val debtorPaytoUri = text("incomingPaytoUri") + val refunded = bool("refunded").default(true) +} + +class TalerInvalidIncomingPaymentEntity(id: EntityID<Long>) : LongEntity(id) { + companion object : LongEntityClass<TalerInvalidIncomingPaymentEntity>(TalerInvalidIncomingPaymentsTable) + + var payment by NexusBankTransactionEntity referencedOn TalerInvalidIncomingPaymentsTable.payment + var timestampMs by TalerInvalidIncomingPaymentsTable.timestampMs + var debtorPaytoUri by TalerInvalidIncomingPaymentsTable.debtorPaytoUri + var refunded by TalerInvalidIncomingPaymentsTable.refunded +} + + /** * This is the table of the incoming payments. Entries are merely "pointers" to the * entries from the raw payments table. diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Taler.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/Taler.kt @@ -382,19 +382,36 @@ private fun ingestIncoming(payment: NexusBankTransactionEntity, txDtls: Transact logger.warn("missing debtor agent") return } + if (debtorAgent.bic == null) { + logger.warn("Not allowing transactions missing the BIC. IBAN and name: ${debtorIban}, $debtorName") + return + } val reservePub = extractReservePubFromSubject(subject) - if (reservePub == null) { - // FIXME: send back! + if (reservePub == null){ logger.warn("could not find reserve pub in remittance information") + TalerInvalidIncomingPaymentEntity.new { + this.payment = payment + timestampMs = System.currentTimeMillis() + debtorPaytoUri = buildIbanPaytoUri( + debtorIban, debtorAgent.bic, debtorName, "DBIT" + ) + } + // FIXME: send back! return } + if (!CryptoUtil.checkValidEddsaPublicKey(reservePub)) { // FIXME: send back! logger.warn("invalid public key") - return - } - if (debtorAgent.bic == null) { - logger.warn("Not allowing transactions missing the BIC. IBAN and name: ${debtorIban}, $debtorName") + TalerInvalidIncomingPaymentEntity.new { + this.payment = payment + timestampMs = System.currentTimeMillis() + debtorPaytoUri = buildIbanPaytoUri( + debtorIban, debtorAgent.bic, debtorName, "DBIT" + ) + } + logger.warn("Invalid public key found") + // FIXME: send back! return } TalerIncomingPaymentEntity.new {