libeufin

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

commit f8ae684976d2391ba991fd52cafd75fb20a6fe2c
parent b775d8ce5f71816c0e39aab8d19af88ce4588bc2
Author: Antoine A <>
Date:   Fri,  6 Sep 2024 13:35:14 +0200

common: clean code

Diffstat:
Mbank/src/main/kotlin/tech/libeufin/bank/auth/auth.kt | 4++--
Mbank/src/main/kotlin/tech/libeufin/bank/cli/BenchPwh.kt | 3---
Mbank/src/main/kotlin/tech/libeufin/bank/cli/CreateAccount.kt | 5-----
Mbank/src/main/kotlin/tech/libeufin/bank/db/ExchangeDAO.kt | 1-
Mbank/src/main/kotlin/tech/libeufin/bank/db/TransactionDAO.kt | 3+--
Mbank/src/test/kotlin/AmountTest.kt | 4----
Mbank/src/test/kotlin/CoreBankApiTest.kt | 2+-
Mbank/src/test/kotlin/GcTest.kt | 4++--
Mbank/src/test/kotlin/bench.kt | 13++++---------
Mcommon/src/main/kotlin/Table.kt | 2+-
Mcommon/src/main/kotlin/TalerConfig.kt | 14+++++++-------
Mcommon/src/main/kotlin/TalerMessage.kt | 3++-
Mcommon/src/main/kotlin/crypto/CryptoUtil.kt | 2+-
Mcommon/src/main/kotlin/db/config.kt | 1-
Mcommon/src/main/kotlin/db/types.kt | 6+++---
Mcommon/src/main/kotlin/helpers.kt | 4++--
Mcommon/src/main/kotlin/test/bench.kt | 12+++---------
Mcommon/src/test/kotlin/ParamsTest.kt | 2+-
Mcommon/src/test/kotlin/TxMedataTest.kt | 2--
Mnexus/src/main/kotlin/tech/libeufin/nexus/EbicsLogger.kt | 2+-
Mnexus/src/main/kotlin/tech/libeufin/nexus/XmlCombinators.kt | 2+-
Mnexus/src/main/kotlin/tech/libeufin/nexus/api/WireGatewayApi.kt | 2+-
Mnexus/src/main/kotlin/tech/libeufin/nexus/cli/EbicsFetch.kt | 4+---
Mnexus/src/main/kotlin/tech/libeufin/nexus/cli/EbicsSetup.kt | 1-
Mnexus/src/main/kotlin/tech/libeufin/nexus/cli/EbicsSubmit.kt | 2--
Mnexus/src/main/kotlin/tech/libeufin/nexus/cli/InitiatePayment.kt | 1-
Mnexus/src/main/kotlin/tech/libeufin/nexus/cli/Testing.kt | 5++---
Mnexus/src/main/kotlin/tech/libeufin/nexus/db/PaymentDAO.kt | 2+-
Mnexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsCommon.kt | 6+++---
Mnexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsOrder.kt | 10+++++-----
Mnexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsWS.kt | 8++++----
Mnexus/src/main/kotlin/tech/libeufin/nexus/iso20022/camt.kt | 3---
Mnexus/src/main/kotlin/tech/libeufin/nexus/iso20022/hac.kt | 5-----
Mnexus/src/main/kotlin/tech/libeufin/nexus/iso20022/pain001.kt | 2--
Mnexus/src/main/kotlin/tech/libeufin/nexus/iso20022/pain002.kt | 7-------
Mnexus/src/test/kotlin/DatabaseTest.kt | 3+--
Mnexus/src/test/kotlin/IngestionTest.kt | 6+++---
Mnexus/src/test/kotlin/Iso20022Test.kt | 1-
Mnexus/src/test/kotlin/WireGatewayApiTest.kt | 4++--
Mnexus/src/test/kotlin/bench.kt | 16++--------------
Mnexus/src/test/kotlin/helpers.kt | 2+-
Mtestbench/src/main/kotlin/Main.kt | 3+--
Mtestbench/src/test/kotlin/IntegrationTest.kt | 3+--
Mtestbench/src/test/kotlin/Iso20022Test.kt | 2+-
44 files changed, 61 insertions(+), 128 deletions(-)

