gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libeufin] 04/04: input amounts


From: gnunet
Subject: [libeufin] 04/04: input amounts
Date: Thu, 16 Jun 2022 12:05:16 +0200

This is an automated email from the git hooks/post-receive script.

ms pushed a commit to branch master
in repository libeufin.

commit 8d4919c1043f980698cc1b2b43446594f74ddfd8
Author: MS <ms@taler.net>
AuthorDate: Thu Jun 16 12:03:17 2022 +0200

    input amounts
    
    only validate amounts as strings, without parsing
    them into a number type.
---
 .../tech/libeufin/sandbox/EbicsProtocolBackend.kt       | 17 +++++++++++++----
 sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt   |  3 ++-
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt 
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
index 97789737..4ec3af1b 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
@@ -58,7 +58,7 @@ data class PainParseResult(
     val debtorName: String,
     val debtorBic: String?,
     val subject: String,
-    val amount: Amount,
+    val amount: String,
     val currency: String,
     val pmtInfId: String,
     val msgId: String
@@ -663,9 +663,14 @@ private fun parsePain001(paymentRequest: String): 
PainParseResult {
 
                         }
                     }
+                    if (!validatePlainAmount(txDetails.amt.textContent)) {
+                        throw EbicsProcessingError(
+                            "Amount number malformed: 
${txDetails.amt.textContent}"
+                        )
+                    }
                     PainParseResult(
                         currency = txDetails.amt.getAttribute("Ccy"),
-                        amount = Amount(txDetails.amt.textContent),
+                        amount = txDetails.amt.textContent,
                         subject = txDetails.subject,
                         debtorIban = debtorIban,
                         debtorName = debtorName,
@@ -692,6 +697,10 @@ private fun handleCct(paymentRequest: String) {
     transaction {
         try {
             val bankAccount = getBankAccountFromIban(parseResult.debtorIban)
+            if (parseResult.currency != bankAccount.demoBank.currency) throw 
EbicsRequestError(
+                "[EBICS_PROCESSING_ERROR] Currency (${parseResult.currency}) 
not supported.",
+                "091116"
+            )
             BankAccountTransactionEntity.new {
                 account = bankAccount
                 demobank = bankAccount.demoBank
@@ -702,7 +711,7 @@ private fun handleCct(paymentRequest: String) {
                 debtorName = parseResult.debtorName
                 debtorBic = parseResult.debtorBic
                 subject = parseResult.subject
-                amount = parseResult.amount.toString()
+                amount = parseResult.amount
                 currency = parseResult.currency
                 date = getUTCnow().toInstant().toEpochMilli()
                 pmtInfId = parseResult.pmtInfId
@@ -723,7 +732,7 @@ private fun handleCct(paymentRequest: String) {
                     debtorName = parseResult.debtorName
                     debtorBic = parseResult.debtorBic
                     subject = parseResult.subject
-                    amount = parseResult.amount.toString()
+                    amount = parseResult.amount
                     currency = parseResult.currency
                     date = getUTCnow().toInstant().toEpochMilli()
                     pmtInfId = parseResult.pmtInfId
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt 
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
index 2147ca57..67c8b371 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
@@ -1191,6 +1191,7 @@ val sandboxApp: Application.() -> Unit = {
                      * return a pair, consisting of the bank account and the 
demobank
                      * hosting it.
                      */
+                    if (!validatePlainAmount(amount)) throw 
badRequest("Invalid amount: $amount")
                     transaction {
                         wireTransfer(
                             debitAccount = bankAccount,
@@ -1199,7 +1200,7 @@ val sandboxApp: Application.() -> Unit = {
                             subject = payto.message ?: throw badRequest(
                                 "'message' query parameter missing in Payto 
address"
                             ),
-                            amount = parseAmount(amount).amount.toPlainString()
+                            amount = amount
                         )
                     }
                     call.respond(object {})

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]