gnunet-svn
[Top][All Lists]
Advanced

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

[libeufin] branch master updated: Polymorphism.


From: gnunet
Subject: [libeufin] branch master updated: Polymorphism.
Date: Mon, 03 May 2021 09:53:39 +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 b1cf569  Polymorphism.
b1cf569 is described below

commit b1cf569f0e3953a016b98dab2e231b2657d616d1
Author: MS <ms@taler.net>
AuthorDate: Mon May 3 09:51:50 2021 +0200

    Polymorphism.
    
    Moving the Ebics 'connect()' function inside the
    Ebics connection plugin.
---
 .../tech/libeufin/nexus/BankConnectionProtocol.kt  |  21 ++++-
 .../kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt | 104 +++++++++++----------
 .../tech/libeufin/nexus/server/NexusServer.kt      |   7 +-
 3 files changed, 74 insertions(+), 58 deletions(-)

diff --git 
a/nexus/src/main/kotlin/tech/libeufin/nexus/BankConnectionProtocol.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/BankConnectionProtocol.kt
index c7ebc72..c54edc6 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/BankConnectionProtocol.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/BankConnectionProtocol.kt
@@ -19,5 +19,22 @@
 
 package tech.libeufin.nexus
 
-// TODO: define common interface for all bank connection protocols here!
-interface BankConnectionProtocol
\ No newline at end of file
+import io.ktor.client.HttpClient
+import io.ktor.http.HttpStatusCode
+import tech.libeufin.nexus.ebics.*
+
+// 'const' allows only primitive types.
+val bankConnectionRegistry: Map<String, BankConnectionProtocol> = mapOf(
+    "ebics" to EbicsBankConnectionProtocol()
+)
+
+interface BankConnectionProtocol {
+    suspend fun connect(client: HttpClient, connId: String)
+}
+
+fun getConnectionPlugin(connId: String): BankConnectionProtocol {
+    return bankConnectionRegistry.get(connId) ?: throw NexusError(
+        HttpStatusCode.NotFound,
+        "Connection type '${connId}' not available"
+    )
+}
\ No newline at end of file
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 307ab31..2bd74ca 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
@@ -627,57 +627,6 @@ private suspend fun tentativeHpb(client: HttpClient, 
connId: String): Boolean {
     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
-        }
-        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
-        }
-        EbicsInitState.SENT -> true
-    }
-    val hpbData = try {
-        doEbicsHpbRequest(client, subscriber)
-    } catch (e: EbicsProtocolError) {
-        logger.warn("failed hpb request", e)
-        null
-    }
-    transaction {
-        val conn = NexusBankConnectionEntity.findByName(connId)
-        if (conn == null) {
-            throw NexusError(HttpStatusCode.NotFound, "bank connection 
'$connId' not found")
-        }
-        val subscriberEntity =
-            EbicsSubscriberEntity.find { 
NexusEbicsSubscribersTable.nexusBankConnection eq conn.id }.first()
-        if (iniDone) {
-            subscriberEntity.ebicsIniState = EbicsInitState.SENT
-        }
-        if (hiaDone) {
-            subscriberEntity.ebicsHiaState = EbicsInitState.SENT
-        }
-        if (hpbData != null) {
-            subscriberEntity.bankAuthenticationPublicKey =
-                ExposedBlob((hpbData.authenticationPubKey.encoded))
-            subscriberEntity.bankEncryptionPublicKey = 
ExposedBlob((hpbData.encryptionPubKey.encoded))
-        }
-    }
-}
-
 fun formatHex(ba: ByteArray): String {
     var out = ""
     for (i in ba.indices) {
@@ -833,3 +782,56 @@ fun createEbicsBankConnection(bankConnectionName: String, 
user: NexusUserEntity,
         ebicsHiaState = EbicsInitState.NOT_SENT
     }
 }
+
+class EbicsBankConnectionProtocol: BankConnectionProtocol {
+    override suspend fun connect(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
+            }
+            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
+            }
+            EbicsInitState.SENT -> true
+        }
+        val hpbData = try {
+            doEbicsHpbRequest(client, subscriber)
+        } catch (e: EbicsProtocolError) {
+            logger.warn("failed hpb request", e)
+            null
+        }
+        transaction {
+            val conn = NexusBankConnectionEntity.findByName(connId)
+            if (conn == null) {
+                throw NexusError(HttpStatusCode.NotFound, "bank connection 
'$connId' not found")
+            }
+            val subscriberEntity =
+                EbicsSubscriberEntity.find { 
NexusEbicsSubscribersTable.nexusBankConnection eq conn.id }.first()
+            if (iniDone) {
+                subscriberEntity.ebicsIniState = EbicsInitState.SENT
+            }
+            if (hiaDone) {
+                subscriberEntity.ebicsHiaState = EbicsInitState.SENT
+            }
+            if (hpbData != null) {
+                subscriberEntity.bankAuthenticationPublicKey =
+                    ExposedBlob((hpbData.authenticationPubKey.encoded))
+                subscriberEntity.bankEncryptionPublicKey = 
ExposedBlob((hpbData.encryptionPubKey.encoded))
+            }
+        }
+    }
+}
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt
index 737912d..e8e9895 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt
@@ -848,11 +848,8 @@ fun serverMain(dbName: String, host: String, port: Int) {
                     authenticateRequest(call.request)
                     requireBankConnection(call, "connectionName")
                 }
-                when (conn.type) {
-                    "ebics" -> {
-                        connectEbics(client, conn.connectionId)
-                    }
-                }
+                val plugin = getConnectionPlugin(conn.type)
+                plugin.connect(client, conn.connectionId)
                 call.respond(NexusMessage(message = "Connection successful"))
             }
 

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