diff --git a/bank/src/main/kotlin/tech/libeufin/bank/auth/auth.kt b/bank/src/main/kotlin/tech/libeufin/bank/auth/auth.kt @@ -30,8 +30,8 @@ import tech.libeufin.bank.TokenScope import tech.libeufin.bank.db.AccountDAO.CheckPasswordResult import tech.libeufin.bank.db.Database import tech.libeufin.common.* -import tech.libeufin.common.crypto.PwCrypto import tech.libeufin.common.api.intercept +import tech.libeufin.common.crypto.PwCrypto import java.time.Instant /** Used to store if the currently authenticated user is admin */ @@ -48,7 +48,7 @@ val ApplicationCall.username: String get() = parameters.expect("USERNAME") val PipelineContext<Unit, ApplicationCall>.username: String get() = call.username /** Check if current auth account is admin */ -val ApplicationCall.isAdmin: Boolean get() = attributes.getOrNull(AUTH_IS_ADMIN) ?: false +val ApplicationCall.isAdmin: Boolean get() = attributes.getOrNull(AUTH_IS_ADMIN) == true /** Check if current auth account is admin */ val PipelineContext<Unit, ApplicationCall>.isAdmin: Boolean get() = call.isAdmin diff --git a/bank/src/main/kotlin/tech/libeufin/bank/cli/BenchPwh.kt b/bank/src/main/kotlin/tech/libeufin/bank/cli/BenchPwh.kt @@ -20,12 +20,9 @@ package tech.libeufin.bank.cli import com.github.ajalt.clikt.core.CliktCommand -import com.github.ajalt.clikt.parameters.arguments.argument import com.github.ajalt.clikt.parameters.groups.provideDelegate import tech.libeufin.bank.bankConfig -import tech.libeufin.bank.db.AccountDAO.AccountPatchAuthResult import tech.libeufin.bank.logger -import tech.libeufin.bank.withDb import tech.libeufin.common.CommonOption import tech.libeufin.common.cliCmd import tech.libeufin.common.crypto.PwCrypto diff --git a/bank/src/main/kotlin/tech/libeufin/bank/cli/CreateAccount.kt b/bank/src/main/kotlin/tech/libeufin/bank/cli/CreateAccount.kt @@ -27,11 +27,6 @@ import com.github.ajalt.clikt.parameters.groups.OptionGroup import com.github.ajalt.clikt.parameters.groups.cooccurring import com.github.ajalt.clikt.parameters.groups.provideDelegate import com.github.ajalt.clikt.parameters.options.* -import com.github.ajalt.clikt.parameters.types.* -import io.ktor.server.application.* -import io.ktor.server.http.content.* -import io.ktor.server.response.* -import io.ktor.server.routing.* import kotlinx.serialization.json.Json import tech.libeufin.bank.* import tech.libeufin.bank.api.* diff --git a/bank/src/main/kotlin/tech/libeufin/bank/db/ExchangeDAO.kt b/bank/src/main/kotlin/tech/libeufin/bank/db/ExchangeDAO.kt @@ -19,7 +19,6 @@ package tech.libeufin.bank.db -import tech.libeufin.bank.* import tech.libeufin.common.* import tech.libeufin.common.db.* import java.time.Instant diff --git a/bank/src/main/kotlin/tech/libeufin/bank/db/TransactionDAO.kt b/bank/src/main/kotlin/tech/libeufin/bank/db/TransactionDAO.kt @@ -22,11 +22,10 @@ package tech.libeufin.bank.db import org.slf4j.Logger import org.slf4j.LoggerFactory import tech.libeufin.bank.BankAccountTransactionInfo -import tech.libeufin.bank.TransactionDirection import tech.libeufin.common.* import tech.libeufin.common.db.* -import java.time.Instant import java.sql.Types +import java.time.Instant private val logger: Logger = LoggerFactory.getLogger("libeufin-bank-tx-dao") diff --git a/bank/src/test/kotlin/AmountTest.kt b/bank/src/test/kotlin/AmountTest.kt @@ -19,12 +19,8 @@ import io.ktor.http.* import org.junit.Test -import tech.libeufin.bank.db.TransactionDAO.BankTransactionResult -import tech.libeufin.bank.db.WithdrawalDAO.WithdrawalCreationResult import tech.libeufin.common.* import tech.libeufin.common.db.* -import java.time.Instant -import java.util.* import kotlin.test.assertEquals class AmountTest { diff --git a/bank/src/test/kotlin/CoreBankApiTest.kt b/bank/src/test/kotlin/CoreBankApiTest.kt @@ -611,7 +611,7 @@ class CoreBankAccountsApiTest { } }.assertOkJson<CashoutResponse>().cashout_id fillTanInfo("customer") - val tan_id = client.postA("/accounts/customer/transactions") { + client.postA("/accounts/customer/transactions") { json { "payto_uri" to "$exchangePayto?message=payout" "amount" to "KUDOS:0.3" diff --git a/bank/src/test/kotlin/GcTest.kt b/bank/src/test/kotlin/GcTest.kt @@ -64,7 +64,7 @@ class GcTest { // Create test accounts val payto = IbanPayto.rand() - val oldPayto = client.post("/accounts") { + client.post("/accounts") { json { "username" to "old_account" "password" to "old_account-password" @@ -72,7 +72,7 @@ class GcTest { "cashout_payto_uri" to payto } }.assertOkJson<RegisterAccountResponse>().internal_payto_uri - val recentPayto = client.post("/accounts") { + client.post("/accounts") { json { "username" to "recent_account" "password" to "recent_account-password" diff --git a/bank/src/test/kotlin/bench.kt b/bank/src/test/kotlin/bench.kt @@ -23,18 +23,13 @@ import org.junit.Test import org.postgresql.jdbc.PgConnection import tech.libeufin.bank.* import tech.libeufin.common.* -import tech.libeufin.common.test.* import tech.libeufin.common.crypto.PwCrypto +import tech.libeufin.common.test.* import java.time.Instant import java.time.LocalDateTime import java.time.ZoneId import java.util.* import kotlin.math.max -import kotlin.math.pow -import kotlin.math.sqrt -import kotlin.time.DurationUnit -import kotlin.time.measureTime -import kotlin.time.toDuration class Bench { @@ -135,7 +130,7 @@ class Bench { client.get("/config").assertOk() // Accounts - val paytos = measureAction("account_create") { + measureAction("account_create") { client.post("/accounts") { json { "username" to "account_bench_$it" @@ -260,7 +255,7 @@ class Bench { } // Cashout - val converted = convert("KUDOS:0.1") + convert("KUDOS:0.1") val cashouts = measureAction("cashout_create") { client.postA("/accounts/customer/cashouts") { json { @@ -342,7 +337,7 @@ class Bench { // Other measureAction("monitor") { - val uuid = client.get("/monitor") { + client.get("/monitor") { pwAuth("admin") }.assertOk() } diff --git a/common/src/main/kotlin/Table.kt b/common/src/main/kotlin/Table.kt @@ -69,7 +69,7 @@ fun printTable( } else { first = false } - val (name, len) = met + val (_, len) = met val pad = len - str.displayLength() if (style.alignLeft) { append(str) diff --git a/common/src/main/kotlin/TalerConfig.kt b/common/src/main/kotlin/TalerConfig.kt @@ -109,7 +109,7 @@ data class ConfigSource( for (entry in pathEnv.splitToSequence(':')) { val path = Path(entry) if (path.resolve(execName).exists()) { - val parent = path.getParent() + val parent = path.parent if (parent != null) { return parent.toRealPath() } @@ -127,7 +127,7 @@ data class ConfigSource( * * @param source information about where to load configuration defaults from **/ -private class ConfigLoader internal constructor( +private class ConfigLoader( private val source: ConfigSource ) { private val sections: MutableMap<String, MutableMap<String, String>> = mutableMapOf() @@ -136,7 +136,7 @@ private class ConfigLoader internal constructor( * Load configuration defaults from the file system * and populate the PATHS section based on the installation path. */ - internal fun loadDefaults() { + fun loadDefaults() { val installDir = source.installPath() val section = sections.getOrPut("PATHS") { mutableMapOf() } @@ -187,7 +187,7 @@ private class ConfigLoader internal constructor( return TalerConfigError.generic(message) } - internal fun loadFromFile(file: Path, recursionDepth: Int, lineNum: Int) { + fun loadFromFile(file: Path, recursionDepth: Int, lineNum: Int) { if (recursionDepth > 128) { throw genericError(file, lineNum, "Recursion limit in config inlining") } @@ -205,7 +205,7 @@ private class ConfigLoader internal constructor( } } - internal fun loadFromMem(lines: Sequence<String>, source: Path?, recursionDepth: Int) { + fun loadFromMem(lines: Sequence<String>, source: Path?, recursionDepth: Int) { var currentSection: MutableMap<String, String>? = null for ((lineNum, line) in lines.withIndex()) { if (RE_LINE_OR_COMMENT.matches(line)) { @@ -274,7 +274,7 @@ private class ConfigLoader internal constructor( } } - internal fun finalize(): TalerConfig { + fun finalize(): TalerConfig { return TalerConfig(sections) } @@ -338,7 +338,7 @@ class TalerConfig internal constructor( if (dollarIndex == -1) { // Reached end of string result.append(str, cursor, str.length) - break; + break } // Append normal characters diff --git a/common/src/main/kotlin/TalerMessage.kt b/common/src/main/kotlin/TalerMessage.kt @@ -124,7 +124,8 @@ sealed interface IncomingBankTransaction { val date: TalerProtocolTimestamp val amount: TalerAmount val debit_account: String -}; +} + @Serializable @SerialName("KYCAUTH") data class IncomingKycAuthTransaction( diff --git a/common/src/main/kotlin/crypto/CryptoUtil.kt b/common/src/main/kotlin/crypto/CryptoUtil.kt @@ -280,7 +280,7 @@ object CryptoUtil { gen.init(builder.build()) val result = ByteArray(32) - gen.generateBytes(password.toCharArray(), result, 0, result.size); + gen.generateBytes(password.toCharArray(), result, 0, result.size) return result } } \ No newline at end of file diff --git a/common/src/main/kotlin/db/config.kt b/common/src/main/kotlin/db/config.kt @@ -44,7 +44,6 @@ fun jdbcFromPg(pgConn: String): String { require(pgConn.startsWith("postgresql://") || pgConn.startsWith("postgres://")) { "Not a Postgres connection string: $pgConn" } - var maybeUnixSocket = false val uri = URI(pgConn) val params = parseQueryString(uri.query ?: "", decode = false) diff --git a/common/src/main/kotlin/db/types.kt b/common/src/main/kotlin/db/types.kt @@ -22,12 +22,12 @@ package tech.libeufin.common.db import tech.libeufin.common.* import java.sql.ResultSet -inline fun <reified T : kotlin.Enum<T>> ResultSet.getEnum(name: String): T +inline fun <reified T : Enum<T>> ResultSet.getEnum(name: String): T = java.lang.Enum.valueOf(T::class.java, getString(name)) -inline fun <reified T : kotlin.Enum<T>> ResultSet.getEnum(idx: Int): T +inline fun <reified T : Enum<T>> ResultSet.getEnum(idx: Int): T = java.lang.Enum.valueOf(T::class.java, getString(idx)) -inline fun <reified T : kotlin.Enum<T>> ResultSet.getOptEnum(name: String): T? +inline fun <reified T : Enum<T>> ResultSet.getOptEnum(name: String): T? = getString(name)?.run { java.lang.Enum.valueOf(T::class.java, this) } fun ResultSet.getAmount(name: String, currency: String): TalerAmount { diff --git a/common/src/main/kotlin/helpers.kt b/common/src/main/kotlin/helpers.kt @@ -20,6 +20,7 @@ package tech.libeufin.common import io.ktor.server.application.* +import org.slf4j.Logger import java.io.ByteArrayOutputStream import java.io.FilterInputStream import java.io.InputStream @@ -35,7 +36,6 @@ import java.util.zip.DeflaterInputStream import java.util.zip.InflaterInputStream import java.util.zip.ZipInputStream import kotlin.random.Random -import org.slf4j.Logger /* ----- String ----- */ @@ -148,7 +148,7 @@ fun Throwable.fmtLog(logger: Logger) { /* ----- Logger ----- */ inline fun Logger.debug(lambda: () -> String) { - if (isDebugEnabled()) debug(lambda()) + if (isDebugEnabled) debug(lambda()) } /* ----- KTOR ----- */ diff --git a/common/src/main/kotlin/test/bench.kt b/common/src/main/kotlin/test/bench.kt @@ -19,14 +19,9 @@ package tech.libeufin.common.test -import tech.libeufin.common.* -import org.postgresql.jdbc.* import org.postgresql.copy.* -import java.time.Instant -import java.time.LocalDateTime -import java.time.ZoneId -import java.util.* -import kotlin.math.max +import org.postgresql.jdbc.* +import tech.libeufin.common.* import kotlin.math.pow import kotlin.math.sqrt import kotlin.time.DurationUnit @@ -46,7 +41,7 @@ fun PgConnection.genData(amount: Int, generators: Sequence<Pair<String, (Int) -> } // Update database statistics for better perf - this.execSQLUpdate("VACUUM ANALYZE"); + this.execSQLUpdate("VACUUM ANALYZE") } class Benchmark(private val iter: Int) { @@ -90,7 +85,6 @@ class Benchmark(private val iter: Int) { fun bench(iter: Int, lambda: Benchmark.() -> Unit) { val bench = Benchmark(iter) lambda(bench) - val cols = IntArray(5) { 0 } printTable( listOf("benchmark", "min", "mean", "max", "std").map { ANSI.bold(it) }, bench.measures, diff --git a/common/src/test/kotlin/ParamsTest.kt b/common/src/test/kotlin/ParamsTest.kt @@ -17,10 +17,10 @@ * <http://www.gnu.org/licenses/> */ +import io.ktor.http.* import org.junit.Test import tech.libeufin.common.* import kotlin.test.* -import io.ktor.http.* class ParamsTest { @Test diff --git a/common/src/test/kotlin/TxMedataTest.kt b/common/src/test/kotlin/TxMedataTest.kt @@ -36,8 +36,6 @@ class TxMetadataTest { val mixed = "4mzt6RS3rvb3b0e2rdmyw0yra3y0vphyv0cyde6xbb0ympfxceg0" val mixedL = "4mzt6rs3rvb3b0e2rdmyw0yra3" val mixedR = "y0vphyv0cyde6xbb0ympfxceg0" - val otherUpper = "TEST6RS3RVB3B0E2RDMYW0YRA3Y0VPHYV0CYDE6XBB0YMPFXCEG0" - val otherMixed = "test6rRSrvb3b0e2rdmyw0yra3y0vphyv0cyde6xbb0ympfxceg0" val key = TalerIncomingMetadata(TalerIncomingType.reserve, EddsaPublicKey(upper)) // Check succeed if upper or mixed diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsLogger.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsLogger.kt @@ -63,7 +63,7 @@ class EbicsLogger(private val dir: Path?) { } companion object { - private val TIME_WITH_MS = DateTimeFormatter.ofPattern("HH:mm:ss.SSS"); + private val TIME_WITH_MS = DateTimeFormatter.ofPattern("HH:mm:ss.SSS") } } diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/XmlCombinators.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/XmlCombinators.kt @@ -181,7 +181,7 @@ class XmlDestructor internal constructor(private val el: Element) { fun bool(): Boolean = el.textContent.toBoolean() fun date(): LocalDate = LocalDate.parse(text(), DateTimeFormatter.ISO_DATE) fun dateTime(): LocalDateTime = LocalDateTime.parse(text(), DateTimeFormatter.ISO_DATE_TIME) - inline fun <reified T : kotlin.Enum<T>> enum(): T = java.lang.Enum.valueOf(T::class.java, text()) + inline fun <reified T : Enum<T>> enum(): T = java.lang.Enum.valueOf(T::class.java, text()) fun attr(index: String): String = el.getAttribute(index) diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/api/WireGatewayApi.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/api/WireGatewayApi.kt @@ -26,13 +26,13 @@ import io.ktor.server.response.* import io.ktor.server.routing.* import io.ktor.util.pipeline.* import tech.libeufin.common.* -import tech.libeufin.nexus.iso20022.* import tech.libeufin.nexus.NexusConfig import tech.libeufin.nexus.checkCurrency import tech.libeufin.nexus.db.Database import tech.libeufin.nexus.db.ExchangeDAO import tech.libeufin.nexus.db.ExchangeDAO.TransferResult import tech.libeufin.nexus.db.PaymentDAO.IncomingRegistrationResult +import tech.libeufin.nexus.iso20022.* import java.time.Instant diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/cli/EbicsFetch.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/cli/EbicsFetch.kt @@ -36,9 +36,7 @@ import tech.libeufin.nexus.ebics.* import tech.libeufin.nexus.iso20022.* import java.io.IOException import java.io.InputStream -import java.time.Duration import java.time.Instant -import kotlin.time.toKotlinDuration /** Ingests an outgoing [payment] into [db] */ suspend fun ingestOutgoingPayment( @@ -71,7 +69,7 @@ suspend fun ingestIncomingPayment( suspend fun bounce(msg: String) { if (payment.bankId == null) { logger.debug("{} ignored: missing bank ID", payment) - return; + return } when (accountType) { AccountType.exchange -> { diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/cli/EbicsSetup.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/cli/EbicsSetup.kt @@ -27,7 +27,6 @@ import io.ktor.client.* import tech.libeufin.common.* import tech.libeufin.common.crypto.CryptoUtil import tech.libeufin.nexus.* -import tech.libeufin.nexus.iso20022.* import tech.libeufin.nexus.ebics.* import tech.libeufin.nexus.ebics.EbicsKeyMng.Order.* import java.nio.file.FileAlreadyExistsException diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/cli/EbicsSubmit.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/cli/EbicsSubmit.kt @@ -24,11 +24,9 @@ import com.github.ajalt.clikt.parameters.groups.provideDelegate import kotlinx.coroutines.delay import tech.libeufin.common.* import tech.libeufin.nexus.* -import tech.libeufin.nexus.db.InitiatedPayment import tech.libeufin.nexus.db.PaymentBatch import tech.libeufin.nexus.ebics.* import tech.libeufin.nexus.iso20022.* -import java.time.Duration import java.time.Instant import kotlin.time.toKotlinDuration diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/cli/InitiatePayment.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/cli/InitiatePayment.kt @@ -29,7 +29,6 @@ import tech.libeufin.nexus.db.InitiatedPayment import tech.libeufin.nexus.logger import tech.libeufin.nexus.nexusConfig import tech.libeufin.nexus.withDb -import tech.libeufin.nexus.iso20022.* import java.time.Instant class InitiatePayment: CliktCommand("Initiate an outgoing payment") { diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/cli/Testing.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/cli/Testing.kt @@ -29,11 +29,10 @@ import com.github.ajalt.clikt.parameters.options.default import com.github.ajalt.clikt.parameters.options.flag import com.github.ajalt.clikt.parameters.options.option import com.github.ajalt.clikt.parameters.types.enum -import kotlinx.coroutines.delay import tech.libeufin.common.* import tech.libeufin.nexus.* -import tech.libeufin.nexus.iso20022.* import tech.libeufin.nexus.ebics.* +import tech.libeufin.nexus.iso20022.* import java.time.Instant class Wss: CliktCommand("Listen to EBICS instant notification over websocket") { @@ -56,7 +55,7 @@ class Wss: CliktCommand("Listen to EBICS instant notification over websocket") { val wssNotifications = listenForNotification(client) if (wssNotifications != null) { while (true) { - val notifications = wssNotifications.receive() + wssNotifications.receive() logger.debug("{}", wssNotifications) } } diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/db/PaymentDAO.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/db/PaymentDAO.kt @@ -23,8 +23,8 @@ import tech.libeufin.common.* import tech.libeufin.common.db.* import tech.libeufin.nexus.iso20022.IncomingPayment import tech.libeufin.nexus.iso20022.OutgoingPayment -import java.time.Instant import java.sql.Types +import java.time.Instant /** Data access logic for incoming & outgoing payments */ class PaymentDAO(private val db: Database) { diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsCommon.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsCommon.kt @@ -28,8 +28,8 @@ import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.withContext import org.w3c.dom.Document import org.xml.sax.SAXException -import tech.libeufin.common.crypto.CryptoUtil import tech.libeufin.common.* +import tech.libeufin.common.crypto.CryptoUtil import tech.libeufin.nexus.* import tech.libeufin.nexus.db.Database import java.io.InputStream @@ -80,7 +80,7 @@ suspend fun HttpClient.postToBank( throw EbicsError.HTTP("$phase: bank HTTP error: ${res.status}", res.status) } try { - val bodyStream = res.bodyAsChannel().toInputStream(); + val bodyStream = res.bodyAsChannel().toInputStream() val loggedStream = stepLogger?.log(msg, bodyStream) ?: bodyStream return XMLUtil.parseIntoDom(loggedStream) } catch (e: SAXException) { @@ -264,7 +264,7 @@ class EbicsClient( // Transfer phase for (i in 1..preparedPayload.segments.size) { val transferXml = impl.uploadTransfer(tId, preparedPayload, i) - val transferResp = impl.postBTS(client, transferXml, "Upload transfer", txLog.step("transfer$i")) + impl.postBTS(client, transferXml, "Upload transfer", txLog.step("transfer$i")) .okOrFail("Upload transfer") } return orderId diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsOrder.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsOrder.kt @@ -36,7 +36,7 @@ sealed class EbicsOrder(val schema: String) { ): EbicsOrder("H005") companion object { - val WSS_PARAMS = EbicsOrder.V3( + val WSS_PARAMS = V3( type = "BTD", service = "OTH", scope = "DE", @@ -46,12 +46,12 @@ sealed class EbicsOrder(val schema: String) { fun description(): String = buildString { when (this@EbicsOrder) { - is EbicsOrder.V2_5 -> { + is V2_5 -> { append(type) append('-') append(attribute) } - is EbicsOrder.V3 -> { + is V3 -> { append(type) for (part in sequenceOf(service, message, option)) { if (part != null) { @@ -65,7 +65,7 @@ sealed class EbicsOrder(val schema: String) { fun doc(): OrderDoc? { return when (this) { - is EbicsOrder.V2_5 -> { + is V2_5 -> { when (this.type) { "HAC" -> OrderDoc.acknowledgement "Z01" -> OrderDoc.status @@ -75,7 +75,7 @@ sealed class EbicsOrder(val schema: String) { else -> null } } - is EbicsOrder.V3 -> { + is V3 -> { when (this.type) { "HAC" -> OrderDoc.acknowledgement "BTD" -> when (this.message) { diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsWS.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsWS.kt @@ -25,10 +25,10 @@ import io.ktor.client.request.* import io.ktor.http.* import io.ktor.serialization.kotlinx.* import io.ktor.websocket.* +import kotlinx.coroutines.* +import kotlinx.coroutines.channels.* import kotlinx.serialization.Serializable import kotlinx.serialization.json.* -import kotlinx.coroutines.channels.* -import kotlinx.coroutines.* import org.slf4j.Logger import org.slf4j.LoggerFactory import tech.libeufin.common.* @@ -105,7 +105,7 @@ suspend fun EbicsClient.wssParams(): WssParams { } /** Receive a JSON message from a websocket session */ -inline suspend fun <reified T> DefaultClientWebSocketSession.receiveJson(): T { +suspend inline fun <reified T> DefaultClientWebSocketSession.receiveJson(): T { val frame = incoming.receive() val content = frame.readBytes() val msg = Json.decodeFromStream(kotlinx.serialization.serializer<T>(), content.inputStream()) @@ -154,7 +154,7 @@ suspend fun WssParams.connect(client: HttpClient, lambda: suspend (WssNotificati suspend fun listenForNotification(client: EbicsClient): ReceiveChannel<List<EbicsOrder>>? { // Try to get params - val params = try { + try { client.wssParams() } catch (e: EbicsError) { if ( diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/camt.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/camt.kt @@ -23,10 +23,7 @@ import tech.libeufin.nexus.* import tech.libeufin.nexus.ebics.Dialect import java.io.InputStream import java.time.Instant -import java.time.ZoneId import java.time.ZoneOffset -import java.time.ZonedDateTime -import java.time.format.DateTimeFormatter sealed interface TxNotification { val executionTime: Instant diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/hac.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/hac.kt @@ -18,15 +18,10 @@ */ package tech.libeufin.nexus.iso20022 -import tech.libeufin.common.* import tech.libeufin.nexus.* -import tech.libeufin.nexus.ebics.Dialect import java.io.InputStream import java.time.Instant -import java.time.ZoneId import java.time.ZoneOffset -import java.time.ZonedDateTime -import java.time.format.DateTimeFormatter data class CustomerAck( val actionType: HacAction, diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/pain001.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/pain001.kt @@ -21,10 +21,8 @@ package tech.libeufin.nexus.iso20022 import tech.libeufin.common.* import tech.libeufin.nexus.* import tech.libeufin.nexus.ebics.Dialect -import java.io.InputStream import java.time.Instant import java.time.ZoneId -import java.time.ZoneOffset import java.time.ZonedDateTime import java.time.format.DateTimeFormatter diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/pain002.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/pain002.kt @@ -18,15 +18,8 @@ */ package tech.libeufin.nexus.iso20022 -import tech.libeufin.common.* import tech.libeufin.nexus.* -import tech.libeufin.nexus.ebics.Dialect import java.io.InputStream -import java.time.Instant -import java.time.ZoneId -import java.time.ZoneOffset -import java.time.ZonedDateTime -import java.time.format.DateTimeFormatter private fun fmtMsg(code: String?, description: String?, reasons: List<Reason>) = buildString { if (code != null) { diff --git a/nexus/src/test/kotlin/DatabaseTest.kt b/nexus/src/test/kotlin/DatabaseTest.kt @@ -21,13 +21,12 @@ import org.junit.Test import tech.libeufin.common.ShortHashCode import tech.libeufin.common.TalerAmount import tech.libeufin.common.db.one -import tech.libeufin.common.db.withStatement import tech.libeufin.nexus.AccountType import tech.libeufin.nexus.cli.ingestIncomingPayment import tech.libeufin.nexus.cli.ingestOutgoingPayment import tech.libeufin.nexus.db.Database -import tech.libeufin.nexus.db.SubmissionState import tech.libeufin.nexus.db.InitiatedDAO.PaymentInitiationResult +import tech.libeufin.nexus.db.SubmissionState import java.time.Instant import kotlin.test.* diff --git a/nexus/src/test/kotlin/IngestionTest.kt b/nexus/src/test/kotlin/IngestionTest.kt @@ -20,11 +20,11 @@ import org.junit.Test import tech.libeufin.common.* import tech.libeufin.common.db.* +import tech.libeufin.nexus.* +import tech.libeufin.nexus.cli.* import tech.libeufin.nexus.db.* import tech.libeufin.nexus.ebics.* -import tech.libeufin.nexus.cli.* import tech.libeufin.nexus.iso20022.* -import tech.libeufin.nexus.* import java.nio.file.Files import java.time.Instant import kotlin.io.path.Path @@ -185,7 +185,7 @@ class IngestionTest { /** CreditSuisse dialect test */ @Test - fun cs() = setup() { db, cfg -> + fun cs() = setup { db, cfg -> db.batches(mapOf( "05BD4C5B4A2649B5B08F6EF6A31F197A" to listOf( genInitPay("AQCXNCPWD8PHW5JTN65Y5XTF7R"), diff --git a/nexus/src/test/kotlin/Iso20022Test.kt b/nexus/src/test/kotlin/Iso20022Test.kt @@ -21,7 +21,6 @@ import org.junit.Test import tech.libeufin.common.* import tech.libeufin.nexus.ebics.Dialect import tech.libeufin.nexus.iso20022.* -import tech.libeufin.nexus.* import kotlin.io.path.* import kotlin.test.* diff --git a/nexus/src/test/kotlin/WireGatewayApiTest.kt b/nexus/src/test/kotlin/WireGatewayApiTest.kt @@ -22,10 +22,10 @@ import io.ktor.http.* import io.ktor.server.testing.* import org.junit.Test import tech.libeufin.common.* -import tech.libeufin.nexus.ebics.randEbicsId import tech.libeufin.nexus.cli.ingestOutgoingPayment -import kotlin.test.* +import tech.libeufin.nexus.ebics.randEbicsId import java.time.Instant +import kotlin.test.* class WireGatewayApiTest { // GET /taler-wire-gateway/config diff --git a/nexus/src/test/kotlin/bench.kt b/nexus/src/test/kotlin/bench.kt @@ -17,25 +17,13 @@ * <http://www.gnu.org/licenses/> */ -import io.ktor.client.request.* -import io.ktor.http.* import org.junit.Test import org.postgresql.jdbc.PgConnection -import tech.libeufin.nexus.* -import tech.libeufin.nexus.cli.* import tech.libeufin.common.* import tech.libeufin.common.test.* -import tech.libeufin.common.crypto.PwCrypto -import java.time.Instant -import java.time.LocalDateTime -import java.time.ZoneId -import java.util.* +import tech.libeufin.nexus.* +import tech.libeufin.nexus.cli.* import kotlin.math.max -import kotlin.math.pow -import kotlin.math.sqrt -import kotlin.time.DurationUnit -import kotlin.time.measureTime -import kotlin.time.toDuration class Bench { diff --git a/nexus/src/test/kotlin/helpers.kt b/nexus/src/test/kotlin/helpers.kt @@ -28,11 +28,11 @@ import tech.libeufin.common.* import tech.libeufin.common.db.dbInit import tech.libeufin.common.db.pgDataSource import tech.libeufin.nexus.* -import tech.libeufin.nexus.iso20022.* import tech.libeufin.nexus.cli.ingestIncomingPayment import tech.libeufin.nexus.cli.ingestOutgoingPayment import tech.libeufin.nexus.db.Database import tech.libeufin.nexus.db.InitiatedPayment +import tech.libeufin.nexus.iso20022.* import java.time.Instant import kotlin.io.path.Path diff --git a/testbench/src/main/kotlin/Main.kt b/testbench/src/main/kotlin/Main.kt @@ -31,8 +31,8 @@ import kotlinx.serialization.Serializable import tech.libeufin.common.ANSI import tech.libeufin.nexus.* import tech.libeufin.nexus.cli.* -import kotlin.io.path.* import java.time.Instant +import kotlin.io.path.* val nexusCmd = LibeufinNexus() val client = HttpClient(CIO) @@ -189,7 +189,6 @@ class Cli : CliktCommand("Run integration tests on banks provider") { repeat(4) { nexusCmd.run("initiate-payment $flags --amount=$currency:${(10.0+it)/100} --subject \"multi $it $now\" \"$payto\"") } - Unit }) put("tx-bad-name", suspend { val badPayto = URLBuilder().takeFrom(payto) diff --git a/testbench/src/test/kotlin/IntegrationTest.kt b/testbench/src/test/kotlin/IntegrationTest.kt @@ -38,9 +38,9 @@ import tech.libeufin.common.db.one import tech.libeufin.nexus.AccountType import tech.libeufin.nexus.cli.LibeufinNexus import tech.libeufin.nexus.cli.ingestIncomingPayment +import tech.libeufin.nexus.iso20022.* import tech.libeufin.nexus.nexusConfig import tech.libeufin.nexus.withDb -import tech.libeufin.nexus.iso20022.* import java.time.Instant import kotlin.io.path.Path import kotlin.io.path.readText @@ -151,7 +151,6 @@ class IntegrationTest { setup("conf/integration.conf") { db -> val userPayTo = IbanPayto.rand() - val fiatPayTo = IbanPayto.rand() // Load conversion setup manually as the server would refuse to start without an exchange account val sqlProcedures = Path("../database-versioning/libeufin-conversion-setup.sql") diff --git a/testbench/src/test/kotlin/Iso20022Test.kt b/testbench/src/test/kotlin/Iso20022Test.kt @@ -18,9 +18,9 @@ */ import org.junit.Test +import tech.libeufin.nexus.* import tech.libeufin.nexus.ebics.* import tech.libeufin.nexus.iso20022.* -import tech.libeufin.nexus.* import java.nio.file.Files import java.nio.file.Path import kotlin.io.path.Path