commit 1ce76c52f15995d869f62e212f067e53e9369785
parent 159225a83bd263170f8ddfe0bb3ddb34c63abfa7
Author: ms <ms@taler.net>
Date: Fri, 15 Jan 2021 16:53:28 +0100
Avoid stack-trace for double download of accounts.
Diffstat:
3 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/cli/bin/libeufin-cli b/cli/bin/libeufin-cli
@@ -320,8 +320,7 @@ def list_offered_bank_accounts(obj, connection_name):
print("Could not reach nexus at " + url)
exit(1)
-
- tell_user(resp)
+ tell_user(resp, withsuccess=True)
@accounts.command(help="Schedules a new task")
@click.argument("account-name")
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
@@ -40,7 +40,9 @@ import io.ktor.response.respond
import io.ktor.response.respondText
import io.ktor.routing.Route
import io.ktor.routing.post
+import org.jetbrains.exposed.sql.and
import org.jetbrains.exposed.sql.insert
+import org.jetbrains.exposed.sql.select
import org.jetbrains.exposed.sql.statements.api.ExposedBlob
import org.jetbrains.exposed.sql.transactions.transaction
import tech.libeufin.nexus.*
@@ -333,9 +335,7 @@ private fun getEbicsSubscriberDetails(bankConnectionId: String): EbicsClientSubs
}
suspend fun ebicsFetchAccounts(connId: String, client: HttpClient) {
- val subscriberDetails = transaction {
- getEbicsSubscriberDetails(connId)
- }
+ val subscriberDetails = transaction { getEbicsSubscriberDetails(connId) }
val response = doEbicsDownloadTransaction(
client, subscriberDetails, "HTD", EbicsStandardOrderParams()
)
@@ -352,6 +352,11 @@ suspend fun ebicsFetchAccounts(connId: String, client: HttpClient) {
)
transaction {
payload.value.partnerInfo.accountInfoList?.forEach { accountInfo ->
+ val isDuplicate = OfferedBankAccountsTable.select {
+ OfferedBankAccountsTable.bankConnection eq connId and (
+ OfferedBankAccountsTable.offeredAccountId eq accountInfo.id)
+ }.firstOrNull()
+ if (isDuplicate != null) return@forEach
OfferedBankAccountsTable.insert { newRow ->
newRow[accountHolder] = accountInfo.accountHolder ?: "NOT GIVEN"
newRow[iban] = accountInfo.accountNumberList?.filterIsInstance<EbicsTypes.GeneralAccountNumber>()
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt
@@ -46,7 +46,6 @@ import io.ktor.response.respondText
import io.ktor.routing.*
import io.ktor.server.engine.embeddedServer
import io.ktor.server.netty.Netty
-import io.ktor.util.error
import io.ktor.utils.io.ByteReadChannel
import io.ktor.utils.io.jvm.javaio.toByteReadChannel
import io.ktor.utils.io.jvm.javaio.toInputStream
@@ -212,11 +211,8 @@ fun createLoopbackBankConnection(bankConnectionName: String, user: NexusUserEnti
}
fun requireBankConnectionInternal(connId: String): NexusBankConnectionEntity {
- val conn = transaction { NexusBankConnectionEntity.findById(connId) }
- if (conn == null) {
- throw NexusError(HttpStatusCode.NotFound, "bank connection '$connId' not found")
- }
- return conn
+ return transaction { NexusBankConnectionEntity.findById(connId) }
+ ?: throw NexusError(HttpStatusCode.NotFound, "bank connection '$connId' not found")
}
fun requireBankConnection(call: ApplicationCall, parameterKey: String): NexusBankConnectionEntity {