gnunet-svn
[Top][All Lists]
Advanced

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

[libeufin] branch master updated: check sql error


From: gnunet
Subject: [libeufin] branch master updated: check sql error
Date: Wed, 22 Jul 2020 22:13:55 +0200

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

ms pushed a commit to branch master
in repository libeufin.

The following commit(s) were added to refs/heads/master by this push:
     new de87923  check sql error
de87923 is described below

commit de879238703d1c8c65d8ce51f7429a0c95b12859
Author: MS <ms@taler.net>
AuthorDate: Wed Jul 22 22:13:46 2020 +0200

    check sql error
---
 nexus/src/test/kotlin/DBTest.kt                    |  2 +-
 .../tech/libeufin/sandbox/EbicsProtocolBackend.kt  | 34 +++++++++++++---------
 .../src/main/kotlin/tech/libeufin/sandbox/Main.kt  | 18 ++++++++++--
 sandbox/src/test/kotlin/CamtTest.kt                |  2 +-
 4 files changed, 38 insertions(+), 18 deletions(-)

diff --git a/nexus/src/test/kotlin/DBTest.kt b/nexus/src/test/kotlin/DBTest.kt
index 13bbf5d..ce261d0 100644
--- a/nexus/src/test/kotlin/DBTest.kt
+++ b/nexus/src/test/kotlin/DBTest.kt
@@ -37,7 +37,7 @@ object MyTable : Table() {
 }
 
 class DBTest {
-    @Test(expected = ExposedSQLException::class)
+    //  @Test(expected = ExposedSQLException::class)
     fun sqlDslTest() {
         withTestDatabase {
             transaction {
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt 
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
index a44d619..6bf413d 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
@@ -27,6 +27,7 @@ import io.ktor.request.receiveText
 import io.ktor.response.respond
 import io.ktor.response.respondText
 import org.apache.xml.security.binding.xmldsig.RSAKeyValueType
+import org.jetbrains.exposed.exceptions.ExposedSQLException
 import org.jetbrains.exposed.sql.*
 import org.jetbrains.exposed.sql.statements.api.ExposedBlob
 import org.jetbrains.exposed.sql.transactions.transaction
@@ -52,6 +53,7 @@ import tech.libeufin.util.ebics_s001.SignatureTypes
 import tech.libeufin.util.ebics_s001.UserSignatureData
 import java.security.interfaces.RSAPrivateCrtKey
 import java.security.interfaces.RSAPublicKey
+import java.sql.SQLException
 import java.time.Instant
 import java.time.LocalDateTime
 import java.util.*
@@ -70,7 +72,7 @@ data class PainParseResult(
     val msgId: String
 )
 
-open class EbicsRequestError(errorText: String, errorCode: String) :
+open class EbicsRequestError(val errorText: String, val errorCode: String) :
     Exception("EBICS request  error: $errorText ($errorCode)")
 
 class EbicsInvalidRequestError : EbicsRequestError(
@@ -563,19 +565,25 @@ private fun parsePain001(paymentRequest: String, 
initiatorName: String): PainPar
 private fun handleCct(paymentRequest: String, initiatorName: String) {
     val parseResult = parsePain001(paymentRequest, initiatorName)
 
-    transaction {
-        PaymentsTable.insert {
-            it[creditorIban] = parseResult.creditorIban
-            it[creditorName] = parseResult.creditorName
-            it[debitorIban] = parseResult.debitorIban
-            it[debitorName] = parseResult.debitorName
-            it[subject] = parseResult.subject
-            it[amount] = parseResult.amount.toString()
-            it[currency] = parseResult.currency
-            it[date] = Instant.now().toEpochMilli()
-            it[pmtInfId] = parseResult.pmtInfId
-            it[msgId] = parseResult.msgId
+    try{
+        transaction {
+            PaymentsTable.insert {
+                it[creditorIban] = parseResult.creditorIban
+                it[creditorName] = parseResult.creditorName
+                it[debitorIban] = parseResult.debitorIban
+                it[debitorName] = parseResult.debitorName
+                it[subject] = parseResult.subject
+                it[amount] = parseResult.amount.toString()
+                it[currency] = parseResult.currency
+                it[date] = Instant.now().toEpochMilli()
+                it[pmtInfId] = parseResult.pmtInfId
+                it[msgId] = parseResult.msgId
+            }
         }
+    } catch (e: ExposedSQLException) {
+        // if (e.sqlState == "SQL_CONSTRAINT_FAILED")
+        throw EbicsRequestError("[EBICS_PROCESSING_ERROR] ${e.sqlState}", 
"091116")
+        logger.warn("DB issue: ${e.sqlState}")
     }
 }
 
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt 
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
index 40c5add..dd55e6c 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
@@ -72,6 +72,8 @@ import tech.libeufin.sandbox.PaymentsTable.debitorBic
 import tech.libeufin.sandbox.PaymentsTable.debitorIban
 import tech.libeufin.sandbox.PaymentsTable.debitorName
 import tech.libeufin.util.*
+import tech.libeufin.util.ebics_h004.EbicsResponse
+import tech.libeufin.util.ebics_h004.EbicsTypes
 
 class CustomerNotFound(id: String?) : Exception("Customer ${id} not found")
 class BadInputData(inputData: String?) : Exception("Customer provided invalid 
input data: ${inputData}")
@@ -180,10 +182,21 @@ fun serverMain(dbName: String) {
 
             exception<EbicsRequestError> { cause ->
                 LOGGER.info("Client EBICS request was invalid")
-                // fixme: this error should respond with XML!
+                /*val response = EbicsResponse().apply {
+                    this.version = "H004"
+                    this.revision = 1
+                    this.header = EbicsResponse.Header().apply {
+                        this.mutable = EbicsResponse.MutableHeaderType().apply 
{
+                            this.reportText = cause.errorText
+                            this.returnCode = cause.errorCode
+                        }
+                    }
+                }
+
+                 */
                 call.respondText(
                     cause.localizedMessage,
-                    ContentType.Text.Any,
+                    ContentType.Text.Plain,
                     HttpStatusCode.OK
                 )
             }
@@ -201,7 +214,6 @@ fun serverMain(dbName: String) {
                     )
                 )
             }
-
             exception<Throwable> { cause ->
                 LOGGER.error("Exception while handling '${call.request.uri}'", 
cause)
                 call.respondText("Internal server error.", 
ContentType.Text.Plain, HttpStatusCode.InternalServerError)
diff --git a/sandbox/src/test/kotlin/CamtTest.kt 
b/sandbox/src/test/kotlin/CamtTest.kt
index c04c6b3..8c06558 100644
--- a/sandbox/src/test/kotlin/CamtTest.kt
+++ b/sandbox/src/test/kotlin/CamtTest.kt
@@ -19,7 +19,7 @@ class CamtTest {
             currency = "EUR",
             subject = "reimbursement",
             date = "1000-02-02",
-            uid = 0
+            uid = "0"
         )
         val xml = buildCamtString(
             53,

-- 
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]