summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMS <ms@taler.net>2023-10-18 13:02:15 +0200
committerMS <ms@taler.net>2023-10-18 13:02:15 +0200
commit4180d9496f5584c7ad8cce35a7c78a3d7d7896b3 (patch)
tree550c5a8024b58261e1fdef3d430fed699d4752fe
parent6f8d453230a17eff62d760e7ef442433923f8ac5 (diff)
downloadlibeufin-4180d9496f5584c7ad8cce35a7c78a3d7d7896b3.tar.gz
libeufin-4180d9496f5584c7ad8cce35a7c78a3d7d7896b3.tar.bz2
libeufin-4180d9496f5584c7ad8cce35a7c78a3d7d7896b3.zip
Reloading bank keys from disk after acceptance.
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt37
1 files changed, 26 insertions, 11 deletions
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
index 8416cc4b..83bbb887 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
@@ -55,7 +55,6 @@ import net.taler.wallet.crypto.Base32Crockford
import tech.libeufin.nexus.ebics.*
import tech.libeufin.util.*
import tech.libeufin.util.ebics_h004.EbicsTypes
-import java.io.StringWriter
import java.security.interfaces.RSAPrivateCrtKey
import java.security.interfaces.RSAPublicKey
import java.time.Instant
@@ -642,7 +641,7 @@ class EbicsSetup: CliktCommand() {
if ((!privsMaybe.submitted_hia) || forceKeysResubmission)
doKeysRequestAndUpdateState(cfg, privsMaybe, httpClient, KeysOrderType.HIA).apply { if (!this) exitProcess(1) }
}
- // Reloading new state from disk if any upload actually took place
+ // Reloading new state from disk if any upload (and therefore a disk write) actually took place
val haveSubmitted = forceKeysResubmission || keysNotSub
val privs = if (haveSubmitted) {
logger.info("Keys submitted to the bank, at ${cfg.hostBaseUrl}")
@@ -677,22 +676,38 @@ class EbicsSetup: CliktCommand() {
logger.info("Bank keys stored at ${cfg.bankPublicKeysFilename}")
}
// bank keys made it to the disk, check if they're accepted.
- val bankKeys = loadBankKeys(cfg.bankPublicKeysFilename)
- if (bankKeys == null) {
+ val bankKeysMaybe = loadBankKeys(cfg.bankPublicKeysFilename)
+ if (bankKeysMaybe == null) {
logger.error("Although previous checks, could not load the bank keys file from: ${cfg.bankPublicKeysFilename}")
exitProcess(1)
}
- if (!bankKeys.accepted) {
-
- if (autoAcceptKeys) bankKeys.accepted = true
- else bankKeys.accepted = askUserToAcceptKeys(bankKeys)
+ /**
+ * The following block potentially updates the bank keys state
+ * on disk, if that's the first time that they become accepted.
+ * If so, finally reloads the bank keys file from disk.
+ */
+ val bankKeys = if (!bankKeysMaybe.accepted) {
+
+ if (autoAcceptKeys) bankKeysMaybe.accepted = true
+ else bankKeysMaybe.accepted = askUserToAcceptKeys(bankKeysMaybe)
+
+ if (!bankKeysMaybe.accepted) {
+ logger.error("Cannot continue without accepting the bank keys.")
+ exitProcess(1)
+ }
- if (bankKeys.accepted && !syncJsonToDisk(bankKeys, cfg.bankPublicKeysFilename)) {
+ if (!syncJsonToDisk(bankKeysMaybe, cfg.bankPublicKeysFilename)) {
logger.error("Could not set bank keys as accepted on disk.")
exitProcess(1)
}
- }
- logger.info("Bank keys accepted.")
+ // Reloading after the disk write above.
+ loadBankKeys(cfg.bankPublicKeysFilename) ?: kotlin.run {
+ logger.error("Could not reload bank keys after disk write.")
+ exitProcess(1)
+ }
+ } else
+ bankKeysMaybe // keys were already accepted.
+
// Downloading the list of owned bank account(s).
val bankAccounts = runBlocking {
fetchBankAccounts(cfg, privs, bankKeys, httpClient)