commit be8f352a7e202e0857a401f277f899ac80ebf9e3
parent 0baa2eefdae2194949d017bc120b775bc3b87829
Author: Antoine A <>
Date: Tue, 15 Jul 2025 17:34:10 +0200
nexus: make HKB a requirement for setup
Diffstat:
1 file changed, 80 insertions(+), 86 deletions(-)
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/cli/EbicsSetup.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/cli/EbicsSetup.kt
@@ -246,109 +246,103 @@ class EbicsSetup: CliktCommand() {
// Check account information
logger.info("Doing administrative request HKD")
- try {
- cfg.withDb { db, _ ->
- EbicsClient(
- cfg,
- client,
- db,
- ebicsLogger,
- clientKeys,
- bankKeys
- ).download(EbicsOrder.V3.HKD, null, null, false) { stream ->
- val (partner, users) = EbicsAdministrative.parseHKD(stream)
- val user = users.find { it -> it.id == cfg.ebics.host.ebicsUserId }
- // Debug logging
- logger.debug {
- buildString {
- if (partner.name != null || partner.accounts.isNotEmpty()) {
- append("Partner Info: ")
- if (partner.name != null) {
- append("'")
- append(partner.name)
- append("' - ")
- }
- for ((iban, currency) in partner.accounts) {
- append(iban)
- append('_')
- append(currency)
- }
- append('\n')
+ cfg.withDb { db, _ ->
+ EbicsClient(
+ cfg,
+ client,
+ db,
+ ebicsLogger,
+ clientKeys,
+ bankKeys
+ ).download(EbicsOrder.V3.HKD, null, null, false) { stream ->
+ val (partner, users) = EbicsAdministrative.parseHKD(stream)
+ val user = users.find { it -> it.id == cfg.ebics.host.ebicsUserId }
+ // Debug logging
+ logger.debug {
+ buildString {
+ if (partner.name != null || partner.accounts.isNotEmpty()) {
+ append("Partner Info: ")
+ if (partner.name != null) {
+ append("'")
+ append(partner.name)
+ append("' - ")
+ }
+ for ((iban, currency) in partner.accounts) {
+ append(iban)
+ append('_')
+ append(currency)
}
- append("Supported orders:\n")
- for ((order, description) in partner.orders) {
+ append('\n')
+ }
+ append("Supported orders:\n")
+ for ((order, description) in partner.orders) {
+ append("- ")
+ append(order.description())
+ append(": ")
+ append(description)
+ append('\n')
+ }
+ if (user != null) {
+ append("Authorized orders:\n")
+ for ((order) in partner.orders) {
append("- ")
append(order.description())
- append(": ")
- append(description)
append('\n')
}
- if (user != null) {
- append("Authorized orders:\n")
- for ((order) in partner.orders) {
- append("- ")
- append(order.description())
- append('\n')
- }
- }
}
}
+ }
- // Check partner info match config
- if (partner.name != null && partner.name != cfg.ebics.account.name)
- logger.warn("Expected NAME '${cfg.ebics.account.name}' from config got '${partner.name}' from bank")
- val account = partner.accounts.find { it.iban == cfg.ebics.account.iban }
- if (account != null) {
- if (account.currency != null && account.currency != cfg.currency)
- logger.error("Expected CURRENCY '${cfg.currency}' from config got '${account.currency}' from bank")
- } else if (partner.accounts.isNotEmpty()) {
- val ibans = partner.accounts.map { it.iban }.joinToString(" ")
- logger.error("Expected IBAN ${cfg.ebics.account.iban} from config got $ibans from bank")
- }
+ // Check partner info match config
+ if (partner.name != null && partner.name != cfg.ebics.account.name)
+ logger.warn("Expected NAME '${cfg.ebics.account.name}' from config got '${partner.name}' from bank")
+ val account = partner.accounts.find { it.iban == cfg.ebics.account.iban }
+ if (account != null) {
+ if (account.currency != null && account.currency != cfg.currency)
+ logger.error("Expected CURRENCY '${cfg.currency}' from config got '${account.currency}' from bank")
+ } else if (partner.accounts.isNotEmpty()) {
+ val ibans = partner.accounts.map { it.iban }.joinToString(" ")
+ logger.error("Expected IBAN ${cfg.ebics.account.iban} from config got $ibans from bank")
+ }
- val instantDebitOrder = cfg.ebics.dialect.instantDirectDebit()
- val debitOrder = cfg.ebics.dialect.directDebit()
- val requireOrders = cfg.ebics.dialect.downloadOrders()
+ val instantDebitOrder = cfg.ebics.dialect.instantDirectDebit()
+ val debitOrder = cfg.ebics.dialect.directDebit()
+ val requireOrders = cfg.ebics.dialect.downloadOrders()
- val partnerOrders = partner.orders.map { it.order }
+ val partnerOrders = partner.orders.map { it.order }
- // Check partner support for direct debit orders
- if (instantDebitOrder != null && instantDebitOrder !in partnerOrders) {
- logger.warn("Unsupported instant debit order: ${instantDebitOrder.description()}")
- }
- if (debitOrder !in partnerOrders) {
- logger.warn("Unsupported debit order: ${debitOrder.description()}")
+ // Check partner support for direct debit orders
+ if (instantDebitOrder != null && instantDebitOrder !in partnerOrders) {
+ logger.warn("Unsupported instant debit order: ${instantDebitOrder.description()}")
+ }
+ if (debitOrder !in partnerOrders) {
+ logger.warn("Unsupported debit order: ${debitOrder.description()}")
+ }
+
+ // Check partner support required orders
+ val unsupportedOrder = requireOrders subtract partnerOrders
+ if (unsupportedOrder.isNotEmpty()) {
+ logger.warn("Unsupported orders: {}", unsupportedOrder.map(EbicsOrder::description).joinToString(" "))
+ }
+
+ if (user != null) {
+ // Check user is authorized for direct debit orders
+ if (instantDebitOrder != null && instantDebitOrder in partnerOrders && instantDebitOrder !in user.permissions) {
+ logger.warn("Unauthorized instant debit order: ${instantDebitOrder.description()}")
}
-
- // Check partner support required orders
- val unsupportedOrder = requireOrders subtract partnerOrders
- if (unsupportedOrder.isNotEmpty()) {
- logger.warn("Unsupported orders: {}", unsupportedOrder.map(EbicsOrder::description).joinToString(" "))
+ if (debitOrder in partnerOrders && debitOrder !in user.permissions) {
+ logger.warn("Unauthorized debit order: ${debitOrder.description()}")
}
- if (user != null) {
- // Check user is authorized for direct debit orders
- if (instantDebitOrder != null && instantDebitOrder in partnerOrders && instantDebitOrder !in user.permissions) {
- logger.warn("Unauthorized instant debit order: ${instantDebitOrder.description()}")
- }
- if (debitOrder in partnerOrders && debitOrder !in user.permissions) {
- logger.warn("Unauthorized debit order: ${debitOrder.description()}")
- }
-
- // Check user is authorized for required orders
- val unauthorizedOrders = requireOrders subtract user.permissions subtract unsupportedOrder
- if (unauthorizedOrders.isNotEmpty()) {
- logger.warn("Unauthorized orders: {}", unauthorizedOrders.map(EbicsOrder::description).joinToString(" "))
- }
-
- logger.info("Subscriber status: {}", user.status.description)
+ // Check user is authorized for required orders
+ val unauthorizedOrders = requireOrders subtract user.permissions subtract unsupportedOrder
+ if (unauthorizedOrders.isNotEmpty()) {
+ logger.warn("Unauthorized orders: {}", unauthorizedOrders.map(EbicsOrder::description).joinToString(" "))
}
+
+ logger.info("Subscriber status: {}", user.status.description)
}
}
- } catch (e: Exception) {
- // This can happen if HKD is not supported
- logger.warn("HKD failed: ${e.fmt()}")
- logger.trace("", e)
}
println("setup ready")