add adapter-common-lib dependency (#32)

refactor imports, bump deps
This commit is contained in:
Anatoly Karlov 2022-05-16 14:44:14 +07:00 committed by GitHub
parent 4bb2d34201
commit 35685ba833
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 288 additions and 192 deletions

88
pom.xml
View File

@ -2,7 +2,6 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
@ -13,7 +12,7 @@
</parent>
<artifactId>adapter-flow-lib</artifactId>
<version>0.1.4</version>
<version>0.1.5</version>
<packaging>jar</packaging>
<name>adapter-flow-lib</name>
@ -45,54 +44,29 @@
<dockerfile.registry>${env.REGISTRY}</dockerfile.registry>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>15</java.version>
<shared.resources.version>0.3.6</shared.resources.version>
<woody.version>1.0.4</woody.version>
<bender-proto.version>1.20-be9cdeb</bender-proto.version>
<apache.commons.lang3.version>3.10</apache.commons.lang3.version>
<damsel.version>1.563-d384c12</damsel.version>
<apache.commons.lang3.version>3.12.0</apache.commons.lang3.version>
<apache.commons.codec.version>1.15</apache.commons.codec.version>
<slf4j.version>1.7.33</slf4j.version>
<lombok.version>1.18.22</lombok.version>
<logback.version>1.2.10</logback.version>
<logstash-logback-encoder.version>7.0.1</logstash-logback-encoder.version>
<jackson.version>2.11.2</jackson.version>
<woody.version>[1.0.4,)</woody.version>
<damsel.version>1.544-dcd92dd</damsel.version>
<cds-proto.version>1.62-07f2b0f</cds-proto.version>
<error-mapping-java.version>1.0.6</error-mapping-java.version>
<adapter-client-lib.version>1.0.1</adapter-client-lib.version>
<adapter-common-lib.version>1.0.0</adapter-common-lib.version>
<slf4j.version>1.7.36</slf4j.version>
<lombok.version>1.18.24</lombok.version>
<logback.version>1.2.11</logback.version>
<logstash-logback-encoder.version>7.1.1</logstash-logback-encoder.version>
<jackson.version>2.13.2</jackson.version>
<junit-jupiter-engine.version>5.8.2</junit-jupiter-engine.version>
<nop-rolling.version>0.0.1</nop-rolling.version>
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
<spring.version>5.3.14</spring.version>
<javax.servlet-api.version>4.0.1</javax.servlet-api.version>
<validation-api.version>2.0.1.Final</validation-api.version>
<error-mapping-java.version>1.0.0</error-mapping-java.version>
<jackson.version>2.11.2</jackson.version>
<spring-boot-starter.version>2.6.3</spring-boot-starter.version>
<spring.version>5.3.19</spring.version>
<spring-boot-starter.version>2.6.7</spring-boot-starter.version>
<cds-proto.version>1.66-01353ce</cds-proto.version>
<adapter-common-lib.version>1.1.1</adapter-common-lib.version>
</properties>
<dependencies>
<!-- Third party libs -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${validation-api.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${javax.servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<!-- springframework -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
@ -111,6 +85,18 @@
<version>${spring.version}</version>
<scope>provided</scope>
</dependency>
<!-- Third party libs -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${validation-api.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${javax.servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
@ -174,16 +160,6 @@
<version>${woody.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>dev.vality.adapter-client-lib</groupId>
<artifactId>cds-client-storage</artifactId>
<version>${adapter-client-lib.version}</version>
</dependency>
<dependency>
<groupId>dev.vality.adapter-client-lib</groupId>
<artifactId>hellgate-adapter-client</artifactId>
<version>${adapter-client-lib.version}</version>
</dependency>
<dependency>
<groupId>dev.vality</groupId>
<artifactId>bender-proto</artifactId>
@ -192,8 +168,14 @@
</dependency>
<dependency>
<groupId>dev.vality</groupId>
<artifactId>error-mapping-java</artifactId>
<version>${error-mapping-java.version}</version>
<artifactId>cds-proto</artifactId>
<version>${cds-proto.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>dev.vality</groupId>
<artifactId>adapter-common-lib</artifactId>
<version>${adapter-common-lib.version}</version>
</dependency>
<!-- Test -->
@ -231,7 +213,7 @@
<dependency>
<groupId>dev.vality.logback</groupId>
<artifactId>nop-rolling</artifactId>
<version>1.0.0</version>
<version>1.0.1</version>
<scope>test</scope>
</dependency>
</dependencies>

View File

@ -1,5 +1,10 @@
package dev.vality.adapter.flow.lib.converter.entry;
import dev.vality.adapter.common.cds.BankCardExtractor;
import dev.vality.adapter.common.cds.CdsStorageClient;
import dev.vality.adapter.common.cds.model.CardDataProxyModel;
import dev.vality.adapter.common.damsel.ProxyProviderPackageCreators;
import dev.vality.adapter.common.damsel.ProxyProviderPackageExtractors;
import dev.vality.adapter.flow.lib.constant.MetaData;
import dev.vality.adapter.flow.lib.constant.Step;
import dev.vality.adapter.flow.lib.constant.TargetStatus;
@ -10,17 +15,12 @@ import dev.vality.adapter.flow.lib.service.TemporaryContextService;
import dev.vality.adapter.flow.lib.utils.CallbackUrlExtractor;
import dev.vality.adapter.flow.lib.utils.CardDataUtils;
import dev.vality.adapter.flow.lib.utils.TargetStatusResolver;
import dev.vality.cds.client.storage.CdsClientStorage;
import dev.vality.cds.client.storage.utils.BankCardExtractor;
import dev.vality.cds.storage.Auth3DS;
import dev.vality.cds.storage.CardData;
import dev.vality.cds.storage.SessionData;
import dev.vality.damsel.domain.BankCard;
import dev.vality.damsel.domain.TransactionInfo;
import dev.vality.damsel.proxy_provider.*;
import dev.vality.java.cds.utils.model.CardDataProxyModel;
import dev.vality.java.damsel.utils.creators.ProxyProviderPackageCreators;
import dev.vality.java.damsel.utils.extractors.ProxyProviderPackageExtractors;
import lombok.RequiredArgsConstructor;
import org.springframework.core.convert.converter.Converter;
@ -30,7 +30,7 @@ import java.util.Map;
@RequiredArgsConstructor
public class CtxToEntryModelConverter implements Converter<PaymentContext, EntryStateModel> {
private final CdsClientStorage cdsStorage;
private final CdsStorageClient cdsStorageClient;
private final TemporaryContextDeserializer temporaryContextDeserializer;
private final IdGenerator idGenerator;
private final TemporaryContextService temporaryContextService;
@ -51,7 +51,7 @@ public class CtxToEntryModelConverter implements Converter<PaymentContext, Entry
if (paymentResource.isSetDisposablePaymentResource()
&& currentStep == null
&& targetStatus == TargetStatus.PROCESSED) {
SessionData sessionData = cdsStorage.getSessionData(context);
SessionData sessionData = cdsStorageClient.getSessionData(context);
cardData = initCardData(context, paymentResource, sessionData);
mobilePaymentData = initMobilePaymentData(sessionData);
}
@ -153,11 +153,11 @@ public class CtxToEntryModelConverter implements Converter<PaymentContext, Entry
private CardDataProxyModel getCardData(PaymentContext context, PaymentResource paymentResource) {
if (paymentResource.isSetDisposablePaymentResource()) {
String cardToken = ProxyProviderPackageExtractors.extractBankCardToken(paymentResource);
CardData cardData = cdsStorage.getCardData(cardToken);
CardData cardData = cdsStorageClient.getCardData(cardToken);
BankCard bankCard = ProxyProviderPackageExtractors.extractBankCard(context);
return BankCardExtractor.initCardDataProxyModel(bankCard, cardData);
}
return cdsStorage.getCardData(context);
return cdsStorageClient.getCardData(context);
}
}

View File

@ -1,13 +1,16 @@
package dev.vality.adapter.flow.lib.converter.entry;
import dev.vality.adapter.common.cds.BankCardExtractor;
import dev.vality.adapter.common.cds.CdsStorageClient;
import dev.vality.adapter.common.cds.model.CardDataProxyModel;
import dev.vality.adapter.common.damsel.ProxyProviderPackageCreators;
import dev.vality.adapter.common.damsel.ProxyProviderPackageExtractors;
import dev.vality.adapter.flow.lib.constant.MetaData;
import dev.vality.adapter.flow.lib.model.*;
import dev.vality.adapter.flow.lib.serde.TemporaryContextDeserializer;
import dev.vality.adapter.flow.lib.service.IdGenerator;
import dev.vality.adapter.flow.lib.service.TemporaryContextService;
import dev.vality.adapter.flow.lib.utils.CardDataUtils;
import dev.vality.cds.client.storage.CdsClientStorage;
import dev.vality.cds.client.storage.utils.BankCardExtractor;
import dev.vality.cds.storage.Auth3DS;
import dev.vality.cds.storage.CardData;
import dev.vality.cds.storage.SessionData;
@ -17,9 +20,6 @@ import dev.vality.damsel.domain.PaymentTool;
import dev.vality.damsel.domain.TransactionInfo;
import dev.vality.damsel.proxy_provider.RecurrentPaymentTool;
import dev.vality.damsel.proxy_provider.RecurrentTokenContext;
import dev.vality.java.cds.utils.model.CardDataProxyModel;
import dev.vality.java.damsel.utils.creators.ProxyProviderPackageCreators;
import dev.vality.java.damsel.utils.extractors.ProxyProviderPackageExtractors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.convert.converter.Converter;
@ -31,7 +31,7 @@ import java.util.HashMap;
public class RecCtxToEntryModelConverter implements Converter<RecurrentTokenContext, EntryStateModel> {
private final TemporaryContextDeserializer temporaryContextDeserializer;
private final CdsClientStorage cdsStorage;
private final CdsStorageClient cdsStorageClient;
private final IdGenerator idGenerator;
private final TemporaryContextService temporaryContextService;
@ -94,7 +94,7 @@ public class RecCtxToEntryModelConverter implements Converter<RecurrentTokenCont
DisposablePaymentResource paymentResource) {
var cardDataBuilder = dev.vality.adapter.flow.lib.model.CardData.builder();
if (generalExitStateModel == null || generalExitStateModel.getNextStep() == null) {
SessionData sessionData = cdsStorage.getSessionData(context);
SessionData sessionData = cdsStorageClient.getSessionData(context);
if (!sessionData.getAuthData().isSetAuth3ds()) {
CardDataProxyModel cardData = getCardData(context, paymentResource);
cardDataBuilder.cardHolder(cardData.getCardholderName())
@ -111,7 +111,7 @@ public class RecCtxToEntryModelConverter implements Converter<RecurrentTokenCont
TemporaryContext generalExitStateModel) {
MobilePaymentData.MobilePaymentDataBuilder<?, ?> mobilePaymentDataBuilder = MobilePaymentData.builder();
if (generalExitStateModel == null || generalExitStateModel.getNextStep() == null) {
SessionData sessionData = cdsStorage.getSessionData(context);
SessionData sessionData = cdsStorageClient.getSessionData(context);
if (sessionData.getAuthData().isSetAuth3ds()) {
Auth3DS auth3ds = sessionData.getAuthData().getAuth3ds();
mobilePaymentDataBuilder.cryptogram(auth3ds.getCryptogram())
@ -136,7 +136,7 @@ public class RecCtxToEntryModelConverter implements Converter<RecurrentTokenCont
private CardDataProxyModel getCardData(RecurrentTokenContext context, DisposablePaymentResource paymentResource) {
String cardToken = ProxyProviderPackageExtractors.extractBankCardToken(paymentResource);
CardData cardData = cdsStorage.getCardData(cardToken);
CardData cardData = cdsStorageClient.getCardData(cardToken);
BankCard bankCard = ProxyProviderPackageExtractors.extractBankCard(context);
return BankCardExtractor.initCardDataProxyModel(bankCard, cardData);
}

View File

@ -8,7 +8,7 @@ import dev.vality.adapter.flow.lib.service.IntentResultFactory;
import dev.vality.damsel.proxy_provider.Intent;
import lombok.RequiredArgsConstructor;
import static dev.vality.java.damsel.utils.creators.ProxyProviderPackageCreators.createFinishIntentSuccess;
import static dev.vality.adapter.common.damsel.ProxyProviderPackageCreators.createFinishIntentSuccess;
@RequiredArgsConstructor
public class ResultIntentResolverImpl implements ResultIntentResolver {

View File

@ -2,14 +2,14 @@ package dev.vality.adapter.flow.lib.handler;
import dev.vality.adapter.flow.lib.utils.PaymentResourceTypeResolver;
import dev.vality.damsel.proxy_provider.*;
import dev.vality.java.damsel.utils.extractors.ProxyProviderPackageExtractors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.thrift.TException;
import java.nio.ByteBuffer;
import static dev.vality.java.damsel.utils.verification.ProxyProviderVerification.isUndefinedResultOrUnavailable;
import static dev.vality.adapter.common.damsel.ProxyProviderPackageExtractors.*;
import static dev.vality.adapter.common.damsel.ProxyProviderVerification.isUndefinedResultOrUnavailable;
@Slf4j
@RequiredArgsConstructor
@ -19,7 +19,7 @@ public class ServerHandlerLogDecorator implements ProviderProxySrv.Iface {
@Override
public RecurrentTokenProxyResult generateToken(RecurrentTokenContext context) throws TException {
String recurrentId = ProxyProviderPackageExtractors.extractRecurrentId(context);
String recurrentId = extractRecurrentId(context);
log.info("Generate token started with recurrentId {}", recurrentId);
try {
RecurrentTokenProxyResult proxyResult = handler.generateToken(context);
@ -35,7 +35,7 @@ public class ServerHandlerLogDecorator implements ProviderProxySrv.Iface {
@Override
public RecurrentTokenCallbackResult handleRecurrentTokenCallback(ByteBuffer byteBuffer,
RecurrentTokenContext context) throws TException {
String recurrentId = ProxyProviderPackageExtractors.extractRecurrentId(context);
String recurrentId = extractRecurrentId(context);
log.info("handleRecurrentTokenCallback: start with recurrentId {}", recurrentId);
RecurrentTokenCallbackResult result = handler.handleRecurrentTokenCallback(byteBuffer, context);
log.info("handleRecurrentTokenCallback end {} with recurrentId {}", result, recurrentId);
@ -44,8 +44,8 @@ public class ServerHandlerLogDecorator implements ProviderProxySrv.Iface {
@Override
public PaymentProxyResult processPayment(PaymentContext context) throws TException {
String invoiceId = ProxyProviderPackageExtractors.extractInvoiceId(context);
String invoicePaymentStatus = ProxyProviderPackageExtractors.extractTargetInvoicePaymentStatus(context);
String invoiceId = extractInvoiceId(context);
String invoicePaymentStatus = extractTargetInvoicePaymentStatus(context);
String paymentResourceType = PaymentResourceTypeResolver.extractPaymentResourceType(context);
log.info("Process payment handle resource='{}', status='{}' start with invoiceId {}", paymentResourceType,
invoicePaymentStatus, invoiceId);
@ -66,7 +66,7 @@ public class ServerHandlerLogDecorator implements ProviderProxySrv.Iface {
@Override
public PaymentCallbackResult handlePaymentCallback(ByteBuffer byteBuffer,
PaymentContext context) throws TException {
String invoiceId = ProxyProviderPackageExtractors.extractInvoiceId(context);
String invoiceId = extractInvoiceId(context);
log.info("handlePaymentCallback start with invoiceId {}", invoiceId);
PaymentCallbackResult result = handler.handlePaymentCallback(byteBuffer, context);
log.info("handlePaymentCallback finish {} with invoiceId {}", result, invoiceId);

View File

@ -1,5 +1,6 @@
package dev.vality.adapter.flow.lib.handler.callback;
import dev.vality.adapter.common.damsel.ProxyProviderPackageCreators;
import dev.vality.adapter.flow.lib.model.TemporaryContext;
import dev.vality.adapter.flow.lib.serde.Deserializer;
import dev.vality.adapter.flow.lib.serde.StateSerializer;
@ -7,7 +8,6 @@ import dev.vality.adapter.flow.lib.service.TemporaryContextService;
import dev.vality.damsel.proxy_provider.PaymentCallbackProxyResult;
import dev.vality.damsel.proxy_provider.PaymentCallbackResult;
import dev.vality.damsel.proxy_provider.PaymentContext;
import dev.vality.java.damsel.utils.creators.ProxyProviderPackageCreators;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

View File

@ -1,5 +1,7 @@
package dev.vality.adapter.flow.lib.handler.callback;
import dev.vality.adapter.common.damsel.BasePackageCreators;
import dev.vality.adapter.common.damsel.ProxyProviderPackageCreators;
import dev.vality.adapter.flow.lib.model.TemporaryContext;
import dev.vality.adapter.flow.lib.serde.Deserializer;
import dev.vality.adapter.flow.lib.serde.StateSerializer;
@ -8,8 +10,6 @@ import dev.vality.damsel.proxy_provider.RecurrentTokenCallbackResult;
import dev.vality.damsel.proxy_provider.RecurrentTokenContext;
import dev.vality.damsel.proxy_provider.RecurrentTokenIntent;
import dev.vality.damsel.proxy_provider.RecurrentTokenProxyResult;
import dev.vality.java.damsel.utils.creators.BasePackageCreators;
import dev.vality.java.damsel.utils.creators.ProxyProviderPackageCreators;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

View File

@ -1,5 +1,6 @@
package dev.vality.adapter.flow.lib.service;
import dev.vality.adapter.common.mapper.ErrorMapping;
import dev.vality.adapter.flow.lib.constant.HttpMethod;
import dev.vality.adapter.flow.lib.constant.RedirectFields;
import dev.vality.adapter.flow.lib.model.EntryStateModel;
@ -15,14 +16,13 @@ import dev.vality.damsel.base.Timer;
import dev.vality.damsel.proxy_provider.*;
import dev.vality.damsel.timeout_behaviour.TimeoutBehaviour;
import dev.vality.damsel.user_interaction.UserInteraction;
import dev.vality.error.mapping.ErrorMapping;
import lombok.RequiredArgsConstructor;
import java.nio.ByteBuffer;
import java.util.Map;
import static dev.vality.java.damsel.utils.creators.ProxyProviderPackageCreators.*;
import static dev.vality.java.damsel.utils.extractors.OptionsExtractors.extractRedirectTimeout;
import static dev.vality.adapter.common.damsel.OptionsExtractors.extractRedirectTimeout;
import static dev.vality.adapter.common.damsel.ProxyProviderPackageCreators.*;
@RequiredArgsConstructor
public class IntentResultFactory {

View File

@ -1,9 +1,9 @@
package dev.vality.adapter.flow.lib.service;
import dev.vality.adapter.common.damsel.OptionsExtractors;
import dev.vality.adapter.flow.lib.model.EntryStateModel;
import dev.vality.adapter.flow.lib.model.PollingInfo;
import dev.vality.adapter.flow.lib.utils.TimerProperties;
import dev.vality.java.damsel.utils.extractors.OptionsExtractors;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;

View File

@ -1,5 +1,6 @@
package dev.vality.adapter.flow.lib.service;
import dev.vality.adapter.common.mapper.ErrorMapping;
import dev.vality.adapter.flow.lib.constant.RedirectFields;
import dev.vality.adapter.flow.lib.model.EntryStateModel;
import dev.vality.adapter.flow.lib.model.ExitStateModel;
@ -11,14 +12,13 @@ import dev.vality.adapter.flow.lib.utils.TimeoutUtils;
import dev.vality.adapter.flow.lib.utils.TimerProperties;
import dev.vality.damsel.base.Timer;
import dev.vality.damsel.proxy_provider.*;
import dev.vality.error.mapping.ErrorMapping;
import lombok.RequiredArgsConstructor;
import java.util.Map;
import static dev.vality.java.damsel.utils.creators.ProxyProviderPackageCreators.createPostUserInteraction;
import static dev.vality.java.damsel.utils.creators.ProxyProviderPackageCreators.createRecurrentTokenStatusSuccess;
import static dev.vality.java.damsel.utils.extractors.OptionsExtractors.extractRedirectTimeout;
import static dev.vality.adapter.common.damsel.OptionsExtractors.extractRedirectTimeout;
import static dev.vality.adapter.common.damsel.ProxyProviderPackageCreators.createPostUserInteraction;
import static dev.vality.adapter.common.damsel.ProxyProviderPackageCreators.createRecurrentTokenStatusSuccess;
@RequiredArgsConstructor
public class RecurrentIntentResultFactory {

View File

@ -1,10 +1,10 @@
package dev.vality.adapter.flow.lib.service;
import dev.vality.adapter.common.exception.HellgateException;
import dev.vality.adapter.common.hellgate.HellgateClient;
import dev.vality.adapter.flow.lib.serde.ParametersDeserializer;
import dev.vality.adapter.flow.lib.serde.ParametersSerializer;
import dev.vality.adapter.flow.lib.utils.CallbackUrlExtractor;
import dev.vality.adapter.helpers.hellgate.HellgateAdapterClient;
import dev.vality.adapter.helpers.hellgate.exception.HellgateException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
@ -20,19 +20,19 @@ import java.util.function.BiFunction;
@RequiredArgsConstructor
public class ThreeDsAdapterService {
private final HellgateAdapterClient hgClient;
private final HellgateClient hellgateClient;
private final ParametersSerializer parametersSerializer;
private final ParametersDeserializer parametersDeserializer;
private final TagManagementService tagManagementService;
public String receivePaymentIncomingParameters(HttpServletRequest servletRequest,
HttpServletResponse servletResponse) {
return this.processCallback(servletRequest, servletResponse, hgClient::processPaymentCallback);
return this.processCallback(servletRequest, servletResponse, hellgateClient::processPaymentCallback);
}
public String receiveRecurrentIncomingParameters(HttpServletRequest servletRequest,
HttpServletResponse servletResponse) {
return this.processCallback(servletRequest, servletResponse, hgClient::processRecurrentTokenCallback);
return this.processCallback(servletRequest, servletResponse, hellgateClient::processRecurrentTokenCallback);
}
private String processCallback(HttpServletRequest servletRequest,

View File

@ -1,8 +1,8 @@
package dev.vality.adapter.flow.lib.utils;
import dev.vality.adapter.common.damsel.model.PaymentResourceType;
import dev.vality.damsel.proxy_provider.PaymentContext;
import dev.vality.damsel.proxy_provider.PaymentResource;
import dev.vality.java.damsel.constant.PaymentResourceType;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;

View File

@ -1,26 +0,0 @@
package dev.vality.adapter.flow.lib.utils;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import dev.vality.error.mapping.ErrorMapping;
import lombok.RequiredArgsConstructor;
import org.springframework.core.io.Resource;
import java.io.IOException;
@RequiredArgsConstructor
public class SimpleErrorMapping {
private final Resource filePath;
private final String patternReason;
public ErrorMapping createErrorMapping() throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
ErrorMapping errorMapping = new ErrorMapping(filePath.getInputStream(), patternReason, mapper);
errorMapping.validateMapping();
return errorMapping;
}
}

View File

@ -1,5 +1,8 @@
package dev.vality.adapter.flow.lib.flow;
import dev.vality.adapter.common.cds.CdsStorageClient;
import dev.vality.adapter.common.damsel.ProxyProviderVerification;
import dev.vality.adapter.common.hellgate.HellgateClient;
import dev.vality.adapter.flow.lib.client.RemoteClient;
import dev.vality.adapter.flow.lib.constant.Step;
import dev.vality.adapter.flow.lib.controller.ThreeDsCallbackController;
@ -10,19 +13,16 @@ import dev.vality.adapter.flow.lib.serde.TemporaryContextDeserializer;
import dev.vality.adapter.flow.lib.service.TagManagementService;
import dev.vality.adapter.flow.lib.utils.CallbackUrlExtractor;
import dev.vality.adapter.flow.lib.validator.AdapterConfigurationValidator;
import dev.vality.adapter.helpers.hellgate.HellgateAdapterClient;
import dev.vality.bender.BenderSrv;
import dev.vality.cds.client.storage.CdsClientStorage;
import dev.vality.damsel.proxy_provider.*;
import dev.vality.java.damsel.utils.verification.ProxyProviderVerification;
import org.apache.thrift.TException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.PropertySource;
import org.springframework.test.context.ContextConfiguration;
import static dev.vality.adapter.common.damsel.DomainPackageCreators.createTargetProcessed;
import static dev.vality.adapter.flow.lib.flow.full.three.ds.ForwardRecurrentPaymentNon3dsTest.RECURRENT_TOKEN;
import static dev.vality.java.damsel.utils.creators.DomainPackageCreators.createTargetProcessed;
import static org.junit.jupiter.api.Assertions.*;
@ -34,7 +34,7 @@ import static org.junit.jupiter.api.Assertions.*;
public class AbstractGenerateTokenTest {
@MockBean
protected CdsClientStorage cdsClientStorage;
protected CdsStorageClient cdsStorageClient;
@MockBean
protected AdapterConfigurationValidator paymentContextValidator;
@MockBean
@ -42,7 +42,7 @@ public class AbstractGenerateTokenTest {
@MockBean
protected RemoteClient client;
@MockBean
protected HellgateAdapterClient hellgateAdapterClient;
protected HellgateClient hellgateClient;
@Autowired
public TemporaryContextDeserializer temporaryContextDeserializer;

View File

@ -1,5 +1,8 @@
package dev.vality.adapter.flow.lib.flow;
import dev.vality.adapter.common.cds.CdsStorageClient;
import dev.vality.adapter.common.damsel.ProxyProviderVerification;
import dev.vality.adapter.common.hellgate.HellgateClient;
import dev.vality.adapter.flow.lib.client.RemoteClient;
import dev.vality.adapter.flow.lib.constant.Step;
import dev.vality.adapter.flow.lib.controller.ThreeDsCallbackController;
@ -10,21 +13,18 @@ import dev.vality.adapter.flow.lib.serde.TemporaryContextDeserializer;
import dev.vality.adapter.flow.lib.service.TagManagementService;
import dev.vality.adapter.flow.lib.utils.CallbackUrlExtractor;
import dev.vality.adapter.flow.lib.validator.AdapterConfigurationValidator;
import dev.vality.adapter.helpers.hellgate.HellgateAdapterClient;
import dev.vality.bender.BenderSrv;
import dev.vality.cds.client.storage.CdsClientStorage;
import dev.vality.damsel.domain.InvoicePaymentCaptured;
import dev.vality.damsel.domain.InvoicePaymentRefunded;
import dev.vality.damsel.domain.TargetInvoicePaymentStatus;
import dev.vality.damsel.proxy_provider.*;
import dev.vality.java.damsel.utils.verification.ProxyProviderVerification;
import org.apache.thrift.TException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.PropertySource;
import org.springframework.test.context.ContextConfiguration;
import static dev.vality.java.damsel.utils.creators.DomainPackageCreators.createTargetProcessed;
import static dev.vality.adapter.common.damsel.DomainPackageCreators.createTargetProcessed;
import static org.junit.jupiter.api.Assertions.*;
@ -36,13 +36,13 @@ import static org.junit.jupiter.api.Assertions.*;
public class AbstractPaymentTest {
@MockBean
protected CdsClientStorage cdsClientStorage;
protected CdsStorageClient cdsStorageClient;
@MockBean
protected BenderSrv.Iface benderClient;
@MockBean
protected RemoteClient client;
@MockBean
protected HellgateAdapterClient hellgateAdapterClient;
protected HellgateClient hellgateClient;
@MockBean
protected AdapterConfigurationValidator paymentContextValidator;

View File

@ -3,8 +3,8 @@ package dev.vality.adapter.flow.lib.flow.config;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import dev.vality.adapter.flow.lib.utils.SimpleErrorMapping;
import dev.vality.error.mapping.ErrorMapping;
import dev.vality.adapter.common.component.SimpleErrorMapping;
import dev.vality.adapter.common.mapper.ErrorMapping;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

View File

@ -1,6 +1,9 @@
package dev.vality.adapter.flow.lib.flow.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import dev.vality.adapter.common.cds.CdsStorageClient;
import dev.vality.adapter.common.hellgate.HellgateClient;
import dev.vality.adapter.common.mapper.ErrorMapping;
import dev.vality.adapter.flow.lib.converter.ExitStateModelToTemporaryContextConverter;
import dev.vality.adapter.flow.lib.converter.base.EntryModelToBaseRequestModelConverter;
import dev.vality.adapter.flow.lib.converter.entry.CtxToEntryModelConverter;
@ -23,11 +26,8 @@ import dev.vality.adapter.flow.lib.utils.AdapterProperties;
import dev.vality.adapter.flow.lib.utils.CallbackUrlExtractor;
import dev.vality.adapter.flow.lib.utils.TimerProperties;
import dev.vality.adapter.flow.lib.validator.AdapterConfigurationValidator;
import dev.vality.adapter.helpers.hellgate.HellgateAdapterClient;
import dev.vality.bender.BenderSrv;
import dev.vality.cds.client.storage.CdsClientStorage;
import dev.vality.damsel.proxy_provider.ProviderProxySrv;
import dev.vality.error.mapping.ErrorMapping;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -83,12 +83,12 @@ public class HandlerConfig {
}
@Bean
public CtxToEntryModelConverter ctxToEntryModelConverter(CdsClientStorage cdsClientStorage,
public CtxToEntryModelConverter ctxToEntryModelConverter(CdsStorageClient cdsStorageClient,
TemporaryContextDeserializer adapterDeserializer,
IdGenerator idGenerator,
TemporaryContextService temporaryContextService,
CallbackUrlExtractor callbackUrlExtractor) {
return new CtxToEntryModelConverter(cdsClientStorage,
return new CtxToEntryModelConverter(cdsStorageClient,
adapterDeserializer,
idGenerator,
temporaryContextService,
@ -104,12 +104,12 @@ public class HandlerConfig {
}
@Bean
public RecCtxToEntryModelConverter recCtxToEntryModelConverter(CdsClientStorage cdsClientStorage,
public RecCtxToEntryModelConverter recCtxToEntryModelConverter(CdsStorageClient cdsStorageClient,
TemporaryContextDeserializer adapterDeserializer,
IdGenerator idGenerator,
TemporaryContextService temporaryContextService) {
return new RecCtxToEntryModelConverter(adapterDeserializer,
cdsClientStorage,
cdsStorageClient,
idGenerator,
temporaryContextService);
}
@ -154,12 +154,13 @@ public class HandlerConfig {
}
@Bean
public ThreeDsAdapterService threeDsAdapterService(HellgateAdapterClient hgClient,
public ThreeDsAdapterService threeDsAdapterService(HellgateClient hellgateClient,
ParametersSerializer parametersSerializer,
ParametersDeserializer parametersDeserializer,
TagManagementService tagManagementService
) {
return new ThreeDsAdapterService(hgClient, parametersSerializer, parametersDeserializer, tagManagementService);
return new ThreeDsAdapterService(
hellgateClient, parametersSerializer, parametersDeserializer, tagManagementService);
}
@Bean

View File

@ -31,7 +31,7 @@ public class ErrorPaymentNon3dsTest extends AbstractPaymentTest {
@BeforeEach
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mockAllWithout3Ds(cdsClientStorage, benderClient);
MockUtil.mockAllWithout3Ds(cdsStorageClient, benderClient);
BaseResponseModel baseResponseModel = BeanUtils.createBaseResponseModel();
baseResponseModel.setErrorCode("rem_error_21");

View File

@ -37,7 +37,7 @@ public class ForwardRecurrentPaymentNon3dsTest extends AbstractPaymentTest {
@BeforeEach
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mockAllWithout3Ds(cdsClientStorage, benderClient);
MockUtil.mockAllWithout3Ds(cdsStorageClient, benderClient);
BaseResponseModel baseResponseModel = BeanUtils.createBaseResponseModel();
baseResponseModel.setRecurrentToken(RECURRENT_TOKEN);

View File

@ -40,7 +40,7 @@ public class GenerateToken3ds1Test extends AbstractGenerateTokenTest {
@BeforeEach
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mockAllWithout3Ds(cdsClientStorage, benderClient);
MockUtil.mockAllWithout3Ds(cdsStorageClient, benderClient);
BaseResponseModel baseResponseModel = BeanUtils.createBaseResponseModel();
baseResponseModel.setThreeDsData(BeanUtils.create3Ds1(baseResponseModel));

View File

@ -34,7 +34,7 @@ public class GenerateTokenNon3dsTest extends AbstractGenerateTokenTest {
@BeforeEach
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mockAllWithout3Ds(cdsClientStorage, benderClient);
MockUtil.mockAllWithout3Ds(cdsStorageClient, benderClient);
BaseResponseModel baseResponseModel = BeanUtils.createBaseResponseModel();
baseResponseModel.setRecurrentToken(RECURRENT_TOKEN);

View File

@ -32,7 +32,7 @@ public class PaymentNon3dsTest extends AbstractPaymentTest {
@BeforeEach
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mockAllWithout3Ds(cdsClientStorage, benderClient);
MockUtil.mockAllWithout3Ds(cdsStorageClient, benderClient);
BaseResponseModel baseResponseModel = BeanUtils.createBaseResponseModel();
Mockito.when(client.auth(any())).thenReturn(baseResponseModel);

View File

@ -44,8 +44,8 @@ public class PaymentSuccess3ds1Test extends AbstractPaymentTest {
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mock3ds1CardData(cdsClientStorage);
MockUtil.mock3ds1SessionData(cdsClientStorage);
MockUtil.mock3ds1CardData(cdsStorageClient);
MockUtil.mock3ds1SessionData(cdsStorageClient);
MockUtil.mockIdGenerator(benderClient);
BaseResponseModel baseResponseModel = BeanUtils.createBaseResponseModel();

View File

@ -43,8 +43,8 @@ public class PaymentSuccess3ds2FullTest extends AbstractPaymentTest {
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mock3ds1CardData(cdsClientStorage);
MockUtil.mock3ds1SessionData(cdsClientStorage);
MockUtil.mock3ds1CardData(cdsStorageClient);
MockUtil.mock3ds1SessionData(cdsStorageClient);
MockUtil.mockIdGenerator(benderClient);
BaseResponseModel baseResponseModelCheck = BeanUtils.createBaseResponseModel();

View File

@ -43,8 +43,8 @@ public class PaymentSuccess3ds2SimpleTest extends AbstractPaymentTest {
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mock3ds1CardData(cdsClientStorage);
MockUtil.mock3ds1SessionData(cdsClientStorage);
MockUtil.mock3ds1CardData(cdsStorageClient);
MockUtil.mock3ds1SessionData(cdsStorageClient);
MockUtil.mockIdGenerator(benderClient);
BaseResponseModel baseResponseModelCheck = BeanUtils.createBaseResponseModel();

View File

@ -32,7 +32,7 @@ public class RefundPaymentNon3dsTest extends AbstractPaymentTest {
@BeforeEach
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mockAllWithout3Ds(cdsClientStorage, benderClient);
MockUtil.mockAllWithout3Ds(cdsStorageClient, benderClient);
BaseResponseModel baseResponseModel = BeanUtils.createBaseResponseModel();
Mockito.when(client.auth(any())).thenReturn(baseResponseModel);

View File

@ -31,7 +31,7 @@ public class ErrorPaymentNon3dsTest extends AbstractPaymentTest {
@BeforeEach
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mockAllWithout3Ds(cdsClientStorage, benderClient);
MockUtil.mockAllWithout3Ds(cdsStorageClient, benderClient);
BaseResponseModel baseResponseModel = BeanUtils.createBaseResponseModel();
baseResponseModel.setErrorCode("rem_error_21");

View File

@ -41,7 +41,7 @@ public class ForwardRecurrentPaymentNon3dsTest extends AbstractPaymentTest {
@BeforeEach
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mockAllWithout3Ds(cdsClientStorage, benderClient);
MockUtil.mockAllWithout3Ds(cdsStorageClient, benderClient);
BaseResponseModel baseResponseModel = BeanUtils.createBaseResponseModel();
baseResponseModel.setRecurrentToken(RECURRENT_TOKEN);

View File

@ -38,7 +38,7 @@ public class GenerateToken3ds1Test extends AbstractGenerateTokenTest {
@BeforeEach
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mockAllWithout3Ds(cdsClientStorage, benderClient);
MockUtil.mockAllWithout3Ds(cdsStorageClient, benderClient);
BaseResponseModel baseResponseModel = BeanUtils.createBaseResponseModel();
baseResponseModel.setThreeDsData(BeanUtils.create3Ds1(baseResponseModel));

View File

@ -36,7 +36,7 @@ public class PaymentNon3dsTest extends AbstractPaymentTest {
@BeforeEach
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mockAllWithout3Ds(cdsClientStorage, benderClient);
MockUtil.mockAllWithout3Ds(cdsStorageClient, benderClient);
BaseResponseModel baseResponseModel = BeanUtils.createBaseResponseModel();
Mockito.when(client.auth(any())).thenReturn(baseResponseModel);

View File

@ -43,8 +43,8 @@ public class PaymentSuccess3dsTest extends AbstractPaymentTest {
public void setUp() throws TException {
MockitoAnnotations.openMocks(this);
MockUtil.mock3ds1CardData(cdsClientStorage);
MockUtil.mock3ds1SessionData(cdsClientStorage);
MockUtil.mock3ds1CardData(cdsStorageClient);
MockUtil.mock3ds1SessionData(cdsStorageClient);
MockUtil.mockIdGenerator(benderClient);
BaseResponseModel baseResponseModel = BeanUtils.createBaseResponseModel();

View File

@ -1,11 +1,11 @@
package dev.vality.adapter.flow.lib.flow.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import dev.vality.adapter.common.utils.CommonConverter;
import dev.vality.adapter.flow.lib.constant.Status;
import dev.vality.adapter.flow.lib.constant.ThreeDsType;
import dev.vality.adapter.flow.lib.model.BaseResponseModel;
import dev.vality.adapter.flow.lib.model.ThreeDsData;
import dev.vality.java.damsel.converter.CommonConverter;
import java.nio.ByteBuffer;
import java.util.HashMap;

View File

@ -1,17 +1,17 @@
package dev.vality.adapter.flow.lib.flow.utils;
import dev.vality.adapter.common.cds.CdsStorageClient;
import dev.vality.adapter.common.cds.model.CardDataProxyModel;
import dev.vality.adapter.flow.lib.constant.OptionFields;
import dev.vality.adapter.flow.lib.constant.Stage;
import dev.vality.bender.BenderSrv;
import dev.vality.bender.GenerationResult;
import dev.vality.cds.client.storage.CdsClientStorage;
import dev.vality.cds.storage.*;
import dev.vality.damsel.domain.*;
import dev.vality.damsel.proxy_provider.Cash;
import dev.vality.damsel.proxy_provider.Invoice;
import dev.vality.damsel.proxy_provider.InvoicePayment;
import dev.vality.damsel.proxy_provider.*;
import dev.vality.java.cds.utils.model.CardDataProxyModel;
import org.apache.thrift.TException;
import org.mockito.stubbing.Answer;
@ -41,56 +41,56 @@ public class MockUtil {
public static final String CVV_3DS_2 = "584";
public static final String CVV_3DS_2_SIMPLE_FLOW = "590";
public static void mockAllWithout3Ds(CdsClientStorage cdsClientStorage, BenderSrv.Iface benderClient)
public static void mockAllWithout3Ds(CdsStorageClient cdsStorageClient, BenderSrv.Iface benderClient)
throws TException {
MockUtil.mockCardDataWithout3ds(cdsClientStorage);
MockUtil.mockSessionData(cdsClientStorage);
MockUtil.mockCardDataWithout3ds(cdsStorageClient);
MockUtil.mockSessionData(cdsStorageClient);
MockUtil.mockIdGenerator(benderClient);
}
public static void mockCardDataWithout3ds(CdsClientStorage cdsClientStorage) {
public static void mockCardDataWithout3ds(CdsStorageClient cdsStorageClient) {
mockCardData(EXP_MONTH_NON3DS,
EXP_YEAR_NON3DS,
CARDHOLDER_NAME,
PAN_SUCCESS_NON3DS,
cdsClientStorage);
cdsStorageClient);
}
public static void mock3ds1CardData(CdsClientStorage cdsClientStorage) {
public static void mock3ds1CardData(CdsStorageClient cdsStorageClient) {
mockCardData(EXP_MONTH_NON3DS,
EXP_YEAR_NON3DS,
CARDHOLDER_NAME,
PAN_SUCCESS_3DS_1,
cdsClientStorage);
cdsStorageClient);
}
public static void mock3ds2FullFlowCardData(CdsClientStorage cdsClientStorage) {
public static void mock3ds2FullFlowCardData(CdsStorageClient cdsStorageClient) {
mockCardData(EXP_MONTH_3DS_2,
EXP_YEAR_3DS_2,
CARDHOLDER_NAME,
PAN_SUCCESS_3DS_2,
cdsClientStorage);
cdsStorageClient);
}
public static void mock3ds2SimpleFlowCardData(CdsClientStorage cdsClientStorage) {
public static void mock3ds2SimpleFlowCardData(CdsStorageClient cdsStorageClient) {
mockCardData(EXP_MONTH_3DS_2,
EXP_YEAR_3DS_2,
CARDHOLDER_NAME,
PAN_SUCCESS_3DS_2_SIMPLE_FLOW,
cdsClientStorage);
cdsStorageClient);
}
private static void mockCardData(int expMonthNon3ds,
int expYearNon3ds,
String cardholderName,
String panSuccessNon3ds,
CdsClientStorage cdsClientStorage) {
CdsStorageClient cdsStorageClient) {
doAnswer((Answer<CardDataProxyModel>) invocationOnMock -> CardDataProxyModel.builder()
.expMonth((byte) expMonthNon3ds)
.expYear((short) expYearNon3ds)
.cardholderName(cardholderName)
.pan(panSuccessNon3ds)
.build()).when(cdsClientStorage).getCardData(any(RecurrentTokenContext.class));
.build()).when(cdsStorageClient).getCardData(any(RecurrentTokenContext.class));
doAnswer((Answer<CardData>) invocation ->
new CardData()
.setExpDate(new ExpDate()
@ -98,7 +98,7 @@ public class MockUtil {
.setYear((short) expYearNon3ds))
.setPan(panSuccessNon3ds)
.setCardholderName(cardholderName))
.when(cdsClientStorage).getCardData(any(PaymentContext.class));
.when(cdsStorageClient).getCardData(any(PaymentContext.class));
doAnswer((Answer<CardData>) invocation ->
new CardData()
.setExpDate(new ExpDate()
@ -106,32 +106,32 @@ public class MockUtil {
.setYear((short) expYearNon3ds))
.setPan(panSuccessNon3ds)
.setCardholderName(cardholderName))
.when(cdsClientStorage).getCardData(any(String.class));
.when(cdsStorageClient).getCardData(any(String.class));
}
public static void mockSessionData(CdsClientStorage cdsClientStorage) {
mockCvv(CVV_NON3DS, cdsClientStorage);
public static void mockSessionData(CdsStorageClient cdsStorageClient) {
mockCvv(CVV_NON3DS, cdsStorageClient);
}
public static void mock3ds1SessionData(CdsClientStorage cdsClientStorage) {
mockCvv(CVV_3DS_1, cdsClientStorage);
public static void mock3ds1SessionData(CdsStorageClient cdsStorageClient) {
mockCvv(CVV_3DS_1, cdsStorageClient);
}
public static void mock3ds2FullFlowSessionData(CdsClientStorage cdsClientStorage) {
mockCvv(CVV_3DS_2, cdsClientStorage);
public static void mock3ds2FullFlowSessionData(CdsStorageClient cdsStorageClient) {
mockCvv(CVV_3DS_2, cdsStorageClient);
}
public static void mock3ds2SimpleFlowSessionData(CdsClientStorage cdsClientStorage) {
mockCvv(CVV_3DS_2_SIMPLE_FLOW, cdsClientStorage);
public static void mock3ds2SimpleFlowSessionData(CdsStorageClient cdsStorageClient) {
mockCvv(CVV_3DS_2_SIMPLE_FLOW, cdsStorageClient);
}
private static void mockCvv(String cvvNon3ds, CdsClientStorage cdsClientStorage) {
private static void mockCvv(String cvvNon3ds, CdsStorageClient cdsStorageClient) {
doAnswer((Answer<SessionData>) invocation ->
new SessionData(AuthData.card_security_code(new CardSecurityCode(cvvNon3ds))))
.when(cdsClientStorage).getSessionData(any(RecurrentTokenContext.class));
.when(cdsStorageClient).getSessionData(any(RecurrentTokenContext.class));
doAnswer((Answer<SessionData>) invocation ->
new SessionData(AuthData.card_security_code(new CardSecurityCode(cvvNon3ds))))
.when(cdsClientStorage).getSessionData(any(PaymentContext.class));
.when(cdsStorageClient).getSessionData(any(PaymentContext.class));
}
public static void mockIdGenerator(BenderSrv.Iface benderClient) throws TException {

View File

@ -0,0 +1,139 @@
package dev.vality.adapter.flow.lib.logback.mask;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.IThrowableProxy;
import ch.qos.logback.classic.spi.LoggerContextVO;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class PatternMaskingLayoutTest {
private PatternMaskingLayout patternMaskingLayout = new PatternMaskingLayout();
@BeforeEach
public void init() {
patternMaskingLayout.setPattern("%-5p [%d{ISO8601}] %m%n");
String[] maskPatterns = {"\\b\\d{6}([\\d\\s]{2,9})\\d{4}\\b", "(\\b\\d{3}\\b)"};
for (String maskPattern : maskPatterns) {
patternMaskingLayout.addMaskPattern(maskPattern);
}
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
patternMaskingLayout.setContext(loggerContext);
patternMaskingLayout.start();
}
@Test
public void testPatternMaskingLayout() {
Calendar calendar = new GregorianCalendar(2019, Calendar.APRIL, 15, 14, 15, 16);
String msg =
"http://localhost/?COMMAND=PREAUTH&VERSION=1.0&PAN=3412345678909876&PAN2=9876543219987654&EXPDATE" +
"=2012&TERMID=1235111&AMOUNT=1000&CURRENCY=643&INVOICE=invoice_id.1&CVV2=123" +
"&RRN=904792140574&CONDITION=3&TDSDATA=";
ILoggingEvent loggingEvent = createLoggingEvent(Level.DEBUG, calendar.getTime(), msg);
assertEquals(
"DEBUG [2019-04-15 14:15:16,000] http://localhost/?COMMAND=PREAUTH&VERSION=1.0" +
"&PAN=341234******9876&PAN2=987654******7654&EXPDATE=2012&TERMID=1235111&AMOUNT=1000" +
"&CURRENCY=***&INVOICE=invoice_id.1&CVV2=***&RRN=904792**0574&CONDITION=3&TDSDATA=" +
System.lineSeparator(),
patternMaskingLayout.doLayout(loggingEvent));
}
ILoggingEvent createLoggingEvent(Level logLevel, Date date, String msg) {
return new ILoggingEvent() {
@Override
public String getThreadName() {
return null;
}
@Override
public Level getLevel() {
return logLevel;
}
@Override
public String getMessage() {
return null;
}
@Override
public Object[] getArgumentArray() {
return new Object[0];
}
@Override
public String getFormattedMessage() {
return msg;
}
@Override
public String getLoggerName() {
return "loggerName";
}
@Override
public LoggerContextVO getLoggerContextVO() {
return null;
}
@Override
public IThrowableProxy getThrowableProxy() {
return null;
}
@Override
public StackTraceElement[] getCallerData() {
return null;
}
@Override
public boolean hasCallerData() {
return false;
}
@Override
public Marker getMarker() {
return null;
}
@Override
public Map<String, String> getMDCPropertyMap() {
return null;
}
@Override
public Map<String, String> getMdc() {
return null;
}
@Override
public long getTimeStamp() {
return date.getTime();
}
@Override
public void prepareForDeferredProcessing() {
}
};
}
}