Compare commits

...

24 Commits

Author SHA1 Message Date
dankito c564750832 Added targetiosX64 2024-08-26 02:20:09 +02:00
dankito d16289d824 Fixed BIC comments 2024-08-24 18:29:46 +02:00
dankito a2ac04f424 Added clarification about Dialogsprache 2024-08-24 18:25:56 +02:00
dankito 8247584a61 Added clarification about KundensystemStatus 2024-08-24 18:25:30 +02:00
dankito 34e40aeee1 Replaced deprecated methods 2024-08-24 17:33:00 +02:00
dankito 5d7ea48a46 Removed variant with callback 2024-08-24 17:17:47 +02:00
dankito d055b61ed9 Fixed typo from package name migration 2024-08-24 17:13:44 +02:00
dankito 87c59e63ee Added more documentation from FinTS spec 2024-08-24 17:13:22 +02:00
dankito 40b916a49f Made methods overridable; made + 3 clearer 2024-08-24 17:12:44 +02:00
dankito eabe2c4930 Made message trace ordered 2024-08-24 17:11:42 +02:00
dankito 0f151a8f4f Extracted jobsRequiringTan 2024-08-23 23:27:58 +02:00
dankito 33a86607df Changed order to make it clearer 2024-08-23 22:08:33 +02:00
dankito f154e60e1e Removed unused enum 2024-08-23 15:16:12 +02:00
dankito 7e5a455c24 Changed base package from net.dankito to net.codinux (except for client model) 2024-08-23 14:50:57 +02:00
dankito d8b0c89be7 Added parsed received segments to MessageLog 2024-08-23 14:06:14 +02:00
dankito 3d385b5bdf Added alternative names 2024-08-23 13:08:00 +02:00
dankito 4f3924f2cd Deciding upfront if message ever has to be pretty printed. Avoids pretty printing it multiple times 2024-08-23 13:06:48 +02:00
dankito c0796cfc38 Added option to disable collection messageLog 2024-08-23 13:02:10 +02:00
dankito 9857a0565d Fixed logging message 2024-08-23 12:57:37 +02:00
dankito a3dbe8f142 By default not adding message trace to message anymore; added messageIncludingMessageTrace for that 2024-08-23 12:53:45 +02:00
dankito 88f6d53ccb Temporarily disabling iOS DateFormatter as it conflicts with nativeMain's DateFormatter. TODO: Fix this 2024-08-23 12:47:14 +02:00
dankito 850beb8421 Added messageLogAdded() to FinTsClientCallback to get instantly notified of sent, received and error messages 2024-08-23 12:42:52 +02:00
dankito da50b72898 Added Toolchain resolver 2024-08-23 12:11:22 +02:00
dankito 237802b18d Moved createBankWithAllFeatures() and createRandomMessage() to FinTsTestBase 2024-08-22 18:40:40 +02:00
373 changed files with 1797 additions and 1689 deletions

View File

@ -7,9 +7,9 @@ import kotlinx.coroutines.withContext
import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDate
import net.dankito.banking.client.model.parameter.GetAccountDataParameter import net.dankito.banking.client.model.parameter.GetAccountDataParameter
import net.dankito.banking.client.model.response.GetAccountDataResponse import net.dankito.banking.client.model.response.GetAccountDataResponse
import net.dankito.banking.fints.FinTsClient import net.codinux.banking.fints.FinTsClient
import net.dankito.banking.fints.callback.SimpleFinTsClientCallback import net.codinux.banking.fints.callback.SimpleFinTsClientCallback
import net.dankito.banking.fints.model.TanChallenge import net.codinux.banking.fints.model.TanChallenge
import net.dankito.utils.multiplatform.extensions.millisSinceEpochAtSystemDefaultTimeZone import net.dankito.utils.multiplatform.extensions.millisSinceEpochAtSystemDefaultTimeZone
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import java.math.BigDecimal import java.math.BigDecimal

View File

@ -5,7 +5,7 @@ import net.codinux.banking.fints4k.android.Presenter
import net.codinux.banking.fints4k.android.R import net.codinux.banking.fints4k.android.R
import net.codinux.banking.fints4k.android.adapter.viewholder.AccountTransactionsViewHolder import net.codinux.banking.fints4k.android.adapter.viewholder.AccountTransactionsViewHolder
import net.dankito.banking.client.model.AccountTransaction import net.dankito.banking.client.model.AccountTransaction
import net.dankito.banking.fints.util.toBigDecimal import net.codinux.banking.fints.util.toBigDecimal
import net.dankito.utils.android.extensions.setTextColorToColorResource import net.dankito.utils.android.extensions.setTextColorToColorResource
import net.dankito.utils.android.ui.adapter.ListRecyclerAdapter import net.dankito.utils.android.ui.adapter.ListRecyclerAdapter
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory

View File

@ -15,9 +15,9 @@ import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import net.codinux.banking.fints4k.android.Presenter import net.codinux.banking.fints4k.android.Presenter
import net.codinux.banking.fints4k.android.R import net.codinux.banking.fints4k.android.R
import net.dankito.banking.fints.model.FlickerCodeTanChallenge import net.codinux.banking.fints.model.FlickerCodeTanChallenge
import net.dankito.banking.fints.model.ImageTanChallenge import net.codinux.banking.fints.model.ImageTanChallenge
import net.dankito.banking.fints.model.TanChallenge import net.codinux.banking.fints.model.TanChallenge
import net.dankito.utils.android.extensions.getSpannedFromHtml import net.dankito.utils.android.extensions.getSpannedFromHtml
import net.dankito.utils.android.extensions.show import net.dankito.utils.android.extensions.show

View File

@ -13,12 +13,12 @@ import net.dankito.banking.client.model.CustomerAccount
import net.dankito.banking.client.model.parameter.GetAccountDataParameter import net.dankito.banking.client.model.parameter.GetAccountDataParameter
import net.dankito.banking.client.model.parameter.RetrieveTransactions import net.dankito.banking.client.model.parameter.RetrieveTransactions
import net.dankito.banking.client.model.parameter.TransferMoneyParameter import net.dankito.banking.client.model.parameter.TransferMoneyParameter
import net.dankito.banking.fints.FinTsClient import net.codinux.banking.fints.FinTsClient
import net.dankito.banking.fints.callback.SimpleFinTsClientCallback import net.codinux.banking.fints.callback.SimpleFinTsClientCallback
import net.dankito.banking.fints.extensions.toStringWithMinDigits import net.codinux.banking.fints.extensions.toStringWithMinDigits
import net.dankito.banking.fints.getAccountData import net.codinux.banking.fints.getAccountData
import net.dankito.banking.fints.model.TanChallenge import net.codinux.banking.fints.model.TanChallenge
import net.dankito.banking.fints.transferMoney import net.codinux.banking.fints.transferMoney
import util.CsvWriter import util.CsvWriter
import util.OutputFormat import util.OutputFormat

View File

