Added tanMethodsNotSupportedByApplication to filter out TAN methods that client application does not support (e.g. chipTanUsb)
This commit is contained in:
parent
6908f52e48
commit
c158097d3a
|
@ -80,7 +80,7 @@ open class FinTsClient(
|
|||
}
|
||||
|
||||
protected open suspend fun getAccountTransactions(param: GetAccountDataParameter, bank: BankData, account: AccountData): GetAccountTransactionsResponse {
|
||||
val context = JobContext(JobContextType.GetTransactions, this.callback, config, bank, account, param.preferredTanMethods, param.preferredTanMedium)
|
||||
val context = JobContext(JobContextType.GetTransactions, this.callback, config, bank, account, param.preferredTanMethods, param.tanMethodsNotSupportedByApplication, param.preferredTanMedium)
|
||||
|
||||
return config.jobExecutor.getTransactionsAsync(context, mapper.toGetAccountTransactionsParameter(param, bank, account))
|
||||
}
|
||||
|
@ -138,7 +138,7 @@ open class FinTsClient(
|
|||
accountToUse = selectedAccount
|
||||
}
|
||||
|
||||
val context = JobContext(JobContextType.TransferMoney, this.callback, config, bank, accountToUse, param.preferredTanMethods, param.preferredTanMedium)
|
||||
val context = JobContext(JobContextType.TransferMoney, this.callback, config, bank, accountToUse, param.preferredTanMethods, param.tanMethodsNotSupportedByApplication, param.preferredTanMedium)
|
||||
|
||||
val response = config.jobExecutor.transferMoneyAsync(context, BankTransferData(param.recipientName, param.recipientAccountIdentifier, recipientBankIdentifier,
|
||||
param.amount, param.reference, param.instantPayment))
|
||||
|
@ -205,7 +205,7 @@ open class FinTsClient(
|
|||
// return GetAccountInfoResponse(it)
|
||||
}
|
||||
|
||||
val context = JobContext(JobContextType.GetAccountInfo, this.callback, config, bank, null, param.preferredTanMethods, param.preferredTanMedium)
|
||||
val context = JobContext(JobContextType.GetAccountInfo, this.callback, config, bank, null, param.preferredTanMethods, param.tanMethodsNotSupportedByApplication, param.preferredTanMedium)
|
||||
|
||||
/* First dialog: Get user's basic data like BPD, customer system ID and her TAN methods */
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ open class FinTsClientDeprecated(
|
|||
|
||||
open suspend fun addAccountAsync(param: AddAccountParameter): AddAccountResponse {
|
||||
val bank = param.bank
|
||||
val context = JobContext(JobContextType.AddAccount, this.callback, config, bank, null, param.preferredTanMethods, param.preferredTanMedium)
|
||||
val context = JobContext(JobContextType.AddAccount, this.callback, config, bank, null, param.preferredTanMethods, param.tanMethodsNotSupportedByApplication, param.preferredTanMedium)
|
||||
|
||||
/* First dialog: Get user's basic data like BPD, customer system ID and her TAN methods */
|
||||
|
||||
|
|
|
@ -145,6 +145,7 @@ open class FinTsJobExecutor(
|
|||
return BankResponse(true, internalError = "Die TAN Verfahren der Bank konnten nicht ermittelt werden") // TODO: translate
|
||||
} else {
|
||||
bank.tanMethodsAvailableForUser = bank.tanMethodsSupportedByBank
|
||||
.filterNot { context.tanMethodsNotSupportedByApplication.contains(it.type) }
|
||||
|
||||
val didSelectTanMethod = getUsersTanMethod(context)
|
||||
|
||||
|
@ -714,13 +715,13 @@ Log.info { "Terminating waiting for TAN input" } // TODO: remove again
|
|||
return true
|
||||
}
|
||||
else {
|
||||
tanMethodSelector.findPreferredTanMethod(bank.tanMethodsAvailableForUser, context.preferredTanMethods)?.let {
|
||||
tanMethodSelector.findPreferredTanMethod(bank.tanMethodsAvailableForUser, context.preferredTanMethods, context.tanMethodsNotSupportedByApplication)?.let {
|
||||
bank.selectedTanMethod = it
|
||||
return true
|
||||
}
|
||||
|
||||
// we know user's supported tan methods, now ask user which one to select
|
||||
val suggestedTanMethod = tanMethodSelector.getSuggestedTanMethod(bank.tanMethodsAvailableForUser)
|
||||
val suggestedTanMethod = tanMethodSelector.getSuggestedTanMethod(bank.tanMethodsAvailableForUser, context.tanMethodsNotSupportedByApplication)
|
||||
|
||||
val selectedTanMethod = context.callback.askUserForTanMethod(bank.tanMethodsAvailableForUser, suggestedTanMethod)
|
||||
|
||||
|
@ -741,14 +742,14 @@ Log.info { "Terminating waiting for TAN input" } // TODO: remove again
|
|||
|
||||
protected open fun updateBankAndCustomerDataIfResponseSuccessful(context: JobContext, response: BankResponse) {
|
||||
if (response.successful) {
|
||||
updateBankAndCustomerData(context.bank, response)
|
||||
updateBankAndCustomerData(context.bank, response, context)
|
||||
}
|
||||
}
|
||||
|
||||
protected open fun updateBankAndCustomerData(bank: BankData, response: BankResponse) {
|
||||
protected open fun updateBankAndCustomerData(bank: BankData, response: BankResponse, context: JobContext) {
|
||||
updateBankData(bank, response)
|
||||
|
||||
modelMapper.updateCustomerData(bank, response)
|
||||
modelMapper.updateCustomerData(bank, response, context)
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ open class AddAccountParameter @JvmOverloads constructor(
|
|||
open val bank: BankData,
|
||||
open val fetchBalanceAndTransactions: Boolean = true,
|
||||
open val preferredTanMethods: List<TanMethodType>? = null,
|
||||
open val tanMethodsNotSupportedByApplication: List<TanMethodType>? = null,
|
||||
open val preferredTanMedium: String? = null
|
||||
) {
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ open class JobContext(
|
|||
*/
|
||||
open val account: AccountData? = null,
|
||||
open val preferredTanMethods: List<TanMethodType>? = null,
|
||||
tanMethodsNotSupportedByApplication: List<TanMethodType>? = null,
|
||||
open val preferredTanMedium: String? = null,
|
||||
protected open val messageLogCollector: MessageLogCollector = MessageLogCollector(callback, config.options)
|
||||
) : MessageBaseData(bank, config.options.product), IMessageLogAppender {
|
||||
|
@ -37,6 +38,8 @@ open class JobContext(
|
|||
|
||||
protected open val _dialogs = mutableListOf<DialogContext>()
|
||||
|
||||
open val tanMethodsNotSupportedByApplication: List<TanMethodType> = tanMethodsNotSupportedByApplication ?: emptyList()
|
||||
|
||||
open val mt940Parser: IAccountTransactionsParser = Mt940AccountTransactionsParser(Mt940Parser(this), this)
|
||||
|
||||
open val responseParser: ResponseParser = ResponseParser(logAppender = this)
|
||||
|
|
|
@ -63,7 +63,7 @@ open class ModelMapper(
|
|||
}
|
||||
}
|
||||
|
||||
open fun updateCustomerData(bank: BankData, response: BankResponse) {
|
||||
open fun updateCustomerData(bank: BankData, response: BankResponse, context: JobContext) {
|
||||
response.getFirstSegmentById<BankParameters>(InstituteSegmentId.BankParameters)?.let { bankParameters ->
|
||||
// TODO: ask user if there is more than one supported language? But it seems that almost all banks only support German.
|
||||
if (bank.selectedLanguage == Dialogsprache.Default && bankParameters.supportedLanguages.isNotEmpty()) {
|
||||
|
@ -146,6 +146,7 @@ open class ModelMapper(
|
|||
|
||||
if (response.supportedTanMethodsForUser.isNotEmpty()) {
|
||||
bank.tanMethodsAvailableForUser = response.supportedTanMethodsForUser.mapNotNull { findTanMethod(it, bank) }
|
||||
.filterNot { context.tanMethodsNotSupportedByApplication.contains(it.type) }
|
||||
|
||||
if (bank.tanMethodsAvailableForUser.firstOrNull { it.securityFunction == bank.selectedTanMethod.securityFunction } == null) { // supportedTanMethods don't contain selectedTanMethod anymore
|
||||
bank.resetSelectedTanMethod()
|
||||
|
|
|
@ -27,17 +27,19 @@ open class TanMethodSelector {
|
|||
}
|
||||
|
||||
|
||||
open fun getSuggestedTanMethod(tanMethods: List<TanMethod>): TanMethod? {
|
||||
return findPreferredTanMethod(tanMethods, NonVisualOrImageBased) // we use NonVisualOrImageBased as it provides a good default for most users
|
||||
?: tanMethods.firstOrNull()
|
||||
open fun getSuggestedTanMethod(tanMethods: List<TanMethod>, tanMethodsNotSupportedByApplication: List<TanMethodType> = emptyList()): TanMethod? {
|
||||
return findPreferredTanMethod(tanMethods, NonVisualOrImageBased, tanMethodsNotSupportedByApplication) // we use NonVisualOrImageBased as it provides a good default for most users
|
||||
?: tanMethods.firstOrNull { it.type !in tanMethodsNotSupportedByApplication }
|
||||
}
|
||||
|
||||
open fun findPreferredTanMethod(tanMethods: List<TanMethod>, preferredTanMethods: List<TanMethodType>?): TanMethod? {
|
||||
open fun findPreferredTanMethod(tanMethods: List<TanMethod>, preferredTanMethods: List<TanMethodType>?, tanMethodsNotSupportedByApplication: List<TanMethodType> = emptyList()): TanMethod? {
|
||||
preferredTanMethods?.forEach { preferredTanMethodType ->
|
||||
if (preferredTanMethodType !in tanMethodsNotSupportedByApplication) {
|
||||
tanMethods.firstOrNull { it.type == preferredTanMethodType }?.let {
|
||||
return it
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ open class FinTsClientParameter(
|
|||
password: String,
|
||||
|
||||
open val preferredTanMethods: List<TanMethodType>? = null,
|
||||
open val tanMethodsNotSupportedByApplication: List<TanMethodType>? = null,
|
||||
open val preferredTanMedium: String? = null, // the ID of the medium
|
||||
open val abortIfTanIsRequired: Boolean = false,
|
||||
open val finTsModel: BankData? = null
|
||||
|
|
|
@ -21,11 +21,12 @@ open class GetAccountDataParameter(
|
|||
open val retrieveTransactionsTo: LocalDate? = null,
|
||||
|
||||
preferredTanMethods: List<TanMethodType>? = null,
|
||||
tanMethodsNotSupportedByApplication: List<TanMethodType>? = null,
|
||||
preferredTanMedium: String? = null,
|
||||
abortIfTanIsRequired: Boolean = false,
|
||||
finTsModel: BankData? = null,
|
||||
open val defaultBankValues: BankData? = null
|
||||
) : FinTsClientParameter(bankCode, loginName, password, preferredTanMethods, preferredTanMedium, abortIfTanIsRequired, finTsModel) {
|
||||
) : FinTsClientParameter(bankCode, loginName, password, preferredTanMethods, tanMethodsNotSupportedByApplication, preferredTanMedium, abortIfTanIsRequired, finTsModel) {
|
||||
|
||||
open val retrieveOnlyAccountInfo: Boolean
|
||||
get() = retrieveBalance == false && retrieveTransactions == RetrieveTransactions.No
|
||||
|
|
|
@ -34,10 +34,11 @@ open class TransferMoneyParameter(
|
|||
open val instantPayment: Boolean = false,
|
||||
|
||||
preferredTanMethods: List<TanMethodType>? = null,
|
||||
tanMethodsNotSupportedByApplication: List<TanMethodType>? = null,
|
||||
preferredTanMedium: String? = null,
|
||||
abortIfTanIsRequired: Boolean = false,
|
||||
finTsModel: BankData? = null,
|
||||
|
||||
open val selectAccountToUseForTransfer: ((List<AccountData>) -> AccountData?)? = null // TODO: use BankAccount instead of AccountData
|
||||
|
||||
) : FinTsClientParameter(bankCode, loginName, password, preferredTanMethods, preferredTanMedium, abortIfTanIsRequired, finTsModel)
|
||||
) : FinTsClientParameter(bankCode, loginName, password, preferredTanMethods, tanMethodsNotSupportedByApplication, preferredTanMedium, abortIfTanIsRequired, finTsModel)
|
Loading…
Reference in New Issue