[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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [libeufin] branch master updated: Polymorphism.,
gnunet <=