gnunet-svn
[Top][All Lists]
Advanced

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

[libeufin] branch master updated: Export more context along keys backup.


From: gnunet
Subject: [libeufin] branch master updated: Export more context along keys backup.
Date: Wed, 29 Jan 2020 16:27:46 +0100

This is an automated email from the git hooks/post-receive script.

marcello pushed a commit to branch master
in repository libeufin.

The following commit(s) were added to refs/heads/master by this push:
     new dcb39fb  Export more context along keys backup.
dcb39fb is described below

commit dcb39fba9611065a6a042967c908cbbd5f7b7939
Author: Marcello Stanisci <address@hidden>
AuthorDate: Wed Jan 29 16:27:23 2020 +0100

    Export more context along keys backup.
---
 nexus/src/main/kotlin/tech/libeufin/nexus/JSON.kt |  4 ++
 nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt | 62 +++++++++++++----------
 sandbox/src/main/python/libeufin-cli              |  8 +--
 3 files changed, 42 insertions(+), 32 deletions(-)

diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/JSON.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/JSON.kt
index 9cd9651..98594f5 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/JSON.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/JSON.kt
@@ -22,6 +22,10 @@ data class EbicsDateRange(
  * the client must provide the passphrase.
  */
 data class EbicsKeysBackup(
+    val userID: String,
+    val partnerID: String,
+    val hostID: String,
+    val ebicsURL: String,
     val authBlob: String,
     val encBlob: String,
     val sigBlob: String,
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
index 44bcc48..71d27bf 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
@@ -237,14 +237,6 @@ fun main() {
 
                 return@post
             }
-
-            post("/ebics/subscribers/{id}/restore-backup") {
-                // Creates a *new* customer with nexus-internal identifier "id"
-                // and imports the backup into it.
-                // This endpoint *fails* if a subscriber with the same 
nexus-internal id
-                // already exists.
-            }
-
             get("/ebics/subscribers/{id}/sendHtd") {
                 val id = expectId(call.parameters["id"])
                 val subscriberData = transaction {
@@ -256,7 +248,6 @@ fun main() {
                         )
                     )
                 }
-
                 val response = client.postToBankSigned<EbicsRequest, 
EbicsResponse>(
                     subscriberData.ebicsUrl,
                     createDownloadInitializationPhase(
@@ -570,6 +561,16 @@ fun main() {
             post("/ebics/subscribers/{id}/restoreBackup") {
                 val body = call.receive<EbicsKeysBackup>()
                 val id = expectId(call.parameters["id"])
+                val subscriber = transaction {
+                    EbicsSubscriberEntity.findById(id)
+                }
+                if (subscriber != null) {
+                    call.respond(
+                        HttpStatusCode.Conflict,
+                        NexusError("ID exists, please choose a new one")
+                    )
+                    return@post
+                }
                 val (authKey, encKey, sigKey) = try {
                     Triple(
                         CryptoUtil.decryptKey(
@@ -584,31 +585,47 @@ fun main() {
                     )
                 } catch (e: Exception) {
                     e.printStackTrace()
+                    LOGGER.info("Restoring keys failed, probably due to wrong 
passphrase")
                     throw BadBackup(HttpStatusCode.BadRequest)
                 }
-                transaction {
-                    val subscriber = EbicsSubscriberEntity.findById(id) ?: 
throw SubscriberNotFoundError(
-                        HttpStatusCode.NotFound
-                    )
-                    subscriber.encryptionPrivateKey = 
SerialBlob(encKey.encoded)
-                    subscriber.authenticationPrivateKey = 
SerialBlob(authKey.encoded)
-                    subscriber.signaturePrivateKey = SerialBlob(sigKey.encoded)
+                LOGGER.info("Restoring keys, creating new user: $id")
+                try {
+                    transaction {
+                        EbicsSubscriberEntity.new(id = 
expectId(call.parameters["id"])) {
+                            ebicsURL = body.ebicsURL
+                            hostID = body.hostID
+                            partnerID = body.partnerID
+                            userID = body.userID
+                            signaturePrivateKey = SerialBlob(sigKey.encoded)
+                            encryptionPrivateKey = SerialBlob(encKey.encoded)
+                            authenticationPrivateKey = 
SerialBlob(authKey.encoded)
+                        }
+                    }
+                } catch (e: Exception) {
+                    print(e)
+                    call.respond(NexusError("Could not store the new account 
$id into database"))
+                    return@post
                 }
                 call.respondText(
                     "Keys successfully restored",
                     ContentType.Text.Plain,
                     HttpStatusCode.OK
                 )
+                return@post
             }
+            /* performs a keys backup */
             post("/ebics/subscribers/{id}/backup") {
-
                 val id = expectId(call.parameters["id"])
                 val body = call.receive<EbicsBackupRequest>()
-                val content = transaction {
+                val response = transaction {
                     val subscriber = EbicsSubscriberEntity.findById(id) ?: 
throw SubscriberNotFoundError(
                         HttpStatusCode.NotFound
                     )
                     EbicsKeysBackup(
+                        userID = subscriber.userID,
+                        hostID = subscriber.hostID,
+                        partnerID = subscriber.partnerID,
+                        ebicsURL = subscriber.ebicsURL,
                         authBlob = bytesToBase64(CryptoUtil.encryptKey(
                             subscriber.authenticationPrivateKey.toByteArray(),
                             body.passphrase
@@ -626,13 +643,11 @@ fun main() {
                 call.response.headers.append("Content-Disposition", 
"attachment")
                 call.respond(
                     HttpStatusCode.OK,
-                    content
+                    response
                 )
             }
             post("/ebics/subscribers/{id}/sendTst") {
-
                 val id = expectId(call.parameters["id"])
-
                 val subscriberData = transaction {
                     containerInit(
                         EbicsSubscriberEntity.findById(id)
@@ -642,7 +657,6 @@ fun main() {
                     )
                 }
                 val payload = "PAYLOAD"
-
                 if (subscriberData.bankEncPub == null) {
                     call.respondText(
                         "Bank encryption key not found, request HPB first!\n",
@@ -708,7 +722,6 @@ fun main() {
                     HttpStatusCode.OK
                 )
             }
-            
             post("/ebics/subscribers/{id}/sync") {
                 val id = expectId(call.parameters["id"])
                 val bundle = transaction {
@@ -762,15 +775,12 @@ fun main() {
                         ).encoded
                     )
                 }
-
                 call.respondText("Bank keys stored in database\n", 
ContentType.Text.Plain, HttpStatusCode.OK)
                 return@post
             }
 
             post("/ebics/subscribers/{id}/sendHia") {
-
                 val id = expectId(call.parameters["id"])
-
                 val subscriberData = transaction {
                     containerInit(
                         EbicsSubscriberEntity.findById(id)
diff --git a/sandbox/src/main/python/libeufin-cli 
b/sandbox/src/main/python/libeufin-cli
index 5a505ae..833f7c7 100755
--- a/sandbox/src/main/python/libeufin-cli
+++ b/sandbox/src/main/python/libeufin-cli
@@ -154,12 +154,8 @@ def restore(obj, account_id, backup_file, nexus_base_url):
         print("Could not reach the bank")
         return
 
-    if response.status_code != 200:
-        print("Unsuccessful status code gotten: 
{}".format(response.status_code))
-        return
-
-    print("Keys successfully restored")
-
+    print("Status code: {}".format(response.status_code))
+    print("Nexus says: {}".format(response.content.decode("utf-8")))
 
 @ebics.command(help="Obtain passphrase-protected private keys")
 @click.pass_obj

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

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