gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]