diff options
author | MS <ms@taler.net> | 2023-10-18 13:02:15 +0200 |
---|---|---|
committer | MS <ms@taler.net> | 2023-10-18 13:02:15 +0200 |
commit | 4180d9496f5584c7ad8cce35a7c78a3d7d7896b3 (patch) | |
tree | 550c5a8024b58261e1fdef3d430fed699d4752fe | |
parent | 6f8d453230a17eff62d760e7ef442433923f8ac5 (diff) | |
download | libeufin-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.kt | 37 |
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) |