@ -1,7 +1,7 @@
package commands package commands
import NativeApp import NativeApp
import net.dankito.banking.fints.model.TanMethodType import net.codinux.banking.fints.model.TanMethodType
data class CommonConfig( data class CommonConfig(

View File

@ -5,10 +5,10 @@ import com.github.ajalt.clikt.core.requireObject
import com.github.ajalt.clikt.parameters.arguments.argument import com.github.ajalt.clikt.parameters.arguments.argument
import com.github.ajalt.clikt.parameters.options.option import com.github.ajalt.clikt.parameters.options.option
import net.dankito.banking.client.model.parameter.TransferMoneyParameter import net.dankito.banking.client.model.parameter.TransferMoneyParameter
import net.dankito.banking.fints.model.AccountData import net.codinux.banking.fints.model.AccountData
import net.dankito.banking.fints.model.Amount import net.codinux.banking.fints.model.Amount
import net.dankito.banking.fints.model.Currency import net.codinux.banking.fints.model.Currency
import net.dankito.banking.fints.model.Money import net.codinux.banking.fints.model.Money
class TransferMoneyCommand : CliktCommand("Transfers money from your account to a recipient", name = "transfer", printHelpOnEmptyArgs = true) { class TransferMoneyCommand : CliktCommand("Transfers money from your account to a recipient", name = "transfer", printHelpOnEmptyArgs = true) {

View File

@ -12,8 +12,8 @@ import kotlinx.datetime.LocalDate
import kotlinx.datetime.minus import kotlinx.datetime.minus
import net.dankito.banking.client.model.parameter.GetAccountDataParameter import net.dankito.banking.client.model.parameter.GetAccountDataParameter
import net.dankito.banking.client.model.parameter.RetrieveTransactions import net.dankito.banking.client.model.parameter.RetrieveTransactions
import net.dankito.banking.fints.model.TanMethodType import net.codinux.banking.fints.model.TanMethodType
import net.dankito.banking.fints.extensions.todayAtEuropeBerlin import net.codinux.banking.fints.extensions.todayAtEuropeBerlin
import util.OutputFormat import util.OutputFormat

View File

@ -1,11 +1,11 @@
package net.dankito.banking.fints package net.codinux.banking.fints
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import net.dankito.banking.client.model.parameter.GetAccountDataParameter import net.dankito.banking.client.model.parameter.GetAccountDataParameter
import net.dankito.banking.client.model.parameter.TransferMoneyParameter import net.dankito.banking.client.model.parameter.TransferMoneyParameter
import net.dankito.banking.client.model.response.GetAccountDataResponse import net.dankito.banking.client.model.response.GetAccountDataResponse
import net.dankito.banking.client.model.response.TransferMoneyResponse import net.dankito.banking.client.model.response.TransferMoneyResponse
import net.dankito.banking.fints.model.Money import net.codinux.banking.fints.model.Money
fun FinTsClient.getAccountData(bankCode: String, loginName: String, password: String): GetAccountDataResponse { fun FinTsClient.getAccountData(bankCode: String, loginName: String, password: String): GetAccountDataResponse {

View File

@ -1,7 +1,7 @@
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import net.dankito.banking.client.model.AccountTransaction import net.dankito.banking.client.model.AccountTransaction
import net.dankito.banking.fints.model.TanChallenge import net.codinux.banking.fints.model.TanChallenge
import react.* import react.*
import react.dom.* import react.dom.*
import styled.styledDiv import styled.styledDiv

View File

@ -2,8 +2,8 @@ import io.ktor.util.encodeBase64
import kotlinx.html.InputType import kotlinx.html.InputType
import kotlinx.html.js.onChangeFunction import kotlinx.html.js.onChangeFunction
import kotlinx.html.style import kotlinx.html.style
import net.dankito.banking.fints.model.ImageTanChallenge import net.codinux.banking.fints.model.ImageTanChallenge
import net.dankito.banking.fints.model.TanChallenge import net.codinux.banking.fints.model.TanChallenge
import org.w3c.dom.HTMLInputElement import org.w3c.dom.HTMLInputElement
import react.Props import react.Props
import react.RBuilder import react.RBuilder

View File

@ -6,11 +6,11 @@ import net.dankito.banking.client.model.parameter.GetAccountDataParameter
import net.dankito.banking.client.model.parameter.TransferMoneyParameter import net.dankito.banking.client.model.parameter.TransferMoneyParameter
import net.dankito.banking.client.model.response.GetAccountDataResponse import net.dankito.banking.client.model.response.GetAccountDataResponse
import net.dankito.banking.client.model.response.TransferMoneyResponse import net.dankito.banking.client.model.response.TransferMoneyResponse
import net.dankito.banking.fints.FinTsClient import net.codinux.banking.fints.FinTsClient
import net.dankito.banking.fints.callback.SimpleFinTsClientCallback import net.codinux.banking.fints.callback.SimpleFinTsClientCallback
import net.dankito.banking.fints.model.* import net.codinux.banking.fints.model.*
import net.dankito.banking.fints.webclient.KtorWebClient import net.codinux.banking.fints.webclient.KtorWebClient
import net.dankito.banking.fints.webclient.ProxyingWebClient import net.codinux.banking.fints.webclient.ProxyingWebClient
import net.dankito.utils.multiplatform.log.LoggerFactory import net.dankito.utils.multiplatform.log.LoggerFactory
open class Presenter { open class Presenter {

View File

@ -34,7 +34,7 @@ kotlin {
browser { browser {
testTask { testTask {
useKarma { useKarma {
// useChromeHeadless() useChromeHeadless()
useFirefoxHeadless() useFirefoxHeadless()
} }
} }
@ -43,10 +43,13 @@ kotlin {
nodejs() nodejs()
} }
// wasmJs() // ktor is not available for wasmJs yet
linuxX64() linuxX64()
mingwX64() mingwX64()
iosX64()
iosArm64() iosArm64()
iosSimulatorArm64() iosSimulatorArm64()
macosX64() macosX64()

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints package net.codinux.banking.fints
import net.dankito.banking.client.model.parameter.FinTsClientParameter import net.dankito.banking.client.model.parameter.FinTsClientParameter
import net.dankito.banking.client.model.parameter.GetAccountDataParameter import net.dankito.banking.client.model.parameter.GetAccountDataParameter
@ -6,15 +6,15 @@ import net.dankito.banking.client.model.parameter.TransferMoneyParameter
import net.dankito.banking.client.model.response.ErrorCode import net.dankito.banking.client.model.response.ErrorCode
import net.dankito.banking.client.model.response.GetAccountDataResponse import net.dankito.banking.client.model.response.GetAccountDataResponse
import net.dankito.banking.client.model.response.TransferMoneyResponse import net.dankito.banking.client.model.response.TransferMoneyResponse
import net.dankito.banking.fints.callback.FinTsClientCallback import net.codinux.banking.fints.callback.FinTsClientCallback
import net.dankito.banking.fints.config.FinTsClientConfiguration import net.codinux.banking.fints.config.FinTsClientConfiguration
import net.dankito.banking.fints.mapper.FinTsModelMapper import net.codinux.banking.fints.mapper.FinTsModelMapper
import net.dankito.banking.fints.model.* import net.codinux.banking.fints.model.*
import net.dankito.banking.fints.response.client.FinTsClientResponse import net.codinux.banking.fints.response.client.FinTsClientResponse
import net.dankito.banking.fints.response.client.GetAccountInfoResponse import net.codinux.banking.fints.response.client.GetAccountInfoResponse
import net.dankito.banking.fints.response.client.GetAccountTransactionsResponse import net.codinux.banking.fints.response.client.GetAccountTransactionsResponse
import net.dankito.banking.fints.response.segments.AccountType import net.codinux.banking.fints.response.segments.AccountType
import net.dankito.banking.fints.util.BicFinder import net.codinux.banking.fints.util.BicFinder
open class FinTsClient( open class FinTsClient(
@ -175,13 +175,13 @@ open class FinTsClient(
val newUserInfoResponse = config.jobExecutor.retrieveBasicDataLikeUsersTanMethods(context, param.preferredTanMethods, param.preferredTanMedium) val newUserInfoResponse = config.jobExecutor.retrieveBasicDataLikeUsersTanMethods(context, param.preferredTanMethods, param.preferredTanMedium)
/* Second dialog, executed in retrieveBasicDataLikeUsersTanMethods() if required: some banks require that in order to initialize a dialog with
strong customer authorization TAN media is required */
if (newUserInfoResponse.successful == false) { // bank parameter (FinTS server address, ...) already seem to be wrong if (newUserInfoResponse.successful == false) { // bank parameter (FinTS server address, ...) already seem to be wrong
return GetAccountInfoResponse(context, newUserInfoResponse) return GetAccountInfoResponse(context, newUserInfoResponse)
} }
/* Second dialog, executed in retrieveBasicDataLikeUsersTanMethods() if required: some banks require that in order to initialize a dialog with
strong customer authorization TAN media is required */
val getAccountsResponse = config.jobExecutor.getAccounts(context) val getAccountsResponse = config.jobExecutor.getAccounts(context)
return GetAccountInfoResponse(context, getAccountsResponse) return GetAccountInfoResponse(context, getAccountsResponse)

View File

@ -1,17 +1,16 @@
package net.dankito.banking.fints package net.codinux.banking.fints
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.datetime.* import kotlinx.datetime.*
import net.dankito.banking.fints.callback.FinTsClientCallback import net.codinux.banking.fints.callback.FinTsClientCallback
import net.dankito.banking.fints.config.FinTsClientConfiguration import net.codinux.banking.fints.config.FinTsClientConfiguration
import net.dankito.banking.fints.extensions.minusDays import net.codinux.banking.fints.extensions.minusDays
import net.dankito.banking.fints.extensions.todayAtEuropeBerlin import net.codinux.banking.fints.extensions.todayAtEuropeBerlin
import net.dankito.banking.fints.messages.datenelemente.implementierte.tan.* import net.codinux.banking.fints.messages.datenelemente.implementierte.tan.*
import net.dankito.banking.fints.model.* import net.codinux.banking.fints.model.*
import net.dankito.banking.fints.response.BankResponse import net.codinux.banking.fints.response.BankResponse
import net.dankito.banking.fints.response.client.* import net.codinux.banking.fints.response.client.*
import net.dankito.banking.fints.webclient.IWebClient
/** /**
@ -26,19 +25,6 @@ open class FinTsClientDeprecated(
constructor(callback: FinTsClientCallback) : this(FinTsClientConfiguration(), callback) constructor(callback: FinTsClientCallback) : this(FinTsClientConfiguration(), callback)
/**
* Retrieves information about bank (e.g. supported HBCI versions, FinTS server address,
* supported jobs, ...).
*
* On success [bank] parameter is updated afterwards.
*/
open fun getAnonymousBankInfoAsync(bank: BankData, callback: (FinTsClientResponse) -> Unit) {
GlobalScope.launch {
callback(getAnonymousBankInfo(bank))
}
}
/** /**
* Retrieves information about bank (e.g. supported HBCI versions, FinTS server address, * Retrieves information about bank (e.g. supported HBCI versions, FinTS server address,
* supported jobs, ...). * supported jobs, ...).

View File

@ -1,11 +1,11 @@
package net.dankito.banking.fints package net.codinux.banking.fints
import net.dankito.banking.fints.callback.FinTsClientCallback import net.codinux.banking.fints.callback.FinTsClientCallback
import net.dankito.banking.fints.config.FinTsClientConfiguration import net.codinux.banking.fints.config.FinTsClientConfiguration
import net.dankito.banking.fints.model.* import net.codinux.banking.fints.model.*
import net.dankito.banking.fints.response.client.AddAccountResponse import net.codinux.banking.fints.response.client.AddAccountResponse
import net.dankito.banking.fints.response.client.FinTsClientResponse import net.codinux.banking.fints.response.client.FinTsClientResponse
import net.dankito.banking.fints.response.client.GetAccountTransactionsResponse import net.codinux.banking.fints.response.client.GetAccountTransactionsResponse
open class FinTsClientForCustomer( open class FinTsClientForCustomer(

View File

@ -1,26 +1,26 @@
package net.dankito.banking.fints package net.codinux.banking.fints
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDate
import net.codinux.log.logger import net.codinux.log.logger
import net.dankito.banking.fints.messages.MessageBuilder import net.codinux.banking.fints.messages.MessageBuilder
import net.dankito.banking.fints.messages.MessageBuilderResult import net.codinux.banking.fints.messages.MessageBuilderResult
import net.dankito.banking.fints.messages.datenelemente.implementierte.signatur.VersionDesSicherheitsverfahrens import net.codinux.banking.fints.messages.datenelemente.implementierte.signatur.VersionDesSicherheitsverfahrens
import net.dankito.banking.fints.messages.datenelemente.implementierte.tan.* import net.codinux.banking.fints.messages.datenelemente.implementierte.tan.*
import net.dankito.banking.fints.messages.segmente.id.CustomerSegmentId import net.codinux.banking.fints.messages.segmente.id.CustomerSegmentId
import net.dankito.banking.fints.messages.segmente.id.ISegmentId import net.codinux.banking.fints.messages.segmente.id.ISegmentId
import net.dankito.banking.fints.model.* import net.codinux.banking.fints.model.*
import net.dankito.banking.fints.model.mapper.ModelMapper import net.codinux.banking.fints.model.mapper.ModelMapper
import net.dankito.banking.fints.response.BankResponse import net.codinux.banking.fints.response.BankResponse
import net.dankito.banking.fints.response.InstituteSegmentId import net.codinux.banking.fints.response.InstituteSegmentId
import net.dankito.banking.fints.response.client.* import net.codinux.banking.fints.response.client.*
import net.dankito.banking.fints.response.segments.* import net.codinux.banking.fints.response.segments.*
import net.dankito.banking.fints.tan.FlickerCodeDecoder import net.codinux.banking.fints.tan.FlickerCodeDecoder
import net.dankito.banking.fints.tan.TanImageDecoder import net.codinux.banking.fints.tan.TanImageDecoder
import net.dankito.banking.fints.util.TanMethodSelector import net.codinux.banking.fints.util.TanMethodSelector
import net.dankito.banking.fints.extensions.minusDays import net.codinux.banking.fints.extensions.minusDays
import net.dankito.banking.fints.extensions.todayAtEuropeBerlin import net.codinux.banking.fints.extensions.todayAtEuropeBerlin
import net.dankito.banking.fints.extensions.todayAtSystemDefaultTimeZone import net.codinux.banking.fints.extensions.todayAtSystemDefaultTimeZone
/** /**

View File

@ -1,17 +1,18 @@
package net.dankito.banking.fints package net.codinux.banking.fints
import net.codinux.log.logger import net.codinux.log.logger
import net.dankito.banking.fints.messages.MessageBuilder import net.codinux.banking.fints.messages.MessageBuilder
import net.dankito.banking.fints.messages.MessageBuilderResult import net.codinux.banking.fints.messages.MessageBuilderResult
import net.dankito.banking.fints.model.* import net.codinux.banking.fints.model.*
import net.dankito.banking.fints.response.BankResponse import net.codinux.banking.fints.response.BankResponse
import net.dankito.banking.fints.response.segments.TanResponse import net.codinux.banking.fints.response.segments.TanResponse
import net.dankito.banking.fints.util.IBase64Service import net.codinux.banking.fints.util.IBase64Service
import net.dankito.banking.fints.util.PureKotlinBase64Service import net.codinux.banking.fints.util.PureKotlinBase64Service
import net.dankito.banking.fints.webclient.IWebClient import net.codinux.banking.fints.webclient.IWebClient
import net.dankito.banking.fints.webclient.KtorWebClient import net.codinux.banking.fints.webclient.KtorWebClient
import net.dankito.banking.fints.webclient.WebClientResponse import net.codinux.banking.fints.webclient.WebClientResponse
import net.dankito.banking.fints.extensions.getAllExceptionMessagesJoined import net.codinux.banking.fints.extensions.getAllExceptionMessagesJoined
import net.codinux.banking.fints.response.segments.ReceivedSegment
open class RequestExecutor( open class RequestExecutor(
@ -104,9 +105,11 @@ open class RequestExecutor(
try { try {
val decodedResponse = decodeBase64Response(responseBody) val decodedResponse = decodeBase64Response(responseBody)
addMessageLog(context, MessageLogEntryType.Received, decodedResponse) val parsedResponse = context.responseParser.parse(decodedResponse)
return context.responseParser.parse(decodedResponse) addMessageLog(context, MessageLogEntryType.Received, decodedResponse, parsedResponse.receivedSegments)
return parsedResponse
} catch (e: Exception) { } catch (e: Exception) {
logError(context, "Could not decode responseBody:\r\n'$responseBody'", e) logError(context, "Could not decode responseBody:\r\n'$responseBody'", e)
@ -164,8 +167,8 @@ open class RequestExecutor(
} }
protected open fun addMessageLog(context: JobContext, type: MessageLogEntryType, message: String) { protected open fun addMessageLog(context: JobContext, type: MessageLogEntryType, message: String, parsedSegments: List<ReceivedSegment> = emptyList()) {
context.addMessageLog(type, message) context.addMessageLog(type, message, parsedSegments)
} }
protected open fun logError(context: JobContext, message: String, e: Exception?) { protected open fun logError(context: JobContext, message: String, e: Exception?) {

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.callback package net.codinux.banking.fints.callback
import net.dankito.banking.fints.messages.datenelemente.implementierte.tan.TanGeneratorTanMedium import net.codinux.banking.fints.messages.datenelemente.implementierte.tan.TanGeneratorTanMedium
import net.dankito.banking.fints.model.* import net.codinux.banking.fints.model.*
interface FinTsClientCallback { interface FinTsClientCallback {
@ -27,4 +27,11 @@ interface FinTsClientCallback {
*/ */
suspend fun enterTanGeneratorAtc(bank: BankData, tanMedium: TanGeneratorTanMedium): EnterTanGeneratorAtcResult suspend fun enterTanGeneratorAtc(bank: BankData, tanMedium: TanGeneratorTanMedium): EnterTanGeneratorAtcResult
/**
* Gets fired when a FinTS message get sent to bank server, a FinTS message is received from bank server or an error occurred.
*
* Be aware, in order that this message gets fired [net.codinux.banking.fints.config.FinTsClientOptions.fireCallbackOnMessageLogs] has to be set to true.
*/
fun messageLogAdded(messageLogEntry: MessageLogEntry)
} }

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.callback package net.codinux.banking.fints.callback
import net.dankito.banking.fints.messages.datenelemente.implementierte.tan.TanGeneratorTanMedium import net.codinux.banking.fints.messages.datenelemente.implementierte.tan.TanGeneratorTanMedium
import net.dankito.banking.fints.model.* import net.codinux.banking.fints.model.*
open class NoOpFinTsClientCallback : FinTsClientCallback { open class NoOpFinTsClientCallback : FinTsClientCallback {
@ -18,4 +18,8 @@ open class NoOpFinTsClientCallback : FinTsClientCallback {
return EnterTanGeneratorAtcResult.userDidNotEnterAtc() return EnterTanGeneratorAtcResult.userDidNotEnterAtc()
} }
override fun messageLogAdded(messageLogEntry: MessageLogEntry) {
}
} }

View File

@ -1,18 +1,19 @@
package net.dankito.banking.fints.callback package net.codinux.banking.fints.callback
import net.dankito.banking.fints.messages.datenelemente.implementierte.tan.TanGeneratorTanMedium import net.codinux.banking.fints.messages.datenelemente.implementierte.tan.TanGeneratorTanMedium
import net.dankito.banking.fints.model.* import net.codinux.banking.fints.model.*
open class SimpleFinTsClientCallback( open class SimpleFinTsClientCallback(
protected open val enterTan: ((tanChallenge: TanChallenge) -> Unit)? = null, protected open val askUserForTanMethod: ((supportedTanMethods: List<TanMethod>, suggestedTanMethod: TanMethod?) -> TanMethod?)? = null,
protected open val messageLogAdded: ((MessageLogEntry) -> Unit)? = null,
protected open val enterTanGeneratorAtc: ((bank: BankData, tanMedium: TanGeneratorTanMedium) -> EnterTanGeneratorAtcResult)? = null, protected open val enterTanGeneratorAtc: ((bank: BankData, tanMedium: TanGeneratorTanMedium) -> EnterTanGeneratorAtcResult)? = null,
protected open val askUserForTanMethod: ((supportedTanMethods: List<TanMethod>, suggestedTanMethod: TanMethod?) -> TanMethod?)? = null protected open val enterTan: ((tanChallenge: TanChallenge) -> Unit)? = null
) : FinTsClientCallback { ) : FinTsClientCallback {
constructor() : this(null) // Swift does not support default parameter values -> create constructor overloads constructor() : this(null as ((tanChallenge: TanChallenge) -> Unit)?) // Swift does not support default parameter values -> create constructor overloads
constructor(enterTan: ((tanChallenge: TanChallenge) -> Unit)?) : this(enterTan, null) constructor(enterTan: ((tanChallenge: TanChallenge) -> Unit)?) : this(null, null, null, enterTan)
override suspend fun askUserForTanMethod(supportedTanMethods: List<TanMethod>, suggestedTanMethod: TanMethod?): TanMethod? { override suspend fun askUserForTanMethod(supportedTanMethods: List<TanMethod>, suggestedTanMethod: TanMethod?): TanMethod? {
@ -28,4 +29,8 @@ open class SimpleFinTsClientCallback(
return enterTanGeneratorAtc?.invoke(bank, tanMedium) ?: EnterTanGeneratorAtcResult.userDidNotEnterAtc() return enterTanGeneratorAtc?.invoke(bank, tanMedium) ?: EnterTanGeneratorAtcResult.userDidNotEnterAtc()
} }
override fun messageLogAdded(messageLogEntry: MessageLogEntry) {
messageLogAdded?.invoke(messageLogEntry)
}
} }

View File

@ -1,15 +1,15 @@
package net.dankito.banking.fints.config package net.codinux.banking.fints.config
import net.dankito.banking.fints.FinTsJobExecutor import net.codinux.banking.fints.FinTsJobExecutor
import net.dankito.banking.fints.RequestExecutor import net.codinux.banking.fints.RequestExecutor
import net.dankito.banking.fints.messages.MessageBuilder import net.codinux.banking.fints.messages.MessageBuilder
import net.dankito.banking.fints.model.mapper.ModelMapper import net.codinux.banking.fints.model.mapper.ModelMapper
import net.dankito.banking.fints.util.FinTsServerAddressFinder import net.codinux.banking.fints.util.FinTsServerAddressFinder
import net.dankito.banking.fints.util.IBase64Service import net.codinux.banking.fints.util.IBase64Service
import net.dankito.banking.fints.util.PureKotlinBase64Service import net.codinux.banking.fints.util.PureKotlinBase64Service
import net.dankito.banking.fints.util.TanMethodSelector import net.codinux.banking.fints.util.TanMethodSelector
import net.dankito.banking.fints.webclient.IWebClient import net.codinux.banking.fints.webclient.IWebClient
import net.dankito.banking.fints.webclient.KtorWebClient import net.codinux.banking.fints.webclient.KtorWebClient
class FinTsClientConfiguration( class FinTsClientConfiguration(
var options: FinTsClientOptions = FinTsClientOptions(), var options: FinTsClientOptions = FinTsClientOptions(),

View File

@ -0,0 +1,35 @@
package net.codinux.banking.fints.config
import net.codinux.banking.fints.model.ProductData
data class FinTsClientOptions(
/**
* If FinTS messages sent to and received from bank servers and errors should be collected. They are then accessible
* via [net.codinux.banking.fints.response.client.FinTsClientResponse.messageLog].
*
* Set to false by default.
*/
val collectMessageLog: Boolean = false,
/**
* If set to true then [net.codinux.banking.fints.callback.FinTsClientCallback.messageLogAdded] get fired when a
* FinTS message get sent to bank server, a FinTS message is received from bank server or an error occurred.
*
* Defaults to false.
*/
val fireCallbackOnMessageLogs: Boolean = false,
/**
* If sensitive data like user name, password, login name should be removed from FinTS messages before being logged.
*
* Defaults to true.
*/
val removeSensitiveDataFromMessageLog: Boolean = true,
val version: String = "1.0.0", // TODO: get version dynamically
val productName: String = "15E53C26816138699C7B6A3E8"
) {
val product: ProductData by lazy { ProductData(productName, version) }
}

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.extensions package net.codinux.banking.fints.extensions
import kotlinx.datetime.* import kotlinx.datetime.*
import kotlin.js.JsName import kotlin.js.JsName

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.extensions package net.codinux.banking.fints.extensions
import kotlinx.datetime.* import kotlinx.datetime.*

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.extensions package net.codinux.banking.fints.extensions
fun Int.toStringWithMinDigits(minimumCountDigits: Int, fillerString: Char = '0'): String { fun Int.toStringWithMinDigits(minimumCountDigits: Int, fillerString: Char = '0'): String {

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.extensions package net.codinux.banking.fints.extensions
import kotlinx.datetime.Clock import kotlinx.datetime.Clock
import kotlin.random.Random import kotlin.random.Random

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.extensions package net.codinux.banking.fints.extensions
/** /**

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.extensions package net.codinux.banking.fints.extensions
fun Throwable.getAllExceptionMessagesJoined(maxDepth: Int = 5): String { fun Throwable.getAllExceptionMessagesJoined(maxDepth: Int = 5): String {

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.extensions package net.codinux.banking.fints.extensions
import kotlinx.datetime.TimeZone import kotlinx.datetime.TimeZone

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.log package net.codinux.banking.fints.log
import kotlin.reflect.KClass import kotlin.reflect.KClass

View File

@ -0,0 +1,17 @@
package net.codinux.banking.fints.log
import net.codinux.banking.fints.model.AccountData
import net.codinux.banking.fints.model.BankData
import net.codinux.banking.fints.model.MessageType
import net.codinux.banking.fints.model.JobContextType
class MessageContext(
val jobType: JobContextType,
val dialogType: MessageType,
val jobNumber: Int,
val dialogNumber: Int,
val messageNumber: Int,
val bank: BankData,
val account: AccountData?
)

View File

@ -1,19 +1,22 @@
package net.dankito.banking.fints.log package net.codinux.banking.fints.log
import net.codinux.log.LoggerFactory import net.codinux.log.LoggerFactory
import net.codinux.log.logger import net.codinux.log.logger
import net.dankito.banking.fints.config.FinTsClientOptions import net.codinux.banking.fints.callback.FinTsClientCallback
import net.dankito.banking.fints.model.BankData import net.codinux.banking.fints.config.FinTsClientOptions
import net.dankito.banking.fints.model.MessageLogEntry import net.codinux.banking.fints.model.BankData
import net.dankito.banking.fints.model.MessageLogEntryType import net.codinux.banking.fints.model.MessageLogEntry
import net.dankito.banking.fints.extensions.getInnerException import net.codinux.banking.fints.model.MessageLogEntryType
import net.dankito.banking.fints.extensions.nthIndexOf import net.codinux.banking.fints.extensions.getInnerException
import net.dankito.banking.fints.extensions.toStringWithMinDigits import net.codinux.banking.fints.extensions.nthIndexOf
import net.dankito.banking.fints.util.FinTsUtils import net.codinux.banking.fints.extensions.toStringWithMinDigits
import net.codinux.banking.fints.response.segments.ReceivedSegment
import net.codinux.banking.fints.util.FinTsUtils
import kotlin.reflect.KClass import kotlin.reflect.KClass
open class MessageLogCollector( open class MessageLogCollector(
private val callback: FinTsClientCallback,
private val options: FinTsClientOptions = FinTsClientOptions(), private val options: FinTsClientOptions = FinTsClientOptions(),
private val finTsUtils: FinTsUtils = FinTsUtils() private val finTsUtils: FinTsUtils = FinTsUtils()
) { ) {
@ -35,13 +38,13 @@ open class MessageLogCollector(
// in either case remove sensitive data after response is parsed as otherwise some information like account holder name and accounts may is not set yet on BankData // in either case remove sensitive data after response is parsed as otherwise some information like account holder name and accounts may is not set yet on BankData
open val messageLog: List<MessageLogEntry> open val messageLog: List<MessageLogEntry>
// safe CPU cycles by only formatting and removing sensitive data if messageLog is really requested // safe CPU cycles by only formatting and removing sensitive data if messageLog is really requested
get() = _messageLog.map { MessageLogEntry(it.type, it.context, it.messageTrace, createMessageForLog(it), it.error, it.time) } get() = _messageLog.map { MessageLogEntry(it.type, it.context, it.messageTrace, createMessageForLog(it), it.error, it.parsedSegments, it.time) }
private fun createMessageForLog(logEntry: MessageLogEntry): String { private fun createMessageForLog(logEntry: MessageLogEntry): String {
val message = if (logEntry.type == MessageLogEntryType.Error) { val message = if (logEntry.type == MessageLogEntryType.Error) {
logEntry.messageTrace + logEntry.message + (if (logEntry.error != null) NewLine + getStackTrace(logEntry.error!!) else "") logEntry.message + (if (logEntry.error != null) NewLine + getStackTrace(logEntry.error!!) else "")
} else { } else {
logEntry.messageTrace + "\n" + prettyPrintFinTsMessage(logEntry.message) logEntry.message
} }
return if (options.removeSensitiveDataFromMessageLog) { return if (options.removeSensitiveDataFromMessageLog) {
@ -52,25 +55,41 @@ open class MessageLogCollector(
} }
open fun addMessageLog(type: MessageLogEntryType, message: String, context: MessageContext) { open fun addMessageLog(type: MessageLogEntryType, message: String, context: MessageContext, parsedSegments: List<ReceivedSegment> = emptyList()) {
val messageTrace = createMessageTraceString(type, context) val messageTrace = createMessageTraceString(type, context)
addMessageLogEntry(type, context, messageTrace, message) val prettyPrintMessage = if (options.collectMessageLog || options.fireCallbackOnMessageLogs || log.isDebugEnabled) { // only use CPU cycles if message will ever be used / displayed
prettyPrintFinTsMessage(message)
} else {
message
}
log.debug { "$messageTrace\n${prettyPrintFinTsMessage(message)}" } log.debug { "$messageTrace\n$prettyPrintMessage" }
addMessageLogEntry(type, context, messageTrace, prettyPrintMessage, null, parsedSegments)
} }
open fun logError(loggingClass: KClass<*>, message: String, context: MessageContext, e: Exception? = null) { open fun logError(loggingClass: KClass<*>, message: String, context: MessageContext, e: Exception? = null) {
val type = MessageLogEntryType.Error val type = MessageLogEntryType.Error
val messageTrace = createMessageTraceString(type, context) val messageTrace = createMessageTraceString(type, context)
LoggerFactory.getLogger(loggingClass).error(e) { messageTrace + messageTrace } LoggerFactory.getLogger(loggingClass).error(e) { messageTrace + message }
addMessageLogEntry(type, context, messageTrace, message, e) addMessageLogEntry(type, context, messageTrace, message, e)
} }
protected open fun addMessageLogEntry(type: MessageLogEntryType, context: MessageContext, messageTrace: String, message: String, error: Throwable? = null) { protected open fun addMessageLogEntry(type: MessageLogEntryType, context: MessageContext, messageTrace: String, message: String, error: Throwable? = null, parsedSegments: List<ReceivedSegment> = emptyList()) {
_messageLog.add(MessageLogEntry(type, context, messageTrace, message, error)) if (options.collectMessageLog || options.fireCallbackOnMessageLogs) {
val newEntry = MessageLogEntry(type, context, messageTrace, message, error, parsedSegments)
if (options.collectMessageLog) {
_messageLog.add(newEntry)
}
if (options.fireCallbackOnMessageLogs) {
callback.messageLogAdded(newEntry)
}
}
} }
@ -88,9 +107,9 @@ open class MessageLogCollector(
protected open fun getMessageTypeString(type: MessageLogEntryType): String { protected open fun getMessageTypeString(type: MessageLogEntryType): String {
return when (type) { return when (type) {
MessageLogEntryType.Sent -> "Sending message" MessageLogEntryType.Sent -> "01 Sending message"
MessageLogEntryType.Received -> "Received message" MessageLogEntryType.Received -> "02 Received message"
MessageLogEntryType.Error -> "Error" MessageLogEntryType.Error -> "03 Error"
} }
} }

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.mapper package net.codinux.banking.fints.mapper
import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDate

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.mapper package net.codinux.banking.fints.mapper
import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDate
import net.dankito.banking.client.model.* import net.dankito.banking.client.model.*
@ -7,14 +7,14 @@ import net.dankito.banking.client.model.parameter.FinTsClientParameter
import net.dankito.banking.client.model.parameter.GetAccountDataParameter import net.dankito.banking.client.model.parameter.GetAccountDataParameter
import net.dankito.banking.client.model.parameter.RetrieveTransactions import net.dankito.banking.client.model.parameter.RetrieveTransactions
import net.dankito.banking.client.model.response.ErrorCode import net.dankito.banking.client.model.response.ErrorCode
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Laenderkennzeichen import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Laenderkennzeichen
import net.dankito.banking.fints.model.* import net.codinux.banking.fints.model.*
import net.dankito.banking.fints.response.client.FinTsClientResponse import net.codinux.banking.fints.response.client.FinTsClientResponse
import net.dankito.banking.fints.response.client.GetAccountTransactionsResponse import net.codinux.banking.fints.response.client.GetAccountTransactionsResponse
import net.dankito.banking.fints.response.segments.AccountType import net.codinux.banking.fints.response.segments.AccountType
import net.dankito.banking.fints.util.BicFinder import net.codinux.banking.fints.util.BicFinder
import net.dankito.banking.fints.extensions.minusDays import net.codinux.banking.fints.extensions.minusDays
import net.dankito.banking.fints.extensions.todayAtEuropeBerlin import net.codinux.banking.fints.extensions.todayAtEuropeBerlin
open class FinTsModelMapper { open class FinTsModelMapper {
@ -90,7 +90,7 @@ open class FinTsModelMapper {
return data.bookedTransactions.map { map(it) } return data.bookedTransactions.map { map(it) }
} }
open fun map(transaction: net.dankito.banking.fints.model.AccountTransaction): AccountTransaction { open fun map(transaction: net.codinux.banking.fints.model.AccountTransaction): AccountTransaction {
return AccountTransaction(transaction.amount, transaction.unparsedReference, transaction.bookingDate, return AccountTransaction(transaction.amount, transaction.unparsedReference, transaction.bookingDate,
transaction.otherPartyName, transaction.otherPartyBankCode, transaction.otherPartyAccountId, transaction.bookingText, transaction.valueDate, transaction.otherPartyName, transaction.otherPartyBankCode, transaction.otherPartyAccountId, transaction.bookingText, transaction.valueDate,
transaction.statementNumber, transaction.sequenceNumber, transaction.openingBalance, transaction.closingBalance, transaction.statementNumber, transaction.sequenceNumber, transaction.openingBalance, transaction.closingBalance,

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.messages package net.codinux.banking.fints.messages
enum class Existenzstatus { enum class Existenzstatus {

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.messages package net.codinux.banking.fints.messages
import io.ktor.utils.io.charsets.Charsets import io.ktor.utils.io.charsets.Charsets

View File

@ -1,26 +1,26 @@
package net.dankito.banking.fints.messages package net.codinux.banking.fints.messages
import net.dankito.banking.fints.extensions.randomWithSeed import net.codinux.banking.fints.extensions.randomWithSeed
import net.dankito.banking.fints.messages.datenelemente.implementierte.Aufsetzpunkt import net.codinux.banking.fints.messages.datenelemente.implementierte.Aufsetzpunkt
import net.dankito.banking.fints.messages.datenelemente.implementierte.KundensystemID import net.codinux.banking.fints.messages.datenelemente.implementierte.KundensystemID
import net.dankito.banking.fints.messages.datenelemente.implementierte.Synchronisierungsmodus import net.codinux.banking.fints.messages.datenelemente.implementierte.Synchronisierungsmodus
import net.dankito.banking.fints.messages.datenelemente.implementierte.tan.TanGeneratorTanMedium import net.codinux.banking.fints.messages.datenelemente.implementierte.tan.TanGeneratorTanMedium
import net.dankito.banking.fints.messages.datenelemente.implementierte.tan.TanMedienArtVersion import net.codinux.banking.fints.messages.datenelemente.implementierte.tan.TanMedienArtVersion
import net.dankito.banking.fints.messages.datenelemente.implementierte.tan.TanMediumKlasse import net.codinux.banking.fints.messages.datenelemente.implementierte.tan.TanMediumKlasse
import net.dankito.banking.fints.messages.datenelemente.implementierte.tan.TanProcess import net.codinux.banking.fints.messages.datenelemente.implementierte.tan.TanProcess
import net.dankito.banking.fints.messages.segmente.Segment import net.codinux.banking.fints.messages.segmente.Segment
import net.dankito.banking.fints.messages.segmente.Synchronisierung import net.codinux.banking.fints.messages.segmente.Synchronisierung
import net.dankito.banking.fints.messages.segmente.id.CustomerSegmentId import net.codinux.banking.fints.messages.segmente.id.CustomerSegmentId
import net.dankito.banking.fints.messages.segmente.id.ISegmentId import net.codinux.banking.fints.messages.segmente.id.ISegmentId
import net.dankito.banking.fints.messages.segmente.implementierte.* import net.codinux.banking.fints.messages.segmente.implementierte.*
import net.dankito.banking.fints.messages.segmente.implementierte.sepa.SepaBankTransferBase import net.codinux.banking.fints.messages.segmente.implementierte.sepa.SepaBankTransferBase
import net.dankito.banking.fints.messages.segmente.implementierte.tan.TanGeneratorListeAnzeigen import net.codinux.banking.fints.messages.segmente.implementierte.tan.TanGeneratorListeAnzeigen
import net.dankito.banking.fints.messages.segmente.implementierte.tan.TanGeneratorTanMediumAnOderUmmelden import net.codinux.banking.fints.messages.segmente.implementierte.tan.TanGeneratorTanMediumAnOderUmmelden
import net.dankito.banking.fints.messages.segmente.implementierte.umsaetze.* import net.codinux.banking.fints.messages.segmente.implementierte.umsaetze.*
import net.dankito.banking.fints.model.* import net.codinux.banking.fints.model.*
import net.dankito.banking.fints.response.InstituteSegmentId import net.codinux.banking.fints.response.InstituteSegmentId
import net.dankito.banking.fints.response.segments.* import net.codinux.banking.fints.response.segments.*
import net.dankito.banking.fints.util.FinTsUtils import net.codinux.banking.fints.util.FinTsUtils
import kotlin.math.absoluteValue import kotlin.math.absoluteValue
@ -133,7 +133,7 @@ open class MessageBuilder(protected val utils: FinTsUtils = FinTsUtils()) {
} }
if (context.bank.customerSystemId == KundensystemID.Anonymous) { if (context.bank.customerSystemId == KundensystemID.Anonymous) {
segments.add(Synchronisierung(segments.size + 3, Synchronisierungsmodus.NeueKundensystemIdZurueckmelden)) segments.add(Synchronisierung(SignedMessagePayloadFirstSegmentNumber + segments.size, Synchronisierungsmodus.NeueKundensystemIdZurueckmelden))
} }
return createSignedMessageBuilderResult(context, MessageType.DialogInit, segments) return createSignedMessageBuilderResult(context, MessageType.DialogInit, segments)
@ -394,7 +394,7 @@ open class MessageBuilder(protected val utils: FinTsUtils = FinTsUtils()) {
return createSignedMessage(context, null, payloadSegments) return createSignedMessage(context, null, payloadSegments)
} }
open fun createSignedMessage(context: JobContext, tan: String? = null, payloadSegments: List<Segment>): String { protected open fun createSignedMessage(context: JobContext, tan: String? = null, payloadSegments: List<Segment>): String {
val date = utils.formatDateTodayAsInt() val date = utils.formatDateTodayAsInt()
val time = utils.formatTimeNowAsInt() val time = utils.formatTimeNowAsInt()
@ -406,7 +406,7 @@ open class MessageBuilder(protected val utils: FinTsUtils = FinTsUtils()) {
return createMessage(context, encryptedPayload, payloadSegments.size) return createMessage(context, encryptedPayload, payloadSegments.size)
} }
open fun createMessage(context: JobContext, payloadSegments: List<Segment>, countWrappedSegments: Int = 0): String { protected open fun createMessage(context: JobContext, payloadSegments: List<Segment>, countWrappedSegments: Int = 0): String {
val dialog = context.dialog val dialog = context.dialog
dialog.increaseMessageNumber() dialog.increaseMessageNumber()
@ -536,8 +536,7 @@ open class MessageBuilder(protected val utils: FinTsUtils = FinTsUtils()) {
} }
protected open fun isTanRequiredForJob(context: JobContext, segmentId: CustomerSegmentId): Boolean { protected open fun isTanRequiredForJob(context: JobContext, segmentId: CustomerSegmentId): Boolean {
return context.bank.pinInfo?.jobTanConfiguration?.first { it.segmentId == segmentId.id }?.tanRequired return context.bank.doesJobRequireTan(segmentId)
?: false // TODO: actually in this case it's not allowed to execute job via PIN/TAN at all
} }
protected open fun getSepaUrnFor(segmentId: CustomerSegmentId, bank: BankData, sepaDataFormat: String): String? { protected open fun getSepaUrnFor(segmentId: CustomerSegmentId, bank: BankData, sepaDataFormat: String): String? {

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages package net.codinux.banking.fints.messages
import net.dankito.banking.fints.messages.segmente.Segment import net.codinux.banking.fints.messages.segmente.Segment
import net.dankito.banking.fints.messages.segmente.implementierte.ZweiSchrittTanEinreichung import net.codinux.banking.fints.messages.segmente.implementierte.ZweiSchrittTanEinreichung
open class MessageBuilderResult( open class MessageBuilderResult(

View File

@ -1,6 +1,6 @@
package net.dankito.banking.fints.messages package net.codinux.banking.fints.messages
import net.dankito.banking.fints.util.MessageUtils import net.codinux.banking.fints.util.MessageUtils
abstract class Nachrichtenteil(protected val messageUtils: MessageUtils = MessageUtils()) { abstract class Nachrichtenteil(protected val messageUtils: MessageUtils = MessageUtils()) {

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.messages package net.codinux.banking.fints.messages
class Separators { class Separators {

View File

@ -1,6 +1,6 @@
package net.dankito.banking.fints.messages.datenelemente package net.codinux.banking.fints.messages.datenelemente
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
abstract class Datenelement(existenzstatus: Existenzstatus): DatenelementBase(existenzstatus) { abstract class Datenelement(existenzstatus: Existenzstatus): DatenelementBase(existenzstatus) {

View File

@ -0,0 +1,7 @@
package net.codinux.banking.fints.messages.datenelemente
import net.codinux.banking.fints.messages.Existenzstatus
import net.codinux.banking.fints.messages.Nachrichtenteil
abstract class DatenelementBase(val existenzstatus: Existenzstatus) : Nachrichtenteil()

View File

@ -1,8 +1,8 @@
package net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate package net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement
import net.dankito.banking.fints.messages.datenelemente.implementierte.ICodeEnum import net.codinux.banking.fints.messages.datenelemente.implementierte.ICodeEnum
/** /**

View File

@ -1,10 +1,10 @@
package net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate package net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate
import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDate
import net.codinux.log.logger import net.codinux.log.logger
import net.dankito.banking.fints.extensions.toStringWithMinDigits import net.codinux.banking.fints.extensions.toStringWithMinDigits
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate package net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate package net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate package net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.ZiffernDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.ZiffernDatenelement
/** /**

View File

@ -1,10 +1,10 @@
package net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate package net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate
import kotlinx.datetime.LocalTime import kotlinx.datetime.LocalTime
import net.codinux.log.logger import net.codinux.log.logger
import net.dankito.banking.fints.extensions.toStringWithMinDigits import net.codinux.banking.fints.extensions.toStringWithMinDigits
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.ZiffernDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.ZiffernDatenelement
/** /**

View File

@ -1,6 +1,6 @@
package net.dankito.banking.fints.messages.datenelemente.basisformate package net.codinux.banking.fints.messages.datenelemente.basisformate
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
/** /**

View File

@ -1,6 +1,6 @@
package net.dankito.banking.fints.messages.datenelemente.basisformate package net.codinux.banking.fints.messages.datenelemente.basisformate
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
/** /**

View File

@ -1,6 +1,6 @@
package net.dankito.banking.fints.messages.datenelemente.basisformate package net.codinux.banking.fints.messages.datenelemente.basisformate
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
/** /**

View File

@ -1,11 +1,11 @@
package net.dankito.banking.fints.messages.datenelemente.basisformate package net.codinux.banking.fints.messages.datenelemente.basisformate
import io.ktor.utils.io.charsets.encode import io.ktor.utils.io.charsets.encode
import io.ktor.utils.io.charsets.name import io.ktor.utils.io.charsets.name
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.HbciCharset import net.codinux.banking.fints.messages.HbciCharset
import net.dankito.banking.fints.messages.Separators import net.codinux.banking.fints.messages.Separators
import net.dankito.banking.fints.messages.datenelemente.Datenelement import net.codinux.banking.fints.messages.datenelemente.Datenelement
/** /**

View File

@ -1,6 +1,6 @@
package net.dankito.banking.fints.messages.datenelemente.basisformate package net.codinux.banking.fints.messages.datenelemente.basisformate
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Identifikation import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Identifikation
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement
/** /**

View File

@ -0,0 +1,6 @@
package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.codinux.banking.fints.messages.Existenzstatus
open class BezugssegmentInKreditinstitutsnachricht(segmentNumber: Int) : Bezugssegment(segmentNumber, Existenzstatus.Optional)

View File

@ -0,0 +1,6 @@
package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.codinux.banking.fints.messages.Existenzstatus
open class BezugssegmentInKundennachricht(segmentNumber: Int) : Bezugssegment(segmentNumber, Existenzstatus.NotAllowed)

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Identifikation import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Identifikation
/** /**

View File

@ -0,0 +1,21 @@
package net.codinux.banking.fints.messages.datenelemente.implementierte
enum class Dialogsprache(override val code: String) : ICodeEnum {
/**
* Der Kunde darf lediglich ein Sprachkennzeichen einstellen, das im Rahmen
* der BPD vom Kreditinstitut an das Kundensystem übermittelt wurde.
* Wenn noch keine BPD vorliegen, sollte das Kundenprodukt mit Hilfe eines
* anonymen Dialogs die aktuelle BPD des Instituts ermitteln und die Standardsprache des Instituts einstellen, die in den Bankparameterdaten mitgeteilt
* wird. Falls die BPD nicht abgerufen werden kann, ist der Wert 0 einzustellen. Das Kreditinstitut antwortet in diesem Fall in seiner Standardsprache.
*/
Default("0"),
German("1"),
English("2"),
French("3")
}

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Code import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Code
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.TextDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.TextDatenelement
/** /**

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
enum class HbciVersion(val versionNumber: Int, override val code: String) : ICodeEnum { enum class HbciVersion(val versionNumber: Int, override val code: String) : ICodeEnum {

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement
/** /**

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
inline fun <reified T : Enum<T>> allCodes(): List<String> { inline fun <reified T : Enum<T>> allCodes(): List<String> {

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Identifikation import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Identifikation
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Identifikation import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Identifikation
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Code import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Code
/** /**

View File

@ -0,0 +1,21 @@
package net.codinux.banking.fints.messages.datenelemente.implementierte
/**
* Information darüber, ob die Kundensystem-ID erforderlich ist.
*/
enum class KundensystemStatusWerte(override val code: String) : ICodeEnum {
/**
* Kundensystem-ID wird nicht benötigt (HBCI DDV-Verfahren und
* chipkartenbasierte Verfahren ab Sicherheitsprofil-Version 3)
* und PinTan bis über HKSYN eine Kundensystem-ID vom Bankserver abgerufen wurde.
*/
NichtBenoetigt("0"),
/**
* Kundensystem-ID wird benötigt (sonstige HBCI RAH- /
* RDH- und PIN/TAN-Verfahren)
*/
Benoetigt("1")
}

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.ZiffernDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.ZiffernDatenelement
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement
/** /**

View File

@ -0,0 +1,7 @@
package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.codinux.banking.fints.messages.Existenzstatus
import net.codinux.banking.fints.messages.datenelemente.basisformate.TextDatenelement
open class NotAllowedDatenelement : TextDatenelement("", Existenzstatus.NotAllowed)

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement
/** /**

View File

@ -1,4 +1,4 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
enum class Synchronisierungsmodus(override val code: String) : ICodeEnum { enum class Synchronisierungsmodus(override val code: String) : ICodeEnum {

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Code import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Code
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte package net.codinux.banking.fints.messages.datenelemente.implementierte
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.account package net.codinux.banking.fints.messages.datenelemente.implementierte.account
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.JaNein import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.JaNein
/** /**

View File

@ -0,0 +1,7 @@
package net.codinux.banking.fints.messages.datenelemente.implementierte.account
import net.codinux.banking.fints.messages.Existenzstatus
import net.codinux.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement
open class BIC(bic: String, existenzstatus: Existenzstatus) : AlphanumerischesDatenelement(bic, existenzstatus, 11)

View File

@ -0,0 +1,7 @@
package net.codinux.banking.fints.messages.datenelemente.implementierte.account
import net.codinux.banking.fints.messages.Existenzstatus
import net.codinux.banking.fints.messages.datenelemente.basisformate.AlphanumerischesDatenelement
open class IBAN(iban: String, existenzstatus: Existenzstatus) : AlphanumerischesDatenelement(iban, existenzstatus, 34)

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.account package net.codinux.banking.fints.messages.datenelemente.implementierte.account
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Identifikation import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Identifikation
/** /**

View File

@ -1,8 +1,8 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.account package net.codinux.banking.fints.messages.datenelemente.implementierte.account
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.NumerischesDatenelement
import net.dankito.banking.fints.model.GetAccountTransactionsParameter import net.codinux.banking.fints.model.GetAccountTransactionsParameter
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.account package net.codinux.banking.fints.messages.datenelemente.implementierte.account
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Identifikation import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Identifikation
/** /**

View File

@ -1,6 +1,6 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.encryption package net.codinux.banking.fints.messages.datenelemente.implementierte.encryption
import net.dankito.banking.fints.messages.datenelemente.implementierte.ICodeEnum import net.codinux.banking.fints.messages.datenelemente.implementierte.ICodeEnum
enum class BezeichnerFuerAlgorithmusparameterIV(override val code: String) : ICodeEnum { enum class BezeichnerFuerAlgorithmusparameterIV(override val code: String) : ICodeEnum {

View File

@ -1,8 +1,8 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.encryption package net.codinux.banking.fints.messages.datenelemente.implementierte.encryption
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Code import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Code
import net.dankito.banking.fints.messages.datenelemente.implementierte.allCodes import net.codinux.banking.fints.messages.datenelemente.implementierte.allCodes
/** /**

View File

@ -1,6 +1,6 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.encryption package net.codinux.banking.fints.messages.datenelemente.implementierte.encryption
import net.dankito.banking.fints.messages.datenelemente.implementierte.ICodeEnum import net.codinux.banking.fints.messages.datenelemente.implementierte.ICodeEnum
enum class BezeichnerFuerAlgorithmusparameterSchluessel(override val code: String) : ICodeEnum { enum class BezeichnerFuerAlgorithmusparameterSchluessel(override val code: String) : ICodeEnum {

View File

@ -1,8 +1,8 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.encryption package net.codinux.banking.fints.messages.datenelemente.implementierte.encryption
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Code import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Code
import net.dankito.banking.fints.messages.datenelemente.implementierte.allCodes import net.codinux.banking.fints.messages.datenelemente.implementierte.allCodes
/** /**

View File

@ -1,6 +1,6 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.encryption package net.codinux.banking.fints.messages.datenelemente.implementierte.encryption
import net.dankito.banking.fints.messages.datenelemente.implementierte.ICodeEnum import net.codinux.banking.fints.messages.datenelemente.implementierte.ICodeEnum
enum class Komprimierungsfunktion(val abbreviation: String, override val code: String) : ICodeEnum { enum class Komprimierungsfunktion(val abbreviation: String, override val code: String) : ICodeEnum {

View File

@ -1,8 +1,8 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.encryption package net.codinux.banking.fints.messages.datenelemente.implementierte.encryption
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Code import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Code
import net.dankito.banking.fints.messages.datenelemente.implementierte.allCodes import net.codinux.banking.fints.messages.datenelemente.implementierte.allCodes
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.encryption package net.codinux.banking.fints.messages.datenelemente.implementierte.encryption
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.BinaerDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.BinaerDatenelement
/** /**

View File

@ -1,6 +1,6 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.encryption package net.codinux.banking.fints.messages.datenelemente.implementierte.encryption
import net.dankito.banking.fints.messages.datenelemente.implementierte.ICodeEnum import net.codinux.banking.fints.messages.datenelemente.implementierte.ICodeEnum
enum class Verschluesselungsalgorithmus(override val code: String) : ICodeEnum { enum class Verschluesselungsalgorithmus(override val code: String) : ICodeEnum {

View File

@ -1,8 +1,8 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.encryption package net.codinux.banking.fints.messages.datenelemente.implementierte.encryption
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Code import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Code
import net.dankito.banking.fints.messages.datenelemente.implementierte.allCodes import net.codinux.banking.fints.messages.datenelemente.implementierte.allCodes
/** /**

View File

@ -1,6 +1,6 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.encryption package net.codinux.banking.fints.messages.datenelemente.implementierte.encryption
import net.dankito.banking.fints.messages.datenelemente.implementierte.ICodeEnum import net.codinux.banking.fints.messages.datenelemente.implementierte.ICodeEnum
enum class VerwendungDesVerschluesselungsalgorithmus(override val code: String) : ICodeEnum { enum class VerwendungDesVerschluesselungsalgorithmus(override val code: String) : ICodeEnum {

View File

@ -1,8 +1,8 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.encryption package net.codinux.banking.fints.messages.datenelemente.implementierte.encryption
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Code import net.codinux.banking.fints.messages.datenelemente.abgeleiteteformate.Code
import net.dankito.banking.fints.messages.datenelemente.implementierte.allCodes import net.codinux.banking.fints.messages.datenelemente.implementierte.allCodes
/** /**

View File

@ -1,7 +1,7 @@
package net.dankito.banking.fints.messages.datenelemente.implementierte.encryption package net.codinux.banking.fints.messages.datenelemente.implementierte.encryption
import net.dankito.banking.fints.messages.Existenzstatus import net.codinux.banking.fints.messages.Existenzstatus
import net.dankito.banking.fints.messages.datenelemente.basisformate.BinaerDatenelement import net.codinux.banking.fints.messages.datenelemente.basisformate.BinaerDatenelement
/** /**

Some files were not shown because too many files have changed in this diff Show More