From 18e6d485f221d140396e01ac5a4b4af1e9f7d3dd Mon Sep 17 00:00:00 2001 From: Alexander Geist Date: Thu, 4 Nov 2021 10:21:48 +0100 Subject: [PATCH] fixed sca exemption check --- .../multibanking/hbci/job/ScaAwareJob.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/onlinebanking-hbci4java/src/main/java/de/adorsys/multibanking/hbci/job/ScaAwareJob.java b/onlinebanking-hbci4java/src/main/java/de/adorsys/multibanking/hbci/job/ScaAwareJob.java index 1573b83f..cb098c20 100644 --- a/onlinebanking-hbci4java/src/main/java/de/adorsys/multibanking/hbci/job/ScaAwareJob.java +++ b/onlinebanking-hbci4java/src/main/java/de/adorsys/multibanking/hbci/job/ScaAwareJob.java @@ -38,6 +38,7 @@ import org.kapott.hbci.GV.AbstractHBCIJob; import org.kapott.hbci.GV.GVTAN2Step; import org.kapott.hbci.GV.GVVeuStep; +import org.kapott.hbci.GV_Result.HBCIJobResult; import org.kapott.hbci.callback.AbstractHBCICallback; import org.kapott.hbci.callback.HBCICallback; import org.kapott.hbci.dialog.AbstractHbciDialog; @@ -50,6 +51,7 @@ import java.util.Collections; import java.util.Map; +import java.util.Objects; import java.util.Optional; import static de.adorsys.multibanking.domain.BankApi.HBCI; @@ -101,8 +103,7 @@ public R execute(HBCICallback hbciCallback) { //check for SCA is really needed after execution tan2StepRequired = Optional.ofNullable(hktan) - .map(gvtan2Step -> KnownReturncode.W3076.searchReturnValue(gvtan2Step.getJobResult().getJobStatus().getRetVals()) == null - && KnownReturncode.W3076.searchReturnValue(gvtan2Step.getJobResult().getGlobStatus().getRetVals()) == null) + .map(gvtan2Step -> !isScaExempted(hbciExecStatus, gvtan2Step.getJobResult())) .orElse(false); R jobResponse = createJobResponse(); @@ -119,6 +120,17 @@ public R execute(HBCICallback hbciCallback) { return jobResponse; } + private boolean isScaExempted(HBCIExecStatus hbciExecStatus, HBCIJobResult hbciJobResult) { + return KnownReturncode.W3076.searchReturnValue(hbciJobResult.getJobStatus().getRetVals()) != null || + KnownReturncode.W3076.searchReturnValue(hbciJobResult.getGlobStatus().getRetVals()) != null || + hbciExecStatus.getMsgStatusList().stream() + .filter(Objects::nonNull) + .anyMatch(hbciMsgStatus -> + KnownReturncode.W3076.searchReturnValue(hbciMsgStatus.globStatus.getRetVals()) != null + || KnownReturncode.W3076.searchReturnValue(hbciMsgStatus.segStatus.getRetVals()) != null + ); + } + private R initDialog(HBCICallback hbciCallback) { log.debug("init new hbci dialog"); PinTanPassport bpdPassport = fetchBpd(hbciCallback);