[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libeufin] 02/06: craft INI message to send (nexus)
From: |
gnunet |
Subject: |
[libeufin] 02/06: craft INI message to send (nexus) |
Date: |
Wed, 06 Nov 2019 11:02:46 +0100 |
This is an automated email from the git hooks/post-receive script.
marcello pushed a commit to branch master
in repository libeufin.
commit d44eef4a4d184448c49417bd9136b8014d8fbeca
Author: Marcello Stanisci <address@hidden>
AuthorDate: Tue Nov 5 21:58:29 2019 +0100
craft INI message to send (nexus)
---
nexus/build.gradle | 1 +
nexus/src/main/kotlin/DB.kt | 3 ++
nexus/src/main/kotlin/Main.kt | 105 ++++++++++++++++++++++++++++++++++++++++--
3 files changed, 105 insertions(+), 4 deletions(-)
diff --git a/nexus/build.gradle b/nexus/build.gradle
index 5f93162..04c7f1c 100644
--- a/nexus/build.gradle
+++ b/nexus/build.gradle
@@ -32,6 +32,7 @@ dependencies {
implementation group: 'xerces', name: 'xercesImpl', version:
'2.6.2-jaxb-1.0.6'
implementation "javax.activation:activation:1.1"
implementation "org.glassfish.jaxb:jaxb-runtime:2.3.1"
+ implementation 'org.apache.santuario:xmlsec:2.1.4'
testImplementation group: 'junit', name: 'junit', version: '4.12'
}
diff --git a/nexus/src/main/kotlin/DB.kt b/nexus/src/main/kotlin/DB.kt
index 45176f6..b567c5d 100644
--- a/nexus/src/main/kotlin/DB.kt
+++ b/nexus/src/main/kotlin/DB.kt
@@ -2,8 +2,11 @@ package tech.libeufin.nexus
import org.jetbrains.exposed.dao.*
import org.jetbrains.exposed.sql.*
+import org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManager
+import org.jetbrains.exposed.sql.transactions.TransactionManager
import org.jetbrains.exposed.sql.transactions.transaction
import tech.libeufin.sandbox.EbicsHosts
+import java.sql.Connection
object EbicsSubscribersTable: IntIdTable() {
val ebicsURL = text("ebicsURL")
diff --git a/nexus/src/main/kotlin/Main.kt b/nexus/src/main/kotlin/Main.kt
index fd9e5d4..edc1680 100644
--- a/nexus/src/main/kotlin/Main.kt
+++ b/nexus/src/main/kotlin/Main.kt
@@ -41,15 +41,42 @@ import io.ktor.server.engine.embeddedServer
import io.ktor.server.netty.Netty
import org.jetbrains.exposed.sql.transactions.transaction
import org.slf4j.LoggerFactory
-import tech.libeufin.sandbox.CryptoUtil
-import tech.libeufin.sandbox.EbicsSubscribers
-import tech.libeufin.sandbox.SandboxError
+import tech.libeufin.sandbox.*
+import tech.libeufin.schema.ebics_h004.EbicsUnsecuredRequest
+import tech.libeufin.schema.ebics_h004.OrderDetails
+import tech.libeufin.schema.ebics_h004.StaticHeader
+import tech.libeufin.schema.ebics_s001.PubKeyValueType
+import tech.libeufin.schema.ebics_s001.SignaturePubKeyInfoType
+import tech.libeufin.schema.ebics_s001.SignaturePubKeyOrderData
import java.text.DateFormat
import javax.sql.rowset.serial.SerialBlob
+fun testData() {
+
+ val pairA = CryptoUtil.generateRsaKeyPair(2048)
+ val pairB = CryptoUtil.generateRsaKeyPair(2048)
+ val pairC = CryptoUtil.generateRsaKeyPair(2048)
+
+ transaction {
+ EbicsSubscriberEntity.new {
+ ebicsURL = "http://localhost:5000/ebicsweb"
+ userID = "USER1"
+ partnerID = "PARTNER1"
+ systemID = "SYSTEM1"
+ hostID = "host01"
+
+ signaturePrivateKey = SerialBlob(pairA.private.encoded)
+ encryptionPrivateKey = SerialBlob(pairB.private.encoded)
+ authenticationPrivateKey = SerialBlob(pairC.private.encoded)
+ }
+ }
+}
+
fun main() {
dbCreateTables()
+ testData() // gets always id == 1
+
val logger = LoggerFactory.getLogger("tech.libeufin.nexus")
val server = embeddedServer(Netty, port = 5001) {
@@ -98,7 +125,6 @@ fun main() {
val id = transaction {
-
EbicsSubscriberEntity.new {
ebicsURL = body.ebicsURL
hostID = body.hostID
@@ -116,7 +142,78 @@ fun main() {
HttpStatusCode.OK,
EbicsSubscriberInfoResponse(id)
)
+ return@post
+ }
+
+ post("/ebics/subscribers/{id}/sendIni") {
+ // empty body for now..?
+ val id = try {
+ call.parameters["id"]!!.toInt()
+
+ } catch (e: Exception) {
+ e.printStackTrace()
+ call.respond(
+ HttpStatusCode.BadRequest,
+ NexusError(e.message.toString())
+ )
+ return@post
+ }
+
+ val iniRequest = EbicsUnsecuredRequest()
+
+ val url = transaction {
+ val subscriber = EbicsSubscriberEntity.findById(id)
+
+ iniRequest.version = "H004"
+ iniRequest.revision = 1
+
+ iniRequest.header = EbicsUnsecuredRequest.Header()
+ iniRequest.header.static = StaticHeader()
+ iniRequest.header.mutable =
EbicsUnsecuredRequest.Header.EmptyMutableHeader()
+ iniRequest.header.static.orderDetails = OrderDetails()
+ iniRequest.header.static.orderDetails.orderAttribute =
"DZNNN"
+ iniRequest.header.static.orderDetails.orderType = "INI"
+ iniRequest.header.static.securityMedium = "0000"
+ iniRequest.header.static.hostID = subscriber!!.hostID
+ iniRequest.header.static.userID = subscriber!!.userID
+ iniRequest.header.static.partnerID = subscriber!!.partnerID
+ iniRequest.header.static.systemID = subscriber!!.systemID
+
+ iniRequest.body = EbicsUnsecuredRequest.Body()
+ iniRequest.body.dataTransfer =
EbicsUnsecuredRequest.Body.UnsecuredDataTransfer()
+ iniRequest.body.dataTransfer.orderData =
EbicsUnsecuredRequest.Body.UnsecuredDataTransfer.OrderData()
+
+ val tmpKey =
CryptoUtil.loadRsaPrivateKey(subscriber.signaturePrivateKey.toByteArray())
+ val orderData = SignaturePubKeyOrderData()
+
+ orderData.signaturePubKeyInfo = SignaturePubKeyInfoType()
+ orderData.signaturePubKeyInfo.pubKeyValue =
PubKeyValueType()
+ orderData.signaturePubKeyInfo.pubKeyValue.rsaKeyValue =
org.apache.xml.security.binding.xmldsig.RSAKeyValueType()
+
orderData.signaturePubKeyInfo.pubKeyValue.rsaKeyValue.exponent =
tmpKey.publicExponent.toByteArray()
+
orderData.signaturePubKeyInfo.pubKeyValue.rsaKeyValue.modulus =
tmpKey.modulus.toByteArray()
+ orderData.signaturePubKeyInfo.signatureVersion = "A006"
+ orderData.partnerID = subscriber.partnerID
+ orderData.userID = subscriber.userID
+
+ iniRequest.body.dataTransfer.orderData.value =
EbicsOrderUtil.encodeOrderDataXml(orderData)
+
+ subscriber.ebicsURL
+ }
+
+ if (iniRequest == null) {
+ call.respond(
+ HttpStatusCode.NotFound,
+ NexusError("Could not find that subscriber")
+ )
+ return@post
+ }
+ logger.info("About to POST this:
${XMLUtil.convertJaxbToString(iniRequest)}")
+
+ call.respond(
+ HttpStatusCode.OK,
+ NexusError("All Good.")
+ )
return@post
}
--
To stop receiving notification emails like this one, please contact
address@hidden.
- [libeufin] branch master updated (8868572 -> c98ef14), gnunet, 2019/11/06
- [libeufin] 04/06: nexus POSTs INI (hits invalid XML for now), gnunet, 2019/11/06
- [libeufin] 02/06: craft INI message to send (nexus),
gnunet <=
- [libeufin] 01/06: Implement /ebics/subscribers (nexus)., gnunet, 2019/11/06
- [libeufin] 06/06: make systemID nullable + catch != 200 responses (nexus), gnunet, 2019/11/06
- [libeufin] 03/06: use the ".apply {}" notation, gnunet, 2019/11/06
- [libeufin] 05/06: get INI to validate, gnunet, 2019/11/06