Skip to content

Commit

Permalink
refactored hbci error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
age-77 committed Oct 7, 2020
1 parent b7582c6 commit 79a099c
Show file tree
Hide file tree
Showing 20 changed files with 202 additions and 194 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import de.adorsys.multibanking.banking_gateway_b2c.model.*;
import de.adorsys.multibanking.domain.*;
import de.adorsys.multibanking.domain.exception.Message;
import de.adorsys.multibanking.domain.Message;
import de.adorsys.multibanking.domain.request.SelectPsuAuthenticationMethodRequest;
import de.adorsys.multibanking.domain.request.TransactionAuthorisationRequest;
import de.adorsys.multibanking.domain.response.CreateConsentResponse;
Expand All @@ -11,7 +11,6 @@
import de.adorsys.multibanking.xs2a_adapter.model.TppMessage400AIS;
import de.adorsys.multibanking.xs2a_adapter.model.TransactionDetails;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.StringUtils;
import org.iban4j.Iban;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mapper;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2018-2019 adorsys GmbH & Co KG
* Copyright 2018-2020 adorsys GmbH & Co KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -14,7 +14,7 @@
* limitations under the License.
*/

package de.adorsys.multibanking.domain.exception;
package de.adorsys.multibanking.domain;

import lombok.AllArgsConstructor;
import lombok.Builder;
Expand Down Expand Up @@ -47,4 +47,14 @@ public enum Severity {
WARNING,
INFO
}

@Override
public String toString() {
if (key != null) {
return key + ":" + renderedMessage;
} else {
return renderedMessage;
}
}

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package de.adorsys.multibanking.domain.exception;

import de.adorsys.multibanking.domain.PsuMessage;
import de.adorsys.multibanking.domain.Message;
import lombok.Data;
import lombok.EqualsAndHashCode;

