Implemented that () returns if a TAN method got selected

This commit is contained in:
dankito 2020-10-16 18:34:56 +02:00
parent eee073fe3b
commit df4c8c4a1a
1 changed files with 23 additions and 10 deletions

View File

@ -183,13 +183,18 @@ open class FinTsClient(
}
else {
bank.tanMethodsAvailableForUser = bank.tanMethodSupportedByBank
getUsersTanMethod(bank) {
val dialogContext = DialogContext(bank, product)
getUsersTanMethod(bank) { didSelectTanMethod ->
if (didSelectTanMethod) {
val dialogContext = DialogContext(bank, product)
initDialogWithStrongCustomerAuthenticationAfterSuccessfulPreconditionChecks(dialogContext) { initDialogResponse ->
closeDialog(dialogContext)
initDialogWithStrongCustomerAuthenticationAfterSuccessfulPreconditionChecks(dialogContext) { initDialogResponse ->
closeDialog(dialogContext)
callback(initDialogResponse)
callback(initDialogResponse)
}
}
else {
callback(BankResponse(false))
}
}
}
@ -255,7 +260,12 @@ open class FinTsClient(
return@getUsersTanMethodsInternal
}
getUsersTanMethod(bank) {
getUsersTanMethod(bank) { didSelectTanMethod ->
if (didSelectTanMethod == false) {
callback(AddAccountResponse(BankResponse(false), bank))
return@getUsersTanMethod
}
/* Second dialog: some banks require that in order to initialize a dialog with strong customer authorization TAN media is required */
@ -641,17 +651,20 @@ open class FinTsClient(
}
}
protected open fun getUsersTanMethod(bank: BankData, done: () -> Unit) {
protected open fun getUsersTanMethod(bank: BankData, done: (Boolean) -> Unit) {
if (bank.tanMethodsAvailableForUser.size == 1) { // user has only one TAN method -> set it and we're done
bank.selectedTanMethod = bank.tanMethodsAvailableForUser.first()
done()
done(true)
}
else {
// we know user's supported tan methods, now ask user which one to select
callback.askUserForTanMethod(bank.tanMethodsAvailableForUser, selectSuggestedTanMethod(bank)) { selectedTanMethod ->
selectedTanMethod?.let {
if (selectedTanMethod != null) {
bank.selectedTanMethod = selectedTanMethod
done()
done(true)
}
else {
done(false)
}
}
}