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 {
|
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))
|
return config.jobExecutor.getTransactionsAsync(context, mapper.toGetAccountTransactionsParameter(param, bank, account))
|
||||||
}
|
}
|
||||||
|
@ -138,7 +138,7 @@ open class FinTsClient(
|
||||||
accountToUse = selectedAccount
|
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,
|
val response = config.jobExecutor.transferMoneyAsync(context, BankTransferData(param.recipientName, param.recipientAccountIdentifier, recipientBankIdentifier,
|
||||||
param.amount, param.reference, param.instantPayment))
|
param.amount, param.reference, param.instantPayment))
|
||||||
|
@ -205,7 +205,7 @@ open class FinTsClient(
|
||||||
// return GetAccountInfoResponse(it)
|
// 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 */
|
/* 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 {
|
open suspend fun addAccountAsync(param: AddAccountParameter): AddAccountResponse {
|
||||||
val bank = param.bank
|
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 */
|
/* 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
|
return BankResponse(true, internalError = "Die TAN Verfahren der Bank konnten nicht ermittelt werden") // TODO: translate
|
||||||
} else {
|
} else {
|
||||||
bank.tanMethodsAvailableForUser = bank.tanMethodsSupportedByBank
|
bank.tanMethodsAvailableForUser = bank.tanMethodsSupportedByBank
|
||||||
|
.filterNot { context.tanMethodsNotSupportedByApplication.contains(it.type) }
|
||||||
|
|
||||||
val didSelectTanMethod = getUsersTanMethod(context)
|
val didSelectTanMethod = getUsersTanMethod(context)
|
||||||
|
|
||||||
|
@ -714,13 +715,13 @@ Log.info { "Terminating waiting for TAN input" } // TODO: remove again
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
tanMethodSelector.findPreferredTanMethod(bank.tanMethodsAvailableForUser, context.preferredTanMethods)?.let {
|
tanMethodSelector.findPreferredTanMethod(bank.tanMethodsAvailableForUser, context.preferredTanMethods, context.tanMethodsNotSupportedByApplication)?.let {
|
||||||
bank.selectedTanMethod = it
|
bank.selectedTanMethod = it
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// we know user's supported tan methods, now ask user which one to select
|
// 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)
|
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) {
|
protected open fun updateBankAndCustomerDataIfResponseSuccessful(context: JobContext, response: BankResponse) {
|
||||||
if (response.successful) {
|
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)
|
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 bank: BankData,
|
||||||
open val fetchBalanceAndTransactions: Boolean = true,
|
open val fetchBalanceAndTransactions: Boolean = true,
|
||||||
open val preferredTanMethods: List<TanMethodType>? = null,
|
open val preferredTanMethods: List<TanMethodType>? = null,
|
||||||
|
open val tanMethodsNotSupportedByApplication: List<TanMethodType>? = null,
|
||||||
open val preferredTanMedium: String? = null
|
open val preferredTanMedium: String? = null
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ open class JobContext(
|
||||||
*/
|
*/
|
||||||
open val account: AccountData? = null,
|
open val account: AccountData? = null,
|
||||||
open val preferredTanMethods: List<TanMethodType>? = null,
|
open val preferredTanMethods: List<TanMethodType>? = null,
|
||||||
|
tanMethodsNotSupportedByApplication: List<TanMethodType>? = null,
|
||||||
open val preferredTanMedium: String? = null,
|
open val preferredTanMedium: String? = null,
|
||||||
protected open val messageLogCollector: MessageLogCollector = MessageLogCollector(callback, config.options)
|
protected open val messageLogCollector: MessageLogCollector = MessageLogCollector(callback, config.options)
|
||||||
) : MessageBaseData(bank, config.options.product), IMessageLogAppender {
|
) : MessageBaseData(bank, config.options.product), IMessageLogAppender {
|
||||||
|
@ -37,6 +38,8 @@ open class JobContext(
|
||||||
|
|
||||||
protected open val _dialogs = mutableListOf<DialogContext>()
|
protected open val _dialogs = mutableListOf<DialogContext>()
|
||||||
|
|
||||||
|
open val tanMethodsNotSupportedByApplication: List<TanMethodType> = tanMethodsNotSupportedByApplication ?: emptyList()
|
||||||
|
|
||||||
open val mt940Parser: IAccountTransactionsParser = Mt940AccountTransactionsParser(Mt940Parser(this), this)
|
open val mt940Parser: IAccountTransactionsParser = Mt940AccountTransactionsParser(Mt940Parser(this), this)
|
||||||
|
|
||||||
open val responseParser: ResponseParser = ResponseParser(logAppender = 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 ->
|
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.
|
// 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()) {
|
if (bank.selectedLanguage == Dialogsprache.Default && bankParameters.supportedLanguages.isNotEmpty()) {
|
||||||
|
@ -146,6 +146,7 @@ open class ModelMapper(
|
||||||
|
|
||||||
if (response.supportedTanMethodsForUser.isNotEmpty()) {
|
if (response.supportedTanMethodsForUser.isNotEmpty()) {
|
||||||
bank.tanMethodsAvailableForUser = response.supportedTanMethodsForUser.mapNotNull { findTanMethod(it, bank) }
|
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
|
if (bank.tanMethodsAvailableForUser.firstOrNull { it.securityFunction == bank.selectedTanMethod.securityFunction } == null) { // supportedTanMethods don't contain selectedTanMethod anymore
|
||||||
bank.resetSelectedTanMethod()
|
bank.resetSelectedTanMethod()
|
||||||
|
|
|
@ -27,15 +27,17 @@ open class TanMethodSelector {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
open fun getSuggestedTanMethod(tanMethods: List<TanMethod>): TanMethod? {
|
open fun getSuggestedTanMethod(tanMethods: List<TanMethod>, tanMethodsNotSupportedByApplication: List<TanMethodType> = emptyList()): TanMethod? {
|
||||||
return findPreferredTanMethod(tanMethods, NonVisualOrImageBased) // we use NonVisualOrImageBased as it provides a good default for most users
|
return findPreferredTanMethod(tanMethods, NonVisualOrImageBased, tanMethodsNotSupportedByApplication) // we use NonVisualOrImageBased as it provides a good default for most users
|
||||||
?: tanMethods.firstOrNull()
|
?: 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 ->
|
preferredTanMethods?.forEach { preferredTanMethodType ->
|
||||||
tanMethods.firstOrNull { it.type == preferredTanMethodType }?.let {
|
if (preferredTanMethodType !in tanMethodsNotSupportedByApplication) {
|
||||||
return it
|
tanMethods.firstOrNull { it.type == preferredTanMethodType }?.let {
|
||||||
|
return it
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ open class FinTsClientParameter(
|
||||||
password: String,
|
password: String,
|
||||||
|
|
||||||
open val preferredTanMethods: List<TanMethodType>? = null,
|
open val preferredTanMethods: List<TanMethodType>? = null,
|
||||||
|
open val tanMethodsNotSupportedByApplication: List<TanMethodType>? = null,
|
||||||
open val preferredTanMedium: String? = null, // the ID of the medium
|
open val preferredTanMedium: String? = null, // the ID of the medium
|
||||||
open val abortIfTanIsRequired: Boolean = false,
|
open val abortIfTanIsRequired: Boolean = false,
|
||||||
open val finTsModel: BankData? = null
|
open val finTsModel: BankData? = null
|
||||||
|
|
|
@ -21,11 +21,12 @@ open class GetAccountDataParameter(
|
||||||
open val retrieveTransactionsTo: LocalDate? = null,
|
open val retrieveTransactionsTo: LocalDate? = null,
|
||||||
|
|
||||||
preferredTanMethods: List<TanMethodType>? = null,
|
preferredTanMethods: List<TanMethodType>? = null,
|
||||||
|
tanMethodsNotSupportedByApplication: List<TanMethodType>? = null,
|
||||||
preferredTanMedium: String? = null,
|
preferredTanMedium: String? = null,
|
||||||
abortIfTanIsRequired: Boolean = false,
|
abortIfTanIsRequired: Boolean = false,
|
||||||
finTsModel: BankData? = null,
|
finTsModel: BankData? = null,
|
||||||
open val defaultBankValues: 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
|
open val retrieveOnlyAccountInfo: Boolean
|
||||||
get() = retrieveBalance == false && retrieveTransactions == RetrieveTransactions.No
|
get() = retrieveBalance == false && retrieveTransactions == RetrieveTransactions.No
|
||||||
|
|
|
@ -34,10 +34,11 @@ open class TransferMoneyParameter(
|
||||||
open val instantPayment: Boolean = false,
|
open val instantPayment: Boolean = false,
|
||||||
|
|
||||||
preferredTanMethods: List<TanMethodType>? = null,
|
preferredTanMethods: List<TanMethodType>? = null,
|
||||||
|
tanMethodsNotSupportedByApplication: List<TanMethodType>? = null,
|
||||||
preferredTanMedium: String? = null,
|
preferredTanMedium: String? = null,
|
||||||
abortIfTanIsRequired: Boolean = false,
|
abortIfTanIsRequired: Boolean = false,
|
||||||
finTsModel: BankData? = null,
|
finTsModel: BankData? = null,
|
||||||
|
|
||||||
open val selectAccountToUseForTransfer: ((List<AccountData>) -> AccountData?)? = null // TODO: use BankAccount instead of AccountData
|
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