Expand All @@ -12,7 +12,7 @@
public class MultibankingException extends RuntimeException {

private final int httpResponseCode;
private final List<PsuMessage> psuMessages;
private final List<Message> psuMessages;
private final List<Message> tppMessages;
private final MultibankingError multibankingError;

Expand All @@ -21,20 +21,20 @@ public MultibankingException(MultibankingError multibankingError) {
}

public MultibankingException(MultibankingError multibankingError, int httpResponseCode, String psuMessage) {
this(multibankingError, httpResponseCode, Collections.singletonList(new PsuMessage(null, psuMessage)), null
this(multibankingError, httpResponseCode, Collections.singletonList(new Message(null, null, null, psuMessage, null)), null
);
}

public MultibankingException(MultibankingError multibankingError, String psuMessage) {
this(multibankingError, 400, Collections.singletonList(new PsuMessage(null, psuMessage)), null
this(multibankingError, 400, Collections.singletonList(new Message(null, null, null, psuMessage, null)), null
);
}

public MultibankingException(MultibankingError multibankingError, List<PsuMessage> psuMessages) {
public MultibankingException(MultibankingError multibankingError, List<Message> psuMessages) {
this(multibankingError, 400, psuMessages, null);
}

public MultibankingException(MultibankingError multibankingError, int httpResponseCode, List<PsuMessage> psuMessages, List<Message> tppMessages) {
public MultibankingException(MultibankingError multibankingError, int httpResponseCode, List<Message> psuMessages, List<Message> tppMessages) {
super(toExceptionString(psuMessages, tppMessages));
this.psuMessages = psuMessages;
this.multibankingError = multibankingError;
Expand All @@ -47,7 +47,7 @@ public String toString() {
return toExceptionString(psuMessages, tppMessages);
}

private static String toExceptionString(List<PsuMessage> psuMessages, List<Message> tppMessages) {
private static String toExceptionString(List<Message> psuMessages, List<Message> tppMessages) {
StringBuilder stringBuilder = new StringBuilder();
if (psuMessages != null) {
psuMessages.forEach(psuMessage -> stringBuilder.append(psuMessage.toString()).append("\\n"));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package de.adorsys.multibanking.domain.response;

import de.adorsys.multibanking.domain.PsuMessage;
import de.adorsys.multibanking.domain.Message;
import lombok.Data;

import java.util.List;
Expand All @@ -10,14 +10,14 @@
public abstract class AbstractResponse {

private AuthorisationCodeResponse authorisationCodeResponse;
private List<PsuMessage> messages;
private List<Message> messages;

private Object bankApiConsentData;

public boolean containsMessage(String messageCode) {
return Optional.ofNullable(messages)
.map(psuMessages -> psuMessages.stream()
.anyMatch(psuMessage -> psuMessage.getCode() != null && messageCode.equals(psuMessage.getCode()))
.anyMatch(psuMessage -> psuMessage.getKey() != null && messageCode.equals(psuMessage.getKey()))
)
.orElse(false);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import de.adorsys.multibanking.domain.transaction.*;
import de.adorsys.multibanking.hbci.job.*;
import de.adorsys.multibanking.hbci.model.HbciConsent;
import org.kapott.hbci.GV.AbstractHBCIJob;
import org.kapott.hbci.exceptions.HBCI_Exception;
import org.kapott.hbci.manager.HBCIProduct;
import org.kapott.hbci.manager.HBCIUtils;
Expand All @@ -41,17 +40,17 @@
import java.util.Optional;

import static de.adorsys.multibanking.domain.ScaStatus.FINALISED;
import static de.adorsys.multibanking.hbci.HbciCacheHandler.createCallback;
import static de.adorsys.multibanking.hbci.HbciExceptionHandler.handleHbciException;
import static de.adorsys.multibanking.hbci.HbciCacheHandler.*;
import static de.adorsys.multibanking.hbci.util.HbciErrorUtils.*;

public class HbciBanking implements OnlineBankingService {

private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();

private HbciScaHandler hbciScaHandler;
private final HbciScaHandler hbciScaHandler;

private long sysIdExpirationTimeMs;
private long updExpirationTimeMs;
private final long sysIdExpirationTimeMs;
private final long updExpirationTimeMs;

public HbciBanking(HBCIProduct hbciProduct, long sysIdExpirationTimeMs, long updExpirationTimeMs) {
this(hbciProduct, null, sysIdExpirationTimeMs, updExpirationTimeMs);
Expand Down Expand Up @@ -126,7 +125,7 @@ public AccountInformationResponse loadBankAccounts(TransactionRequest<LoadAccoun

try {
if (hbciConsent.getHbciTanSubmit() == null || hbciConsent.getStatus() == FINALISED) {
HbciBpdUpdCallback hbciCallback = createCallback(request);
HbciBpdUpdCallback hbciCallback = createCallback(request.getBank());

AccountInformationJob accountInformationJob = new AccountInformationJob(request);
AccountInformationResponse response = accountInformationJob.execute(hbciCallback);
Expand All @@ -152,7 +151,7 @@ public TransactionsResponse loadTransactions(TransactionRequest<LoadTransactions

try {
if (hbciConsent.getHbciTanSubmit() == null || hbciConsent.getStatus() == FINALISED) {
HbciBpdUpdCallback hbciCallback = createCallback(loadTransactionsRequest);
HbciBpdUpdCallback hbciCallback = createCallback(loadTransactionsRequest.getBank());

LoadTransactionsJob loadBookingsJob = new LoadTransactionsJob(loadTransactionsRequest);
TransactionsResponse response = loadBookingsJob.execute(hbciCallback);
Expand All @@ -178,7 +177,7 @@ public StandingOrdersResponse loadStandingOrders(TransactionRequest<LoadStanding

try {
if (hbciConsent.getHbciTanSubmit() == null || hbciConsent.getStatus() == FINALISED) {
HbciBpdUpdCallback hbciCallback = createCallback(loadStandingOrdersRequest);
HbciBpdUpdCallback hbciCallback = createCallback(loadStandingOrdersRequest.getBank());

LoadStandingOrdersJob loadStandingOrdersJob = new LoadStandingOrdersJob(loadStandingOrdersRequest);
StandingOrdersResponse response = loadStandingOrdersJob.execute(hbciCallback);
Expand All @@ -204,7 +203,7 @@ public LoadBalancesResponse loadBalances(TransactionRequest<LoadBalances> reques

try {
if (hbciConsent.getHbciTanSubmit() == null || hbciConsent.getStatus() == FINALISED) {
HbciBpdUpdCallback hbciCallback = createCallback(request);
HbciBpdUpdCallback hbciCallback = createCallback(request.getBank());

LoadBalancesJob loadBalancesJob = new LoadBalancesJob(request);
LoadBalancesResponse response = loadBalancesJob.execute(hbciCallback);
Expand All @@ -230,7 +229,7 @@ public PaymentResponse executePayment(TransactionRequest<? extends AbstractPayme

try {
if (hbciConsent.getHbciTanSubmit() == null || hbciConsent.getStatus() == FINALISED) {
HbciBpdUpdCallback hbciCallback = createCallback(request);
HbciBpdUpdCallback hbciCallback = createCallback(request.getBank());

ScaAwareJob<? extends AbstractPayment, PaymentResponse> paymentJob = createScaJob(request);

Expand All @@ -256,8 +255,7 @@ public StrongCustomerAuthorisable getStrongCustomerAuthorisation() {
return hbciScaHandler;
}

private <T extends AbstractTransaction, J extends AbstractHBCIJob, R extends AbstractResponse> TransactionAuthorisationResponse<R> transactionAuthorisation(TransactionAuthorisation<T> transactionAuthorisation) {
createCallback(transactionAuthorisation.getOriginTransactionRequest());
private <T extends AbstractTransaction, R extends AbstractResponse> TransactionAuthorisationResponse<R> transactionAuthorisation(TransactionAuthorisation<T> transactionAuthorisation) {
try {
ScaAwareJob<T, R> scaJob = createScaJob(transactionAuthorisation.getOriginTransactionRequest());

Expand Down Expand Up @@ -286,7 +284,7 @@ public boolean bankSupported(String bankCode) {
}

@SuppressWarnings("unchecked")
private <T extends AbstractTransaction, J extends AbstractHBCIJob, R extends AbstractResponse> ScaAwareJob<T, R> createScaJob(TransactionRequest<T> transactionRequest) {
private <T extends AbstractTransaction, R extends AbstractResponse> ScaAwareJob<T, R> createScaJob(TransactionRequest<T> transactionRequest) {
switch (transactionRequest.getTransaction().getTransactionType()) {
case SINGLE_PAYMENT:
case FUTURE_SINGLE_PAYMENT:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@

package de.adorsys.multibanking.hbci;

import de.adorsys.multibanking.domain.PsuMessage;
import de.adorsys.multibanking.domain.Message;
import de.adorsys.multibanking.domain.exception.MultibankingException;
import de.adorsys.multibanking.hbci.model.HbciConsent;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.kapott.hbci.callback.AbstractHBCICallback;

import java.time.LocalDateTime;
Expand Down Expand Up @@ -56,7 +57,16 @@ public void status(int statusTag, Object o) {
public void callback(int reason, List<String> messages, int datatype, StringBuilder retData) {
if (reason == WRONG_PIN) {
throw new MultibankingException(INVALID_PIN, messages.stream()
.map(messageString -> new PsuMessage(null, messageString))
.map(messageString -> {
if (StringUtils.equals(":", StringUtils.substring(messageString, 4, 5))) {
String hbciCode = StringUtils.substring(messageString, 0, 4);
String msg = StringUtils.substring(messageString, 5);
return new Message(hbciCode, null, null, msg, null);
} else {
return new Message(null, null, null, messageString, null);
}

})
.collect(Collectors.toList()));
}
}
Expand All @@ -69,13 +79,13 @@ public void status(int statusTag, Object[] o) {
}

public HbciConsent updateConsentUpd(HbciConsent consent) {
Optional.ofNullable(upd).ifPresent(upd -> {
consent.setHbciUpd(upd);
Optional.ofNullable(upd).ifPresent(newUpd -> {
consent.setHbciUpd(newUpd);
consent.setUpdCacheUpdateTime(LocalDateTime.now());
consent.setSysIdUpdUpdated(true);
});
Optional.ofNullable(sysId).ifPresent(sysId -> {
consent.setHbciSysId(sysId);
Optional.ofNullable(sysId).ifPresent(newSysId -> {
consent.setHbciSysId(newSysId);
consent.setSysIdCacheUpdateTime(LocalDateTime.now());
consent.setSysIdUpdUpdated(true);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package de.adorsys.multibanking.hbci;

import de.adorsys.multibanking.domain.Bank;
import de.adorsys.multibanking.domain.request.AbstractRequest;
import lombok.Getter;
import lombok.experimental.UtilityClass;
Expand All @@ -28,18 +29,18 @@
public class HbciCacheHandler {

@Getter
private static Map<String, Map<String, String>> bpdCache = new ConcurrentHashMap<>();
private final Map<String, Map<String, String>> bpdCache = new ConcurrentHashMap<>();

public static Map<String, String> getBpd(AbstractRequest request) {
public Map<String, String> getBpd(AbstractRequest request) {
String bankCode = Optional.ofNullable(request.getBank().getBankApiBankCode())
.orElse(request.getBank().getBankCode());

return bpdCache.get(bankCode);
}

static HbciBpdUpdCallback createCallback(AbstractRequest request) {
String bankCode = Optional.ofNullable(request.getBank().getBankApiBankCode())
.orElse(request.getBank().getBankCode());
HbciBpdUpdCallback createCallback(Bank bank) {
String bankCode = Optional.ofNullable(bank.getBankApiBankCode())
.orElse(bank.getBankCode());

return new HbciBpdUpdCallback(bankCode, bpdCache);
}
Expand Down

This file was deleted.

Loading

0 comments on commit 79a099c

Please sign in to comment.