diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 424e109..dbb1a95 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: Build Maven Artifact +name: Maven Build Artifact on: pull_request: @@ -7,4 +7,4 @@ on: jobs: build: - uses: valitydev/java-workflow/.github/workflows/maven-service-build.yml@v2 + uses: valitydev/java-workflow/.github/workflows/maven-service-build.yml@v3 diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 911ca7a..ad9f60e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,12 +4,13 @@ on: push: branches: - 'master' - - 'main' - - 'epic/**' + - 'ft/up-woody' jobs: build-and-deploy: - uses: valitydev/java-workflow/.github/workflows/maven-service-deploy.yml@v2 + uses: valitydev/java-workflow/.github/workflows/maven-service-deploy.yml@v3 + with: + ignore-coverage: true secrets: github-token: ${{ secrets.GITHUB_TOKEN }} mm-webhook-url: ${{ secrets.MATTERMOST_WEBHOOK_URL }} diff --git a/pom.xml b/pom.xml index 9aa9b99..b13588b 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ dev.vality service-parent-pom - 2.1.5 + 3.1.7 proxy-mocketbank @@ -24,7 +24,6 @@ mocketbank ${server.port} ${server.rest.port} ${management.port} UTF-8 - 1.64-74a763b 1.16-b0d5cf2 @@ -80,17 +79,25 @@ commons-text 1.10.0 + + jakarta.servlet + jakarta.servlet-api + + + com.github.javafaker + javafaker + 1.0.2 + dev.vality damsel - 1.597-bfedcb9 dev.vality cds-proto - 1.66-01353ce + 1.71-b3db02c dev.vality @@ -109,7 +116,7 @@ dev.vality adapter-common-lib - 1.2.13 + 3.0.0 dev.vality diff --git a/src/main/java/dev/vality/proxy/mocketbank/configuration/RestClientConfig.java b/src/main/java/dev/vality/proxy/mocketbank/configuration/RestClientConfig.java new file mode 100644 index 0000000..66bcdaf --- /dev/null +++ b/src/main/java/dev/vality/proxy/mocketbank/configuration/RestClientConfig.java @@ -0,0 +1,89 @@ +package dev.vality.proxy.mocketbank.configuration; + +import dev.vality.proxy.mocketbank.configuration.properties.RestTemplateProperties; +import lombok.RequiredArgsConstructor; +import org.apache.hc.client5.http.classic.HttpClient; +import org.apache.hc.client5.http.config.ConnectionConfig; +import org.apache.hc.client5.http.config.RequestConfig; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder; +import org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy; +import org.apache.hc.core5.http.io.SocketConfig; +import org.apache.hc.core5.util.Timeout; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestClient; + +import javax.net.ssl.SSLContext; +import java.security.NoSuchAlgorithmException; +import java.util.concurrent.TimeUnit; + +@RequiredArgsConstructor +@Configuration +public class RestClientConfig { + + private final RestTemplateProperties httpProperties; + + @Bean + public RestClient restClient(ClientHttpRequestFactory requestFactory) { + return RestClient.builder() + .requestFactory(requestFactory) + .build(); + } + + @Bean + public HttpComponentsClientHttpRequestFactory requestFactory(HttpClient httpClient) { + final var requestFactory = new HttpComponentsClientHttpRequestFactory(); + requestFactory.setHttpClient(httpClient); + return requestFactory; + } + + @Bean + public SSLContext sslContext() throws NoSuchAlgorithmException { + return SSLContext.getDefault(); + } + + @Bean + public PoolingHttpClientConnectionManager connectionManager(SSLContext sslContext) { + return PoolingHttpClientConnectionManagerBuilder.create() + .setTlsSocketStrategy( + DefaultClientTlsStrategy.createDefault() + ) + .setDefaultSocketConfig( + SocketConfig.custom() + .setSoTimeout(Timeout.ofMilliseconds(httpProperties.getRequestTimeout())) + .build() + ) + .setDefaultConnectionConfig( + ConnectionConfig.custom() + .setConnectTimeout(Timeout.ofMilliseconds(httpProperties.getConnectionTimeout())) + .build() + ) + .setMaxConnTotal(httpProperties.getMaxTotalPooling()) + .setMaxConnPerRoute(httpProperties.getDefaultMaxPerRoute()) + .build(); + } + + @Bean + public RequestConfig requestConfig() { + return RequestConfig.custom() + .setConnectionRequestTimeout(httpProperties.getRequestTimeout(), TimeUnit.MILLISECONDS) + .setResponseTimeout(httpProperties.getConnectionTimeout(), TimeUnit.MILLISECONDS) + .build(); + } + + @Bean + public CloseableHttpClient httpClient(PoolingHttpClientConnectionManager connectionManager, + RequestConfig requestConfig) { + return HttpClients.custom() + .setConnectionManager(connectionManager) + .setDefaultRequestConfig(requestConfig) + .disableAutomaticRetries() + .setConnectionManagerShared(true) + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/dev/vality/proxy/mocketbank/configuration/RestTemplateConfiguration.java b/src/main/java/dev/vality/proxy/mocketbank/configuration/RestTemplateConfiguration.java deleted file mode 100644 index 05c5b6d..0000000 --- a/src/main/java/dev/vality/proxy/mocketbank/configuration/RestTemplateConfiguration.java +++ /dev/null @@ -1,120 +0,0 @@ -package dev.vality.proxy.mocketbank.configuration; - -import dev.vality.proxy.mocketbank.configuration.properties.RestTemplateProperties; -import lombok.RequiredArgsConstructor; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.conn.ssl.NoopHostnameVerifier; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.apache.http.ssl.SSLContextBuilder; -import org.springframework.boot.actuate.metrics.web.client.MetricsRestTemplateCustomizer; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.web.client.RestTemplateBuilder; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpStatus; -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.StringHttpMessageConverter; -import org.springframework.web.client.DefaultResponseErrorHandler; -import org.springframework.web.client.RestTemplate; - -import javax.net.ssl.SSLContext; -import java.security.KeyManagementException; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.time.Duration; - -@Configuration -@RequiredArgsConstructor -@EnableConfigurationProperties({RestTemplateProperties.class}) -public class RestTemplateConfiguration { - - private final RestTemplateProperties restTemplateProperties; - - @Bean - public PoolingHttpClientConnectionManager poolingHttpClientConnectionManager() { - PoolingHttpClientConnectionManager result = new PoolingHttpClientConnectionManager(); - result.setMaxTotal(restTemplateProperties.getMaxTotalPooling()); - result.setDefaultMaxPerRoute(restTemplateProperties.getDefaultMaxPerRoute()); - return result; - } - - @Bean - public RequestConfig requestConfig() { - return RequestConfig.custom() - .setConnectionRequestTimeout(restTemplateProperties.getPoolTimeout()) - .setConnectTimeout(restTemplateProperties.getConnectionTimeout()) - .setSocketTimeout(restTemplateProperties.getRequestTimeout()) - .build(); - } - - @Bean - public SSLContext sslContext() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { - return new SSLContextBuilder() - .loadTrustMaterial(null, (x509Certificates, s) -> true) - .build(); - } - - @Bean - public CloseableHttpClient httpClient( - PoolingHttpClientConnectionManager manager, - RequestConfig requestConfig, - SSLContext sslContext) { - return HttpClients.custom() - .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) - .setSSLContext(sslContext) - .setConnectionManager(manager) - .setDefaultRequestConfig(requestConfig) - .disableAutomaticRetries() - .setConnectionManagerShared(true) - .build(); - } - - @Bean - public HttpComponentsClientHttpRequestFactory requestFactory(CloseableHttpClient httpClient) { - HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); - requestFactory.setHttpClient(httpClient); - return requestFactory; - } - - @Bean - public RestTemplateBuilder restTemplateBuilder( - HttpComponentsClientHttpRequestFactory requestFactory, - MetricsRestTemplateCustomizer metricsRestTemplateCustomizer - ) { - return new RestTemplateBuilder() - .requestFactory(() -> requestFactory) - .additionalCustomizers(metricsRestTemplateCustomizer); - } - - @Bean - public RestTemplate createRestTemplate(RestTemplateBuilder restTemplateBuilder) { - RestTemplate restTemplate = restTemplateBuilder - .setConnectTimeout(Duration.ofMillis(restTemplateProperties.getConnectionTimeout())) - .setReadTimeout(Duration.ofMillis(restTemplateProperties.getRequestTimeout())) - .build(); - restTemplate.setErrorHandler(getDefaultResponseErrorHandler()); - setMessageConverter(restTemplate); - return restTemplate; - } - - private void setMessageConverter(RestTemplate restTemplate) { - for (HttpMessageConverter converter : restTemplate.getMessageConverters()) { - if (converter instanceof StringHttpMessageConverter) { - ((StringHttpMessageConverter) converter).setWriteAcceptCharset(false); - } - } - } - - private DefaultResponseErrorHandler getDefaultResponseErrorHandler() { - return new DefaultResponseErrorHandler() { - @Override - protected boolean hasError(HttpStatus statusCode) { - return false; - } - }; - } - -} diff --git a/src/main/java/dev/vality/proxy/mocketbank/configuration/TomcatEmbeddedConfiguration.java b/src/main/java/dev/vality/proxy/mocketbank/configuration/TomcatEmbeddedConfiguration.java index d74d1e3..d73ba7f 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/configuration/TomcatEmbeddedConfiguration.java +++ b/src/main/java/dev/vality/proxy/mocketbank/configuration/TomcatEmbeddedConfiguration.java @@ -10,11 +10,11 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.filter.OncePerRequestFilter; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @Configuration diff --git a/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/AdapterMockBankProperties.java b/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/AdapterMockBankProperties.java index df34e9c..a46658f 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/AdapterMockBankProperties.java +++ b/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/AdapterMockBankProperties.java @@ -6,7 +6,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotEmpty; @Getter @Setter diff --git a/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/AdapterMockMpiProperties.java b/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/AdapterMockMpiProperties.java index fb69e30..b090bff 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/AdapterMockMpiProperties.java +++ b/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/AdapterMockMpiProperties.java @@ -6,7 +6,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotEmpty; @Getter @Setter diff --git a/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/CdsClientStorageProperties.java b/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/CdsClientStorageProperties.java index a5149b8..ddfa570 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/CdsClientStorageProperties.java +++ b/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/CdsClientStorageProperties.java @@ -7,7 +7,7 @@ import org.springframework.core.io.Resource; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; @Configuration @ConfigurationProperties(prefix = "cds.client.storage") diff --git a/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/HellgateClientStorageProperties.java b/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/HellgateClientStorageProperties.java index b7f1b7c..9669207 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/HellgateClientStorageProperties.java +++ b/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/HellgateClientStorageProperties.java @@ -7,7 +7,7 @@ import org.springframework.core.io.Resource; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; @Configuration @ConfigurationProperties(prefix = "hellgate.client.storage") diff --git a/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/RestTemplateProperties.java b/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/RestTemplateProperties.java index 6d6e6af..789aaca 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/RestTemplateProperties.java +++ b/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/RestTemplateProperties.java @@ -6,7 +6,7 @@ import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; @Getter @Setter diff --git a/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/TimerProperties.java b/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/TimerProperties.java index e60ee52..d6fabcd 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/TimerProperties.java +++ b/src/main/java/dev/vality/proxy/mocketbank/configuration/properties/TimerProperties.java @@ -6,7 +6,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; @Getter @Setter diff --git a/src/main/java/dev/vality/proxy/mocketbank/controller/MocketBankController.java b/src/main/java/dev/vality/proxy/mocketbank/controller/MocketBankController.java index d75e98d..44996ad 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/controller/MocketBankController.java +++ b/src/main/java/dev/vality/proxy/mocketbank/controller/MocketBankController.java @@ -18,8 +18,8 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLDecoder; import java.nio.ByteBuffer; @@ -61,26 +61,6 @@ public String receiveIncomingParameters( return resp; } - @RequestMapping(value = "/rec_term_url", method = RequestMethod.POST) - public String receiveRecurrentIncomingParameters( - HttpServletRequest request, - HttpServletResponse servletResponse) throws IOException { - String tag = getTag(request); - log.info("ReceiveRecurrentIncomingParameters with tag {}, info {}", tag, httpServletRequestToString(request)); - String resp = EMPTY_STRING; - try { - ByteBuffer callback = prepareCallbackParams(request); - ByteBuffer response = hellgateClient.processRecurrentTokenCallback(tag, callback); - resp = new String(response.array(), StandardCharsets.UTF_8); - } catch (HellgateException e) { - log.warn("Failed handle callback for recurrent", e); - } catch (Exception e) { - log.error("Failed handle callback for recurrent", e); - } - sendRedirect(request, servletResponse); - return resp; - } - @RequestMapping(value = "three_ds_method_notification", method = RequestMethod.POST) public String mpi20ThreeDsMethodNotification(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException { diff --git a/src/main/java/dev/vality/proxy/mocketbank/decorator/DigitalWalletServerHandlerLog.java b/src/main/java/dev/vality/proxy/mocketbank/decorator/DigitalWalletServerHandlerLog.java index 4f913aa..a1aecd4 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/decorator/DigitalWalletServerHandlerLog.java +++ b/src/main/java/dev/vality/proxy/mocketbank/decorator/DigitalWalletServerHandlerLog.java @@ -15,32 +15,6 @@ public class DigitalWalletServerHandlerLog implements ProviderProxySrv.Iface { private final ProviderProxySrv.Iface handler; - @Override - public RecurrentTokenProxyResult generateToken(RecurrentTokenContext context) throws TException { - String recurrentId = ProxyProviderPackageExtractors.extractRecurrentId(context); - log.info("GenerateToken started with recurrentId={}", recurrentId); - try { - RecurrentTokenProxyResult proxyResult = handler.generateToken(context); - log.info("GenerateToken finished {} with recurrentId={}", proxyResult, recurrentId); - return proxyResult; - } catch (Exception ex) { - String message = String.format("Failed handle GenerateToken with recurrentId=%s", recurrentId); - ServerHandlerLogUtils.logMessage(ex, message, this.getClass()); - throw ex; - } - } - - @Override - public RecurrentTokenCallbackResult handleRecurrentTokenCallback( - ByteBuffer byteBuffer, - RecurrentTokenContext context) throws TException { - String recurrentId = ProxyProviderPackageExtractors.extractRecurrentId(context); - log.info("HandleRecurrentTokenCallback: start with recurrentId={}", recurrentId); - RecurrentTokenCallbackResult result = handler.handleRecurrentTokenCallback(byteBuffer, context); - log.info("HandleRecurrentTokenCallback end {} with recurrentId={}", result, recurrentId); - return result; - } - @Override public PaymentProxyResult processPayment(PaymentContext context) throws TException { String invoiceId = ProxyProviderPackageExtractors.extractInvoiceId(context); diff --git a/src/main/java/dev/vality/proxy/mocketbank/decorator/MobileServerHandlerLog.java b/src/main/java/dev/vality/proxy/mocketbank/decorator/MobileServerHandlerLog.java index 546fd84..f06bffa 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/decorator/MobileServerHandlerLog.java +++ b/src/main/java/dev/vality/proxy/mocketbank/decorator/MobileServerHandlerLog.java @@ -15,32 +15,6 @@ public class MobileServerHandlerLog implements ProviderProxySrv.Iface { private final ProviderProxySrv.Iface handler; - @Override - public RecurrentTokenProxyResult generateToken(RecurrentTokenContext context) throws TException { - String recurrentId = ProxyProviderPackageExtractors.extractRecurrentId(context); - log.info("GenerateToken started with recurrentId={}", recurrentId); - try { - RecurrentTokenProxyResult proxyResult = handler.generateToken(context); - log.info("GenerateToken finished {} with recurrentId={}", proxyResult, recurrentId); - return proxyResult; - } catch (Exception ex) { - String message = String.format("Failed handle GenerateToken with recurrentId=%s", recurrentId); - ServerHandlerLogUtils.logMessage(ex, message, this.getClass()); - throw ex; - } - } - - @Override - public RecurrentTokenCallbackResult handleRecurrentTokenCallback( - ByteBuffer byteBuffer, - RecurrentTokenContext context) throws TException { - String recurrentId = ProxyProviderPackageExtractors.extractRecurrentId(context); - log.info("HandleRecurrentTokenCallback: start with recurrentId={}", recurrentId); - RecurrentTokenCallbackResult result = handler.handleRecurrentTokenCallback(byteBuffer, context); - log.info("HandleRecurrentTokenCallback end {} with recurrentId={}", result, recurrentId); - return result; - } - @Override public PaymentProxyResult processPayment(PaymentContext context) throws TException { String invoiceId = ProxyProviderPackageExtractors.extractInvoiceId(context); diff --git a/src/main/java/dev/vality/proxy/mocketbank/decorator/PaymentServerHandlerLog.java b/src/main/java/dev/vality/proxy/mocketbank/decorator/PaymentServerHandlerLog.java index 5251ecb..9f1fcba 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/decorator/PaymentServerHandlerLog.java +++ b/src/main/java/dev/vality/proxy/mocketbank/decorator/PaymentServerHandlerLog.java @@ -15,32 +15,6 @@ public class PaymentServerHandlerLog implements ProviderProxySrv.Iface { private final ProviderProxySrv.Iface handler; - @Override - public RecurrentTokenProxyResult generateToken(RecurrentTokenContext context) throws TException { - String recurrentId = ProxyProviderPackageExtractors.extractRecurrentId(context); - log.info("GenerateToken started with recurrentId={}", recurrentId); - try { - RecurrentTokenProxyResult proxyResult = handler.generateToken(context); - log.info("GenerateToken finished {} with recurrentId={}", proxyResult, recurrentId); - return proxyResult; - } catch (Exception ex) { - String message = String.format("Failed handle GenerateToken with recurrentId=%s", recurrentId); - ServerHandlerLogUtils.logMessage(ex, message, this.getClass()); - throw ex; - } - } - - @Override - public RecurrentTokenCallbackResult handleRecurrentTokenCallback( - ByteBuffer byteBuffer, - RecurrentTokenContext context) throws TException { - String recurrentId = ProxyProviderPackageExtractors.extractRecurrentId(context); - log.info("HandleRecurrentTokenCallback: start with recurrentId={}", recurrentId); - RecurrentTokenCallbackResult result = handler.handleRecurrentTokenCallback(byteBuffer, context); - log.info("HandleRecurrentTokenCallback end {} with recurrentId={}", result, recurrentId); - return result; - } - @Override public PaymentProxyResult processPayment(PaymentContext context) throws TException { String invoiceId = ProxyProviderPackageExtractors.extractInvoiceId(context); diff --git a/src/main/java/dev/vality/proxy/mocketbank/decorator/PaymentServerHandlerMdcLog.java b/src/main/java/dev/vality/proxy/mocketbank/decorator/PaymentServerHandlerMdcLog.java index e3d20bb..7ba6db3 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/decorator/PaymentServerHandlerMdcLog.java +++ b/src/main/java/dev/vality/proxy/mocketbank/decorator/PaymentServerHandlerMdcLog.java @@ -27,18 +27,6 @@ private void mdcRemove() { MDC.remove("paymentId"); } - @Override - public RecurrentTokenProxyResult generateToken(RecurrentTokenContext context) throws TException { - return handler.generateToken(context); - } - - @Override - public RecurrentTokenCallbackResult handleRecurrentTokenCallback( - ByteBuffer callback, - RecurrentTokenContext context) throws TException { - return handler.handleRecurrentTokenCallback(callback, context); - } - @Override public PaymentProxyResult processPayment(PaymentContext context) throws TException { mdcPut(context); diff --git a/src/main/java/dev/vality/proxy/mocketbank/decorator/TerminalServerHandlerLog.java b/src/main/java/dev/vality/proxy/mocketbank/decorator/TerminalServerHandlerLog.java index ac02f6f..f429547 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/decorator/TerminalServerHandlerLog.java +++ b/src/main/java/dev/vality/proxy/mocketbank/decorator/TerminalServerHandlerLog.java @@ -15,32 +15,6 @@ public class TerminalServerHandlerLog implements ProviderProxySrv.Iface { private final ProviderProxySrv.Iface handler; - @Override - public RecurrentTokenProxyResult generateToken(RecurrentTokenContext context) throws TException { - String recurrentId = ProxyProviderPackageExtractors.extractRecurrentId(context); - log.info("GenerateToken started with recurrentId={}", recurrentId); - try { - RecurrentTokenProxyResult proxyResult = handler.generateToken(context); - log.info("GenerateToken finished {} with recurrentId={}", proxyResult, recurrentId); - return proxyResult; - } catch (Exception ex) { - String message = String.format("Failed handle GenerateToken with recurrentId=%s", recurrentId); - ServerHandlerLogUtils.logMessage(ex, message, this.getClass()); - throw ex; - } - } - - @Override - public RecurrentTokenCallbackResult handleRecurrentTokenCallback( - ByteBuffer byteBuffer, - RecurrentTokenContext context) throws TException { - String recurrentId = ProxyProviderPackageExtractors.extractRecurrentId(context); - log.info("HandleRecurrentTokenCallback: start with recurrentId={}", recurrentId); - RecurrentTokenCallbackResult result = handler.handleRecurrentTokenCallback(byteBuffer, context); - log.info("HandleRecurrentTokenCallback end {} with recurrentId={}", result, recurrentId); - return result; - } - @Override public PaymentProxyResult processPayment(PaymentContext context) throws TException { String invoiceId = ProxyProviderPackageExtractors.extractInvoiceId(context); diff --git a/src/main/java/dev/vality/proxy/mocketbank/handler/digital/wallet/DigitalWalletServerHandler.java b/src/main/java/dev/vality/proxy/mocketbank/handler/digital/wallet/DigitalWalletServerHandler.java index 4c69778..e78280f 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/handler/digital/wallet/DigitalWalletServerHandler.java +++ b/src/main/java/dev/vality/proxy/mocketbank/handler/digital/wallet/DigitalWalletServerHandler.java @@ -20,18 +20,6 @@ public class DigitalWalletServerHandler implements ProviderProxySrv.Iface { private final DigitalWalletCallbackHandler digitalWalletCallbackHandler; private final DigitalWalletValidator digitalWalletValidator; - @Override - public RecurrentTokenProxyResult generateToken(RecurrentTokenContext context) throws TException { - throw new TException("Method Not Supported"); - } - - @Override - public RecurrentTokenCallbackResult handleRecurrentTokenCallback( - ByteBuffer callback, - RecurrentTokenContext context) throws TException { - throw new TException("Method Not Supported"); - } - @Override public PaymentProxyResult processPayment(PaymentContext context) throws TException { digitalWalletValidator.validate(context, context.getOptions()); diff --git a/src/main/java/dev/vality/proxy/mocketbank/handler/mobile/MobileServerHandler.java b/src/main/java/dev/vality/proxy/mocketbank/handler/mobile/MobileServerHandler.java index cec5695..222360b 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/handler/mobile/MobileServerHandler.java +++ b/src/main/java/dev/vality/proxy/mocketbank/handler/mobile/MobileServerHandler.java @@ -19,18 +19,6 @@ public class MobileServerHandler implements ProviderProxySrv.Iface { private final MobileValidator mobileValidator; private final List handlers; - @Override - public RecurrentTokenProxyResult generateToken(RecurrentTokenContext context) throws TException { - throw new TException("Method Not Supported"); - } - - @Override - public RecurrentTokenCallbackResult handleRecurrentTokenCallback( - ByteBuffer callback, - RecurrentTokenContext context) throws TException { - throw new TException("Method Not Supported"); - } - @Override public PaymentProxyResult processPayment(PaymentContext context) throws TException { mobileValidator.validate(context, context.getOptions()); diff --git a/src/main/java/dev/vality/proxy/mocketbank/handler/payment/PaymentServerHandler.java b/src/main/java/dev/vality/proxy/mocketbank/handler/payment/PaymentServerHandler.java index e0f7f42..3b41f2f 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/handler/payment/PaymentServerHandler.java +++ b/src/main/java/dev/vality/proxy/mocketbank/handler/payment/PaymentServerHandler.java @@ -1,9 +1,10 @@ package dev.vality.proxy.mocketbank.handler.payment; -import dev.vality.damsel.proxy_provider.*; +import dev.vality.damsel.proxy_provider.PaymentCallbackResult; +import dev.vality.damsel.proxy_provider.PaymentContext; +import dev.vality.damsel.proxy_provider.PaymentProxyResult; +import dev.vality.damsel.proxy_provider.ProviderProxySrv; import dev.vality.proxy.mocketbank.handler.payment.callback.PaymentCallbackHandler; -import dev.vality.proxy.mocketbank.handler.payment.callback.RecurrentTokenCallbackHandler; -import dev.vality.proxy.mocketbank.handler.payment.recurrent.GenerateTokenHandler; import dev.vality.proxy.mocketbank.validator.PaymentValidator; import lombok.RequiredArgsConstructor; import org.apache.thrift.TException; @@ -18,22 +19,8 @@ public class PaymentServerHandler implements ProviderProxySrv.Iface { private final List handlers; private final PaymentCallbackHandler paymentCallbackHandler; - private final GenerateTokenHandler generateTokenHandler; - private final RecurrentTokenCallbackHandler recurrentTokenCallbackHandler; private final PaymentValidator paymentValidator; - @Override - public RecurrentTokenProxyResult generateToken(RecurrentTokenContext context) { - return generateTokenHandler.handler(context); - } - - @Override - public RecurrentTokenCallbackResult handleRecurrentTokenCallback( - ByteBuffer callback, - RecurrentTokenContext context) { - return recurrentTokenCallbackHandler.handler(callback, context); - } - @Override public PaymentProxyResult processPayment(PaymentContext context) throws TException { paymentValidator.validate(context, context.getOptions()); diff --git a/src/main/java/dev/vality/proxy/mocketbank/handler/payment/callback/RecurrentTokenCallbackHandler.java b/src/main/java/dev/vality/proxy/mocketbank/handler/payment/callback/RecurrentTokenCallbackHandler.java deleted file mode 100644 index b3c918a..0000000 --- a/src/main/java/dev/vality/proxy/mocketbank/handler/payment/callback/RecurrentTokenCallbackHandler.java +++ /dev/null @@ -1,64 +0,0 @@ -package dev.vality.proxy.mocketbank.handler.payment.callback; - -import dev.vality.adapter.common.cds.CdsStorageClient; -import dev.vality.adapter.common.cds.model.CardDataProxyModel; -import dev.vality.adapter.common.damsel.model.Error; -import dev.vality.adapter.common.exception.CdsStorageExpDateException; -import dev.vality.adapter.common.mapper.ErrorMapping; -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.proxy.mocketbank.constant.PaymentState; -import dev.vality.proxy.mocketbank.service.mpi.MpiApi; -import dev.vality.proxy.mocketbank.service.mpi.constant.TransactionStatus; -import dev.vality.proxy.mocketbank.service.mpi.model.ValidatePaResResponse; -import dev.vality.proxy.mocketbank.utils.Converter; -import dev.vality.proxy.mocketbank.utils.ErrorBuilder; -import dev.vality.proxy.mocketbank.utils.model.Card; -import dev.vality.proxy.mocketbank.utils.model.CardAction; -import dev.vality.proxy.mocketbank.utils.model.CardUtils; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.ByteBuffer; -import java.util.HashMap; -import java.util.List; - -import static dev.vality.adapter.common.damsel.ProxyProviderPackageCreators.*; -import static dev.vality.adapter.common.damsel.ProxyProviderPackageExtractors.extractRecurrentId; - -@Slf4j -@Component -@RequiredArgsConstructor -public class RecurrentTokenCallbackHandler { - - private final CdsStorageClient cds; - private final MpiApi mpiApi; - private final ErrorMapping errorMapping; - private final List cardList; - - public RecurrentTokenCallbackResult handler(ByteBuffer byteBuffer, RecurrentTokenContext context) { - String recurrentId = extractRecurrentId(context); - HashMap parameters = Converter.mergeParams(byteBuffer, context.getSession().getState()); - - CardDataProxyModel cardData; - try { - cardData = cds.getCardData(context); - } catch (CdsStorageExpDateException ex) { - return ErrorBuilder.prepareRecurrentCallbackError(errorMapping, Error.DEFAULT_ERROR_CODE, ex.getMessage()); - } - - ValidatePaResResponse validatePaResResponse = mpiApi.validatePaRes(cardData, parameters); - if (TransactionStatus.isAuthenticationSuccessful(validatePaResResponse.getTransactionStatus())) { - RecurrentTokenIntent intent = createRecurrentTokenFinishIntentSuccess(recurrentId); - RecurrentTokenProxyResult proxyResult = - createRecurrentTokenProxyResult(intent, PaymentState.PENDING.getBytes()); - return createRecurrentTokenCallbackResult("".getBytes(), proxyResult); - } - - CardAction action = CardUtils.extractActionFromCard(cardList, cardData); - return ErrorBuilder.prepareRecurrentCallbackError(errorMapping, Error.DEFAULT_ERROR_CODE, action); - } -} diff --git a/src/main/java/dev/vality/proxy/mocketbank/handler/payment/recurrent/GenerateTokenHandler.java b/src/main/java/dev/vality/proxy/mocketbank/handler/payment/recurrent/GenerateTokenHandler.java deleted file mode 100644 index c74b21b..0000000 --- a/src/main/java/dev/vality/proxy/mocketbank/handler/payment/recurrent/GenerateTokenHandler.java +++ /dev/null @@ -1,126 +0,0 @@ -package dev.vality.proxy.mocketbank.handler.payment.recurrent; - -import dev.vality.adapter.common.cds.CdsStorageClient; -import dev.vality.adapter.common.cds.model.CardDataProxyModel; -import dev.vality.adapter.common.exception.CdsStorageExpDateException; -import dev.vality.adapter.common.mapper.ErrorMapping; -import dev.vality.damsel.domain.Failure; -import dev.vality.damsel.domain.OperationFailure; -import dev.vality.damsel.proxy_provider.RecurrentTokenContext; -import dev.vality.damsel.proxy_provider.RecurrentTokenIntent; -import dev.vality.damsel.proxy_provider.RecurrentTokenProxyResult; -import dev.vality.damsel.timeout_behaviour.TimeoutBehaviour; -import dev.vality.proxy.mocketbank.configuration.properties.AdapterMockBankProperties; -import dev.vality.proxy.mocketbank.configuration.properties.TimerProperties; -import dev.vality.proxy.mocketbank.constant.PaymentState; -import dev.vality.proxy.mocketbank.service.mpi.MpiApi; -import dev.vality.proxy.mocketbank.service.mpi.constant.EnrollmentStatus; -import dev.vality.proxy.mocketbank.service.mpi.model.VerifyEnrollmentResponse; -import dev.vality.proxy.mocketbank.utils.ErrorBuilder; -import dev.vality.proxy.mocketbank.utils.TokenProviderVerification; -import dev.vality.proxy.mocketbank.utils.UrlUtils; -import dev.vality.proxy.mocketbank.utils.model.Card; -import dev.vality.proxy.mocketbank.utils.model.CardAction; -import dev.vality.proxy.mocketbank.utils.model.CardUtils; -import dev.vality.proxy.mocketbank.utils.state.StateUtils; -import dev.vality.proxy.mocketbank.utils.state.constant.SuspendPrefix; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import static dev.vality.adapter.common.damsel.OptionsExtractors.extractRedirectTimeout; -import static dev.vality.adapter.common.damsel.ProxyProviderPackageCreators.*; -import static dev.vality.adapter.common.damsel.ProxyProviderPackageExtractors.extractRecurrentId; -import static dev.vality.adapter.common.damsel.model.Error.DEFAULT_ERROR_CODE; -import static dev.vality.adapter.common.damsel.model.Error.THREE_DS_NOT_FINISHED; - -@Slf4j -@Component -@RequiredArgsConstructor -public class GenerateTokenHandler { - - private final CdsStorageClient cds; - private final MpiApi mpiApi; - private final ErrorMapping errorMapping; - private final List cardList; - private final TimerProperties timerProperties; - private final AdapterMockBankProperties mockBankProperties; - - public RecurrentTokenProxyResult handler(RecurrentTokenContext context) { - String recurrentId = extractRecurrentId(context); - RecurrentTokenIntent intent = createRecurrentTokenFinishIntentSuccess(recurrentId); - - // Applepay, Samsungpay, Googlepay - always successful and does not depends on card - if (TokenProviderVerification.hasBankCardTokenProvider(context)) { - return createRecurrentTokenProxyResult(intent); - } - - CardDataProxyModel cardData; - try { - cardData = cds.getCardData(context); - } catch (CdsStorageExpDateException ex) { - return ErrorBuilder.prepareRecurrentTokenError(errorMapping, DEFAULT_ERROR_CODE, ex.getMessage()); - } - - Optional card = CardUtils.extractCardByPan(cardList, cardData.getPan()); - if (card.isPresent()) { - CardAction action = CardAction.findByValue(card.get().getAction()); - if (CardAction.isCardEnrolled(card.get())) { - return prepareEnrolledRecurrentTokenProxyResult(context, intent, cardData); - } - return prepareNotEnrolledRecurrentTokenProxyResult(intent, action); - } - return ErrorBuilder.prepareRecurrentTokenError(errorMapping, CardAction.UNSUPPORTED_CARD); - } - - private RecurrentTokenProxyResult prepareNotEnrolledRecurrentTokenProxyResult( - RecurrentTokenIntent intent, - CardAction action) { - - if (CardAction.isCardSuccess(action)) { - return createRecurrentTokenProxyResult(intent, PaymentState.CAPTURED.getBytes()); - } - CardAction currentAction = CardAction.isCardFailed(action) ? action : CardAction.UNKNOWN_FAILURE; - return ErrorBuilder.prepareRecurrentTokenError(errorMapping, currentAction); - } - - private RecurrentTokenProxyResult prepareEnrolledRecurrentTokenProxyResult( - RecurrentTokenContext context, - RecurrentTokenIntent intent, - CardDataProxyModel cardData) { - RecurrentTokenIntent recurrentTokenIntent = intent; - VerifyEnrollmentResponse verifyEnrollmentResponse = mpiApi.verifyEnrollment(cardData); - if (EnrollmentStatus.isAuthenticationAvailable(verifyEnrollmentResponse.getEnrolled())) { - String tag = SuspendPrefix.RECURRENT.getPrefix() + context.getTokenInfo().getPaymentTool().getId(); - String termUrl = UrlUtils.getCallbackUrl( - mockBankProperties.getCallbackUrl(), - mockBankProperties.getPathRecurrentCallbackUrl()); - recurrentTokenIntent = prepareRedirect(context, verifyEnrollmentResponse, tag, termUrl); - } - byte[] state = StateUtils.prepareState(verifyEnrollmentResponse); - return createRecurrentTokenProxyResult(recurrentTokenIntent, state); - } - - private RecurrentTokenIntent prepareRedirect( - RecurrentTokenContext context, - VerifyEnrollmentResponse verifyEnrollmentResponse, - String tag, - String termUrl) { - String url = verifyEnrollmentResponse.getAcsUrl(); - Map params = UrlUtils.prepareRedirectParams(verifyEnrollmentResponse, tag, termUrl); - Map options = context.getOptions(); - int timerRedirectTimeout = extractRedirectTimeout(options, timerProperties.getRedirectTimeout()); - - RecurrentTokenIntent recurrentTokenIntent = createRecurrentTokenWithSuspendIntent( - tag, timerRedirectTimeout, createPostUserInteraction(url, params) - ); - Failure failure = errorMapping.mapFailure(DEFAULT_ERROR_CODE, THREE_DS_NOT_FINISHED); - recurrentTokenIntent.getSuspend().setTimeoutBehaviour( - TimeoutBehaviour.operation_failure(OperationFailure.failure(failure))); - return recurrentTokenIntent; - } -} diff --git a/src/main/java/dev/vality/proxy/mocketbank/handler/terminal/TerminalServerHandler.java b/src/main/java/dev/vality/proxy/mocketbank/handler/terminal/TerminalServerHandler.java index 717201e..3fc76d9 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/handler/terminal/TerminalServerHandler.java +++ b/src/main/java/dev/vality/proxy/mocketbank/handler/terminal/TerminalServerHandler.java @@ -17,18 +17,6 @@ public class TerminalServerHandler implements ProviderProxySrv.Iface { private final TerminalValidator terminalValidator; private final List handlers; - @Override - public RecurrentTokenProxyResult generateToken(RecurrentTokenContext context) throws TException { - throw new TException("Method Not Supported"); - } - - @Override - public RecurrentTokenCallbackResult handleRecurrentTokenCallback( - ByteBuffer callback, - RecurrentTokenContext context) throws TException { - throw new TException("Method Not Supported"); - } - @Override public PaymentProxyResult processPayment(PaymentContext context) throws TException { terminalValidator.validate(context, context.getOptions()); diff --git a/src/main/java/dev/vality/proxy/mocketbank/service/mpi/MpiApi.java b/src/main/java/dev/vality/proxy/mocketbank/service/mpi/MpiApi.java index 8d301ef..eb2571b 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/service/mpi/MpiApi.java +++ b/src/main/java/dev/vality/proxy/mocketbank/service/mpi/MpiApi.java @@ -5,8 +5,9 @@ import dev.vality.proxy.mocketbank.service.mpi.model.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; +import org.springframework.web.client.RestClient; import java.util.Map; @@ -15,7 +16,7 @@ @RequiredArgsConstructor public class MpiApi { - private final RestTemplate restTemplate; + private final RestClient restClient; private final AdapterMockMpiProperties adapterMockMpiProperties; public VerifyEnrollmentResponse verifyEnrollment(CardDataProxyModel cardData) { @@ -46,7 +47,12 @@ public ValidatePaResResponse validatePaRes(ValidatePaResRequest request) { private T sendMessage(String methodName, PrepareFieldsObject request, Class responseClass) { String prepareUrl = prepareUrl(adapterMockMpiProperties.getUrl(), methodName); log.info("MockMpi {} url: {} with request: {}", methodName, prepareUrl, request); - T response = restTemplate.postForObject(prepareUrl, request.prepareFields(), responseClass); + ResponseEntity responseEntity = restClient.post() + .uri(prepareUrl) + .body(request.prepareFields()) + .retrieve() + .toEntity(responseClass); + var response = responseEntity.getBody(); log.info("MockMpi {} url: {} with response: {}", methodName, prepareUrl, response); return response; } diff --git a/src/main/java/dev/vality/proxy/mocketbank/service/mpi20/Mpi20Client.java b/src/main/java/dev/vality/proxy/mocketbank/service/mpi20/Mpi20Client.java index 3b4e99a..c074a14 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/service/mpi20/Mpi20Client.java +++ b/src/main/java/dev/vality/proxy/mocketbank/service/mpi20/Mpi20Client.java @@ -4,7 +4,9 @@ import dev.vality.proxy.mocketbank.service.mpi20.model.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; +import org.springframework.web.client.RestClient; import org.springframework.web.client.RestTemplate; @Slf4j @@ -12,7 +14,7 @@ @RequiredArgsConstructor public class Mpi20Client { - private final RestTemplate restTemplate; + private final RestClient restClient; private final Mpi20Properties mpi20Properties; public PreparationResponse prepare(PreparationRequest request) { @@ -30,7 +32,12 @@ public ResultResponse result(ResultRequest request) { private T send(String methodName, N request, Class responseClass) { String prepareUrl = prepareUrl(methodName); log.info("MockV2Mpi {} url: {} with request: {}", methodName, prepareUrl, request); - T response = restTemplate.postForObject(prepareUrl, request, responseClass); + ResponseEntity responseEntity = restClient.post() + .uri(prepareUrl) + .body(request) + .retrieve() + .toEntity(responseClass); + var response = responseEntity.getBody(); log.info("MockV2Mpi {} url: {} with response: {}", methodName, prepareUrl, response); return response; } diff --git a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletBalance.java b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletBalance.java index 468d4aa..dec3026 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletBalance.java +++ b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletBalance.java @@ -5,8 +5,8 @@ import dev.vality.woody.thrift.impl.http.THServiceBuilder; import lombok.RequiredArgsConstructor; -import javax.servlet.*; -import javax.servlet.annotation.WebServlet; +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebServlet; import java.io.IOException; @RequiredArgsConstructor diff --git a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletDw.java b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletDw.java index f635d17..e9510cd 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletDw.java +++ b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletDw.java @@ -5,8 +5,8 @@ import dev.vality.woody.thrift.impl.http.THServiceBuilder; import lombok.RequiredArgsConstructor; -import javax.servlet.*; -import javax.servlet.annotation.WebServlet; +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebServlet; import java.io.IOException; @RequiredArgsConstructor diff --git a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletMobile.java b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletMobile.java index b6ce135..6456140 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletMobile.java +++ b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletMobile.java @@ -5,8 +5,8 @@ import dev.vality.woody.thrift.impl.http.THServiceBuilder; import lombok.RequiredArgsConstructor; -import javax.servlet.*; -import javax.servlet.annotation.WebServlet; +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebServlet; import java.io.IOException; @RequiredArgsConstructor diff --git a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletMobileOperator.java b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletMobileOperator.java index 680e36b..90d24f1 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletMobileOperator.java +++ b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletMobileOperator.java @@ -5,8 +5,8 @@ import dev.vality.woody.thrift.impl.http.THServiceBuilder; import lombok.RequiredArgsConstructor; -import javax.servlet.*; -import javax.servlet.annotation.WebServlet; +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebServlet; import java.io.IOException; @RequiredArgsConstructor diff --git a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletOct.java b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletOct.java index bc1a697..bc8ac4d 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletOct.java +++ b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletOct.java @@ -5,8 +5,8 @@ import dev.vality.woody.thrift.impl.http.THServiceBuilder; import lombok.RequiredArgsConstructor; -import javax.servlet.*; -import javax.servlet.annotation.WebServlet; +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebServlet; import java.io.IOException; @RequiredArgsConstructor diff --git a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletPayment.java b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletPayment.java index b5b2a57..52775d8 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletPayment.java +++ b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletPayment.java @@ -5,8 +5,8 @@ import dev.vality.woody.thrift.impl.http.THServiceBuilder; import lombok.RequiredArgsConstructor; -import javax.servlet.*; -import javax.servlet.annotation.WebServlet; +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebServlet; import java.io.IOException; @RequiredArgsConstructor diff --git a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletTerminal.java b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletTerminal.java index 661b690..08c273f 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletTerminal.java +++ b/src/main/java/dev/vality/proxy/mocketbank/servlet/AdapterServletTerminal.java @@ -5,8 +5,8 @@ import dev.vality.woody.thrift.impl.http.THServiceBuilder; import lombok.RequiredArgsConstructor; -import javax.servlet.*; -import javax.servlet.annotation.WebServlet; +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebServlet; import java.io.IOException; @RequiredArgsConstructor diff --git a/src/main/java/dev/vality/proxy/mocketbank/utils/ErrorBuilder.java b/src/main/java/dev/vality/proxy/mocketbank/utils/ErrorBuilder.java index e32d6b1..702e034 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/utils/ErrorBuilder.java +++ b/src/main/java/dev/vality/proxy/mocketbank/utils/ErrorBuilder.java @@ -5,14 +5,13 @@ import dev.vality.damsel.domain.Failure; import dev.vality.damsel.proxy_provider.PaymentCallbackResult; import dev.vality.damsel.proxy_provider.PaymentProxyResult; -import dev.vality.damsel.proxy_provider.RecurrentTokenCallbackResult; -import dev.vality.damsel.proxy_provider.RecurrentTokenProxyResult; import dev.vality.proxy.mocketbank.utils.model.CardAction; import dev.vality.proxy.mocketbank.utils.payout.CardPayoutAction; import lombok.AccessLevel; import lombok.NoArgsConstructor; -import static dev.vality.adapter.common.damsel.ProxyProviderPackageCreators.*; +import static dev.vality.adapter.common.damsel.ProxyProviderPackageCreators.createCallbackResultFailure; +import static dev.vality.adapter.common.damsel.ProxyProviderPackageCreators.createProxyResultFailure; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class ErrorBuilder { @@ -30,22 +29,6 @@ public static PaymentProxyResult prepareError(ErrorMapping errorMapping, String return prepareError(errorMapping, code, code); } - public static RecurrentTokenProxyResult prepareRecurrentTokenError(ErrorMapping errorMapping, String code) { - return prepareRecurrentTokenError(errorMapping, code, code); - } - - public static RecurrentTokenProxyResult prepareRecurrentTokenError(ErrorMapping errorMapping, CardAction action) { - return prepareRecurrentTokenError(errorMapping, action.getAction()); - } - - public static RecurrentTokenProxyResult prepareRecurrentTokenError( - ErrorMapping errorMapping, - String code, - String message) { - Failure failure = errorMapping.mapFailure(code, message); - return createRecurrentTokenProxyResultFailure(failure); - } - public static PaymentCallbackResult prepareCallbackError(ErrorMapping errorMapping, String code, String message) { Failure failure = errorMapping.mapFailure(code, message); return createCallbackResultFailure(failure); @@ -58,21 +41,6 @@ public static PaymentCallbackResult prepareCallbackError( return prepareCallbackError(errorMapping, code, action.getAction()); } - public static RecurrentTokenCallbackResult prepareRecurrentCallbackError( - ErrorMapping errorMapping, - String code, - CardAction action) { - return prepareRecurrentCallbackError(errorMapping, code, action.getAction()); - } - - public static RecurrentTokenCallbackResult prepareRecurrentCallbackError( - ErrorMapping errorMapping, - String code, - String message) { - Failure failure = errorMapping.mapFailure(code, message); - return createRecurrentTokenCallbackResultFailure(failure); - } - public static dev.vality.damsel.withdrawals.provider_adapter.ProcessResult prepareWithdrawalError( ErrorMapping errorMapping, String code, diff --git a/src/main/java/dev/vality/proxy/mocketbank/utils/TokenProviderVerification.java b/src/main/java/dev/vality/proxy/mocketbank/utils/TokenProviderVerification.java index 0024f12..2c2ffa0 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/utils/TokenProviderVerification.java +++ b/src/main/java/dev/vality/proxy/mocketbank/utils/TokenProviderVerification.java @@ -4,7 +4,10 @@ import dev.vality.damsel.domain.BankCardTokenServiceRef; import dev.vality.damsel.domain.DisposablePaymentResource; import dev.vality.damsel.domain.PaymentTool; -import dev.vality.damsel.proxy_provider.*; +import dev.vality.damsel.proxy_provider.InvoicePayment; +import dev.vality.damsel.proxy_provider.PaymentContext; +import dev.vality.damsel.proxy_provider.PaymentInfo; +import dev.vality.damsel.proxy_provider.PaymentResource; import java.util.Optional; @@ -12,12 +15,7 @@ public class TokenProviderVerification { public static boolean hasBankCardTokenProvider(Object object) { String bankCardTokenProvider; - if (object instanceof RecurrentTokenContext) { - bankCardTokenProvider = extractBankCardTokenProvider((RecurrentTokenContext) object); - } else { - bankCardTokenProvider = extractBankCardTokenProvider((PaymentContext) object); - } - + bankCardTokenProvider = extractBankCardTokenProvider((PaymentContext) object); return bankCardTokenProvider != null; } @@ -34,14 +32,4 @@ public static String extractBankCardTokenProvider(PaymentContext context) { .orElse(null); } - public static String extractBankCardTokenProvider(RecurrentTokenContext context) { - return Optional.ofNullable(context.getTokenInfo()) - .map(RecurrentTokenInfo::getPaymentTool) - .map(RecurrentPaymentTool::getPaymentResource) - .map(DisposablePaymentResource::getPaymentTool) - .map(PaymentTool::getBankCard) - .map(BankCard::getPaymentToken) - .map(BankCardTokenServiceRef::getId) - .orElse(null); - } } diff --git a/src/test/java/dev/vality/proxy/mocketbank/handler/IntegrationTest.java b/src/test/java/dev/vality/proxy/mocketbank/handler/IntegrationTest.java index 6b1a5fa..4fbb9a6 100644 --- a/src/test/java/dev/vality/proxy/mocketbank/handler/IntegrationTest.java +++ b/src/test/java/dev/vality/proxy/mocketbank/handler/IntegrationTest.java @@ -78,7 +78,6 @@ protected Shop prepareShop() { return new Shop() .setId("shop_id") .setCategory(new Category().setName("CategoryName").setDescription("Category description")) - .setDetails(new ShopDetails().setName("ShopName").setDescription("Shop description")) .setLocation(shopLocation); } @@ -183,23 +182,6 @@ protected PaymentContext getContext( ); } - protected RecurrentTokenContext createRecurrentTokenContext(BankCard bankCard) { - RecurrentTokenContext context = new RecurrentTokenContext(); - context.setSession(new RecurrentTokenSession()); - context.setTokenInfo( - createRecurrentTokenInfo( - createRecurrentPaymentTool( - createDisposablePaymentResource( - createClientInfo(TestData.FINGERPRINT, TestData.IP_ADDRESS), - TestData.SESSION_ID, - createPaymentTool(bankCard) - ) - ).setId(recurrentId) - ) - ); - return context; - } - protected PaymentResource getPaymentResourceRecurrent(String token) { return createPaymentResourceRecurrentPaymentResource( createRecurrentPaymentResource(token) @@ -215,10 +197,7 @@ protected void mockCds(CardData cardData, BankCard bankCard) { .build(); Mockito.when(cdsStorage.getCardData(anyString())).thenReturn(cardData); - Mockito.when(cdsStorage.getCardData((RecurrentTokenContext) any())).thenReturn(proxyModel); Mockito.when(cdsStorage.getCardData((PaymentContext) any())).thenReturn(proxyModel); - Mockito.when(cdsStorage.getSessionData((RecurrentTokenContext) any())) - .thenReturn(CdsPackageCreators.createSessionDataWithCvv(TestData.DEFAULT_CVV)); Mockito.when(cdsStorage.getSessionData((PaymentContext) any())) .thenReturn(CdsPackageCreators.createSessionDataWithCvv(TestData.DEFAULT_CVV)); } diff --git a/src/test/java/dev/vality/proxy/mocketbank/handler/MocketBankServerHandlerRecurrent3DSSuccessIntegrationTest.java b/src/test/java/dev/vality/proxy/mocketbank/handler/MocketBankServerHandlerRecurrent3DSSuccessIntegrationTest.java deleted file mode 100644 index 8674763..0000000 --- a/src/test/java/dev/vality/proxy/mocketbank/handler/MocketBankServerHandlerRecurrent3DSSuccessIntegrationTest.java +++ /dev/null @@ -1,84 +0,0 @@ -package dev.vality.proxy.mocketbank.handler; - -import dev.vality.cds.storage.CardData; -import dev.vality.damsel.domain.BankCard; -import dev.vality.damsel.proxy_provider.*; -import dev.vality.proxy.mocketbank.TestData; -import dev.vality.proxy.mocketbank.service.mpi.constant.EnrollmentStatus; -import dev.vality.proxy.mocketbank.service.mpi.constant.TransactionStatus; -import dev.vality.proxy.mocketbank.utils.CardListUtils; -import dev.vality.proxy.mocketbank.utils.Converter; -import dev.vality.proxy.mocketbank.utils.model.CardAction; -import lombok.extern.slf4j.Slf4j; -import org.apache.thrift.TException; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; - -import java.io.IOException; -import java.nio.ByteBuffer; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static dev.vality.adapter.common.damsel.DomainPackageCreators.createTargetCaptured; -import static dev.vality.adapter.common.damsel.DomainPackageCreators.createTargetProcessed; -import static dev.vality.adapter.common.damsel.ProxyProviderVerification.isSuccess; -import static dev.vality.adapter.common.damsel.ProxyProviderVerification.isSuspend; -import static dev.vality.proxy.mocketbank.TestData.createCardData; -import static org.springframework.test.util.AssertionErrors.assertTrue; - -@Slf4j -@SpringBootTest( - webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, - properties = { - "cds.client.url.storage.url=http://127.0.0.1:8021/v1/storage", - } -) -@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) -public class MocketBankServerHandlerRecurrent3DSSuccessIntegrationTest extends IntegrationTest { - - @Test - void testProcessPaymentSuccess() throws TException, IOException { - List pans = CardListUtils.extractPans(cardList, CardAction::isMpiCardSuccess); - for (String pan : pans) { - CardData cardData = createCardData(pan); - processPayment(cardData); - } - } - - private void processPayment(CardData cardData) throws TException, IOException { - BankCard bankCard = TestData.createBankCard(cardData); - bankCard.setToken(TestData.BANK_CARD_TOKEN); - mockCds(cardData, bankCard); - mockMpiVerify(EnrollmentStatus.AUTHENTICATION_AVAILABLE); - mockMpi(TransactionStatus.AUTHENTICATION_SUCCESSFUL); - - RecurrentTokenContext context = createRecurrentTokenContext(bankCard); - RecurrentTokenProxyResult tokenProxyResult = handler.generateToken(context); - assertTrue("GenerateToken isn`t suspend", isSuspend(tokenProxyResult)); - - Map mapCallback = new HashMap<>(); - mapCallback.put("MD", "MD-TAG"); - mapCallback.put("paRes", "SomePaRes"); - context.getSession().setState(tokenProxyResult.getNextState()); - ByteBuffer callbackMap = Converter.mapToByteBuffer(mapCallback); - - RecurrentTokenCallbackResult tokenCallbackResult = handler.handleRecurrentTokenCallback(callbackMap, context); - assertTrue("HandleRecurrentTokenCallback isn`t success", isSuccess(tokenCallbackResult)); - - // process - String token = tokenCallbackResult.getResult().getIntent().getFinish().getStatus().getSuccess().getToken(); - - PaymentContext paymentContext = getContext(getPaymentResourceRecurrent(token), createTargetProcessed(), null); - PaymentProxyResult proxyResult = handler.processPayment(paymentContext); - assertTrue("Process payment isn`t success", isSuccess(proxyResult)); - - paymentContext.getPaymentInfo().getPayment().setTrx(proxyResult.getTrx()); - paymentContext.getSession().setTarget(createTargetCaptured()); - - proxyResult = handler.processPayment(paymentContext); - assertTrue("Capture isn`t success", isSuccess(proxyResult)); - } - -} diff --git a/src/test/java/dev/vality/proxy/mocketbank/handler/MocketBankServerHandlerRecurrentSuccessIntegrationTest.java b/src/test/java/dev/vality/proxy/mocketbank/handler/MocketBankServerHandlerRecurrentSuccessIntegrationTest.java deleted file mode 100644 index 75993f3..0000000 --- a/src/test/java/dev/vality/proxy/mocketbank/handler/MocketBankServerHandlerRecurrentSuccessIntegrationTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package dev.vality.proxy.mocketbank.handler; - -import dev.vality.cds.storage.CardData; -import dev.vality.damsel.domain.BankCard; -import dev.vality.damsel.proxy_provider.PaymentContext; -import dev.vality.damsel.proxy_provider.PaymentProxyResult; -import dev.vality.damsel.proxy_provider.RecurrentTokenContext; -import dev.vality.damsel.proxy_provider.RecurrentTokenProxyResult; -import dev.vality.proxy.mocketbank.TestData; -import dev.vality.proxy.mocketbank.utils.CardListUtils; -import dev.vality.proxy.mocketbank.utils.model.CardAction; -import lombok.extern.slf4j.Slf4j; -import org.apache.thrift.TException; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; - -import java.io.IOException; -import java.util.List; - -import static dev.vality.adapter.common.damsel.DomainPackageCreators.createTargetCaptured; -import static dev.vality.adapter.common.damsel.DomainPackageCreators.createTargetProcessed; -import static dev.vality.adapter.common.damsel.ProxyProviderVerification.isSuccess; -import static dev.vality.proxy.mocketbank.TestData.createCardData; -import static org.springframework.test.util.AssertionErrors.assertTrue; - -@Slf4j -@SpringBootTest( - webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, - properties = { - "cds.client.url.storage.url=http://127.0.0.1:8021/v1/storage", - } -) -@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) -public class MocketBankServerHandlerRecurrentSuccessIntegrationTest extends IntegrationTest { - - @Test - void testProcessPaymentSuccess() throws TException, IOException { - List pans = CardListUtils.extractPans(cardList, CardAction::isCardSuccess); - for (String pan : pans) { - CardData cardData = createCardData(pan); - processPayment(cardData); - } - } - - private void processPayment(CardData cardData) throws TException { - BankCard bankCard = TestData.createBankCard(cardData); - bankCard.setToken(TestData.BANK_CARD_TOKEN); - mockCds(cardData, bankCard); - - RecurrentTokenContext context = createRecurrentTokenContext(bankCard); - RecurrentTokenProxyResult generationProxyResult = handler.generateToken(context); - - String token = generationProxyResult.getIntent().getFinish().getStatus().getSuccess().getToken(); - - PaymentContext paymentContext = getContext(getPaymentResourceRecurrent(token), createTargetProcessed(), null); - PaymentProxyResult proxyResult = handler.processPayment(paymentContext); - assertTrue("Process Payment isn`t success", isSuccess(proxyResult)); - - paymentContext.getPaymentInfo().getPayment().setTrx(proxyResult.getTrx()); - paymentContext.getSession().setTarget(createTargetCaptured()); - - PaymentProxyResult processResultCapture = handler.processPayment(paymentContext); - assertTrue("Process Capture isn`t success ", isSuccess(processResultCapture)); - } - -} diff --git a/src/test/java/dev/vality/proxy/mocketbank/handler/oct/OctIntegrationTest.java b/src/test/java/dev/vality/proxy/mocketbank/handler/oct/OctIntegrationTest.java index 7a4526c..05a58a7 100644 --- a/src/test/java/dev/vality/proxy/mocketbank/handler/oct/OctIntegrationTest.java +++ b/src/test/java/dev/vality/proxy/mocketbank/handler/oct/OctIntegrationTest.java @@ -1,6 +1,8 @@ package dev.vality.proxy.mocketbank.handler.oct; import dev.vality.damsel.domain.BankCard; +import dev.vality.damsel.domain.PartyConfigRef; +import dev.vality.damsel.identity_document_storage.IdentityDocument; import dev.vality.damsel.withdrawals.domain.*; import dev.vality.damsel.withdrawals.provider_adapter.Cash; import dev.vality.damsel.withdrawals.provider_adapter.Withdrawal; @@ -21,26 +23,20 @@ public abstract class OctIntegrationTest { @Autowired protected List cardPayoutList; - protected static String WITHDRAWALID = "TEST_WITHDRAWAL_ID"; + public static String WITHDRAWALID = "TEST_WITHDRAWAL_ID"; + public static final String SENDER = "sender"; protected Withdrawal createWithdrawal(BankCard bankCard) { Destination destination = createDestination(bankCard); - List identityDocumentList = createIdentityDocumentsList(TestData.WITHDRAWAL_TOKEN); - Identity identity = createIdentity(identityDocumentList); return new Withdrawal() .setId(WITHDRAWALID) .setDestination(destination) .setBody(createCash()) - .setSender(identity); + .setSender(new PartyConfigRef(SENDER)); } - protected List createIdentityDocumentsList(String token) { - List identityDocumentList = new ArrayList<>(); - identityDocumentList.add(createIdentityDocument(token)); - return identityDocumentList; - } protected Destination createDestination(BankCard bankCard) { Destination destination = new Destination(); @@ -48,16 +44,6 @@ protected Destination createDestination(BankCard bankCard) { return destination; } - protected Identity createIdentity(List identityDocumentList) { - return new Identity() - .setContact(createContactDetailsList()) - .setDocuments(identityDocumentList); - } - - protected IdentityDocument createIdentityDocument(String token) { - return IdentityDocument.rus_domestic_passport(new RUSDomesticPassport().setToken(token)); - } - protected Cash createCash() { return new Cash() .setAmount(1000L) @@ -68,14 +54,6 @@ protected Map createProxyOptions() { return Collections.emptyMap(); } - protected List createContactDetailsList() { - List contactDetailList = new ArrayList<>(); - ContactDetail contactDetail = new ContactDetail(); - contactDetail.setPhoneNumber(TestData.PHONE_NUMBER); - contactDetailList.add(contactDetail); - return contactDetailList; - } - protected String randomString() { return UUID.randomUUID().toString(); }