[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libeufin] branch master updated: Fetching transactions from the bank.
From: |
gnunet |
Subject: |
[libeufin] branch master updated: Fetching transactions from the bank. |
Date: |
Mon, 10 Jul 2023 15:12:12 +0200 |
This is an automated email from the git hooks/post-receive script.
ms pushed a commit to branch master
in repository libeufin.
The following commit(s) were added to refs/heads/master by this push:
new f1b7567a Fetching transactions from the bank.
f1b7567a is described below
commit f1b7567a31e2a3496fe9d1a6887d3ea599414895
Author: MS <ms@taler.net>
AuthorDate: Mon Jul 10 15:11:26 2023 +0200
Fetching transactions from the bank.
Nexus can receive time ranges from its JSON interface.
---
.../kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt | 18 ++++++++++++++----
.../src/main/kotlin/tech/libeufin/nexus/server/JSON.kt | 15 +++++++++++++--
.../libeufin/nexus/xlibeufinbank/XLibeufinBankNexus.kt | 10 +++++++++-
util/src/main/kotlin/Ebics.kt | 5 ++++-
4 files changed, 40 insertions(+), 8 deletions(-)
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
index e4f2055f..b1fdf816 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
@@ -59,10 +59,7 @@ import tech.libeufin.util.ebics_h005.Ebics3Request
import java.io.ByteArrayOutputStream
import java.security.interfaces.RSAPrivateCrtKey
import java.security.interfaces.RSAPublicKey
-import java.time.Instant
-import java.time.LocalDateTime
-import java.time.ZoneOffset
-import java.time.ZonedDateTime
+import java.time.*
import java.time.format.DateTimeFormatter
import java.util.*
import javax.crypto.EncryptedPrivateKeyInfo
@@ -676,6 +673,19 @@ class EbicsBankConnectionProtocol: BankConnectionProtocol {
}
// Figuring out what time range to put in the fetch instructions.
when (fetchSpec) {
+ is FetchSpecTimeRangeJson -> {
+ // the parse() method defaults to the YYYY-MM-DD format.
+ // If parsing fails, the global catcher intervenes.
+ val start: LocalDate = LocalDate.parse(fetchSpec.start)
+ val end: LocalDate = LocalDate.parse(fetchSpec.end)
+ val p = EbicsStandardOrderParams(
+ EbicsDateRange(
+ start =
start.atStartOfDay().atZone(ZoneId.systemDefault()),
+ end = end.atStartOfDay().atZone(ZoneId.systemDefault())
+ )
+ )
+ addForLevel(fetchSpec.level, p)
+ }
is FetchSpecLatestJson -> {
val p = EbicsStandardOrderParams()
addForLevel(fetchSpec.level, p)
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/server/JSON.kt
b/nexus/src/main/kotlin/tech/libeufin/nexus/server/JSON.kt
index 074a2589..a0dc6b0c 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/server/JSON.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/server/JSON.kt
@@ -202,11 +202,14 @@ enum class FetchLevel(@get:JsonValue val jsonName:
String) {
JsonSubTypes.Type(value = FetchSpecLatestJson::class, name = "latest"),
JsonSubTypes.Type(value = FetchSpecAllJson::class, name = "all"),
JsonSubTypes.Type(value = FetchSpecPreviousDaysJson::class, name =
"previous-days"),
- JsonSubTypes.Type(value = FetchSpecSinceLastJson::class, name =
"since-last")
+ JsonSubTypes.Type(value = FetchSpecSinceLastJson::class, name =
"since-last"),
+ JsonSubTypes.Type(value = FetchSpecTimeRangeJson::class, name =
"time-range")
)
abstract class FetchSpecJson(
val level: FetchLevel,
- val bankConnection: String?
+ val bankConnection: String?,
+ val start: String? = null,
+ val end: String? = null
)
@JsonTypeName("latest")
@@ -218,6 +221,14 @@ class FetchSpecAllJson(level: FetchLevel, bankConnection:
String?) : FetchSpecJs
@JsonTypeName("since-last")
class FetchSpecSinceLastJson(level: FetchLevel, bankConnection: String?) :
FetchSpecJson(level, bankConnection)
+@JsonTypeName("time-range")
+class FetchSpecTimeRangeJson(
+ level: FetchLevel,
+ start: String,
+ end: String,
+ bankConnection: String?
+) : FetchSpecJson(level, bankConnection)
+
@JsonTypeName("previous-days")
class FetchSpecPreviousDaysJson(level: FetchLevel, bankConnection: String?,
val number: Int) :
FetchSpecJson(level, bankConnection)
diff --git
a/nexus/src/main/kotlin/tech/libeufin/nexus/xlibeufinbank/XLibeufinBankNexus.kt
b/nexus/src/main/kotlin/tech/libeufin/nexus/xlibeufinbank/XLibeufinBankNexus.kt
index cd37862a..2bb86643 100644
---
a/nexus/src/main/kotlin/tech/libeufin/nexus/xlibeufinbank/XLibeufinBankNexus.kt
+++
b/nexus/src/main/kotlin/tech/libeufin/nexus/xlibeufinbank/XLibeufinBankNexus.kt
@@ -27,6 +27,7 @@ import tech.libeufin.nexus.server.*
import tech.libeufin.util.*
import java.net.MalformedURLException
import java.net.URL
+import java.time.LocalDate
// Gets Sandbox URL and credentials, taking the connection name as input.
fun getXLibeufinBankCredentials(conn: NexusBankConnectionEntity):
XLibeufinBankTransport {
@@ -235,7 +236,7 @@ class XlibeufinBankConnectionProtocol :
BankConnectionProtocol {
}
override suspend fun fetchTransactions(
- fetchSpec: FetchSpecJson,
+ fetchSpec: FetchSpecJson, // FIXME: handle time range.
client: HttpClient,
bankConnectionId: String,
accountId: String
@@ -261,6 +262,13 @@ class XlibeufinBankConnectionProtocol :
BankConnectionProtocol {
baseUrl.path.dropLastWhile { it == '/' },
"accounts/${credentials.username}/transactions")
when (fetchSpec) {
+ is FetchSpecTimeRangeJson -> {
+ // the parse() method defaults to the YYYY-MM-DD format.
+ val start: LocalDate = LocalDate.parse(fetchSpec.start)
+ val end: LocalDate = LocalDate.parse(fetchSpec.end)
+ this.parameters["from_ms"] = start.toString()
+ this.parameters["to_ms"] = end.toString()
+ }
// Gets the last 5 transactions
is FetchSpecLatestJson -> {
// Do nothing, the bare endpoint gets the last 5 txs by
default.
diff --git a/util/src/main/kotlin/Ebics.kt b/util/src/main/kotlin/Ebics.kt
index f2b669dc..e951016a 100644
--- a/util/src/main/kotlin/Ebics.kt
+++ b/util/src/main/kotlin/Ebics.kt
@@ -58,7 +58,10 @@ data class EbicsProtocolError(
val ebicsTechnicalCode: EbicsReturnCode? = null
) : Exception(reason)
-data class EbicsDateRange(val start: ZonedDateTime, val end: ZonedDateTime)
+data class EbicsDateRange(
+ val start: ZonedDateTime,
+ val end: ZonedDateTime
+)
sealed class EbicsOrderParams
data class EbicsStandardOrderParams(
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.