gnunet-svn
[Top][All Lists]
Advanced

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

[libeufin] branch master updated: do tentativs HPB request


From: gnunet
Subject: [libeufin] branch master updated: do tentativs HPB request
Date: Tue, 16 Jun 2020 11:54:57 +0200

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

dold pushed a commit to branch master
in repository libeufin.

The following commit(s) were added to refs/heads/master by this push:
     new 3843f67  do tentativs HPB request
3843f67 is described below

commit 3843f67b2806231ffc0911055179bb013531de20
Author: Florian Dold <florian.dold@gmail.com>
AuthorDate: Tue Jun 16 15:24:47 2020 +0530

    do tentativs HPB request
---
 .../kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt | 56 ++++++++++++++++------
 1 file changed, 42 insertions(+), 14 deletions(-)

diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
index 6fad1db..57d531a 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
@@ -31,21 +31,15 @@ import com.itextpdf.kernel.pdf.PdfWriter
 import com.itextpdf.layout.Document
 import com.itextpdf.layout.element.AreaBreak
 import com.itextpdf.layout.element.Paragraph
-import io.ktor.application.Application
-import io.ktor.application.ApplicationCall
 import io.ktor.application.call
 import io.ktor.client.HttpClient
 import io.ktor.http.ContentType
 import io.ktor.http.HttpStatusCode
-import io.ktor.request.receive
 import io.ktor.request.receiveOrNull
 import io.ktor.response.respond
 import io.ktor.response.respondText
 import io.ktor.routing.Route
-import io.ktor.routing.Routing
 import io.ktor.routing.post
-import io.ktor.util.pipeline.PipelineContext
-import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
 import org.jetbrains.exposed.sql.statements.api.ExposedBlob
 import org.jetbrains.exposed.sql.transactions.transaction
 import tech.libeufin.nexus.*
@@ -440,28 +434,58 @@ fun getEbicsConnectionDetails(conn: 
NexusBankConnectionEntity): Any {
     return node
 }
 
+/**
+ * Do the Hpb request when we don't know whether our keys have been submitted 
or not.
+ *
+ * Return true when the tentative HPB request succeeded, and thus key 
initialization is done.
+ */
+private suspend fun tentativeHpb(client: HttpClient, connId: String): Boolean {
+    val subscriber = transaction { getEbicsSubscriberDetails(connId) }
+    val hpbData = try {
+        doEbicsHpbRequest(client, subscriber)
+    } catch (e: EbicsProtocolError) {
+        logger.info("failed tentative hpb request", e)
+        return false
+    }
+    transaction {
+        val conn = NexusBankConnectionEntity.findById(connId)
+        if (conn == null) {
+            throw NexusError(HttpStatusCode.NotFound, "bank connection 
'$connId' not found")
+        }
+        val subscriberEntity =
+            EbicsSubscriberEntity.find { 
EbicsSubscribersTable.nexusBankConnection eq conn.id }.first()
+        subscriberEntity.ebicsIniState = EbicsInitState.SENT
+        subscriberEntity.ebicsHiaState = EbicsInitState.SENT
+        subscriberEntity.bankAuthenticationPublicKey =
+            ExposedBlob((hpbData.authenticationPubKey.encoded))
+        subscriberEntity.bankEncryptionPublicKey = 
ExposedBlob((hpbData.encryptionPubKey.encoded))
+    }
+    return true
+}
+
 suspend fun connectEbics(client: HttpClient, connId: String) {
     val subscriber = transaction { getEbicsSubscriberDetails(connId) }
     if (subscriber.bankAuthPub != null && subscriber.bankEncPub != null) {
         return
     }
+    if (subscriber.ebicsIniState == EbicsInitState.UNKNOWN || 
subscriber.ebicsHiaState == EbicsInitState.UNKNOWN) {
+        if (tentativeHpb(client, connId)) {
+            return
+        }
+    }
     val iniDone = when (subscriber.ebicsIniState) {
         EbicsInitState.NOT_SENT, EbicsInitState.UNKNOWN -> {
             val iniResp = doEbicsIniRequest(client, subscriber)
             iniResp.bankReturnCode == EbicsReturnCode.EBICS_OK && 
iniResp.technicalReturnCode == EbicsReturnCode.EBICS_OK
         }
-        else -> {
-            false
-        }
+        EbicsInitState.SENT -> true
     }
     val hiaDone = when (subscriber.ebicsHiaState) {
         EbicsInitState.NOT_SENT, EbicsInitState.UNKNOWN -> {
             val hiaResp = doEbicsHiaRequest(client, subscriber)
             hiaResp.bankReturnCode == EbicsReturnCode.EBICS_OK && 
hiaResp.technicalReturnCode == EbicsReturnCode.EBICS_OK
         }
-        else -> {
-            false
-        }
+        EbicsInitState.SENT -> true
     }
     val hpbData = try {
         doEbicsHpbRequest(client, subscriber)
@@ -513,14 +537,18 @@ fun getEbicsKeyLetterPdf(conn: 
NexusBankConnectionEntity): ByteArray {
     val dateStr = date.format(DateTimeFormatter.ISO_LOCAL_DATE)
 
     fun writeCommon(doc: Document) {
-        doc.add(Paragraph("""
+        doc.add(
+            Paragraph(
+                """
             Datum: $dateStr
             Teilnehmer: ${conn.id.value}
             Host-ID: ${ebicsSubscriber.hostId}
             User-ID: ${ebicsSubscriber.userId}
             Partner-ID: ${ebicsSubscriber.partnerId}
             ES version: A006
-        """.trimIndent()))
+        """.trimIndent()
+            )
+        )
     }
 
     fun writeKey(doc: Document, priv: RSAPrivateCrtKey) {

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