libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit 9e3880d39fe2793ee4cd459799a307154f7369c4
parent b90ea6e2034d496f1f98490777ebcc6f72d80505
Author: Marcello Stanisci <stanisci.m@gmail.com>
Date:   Wed, 20 Nov 2019 00:49:47 +0100

main logic to backup keys

no passphrase protection for now

Diffstat:
Mnexus/src/main/kotlin/JSON.kt | 10+++++++++-
Mnexus/src/main/kotlin/Main.kt | 38++++++++++++++++++++++++++++++++++++++
2 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/nexus/src/main/kotlin/JSON.kt b/nexus/src/main/kotlin/JSON.kt @@ -3,11 +3,19 @@ package tech.libeufin.nexus import com.google.gson.annotations.JsonAdapter import com.squareup.moshi.JsonClass + +data class EbicsKeysBackup( + + val authBlob: ByteArray, + val encBlob: ByteArray, + val sigBlob: ByteArray +) + /** * This object is POSTed by clients _after_ having created * a EBICS subscriber at the sandbox. */ -@JsonClass(generateAdapter = true) +@JsonClass(generateAdapter = true) // USED? data class EbicsSubscriberInfoRequest( val ebicsURL: String, val hostID: String, diff --git a/nexus/src/main/kotlin/Main.kt b/nexus/src/main/kotlin/Main.kt @@ -738,7 +738,45 @@ fun main() { return@post } + post("/ebics/subscribers/{id}/restoreBackup") { + val body = call.receive<EbicsKeysBackup>() + val id = expectId(call.parameters["id"]) + + transaction { + val subscriber = EbicsSubscriberEntity.findById(id) ?: throw SubscriberNotFoundError(HttpStatusCode.NotFound) + subscriber.encryptionPrivateKey = SerialBlob(body.encBlob) + subscriber.authenticationPrivateKey = SerialBlob(body.authBlob) + subscriber.signaturePrivateKey = SerialBlob(body.sigBlob) + } + + call.respondText( + "Keys successfully restored", + ContentType.Text.Plain, + HttpStatusCode.OK + ) + + } + + get("/ebics/subscribers/{id}/backup") { + + val id = expectId(call.parameters["id"]) + val content = transaction { + val subscriber = EbicsSubscriberEntity.findById(id) ?: throw SubscriberNotFoundError(HttpStatusCode.NotFound) + EbicsKeysBackup( + authBlob = subscriber.authenticationPrivateKey.toByteArray(), + encBlob = subscriber.encryptionPrivateKey.toByteArray(), + sigBlob = subscriber.signaturePrivateKey.toByteArray() + ) + } + + call.response.headers.append("Content-Disposition", "attachment") + call.respond( + HttpStatusCode.OK, + content + ) + + } post("/ebics/subscribers/{id}/sendTst") { val id = expectId(call.parameters["id"])