libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit df12b5ac933851cda0f5115e5706417b9dc2f917
parent d3e2d17b42549fe4ab365336d5d056dda8731454
Author: ms <ms@taler.net>
Date:   Sat,  2 Oct 2021 10:23:13 +0200

handling 'bad gateway' at Nexus

Diffstat:
Mnexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsClient.kt | 31++++++++++++++++++++-----------
Mnexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt | 4+---
2 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsClient.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsClient.kt @@ -23,6 +23,7 @@ package tech.libeufin.nexus.ebics import io.ktor.client.HttpClient +import io.ktor.client.features.* import io.ktor.client.request.post import io.ktor.http.HttpStatusCode import org.slf4j.Logger @@ -36,18 +37,29 @@ private val logger: Logger = LoggerFactory.getLogger("tech.libeufin.util") private suspend inline fun HttpClient.postToBank(url: String, body: String): String { logger.debug("Posting: $body") if (!XMLUtil.validateFromString(body)) throw NexusError( - HttpStatusCode.InternalServerError, "EBICS (outgoing) document is invalid" + HttpStatusCode.InternalServerError, + "EBICS (outgoing) document is invalid" ) val response: String = try { - this.post<String>( + this.post( urlString = url, block = { this.body = body } ) - } catch (e: Exception) { - logger.warn("Exception during request", e) - throw NexusError(HttpStatusCode.InternalServerError, "Cannot reach the bank") + } catch (e: ClientRequestException) { + logger.error(e.message) + throw NexusError( + HttpStatusCode.BadGateway, + e.message + ) + } + catch (e: Exception) { + logger.error("Exception during request", e) + throw NexusError( + HttpStatusCode.BadGateway, + e.message ?: "Could not reach the bank" + ) } logger.debug("Receiving: $response") return response @@ -238,8 +250,7 @@ suspend fun doEbicsUploadTransaction( suspend fun doEbicsHostVersionQuery(client: HttpClient, ebicsBaseUrl: String, ebicsHostId: String): EbicsHevDetails { val ebicsHevRequest = makeEbicsHEVRequestRaw(ebicsHostId) val resp = client.postToBank(ebicsBaseUrl, ebicsHevRequest) - val versionDetails = parseEbicsHEVResponse(resp) - return versionDetails + return parseEbicsHEVResponse(resp) } suspend fun doEbicsIniRequest( @@ -251,8 +262,7 @@ suspend fun doEbicsIniRequest( subscriberDetails.ebicsUrl, request ) - val resp = parseAndDecryptEbicsKeyManagementResponse(subscriberDetails, respStr) - return resp + return parseAndDecryptEbicsKeyManagementResponse(subscriberDetails, respStr) } suspend fun doEbicsHiaRequest( @@ -264,8 +274,7 @@ suspend fun doEbicsHiaRequest( subscriberDetails.ebicsUrl, request ) - val resp = parseAndDecryptEbicsKeyManagementResponse(subscriberDetails, respStr) - return resp + return parseAndDecryptEbicsKeyManagementResponse(subscriberDetails, respStr) } diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt @@ -149,9 +149,7 @@ fun requireBankConnection(call: ApplicationCall, parameterKey: String): NexusBan return requireBankConnectionInternal(name) } -val client = HttpClient { - expectSuccess = false // this way, it does not throw exceptions on != 200 responses. -} +val client = HttpClient { followRedirects = true } fun serverMain(host: String, port: Int) { val server = embeddedServer(Netty, port = port, host = host) {