Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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
51 changes: 45 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,13 @@ 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);
final ApiClient identityApiClient = getIdentityClient(configuration);
this.faceAuthenticationClient = new FaceAuthenticationClientImpl(identityApiClient, configuration);
this.applicantClient = new ApplicantClientImpl(identityApiClient, configuration);
this.identityVerificationClient = new IdentityVerificationClientImpl(identityApiClient, configuration);
this.idDocumentVerificationClient = new IdDocumentVerificationClientImpl(identityApiClient, configuration);
this.amlScreeningClient = new AmlScreeningClientImpl(identityApiClient, 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 +297,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 +350,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 @@ public final class CustomEnvironment implements IEnvironment {

private URI balancesApi;

private URI forwardApi;
Comment thread
armando-rodriguez-cko marked this conversation as resolved.
Dismissed

private URI identityApi;
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 @@ public enum Environment implements IEnvironment {
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;
Comment thread
armando-rodriguez-cko marked this conversation as resolved.
Dismissed
private final URI identityApi;
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 @@ private static URI createUrlWithSubdomain(URI originalUrl, String subdomain) {
throw new CheckoutException(e);
}

Pattern pattern = Pattern.compile("^[0-9a-z]+$");
Pattern pattern = Pattern.compile("^(?:pl-)?[a-z0-9]+$");
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
3 changes: 2 additions & 1 deletion src/main/java/com/checkout/OAuthScope.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ public enum OAuthScope {
VAULT_TOKENIZATION("vault:tokenization"),
VAULT_NETWORK_TOKENS("vault:network-tokens"),
FORWARD("forward"),
FORWARD_SECRETS("forward:secrets");
FORWARD_SECRETS("forward:secrets"),
IDENTITY_VERIFICATION("identity-verification");

private final String scope;

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", "pl-abc123", "pl-loquesea", "vkuhvk4v", "pl-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", "test-123", "foo-bar", "pl-"})
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