Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 44 additions & 6 deletions src/main/java/com/checkout/CheckoutApiImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -137,12 +137,12 @@ public CheckoutApiImpl(final CheckoutConfiguration configuration) {
this.applePayClient = new ApplePayClientImpl(this.apiClient, configuration);
this.googlePayClient = new GooglePayClientImpl(this.apiClient, configuration);
this.complianceClient = new ComplianceClientImpl(this.apiClient, configuration);
this.forwardClient = new ForwardClientImpl(this.apiClient, configuration);
this.faceAuthenticationClient = new FaceAuthenticationClientImpl(this.apiClient, configuration);
this.applicantClient = new ApplicantClientImpl(this.apiClient, configuration);
this.identityVerificationClient = new IdentityVerificationClientImpl(this.apiClient, configuration);
this.idDocumentVerificationClient = new IdDocumentVerificationClientImpl(this.apiClient, configuration);
this.amlScreeningClient = new AmlScreeningClientImpl(this.apiClient, configuration);
this.forwardClient = new ForwardClientImpl(getForwardClient(configuration), configuration);
this.faceAuthenticationClient = new FaceAuthenticationClientImpl(getIdentityClient(configuration), configuration);
this.applicantClient = new ApplicantClientImpl(getIdentityClient(configuration), configuration);
this.identityVerificationClient = new IdentityVerificationClientImpl(getIdentityClient(configuration), configuration);
this.idDocumentVerificationClient = new IdDocumentVerificationClientImpl(getIdentityClient(configuration), configuration);
this.amlScreeningClient = new AmlScreeningClientImpl(getIdentityClient(configuration), configuration);
this.networkTokensClient = new NetworkTokensClientImpl(this.apiClient, configuration);
this.standaloneAccountUpdaterClient = new StandaloneAccountUpdaterClientImpl(this.apiClient, configuration);
this.agenticCommerceClient = new AgenticCommerceClientImpl(this.apiClient, configuration);
Expand Down Expand Up @@ -296,6 +296,14 @@ private ApiClient getBalancesClient(final CheckoutConfiguration configuration) {
return new ApiClientImpl(configuration, new BalancesApiUriStrategy(configuration));
}

private ApiClient getForwardClient(final CheckoutConfiguration configuration) {
return new ApiClientImpl(configuration, new ForwardApiUriStrategy(configuration));
}

private ApiClient getIdentityClient(final CheckoutConfiguration configuration) {
return new ApiClientImpl(configuration, new IdentityApiUriStrategy(configuration));
}

private static class FilesApiUriStrategy implements UriStrategy {

private final CheckoutConfiguration configuration;
Expand Down Expand Up @@ -341,4 +349,34 @@ public URI getUri() {

}

private static class ForwardApiUriStrategy implements UriStrategy {

private final CheckoutConfiguration configuration;

private ForwardApiUriStrategy(final CheckoutConfiguration configuration) {
this.configuration = configuration;
}

@Override
public URI getUri() {
return configuration.getEnvironment().getForwardApi();
}

}

private static class IdentityApiUriStrategy implements UriStrategy {

private final CheckoutConfiguration configuration;

private IdentityApiUriStrategy(final CheckoutConfiguration configuration) {
this.configuration = configuration;
}

@Override
public URI getUri() {
return configuration.getEnvironment().getIdentityApi();
}

}

}
4 changes: 4 additions & 0 deletions src/main/java/com/checkout/CustomEnvironment.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@

private URI balancesApi;

private URI forwardApi;

Check notice

Code scanning / CodeQL

Missing Override annotation Note

This method overrides
IEnvironment.getForwardApi
; it is advisable to add an Override annotation.
Comment thread
armando-rodriguez-cko marked this conversation as resolved.
Dismissed

private URI identityApi;

Check notice

Code scanning / CodeQL

Missing Override annotation Note

This method overrides
IEnvironment.getIdentityApi
; it is advisable to add an Override annotation.
Comment thread
armando-rodriguez-cko marked this conversation as resolved.
Dismissed

private URI oAuthAuthorizationApi;

private boolean sandbox;
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/checkout/Environment.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,32 +13,42 @@
create("https://files.sandbox.checkout.com/"),
create("https://transfers.sandbox.checkout.com/"),
create("https://balances.sandbox.checkout.com/"),
create("https://forward.sandbox.checkout.com/"),
create("https://identity-verification.sandbox.checkout.com/"),
create("https://access.sandbox.checkout.com/connect/token"),
true),
PRODUCTION(create("https://api.checkout.com/"),
create("https://files.checkout.com/"),
create("https://transfers.checkout.com/"),
create("https://balances.checkout.com/"),
create("https://forward.checkout.com/"),
create("https://identity-verification.checkout.com/"),
create("https://access.checkout.com/connect/token"),
false);

private final URI checkoutApi;
private final URI filesApi;
private final URI transfersApi;
private final URI balancesApi;
private final URI forwardApi;

Check notice

Code scanning / CodeQL

Missing Override annotation Note

This method overrides
IEnvironment.getForwardApi
; it is advisable to add an Override annotation.
Comment thread
armando-rodriguez-cko marked this conversation as resolved.
Dismissed
private final URI identityApi;

Check notice

Code scanning / CodeQL

Missing Override annotation Note

This method overrides
IEnvironment.getIdentityApi
; it is advisable to add an Override annotation.
Comment thread
armando-rodriguez-cko marked this conversation as resolved.
Dismissed
private final URI oAuthAuthorizationApi;
private final boolean sandbox;

