[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libeufin] 02/11: HTD response content comes from DB now.
From: |
gnunet |
Subject: |
[libeufin] 02/11: HTD response content comes from DB now. |
Date: |
Thu, 30 Apr 2020 21:46:45 +0200 |
This is an automated email from the git hooks/post-receive script.
marcello pushed a commit to branch master
in repository libeufin.
commit dd9869d57f8bb310927c8827aa4f921b94c6ec20
Author: Marcello Stanisci <address@hidden>
AuthorDate: Thu Apr 30 15:32:59 2020 +0200
HTD response content comes from DB now.
---
integration-tests/test-ebics.py | 2 +
.../src/main/kotlin/tech/libeufin/sandbox/DB.kt | 2 +
.../tech/libeufin/sandbox/EbicsProtocolBackend.kt | 221 +++++++--------------
.../main/kotlin/tech/libeufin/sandbox/Helpers.kt | 9 +
.../src/main/kotlin/tech/libeufin/sandbox/JSON.kt | 3 +-
5 files changed, 92 insertions(+), 145 deletions(-)
diff --git a/integration-tests/test-ebics.py b/integration-tests/test-ebics.py
index c0afecc..a45b6fd 100755
--- a/integration-tests/test-ebics.py
+++ b/integration-tests/test-ebics.py
@@ -38,6 +38,7 @@ EBICS_VERSION = "H004"
SUBSCRIBER_IBAN="GB33BUKB20201555555555"
SUBSCRIBER_BIC="BUKBGB22"
SUBSCRIBER_NAME="Oliver Smith"
+BANK_ACCOUNT_LABEL="savings"
#0.a
resp = post(
@@ -74,6 +75,7 @@ resp = post(
iban=SUBSCRIBER_IBAN,
bic=SUBSCRIBER_BIC,
name=SUBSCRIBER_NAME
+ label=BANK_ACCOUNT_LABEL
)
)
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
index 838fe14..64ae0b4 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
@@ -253,6 +253,7 @@ object BankAccountsTable : IntIdTable() {
val iban = text("iban")
val bic = text("bic")
val name = text("name")
+ val label = text("label")
val subscriber = reference("subscriber", EbicsSubscribersTable)
}
class BankAccountEntity(id: EntityID<Int>) : IntEntity(id) {
@@ -260,6 +261,7 @@ class BankAccountEntity(id: EntityID<Int>) : IntEntity(id) {
var iban by BankAccountsTable.iban
var bic by BankAccountsTable.bic
var name by BankAccountsTable.name
+ var label by BankAccountsTable.label
var subscriber by EbicsSubscriberEntity referencedOn
BankAccountsTable.subscriber
}
diff --git
a/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
index 5788064..61d70b0 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
@@ -50,6 +50,7 @@ import java.util.zip.InflaterInputStream
import javax.sql.rowset.serial.SerialBlob
import javax.xml.datatype.DatatypeFactory
import org.apache.commons.compress.utils.IOUtils
+import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.joda.time.DateTime
import org.joda.time.Instant
import java.io.BufferedInputStream
@@ -634,86 +635,79 @@ private suspend fun ApplicationCall.receiveEbicsXml():
Document {
return requestDocument
}
-fun handleEbicsHtd(): ByteArray {
- val htd = HTDResponseOrderData().apply {
- this.partnerInfo = EbicsTypes.PartnerInfo().apply {
- this.accountInfoList = listOf(
- EbicsTypes.AccountInfo().apply {
- this.id = "acctid1"
- this.accountHolder = "Mina Musterfrau"
- this.accountNumberList = listOf(
- EbicsTypes.GeneralAccountNumber().apply {
- this.international = true
- this.value = "DE21500105174751659277"
- }
- )
- this.currency = "EUR"
- this.description = "ACCT"
- this.bankCodeList = listOf(
- EbicsTypes.GeneralBankCode().apply {
- this.international = true
- this.value = "INGDDEFFXXX"
- }
- )
- },
- EbicsTypes.AccountInfo().apply {
- this.id = "glsdemo"
- this.accountHolder = "Mina Musterfrau"
- this.accountNumberList = listOf(
- EbicsTypes.GeneralAccountNumber().apply {
- this.international = true
- this.value = "DE91430609670123123123"
- }
- )
- this.currency = "EUR"
- this.description = "glsdemoacct"
- this.bankCodeList = listOf(
- EbicsTypes.GeneralBankCode().apply {
- this.international = true
- this.value = "GENODEM1GLS"
- }
- )
- }
- )
- this.addressInfo = EbicsTypes.AddressInfo().apply {
- this.name = "Foo"
- }
- this.bankInfo = EbicsTypes.BankInfo().apply {
- this.hostID = "host01"
+private fun makePartnerInfo(subscriber: EbicsSubscriberEntity):
EbicsTypes.PartnerInfo {
+ val bankAccount = getBankAccountFromSubscriber(subscriber)
+ return EbicsTypes.PartnerInfo().apply {
+ this.accountInfoList = listOf(
+ EbicsTypes.AccountInfo().apply {
+ this.id = bankAccount.label
+ this.accountHolder = bankAccount.name
+ this.accountNumberList = listOf(
+ EbicsTypes.GeneralAccountNumber().apply {
+ this.international = true
+ this.value = bankAccount.iban
+ }
+ )
+ this.currency = "EUR"
+ this.description = "Ordinary Bank Account"
+ this.bankCodeList = listOf(
+ EbicsTypes.GeneralBankCode().apply {
+ this.international = true
+ this.value = bankAccount.bic
+ }
+ )
}
- this.orderInfoList = listOf(
- EbicsTypes.AuthOrderInfoType().apply {
- this.description = "foo1"
- this.orderType = "C53"
- this.transferType = "Download"
- },
- EbicsTypes.AuthOrderInfoType().apply {
- this.description = "foo2"
- this.orderType = "C52"
- this.transferType = "Download"
- },
- EbicsTypes.AuthOrderInfoType().apply {
- this.description = "foo3"
- this.orderType = "CCC"
- this.transferType = "Upload"
- },
- EbicsTypes.AuthOrderInfoType().apply {
- this.description = "foo4"
- this.orderType = "VMK"
- this.transferType = "Download"
- },
- EbicsTypes.AuthOrderInfoType().apply {
- this.description = "foo5"
- this.orderType = "STA"
- this.transferType = "Download"
- }
- )
+ )
+ this.addressInfo = EbicsTypes.AddressInfo().apply {
+ this.name = "Address Info Object"
+ }
+ this.bankInfo = EbicsTypes.BankInfo().apply {
+ this.hostID = subscriber.hostId
}
+ this.orderInfoList = listOf(
+ EbicsTypes.AuthOrderInfoType().apply {
+ this.description = "Transactions statement"
+ this.orderType = "C53"
+ this.transferType = "Download"
+ },
+ EbicsTypes.AuthOrderInfoType().apply {
+ this.description = "Transactions report"
+ this.orderType = "C52"
+ this.transferType = "Download"
+ },
+ EbicsTypes.AuthOrderInfoType().apply {
+ this.description = "Payment initiation (ZIPped payload)"
+ this.orderType = "CCC"
+ this.transferType = "Upload"
+ },
+ EbicsTypes.AuthOrderInfoType().apply {
+ this.description = "Payment initiation (plain text payload)"
+ this.orderType = "CCT"
+ this.transferType = "Upload"
+ },
+ EbicsTypes.AuthOrderInfoType().apply {
+ this.description = "vmk"
+ this.orderType = "VMK"
+ this.transferType = "Download"
+ },
+ EbicsTypes.AuthOrderInfoType().apply {
+ this.description = "sta"
+ this.orderType = "STA"
+ this.transferType = "Download"
+ }
+ )
+ }
+}
+
+private fun handleEbicsHtd(requestContext: RequestContext): ByteArray {
+ val bankAccount = getBankAccountFromSubscriber(requestContext.subscriber)
+ val htd = HTDResponseOrderData().apply {
+ this.partnerInfo = makePartnerInfo(requestContext.subscriber)
this.userInfo = EbicsTypes.UserInfo().apply {
this.name = "Some User"
this.userID = EbicsTypes.UserIDType().apply {
this.status = 5
- this.value = "USER1"
+ this.value = requestContext.subscriber.userId
}
this.permissionList = listOf(
EbicsTypes.UserPermission().apply {
@@ -727,78 +721,15 @@ fun handleEbicsHtd(): ByteArray {
return str.toByteArray()
}
-
-fun handleEbicsHkd(): ByteArray {
+private fun handleEbicsHkd(requestContext: RequestContext): ByteArray {
val hkd = HKDResponseOrderData().apply {
- this.partnerInfo = EbicsTypes.PartnerInfo().apply {
- this.accountInfoList = listOf(
- EbicsTypes.AccountInfo().apply {
- this.id = "acctid1"
- this.accountHolder = "Mina Musterfrau"
- this.accountNumberList = listOf(
- EbicsTypes.GeneralAccountNumber().apply {
- this.international = true
- this.value = "DE21500105174751659277"
- }
- )
- this.currency = "EUR"
- this.description = "ACCT"
- this.bankCodeList = listOf(
- EbicsTypes.GeneralBankCode().apply {
- this.international = true
- this.value = "INGDDEFFXXX"
- }
- )
- },
- EbicsTypes.AccountInfo().apply {
- this.id = "glsdemo"
- this.accountHolder = "Mina Musterfrau"
- this.accountNumberList = listOf(
- EbicsTypes.GeneralAccountNumber().apply {
- this.international = true
- this.value = "DE91430609670123123123"
- }
- )
- this.currency = "EUR"
- this.description = "glsdemoacct"
- this.bankCodeList = listOf(
- EbicsTypes.GeneralBankCode().apply {
- this.international = true
- this.value = "GENODEM1GLS"
- }
- )
- }
- )
- this.addressInfo = EbicsTypes.AddressInfo().apply {
- this.name = "Foo"
- }
- this.bankInfo = EbicsTypes.BankInfo().apply {
- this.hostID = "host01"
- }
- this.orderInfoList = listOf(
- EbicsTypes.AuthOrderInfoType().apply {
- this.description = "foo"
- this.orderType = "C53"
- this.transferType = "Download"
- },
- EbicsTypes.AuthOrderInfoType().apply {
- this.description = "foo"
- this.orderType = "C52"
- this.transferType = "Download"
- },
- EbicsTypes.AuthOrderInfoType().apply {
- this.description = "foo"
- this.orderType = "CCC"
- this.transferType = "Upload"
- }
- )
- }
+ this.partnerInfo = makePartnerInfo(requestContext.subscriber)
this.userInfoList = listOf(
EbicsTypes.UserInfo().apply {
this.name = "Some User"
this.userID = EbicsTypes.UserIDType().apply {
this.status = 1
- this.value = "USER1"
+ this.value = requestContext.subscriber.userId
}
this.permissionList = listOf(
EbicsTypes.UserPermission().apply {
@@ -832,8 +763,8 @@ private fun
handleEbicsDownloadTransactionInitialization(requestContext: Request
requestContext.requestObject.header.static.orderDetails?.orderType ?:
throw EbicsInvalidRequestError()
println("handling initialization for order type $orderType")
val response = when (orderType) {
- "HTD" -> handleEbicsHtd()
- "HKD" -> handleEbicsHkd()
+ "HTD" -> handleEbicsHtd(requestContext)
+ "HKD" -> handleEbicsHkd(requestContext)
/* Temporarily handling C52/C53 with same logic */
"C53" -> handleEbicsC53(requestContext)
"TSD" -> handleEbicsTSD(requestContext)
@@ -1048,7 +979,6 @@ private fun makeReqestContext(requestObject:
EbicsRequest): RequestContext {
)
}
-
suspend fun ApplicationCall.ebicsweb() {
val requestDocument = receiveEbicsXml()
@@ -1140,7 +1070,10 @@ suspend fun ApplicationCall.ebicsweb() {
LOGGER.info("Unknown message, just logging it!")
respond(
HttpStatusCode.NotImplemented,
- SandboxError("Not Implemented")
+ SandboxError(
+ HttpStatusCode.NotImplemented,
+ "Not Implemented"
+ )
)
}
}
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Helpers.kt
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Helpers.kt
index 22fd6e7..5e7afa5 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Helpers.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Helpers.kt
@@ -1,9 +1,18 @@
package tech.libeufin.sandbox
import io.ktor.http.HttpStatusCode
+import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.and
import org.jetbrains.exposed.sql.transactions.transaction
+fun getBankAccountFromSubscriber(subscriber: EbicsSubscriberEntity):
BankAccountEntity {
+ return transaction {
+ BankAccountEntity.find(BankAccountsTable.subscriber eq subscriber.id)
+ }.firstOrNull() ?: throw SandboxError(
+ HttpStatusCode.NotFound,
+ "Subscriber doesn't have any bank account"
+ )
+}
fun getEbicsSubscriberFromDetails(userID: String, partnerID: String, hostID:
String): EbicsSubscriberEntity {
return transaction {
EbicsSubscriberEntity.find {
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/JSON.kt
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/JSON.kt
index 4b0b02b..092b022 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/JSON.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/JSON.kt
@@ -62,5 +62,6 @@ data class BankAccountRequest(
val subscriber: EbicsSubscriberElement,
val iban: String,
val bic: String,
- val name: String
+ val name: String,
+ val label: String
)
--
To stop receiving notification emails like this one, please contact
address@hidden.
- [libeufin] branch master updated (9cd5454 -> 96b5026), gnunet, 2020/04/30
- [libeufin] 04/11: Integration test., gnunet, 2020/04/30
- [libeufin] 01/11: Sandbox admin., gnunet, 2020/04/30
- [libeufin] 03/11: fix db problem in test, gnunet, 2020/04/30
- [libeufin] 02/11: HTD response content comes from DB now.,
gnunet <=
- [libeufin] 06/11: Integration test., gnunet, 2020/04/30
- [libeufin] 07/11: Fix CCT handling., gnunet, 2020/04/30
- [libeufin] 09/11: fix time parser, gnunet, 2020/04/30
- [libeufin] 11/11: Fix amount format., gnunet, 2020/04/30
- [libeufin] 05/11: Reducing code., gnunet, 2020/04/30
- [libeufin] 10/11: Move more generic helpers to util package., gnunet, 2020/04/30
- [libeufin] 08/11: Integration test., gnunet, 2020/04/30