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:
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"])