Environment(final URI checkoutApi,
final URI filesApi,
final URI transfersApi,
final URI balancesApi,
final URI forwardApi,
final URI identityApi,
final URI oAuthAuthorizationApi,
final boolean sandbox) {
this.checkoutApi = checkoutApi;
this.filesApi = filesApi;
this.transfersApi = transfersApi;
this.balancesApi = balancesApi;
this.forwardApi = forwardApi;
this.identityApi = identityApi;
this.oAuthAuthorizationApi = oAuthAuthorizationApi;
this.sandbox = sandbox;
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/checkout/EnvironmentSubdomain.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
throw new CheckoutException(e);
}

Pattern pattern = Pattern.compile("^[0-9a-z]+$");
Pattern pattern = Pattern.compile("^[a-z0-9]+(-[a-z0-9]+)*$");

Check warning on line 43 in src/main/java/com/checkout/EnvironmentSubdomain.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Refactor this repetition that can lead to a stack overflow for large inputs.

See more on https://sonarcloud.io/project/issues?id=checkout_checkout-sdk-java&issues=AZ4XLUznj-O9QI9rDR-J&open=AZ4XLUznj-O9QI9rDR-J&pullRequest=596
Matcher matcher = pattern.matcher(subdomain);
if (matcher.matches()) {
String host = originalUrl.getHost();
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/checkout/IEnvironment.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ public interface IEnvironment {

URI getBalancesApi();

URI getForwardApi();

URI getIdentityApi();

URI getOAuthAuthorizationApi();

boolean isSandbox();
Expand Down
30 changes: 28 additions & 2 deletions src/test/java/com/checkout/DefaultCheckoutConfigurationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ void shouldCreateConfiguration() {
}

@ParameterizedTest
@ValueSource(strings = {"a", "ab", "abc", "abc1", "12345domain", "a1b2c3d4", "12345678", "abcdefgh", "1234doma"})
@ValueSource(strings = {"a", "ab", "abc", "abc1", "12345domain", "a1b2c3d4", "12345678", "abcdefgh", "1234doma", "test-123", "pl-abc123", "pl-loquesea", "vkuhvk4v"})
void shouldCreateConfigurationWithSubdomain(String subdomain) {

final StaticKeysSdkCredentials credentials = Mockito.mock(StaticKeysSdkCredentials.class);
Expand All @@ -65,7 +65,7 @@ void shouldCreateConfigurationWithSubdomain(String subdomain) {
}

@ParameterizedTest
@ValueSource(strings = {"", " ", " ", " - ", "a b", "ab c1"})
@ValueSource(strings = {"", " ", " ", " - ", "a b", "ab c1", "foo-", "-foo", "ABC123", "FOO"})
void shouldCreateConfigurationWithBadSubdomain(String subdomain) {

final StaticKeysSdkCredentials credentials = Mockito.mock(StaticKeysSdkCredentials.class);
Expand All @@ -88,6 +88,28 @@ void shouldCreateConfigurationWithSubdomainForProduction() {
assertEquals("https://" + subdomain + ".access.checkout.com/connect/token", configuration.getEnvironmentSubdomain().getOAuthAuthorizationApi().toString());
}

@Test
void shouldHaveCorrectSandboxUrls() {

assertEquals(create("https://api.sandbox.checkout.com/"), Environment.SANDBOX.getCheckoutApi());
assertEquals(create("https://files.sandbox.checkout.com/"), Environment.SANDBOX.getFilesApi());
assertEquals(create("https://transfers.sandbox.checkout.com/"), Environment.SANDBOX.getTransfersApi());
assertEquals(create("https://balances.sandbox.checkout.com/"), Environment.SANDBOX.getBalancesApi());
assertEquals(create("https://forward.sandbox.checkout.com/"), Environment.SANDBOX.getForwardApi());
assertEquals(create("https://identity-verification.sandbox.checkout.com/"), Environment.SANDBOX.getIdentityApi());
}

@Test
void shouldHaveCorrectProductionUrls() {

assertEquals(create("https://api.checkout.com/"), Environment.PRODUCTION.getCheckoutApi());
assertEquals(create("https://files.checkout.com/"), Environment.PRODUCTION.getFilesApi());
assertEquals(create("https://transfers.checkout.com/"), Environment.PRODUCTION.getTransfersApi());
assertEquals(create("https://balances.checkout.com/"), Environment.PRODUCTION.getBalancesApi());
assertEquals(create("https://forward.checkout.com/"), Environment.PRODUCTION.getForwardApi());
assertEquals(create("https://identity-verification.checkout.com/"), Environment.PRODUCTION.getIdentityApi());
}

@Test
void shouldCreateConfiguration_defaultHttpClientBuilderAndExecutor() {

Expand Down Expand Up @@ -136,6 +158,8 @@ void shouldCreateConfigurationWithCustomEnvironment() {
.filesApi(create("https://the.files.uri/"))
.transfersApi(create("https://the.transfers.uri/"))
.balancesApi(create("https://the.balances.uri/"))
.forwardApi(create("https://the.forward.uri/"))
.identityApi(create("https://the.identity.uri/"))
.build();

final StaticKeysSdkCredentials credentials = Mockito.mock(StaticKeysSdkCredentials.class);
Expand All @@ -147,6 +171,8 @@ void shouldCreateConfigurationWithCustomEnvironment() {
assertEquals(environment.getFilesApi(), configuration.getEnvironment().getFilesApi());
assertEquals(environment.getTransfersApi(), configuration.getEnvironment().getTransfersApi());
assertEquals(environment.getBalancesApi(), configuration.getEnvironment().getBalancesApi());
assertEquals(environment.getForwardApi(), configuration.getEnvironment().getForwardApi());
assertEquals(environment.getIdentityApi(), configuration.getEnvironment().getIdentityApi());
}

/**
Expand Down
Loading