commit df12b5ac933851cda0f5115e5706417b9dc2f917
parent d3e2d17b42549fe4ab365336d5d056dda8731454
Author: ms <ms@taler.net>
Date: Sat, 2 Oct 2021 10:23:13 +0200
handling 'bad gateway' at Nexus
Diffstat:
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) {