From 52c728ff1bc370397cf6eae930072b6802b946c9 Mon Sep 17 00:00:00 2001 From: Braintree Date: Thu, 14 Jan 2016 22:03:47 +0000 Subject: [PATCH] 2.54.0 --- CHANGELOG.md | 4 + pom.xml | 4 +- .../braintreegateway/BraintreeGateway.java | 5 + .../com/braintreegateway/Configuration.java | 7 + .../braintreegateway/CredentialsParser.java | 10 +- ...CardVerificationBillingAddressRequest.java | 107 +++++++ ...editCardVerificationCreditCardRequest.java | 71 +++++ .../CreditCardVerificationGateway.java | 5 + .../CreditCardVerificationOptionsRequest.java | 37 +++ .../CreditCardVerificationRequest.java | 32 ++ .../com/braintreegateway/Environment.java | 16 + .../TransactionCreditCardRequest.java | 2 +- .../braintreegateway/TransactionGateway.java | 11 + .../braintreegateway/ValidationErrorCode.java | 8 + .../ssl/api_braintreegateway_com.ca.crt | 290 ++++-------------- .../CreditCardVerificationIT.java | 70 +++++ .../integrationtest/TransactionIT.java | 99 +++--- .../unittest/BraintreeGatewayTest.java | 19 ++ .../unittest/ConfigurationTest.java | 6 + .../unittest/EnvironmentTest.java | 38 +++ 20 files changed, 556 insertions(+), 285 deletions(-) create mode 100644 src/main/java/com/braintreegateway/CreditCardVerificationBillingAddressRequest.java create mode 100644 src/main/java/com/braintreegateway/CreditCardVerificationCreditCardRequest.java create mode 100644 src/main/java/com/braintreegateway/CreditCardVerificationOptionsRequest.java create mode 100644 src/main/java/com/braintreegateway/CreditCardVerificationRequest.java create mode 100644 src/test/java/com/braintreegateway/unittest/BraintreeGatewayTest.java create mode 100644 src/test/java/com/braintreegateway/unittest/EnvironmentTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 07a151df..1481e164 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.54.0 +* Add verification create API +* Add support for options in `submit_for_settlement` transaction flows + ## 2.53.0 * Include Coinbase Accounts in `Customer#getPaymentMethods` (Thanks @danmidwood) * Add VenmoAccount diff --git a/pom.xml b/pom.xml index b944e49a..aa1de026 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.braintreepayments.gateway braintree-java - 2.53.0-SNAPSHOT + 2.54.0-SNAPSHOT Java Client Library for Braintree Payments Gateway jar Braintree Gateway Java Client Library @@ -30,7 +30,7 @@ ${scmConnection} - 2.53.0 + 2.54.0 diff --git a/src/main/java/com/braintreegateway/BraintreeGateway.java b/src/main/java/com/braintreegateway/BraintreeGateway.java index 45e1c405..ba1c0e8d 100644 --- a/src/main/java/com/braintreegateway/BraintreeGateway.java +++ b/src/main/java/com/braintreegateway/BraintreeGateway.java @@ -57,6 +57,11 @@ public BraintreeGateway(Environment environment, String merchantId, String publi this.http = new Http(configuration); } + public BraintreeGateway(String environment, String merchantId, String publicKey, String privateKey) { + this.configuration = new Configuration(environment, merchantId, publicKey, privateKey); + this.http = new Http(configuration); + } + public BraintreeGateway(String clientId, String clientSecret) { this.configuration = new Configuration(clientId, clientSecret); this.http = new Http(configuration); diff --git a/src/main/java/com/braintreegateway/Configuration.java b/src/main/java/com/braintreegateway/Configuration.java index d8674c48..e90b869a 100644 --- a/src/main/java/com/braintreegateway/Configuration.java +++ b/src/main/java/com/braintreegateway/Configuration.java @@ -27,6 +27,13 @@ public Configuration(Environment environment, String merchantId, String publicKe this.privateKey = privateKey; } + public Configuration(String environment, String merchantId, String publicKey, String privateKey) { + this.environment = Environment.parseEnvironment(environment); + this.merchantId = merchantId; + this.publicKey = publicKey; + this.privateKey = privateKey; + } + public Configuration(String clientId, String clientSecret) { CredentialsParser parser = new CredentialsParser(clientId, clientSecret); this.environment = parser.environment; diff --git a/src/main/java/com/braintreegateway/CredentialsParser.java b/src/main/java/com/braintreegateway/CredentialsParser.java index 7899058a..5140c063 100644 --- a/src/main/java/com/braintreegateway/CredentialsParser.java +++ b/src/main/java/com/braintreegateway/CredentialsParser.java @@ -46,15 +46,7 @@ public CredentialsParser(String accessToken) { private Environment parseEnvironment(String credential) { String environment = credential.split("\\$")[1]; - if (environment.equals("development") || environment.equals("integration")) { - return Environment.DEVELOPMENT; - } else if (environment.equals("sandbox")) { - return Environment.SANDBOX; - } else if (environment.equals("production")) { - return Environment.PRODUCTION; - } else { - throw new IllegalArgumentException("Unknown environment: " + environment); - } + return Environment.parseEnvironment(environment); } private String parseMerchantId(String accessToken) { diff --git a/src/main/java/com/braintreegateway/CreditCardVerificationBillingAddressRequest.java b/src/main/java/com/braintreegateway/CreditCardVerificationBillingAddressRequest.java new file mode 100644 index 00000000..39ec9ab3 --- /dev/null +++ b/src/main/java/com/braintreegateway/CreditCardVerificationBillingAddressRequest.java @@ -0,0 +1,107 @@ +package com.braintreegateway; + +public class CreditCardVerificationBillingAddressRequest extends Request { + private CreditCardVerificationCreditCardRequest parent; + private String company; + private String countryCodeAlpha2; + private String countryCodeAlpha3; + private String countryCodeNumeric; + private String countryName; + private String extendedAddress; + private String firstName; + private String lastName; + private String locality; + private String postalCode; + private String region; + private String streetAddress; + + public CreditCardVerificationBillingAddressRequest(CreditCardVerificationCreditCardRequest parent) { + this.parent = parent; + } + + public CreditCardVerificationBillingAddressRequest company(String company) { + this.company = company; + return this; + } + + public CreditCardVerificationBillingAddressRequest countryCodeAlpha2(String countryCodeAlpha2) { + this.countryCodeAlpha2 = countryCodeAlpha2; + return this; + } + + public CreditCardVerificationBillingAddressRequest countryCodeAlpha3(String countryCodeAlpha3) { + this.countryCodeAlpha3 = countryCodeAlpha3; + return this; + } + + public CreditCardVerificationBillingAddressRequest countryCodeNumeric(String countryCodeNumeric) { + this.countryCodeNumeric = countryCodeNumeric; + return this; + } + + public CreditCardVerificationBillingAddressRequest countryName(String countryName) { + this.countryName = countryName; + return this; + } + + public CreditCardVerificationBillingAddressRequest extendedAddress(String extendedAddress) { + this.extendedAddress = extendedAddress; + return this; + } + + public CreditCardVerificationBillingAddressRequest firstName(String firstName) { + this.firstName = firstName; + return this; + } + + public CreditCardVerificationBillingAddressRequest lastName(String lastName) { + this.lastName = lastName; + return this; + } + + public CreditCardVerificationBillingAddressRequest locality(String locality) { + this.locality = locality; + return this; + } + + public CreditCardVerificationBillingAddressRequest postalCode(String postalCode) { + this.postalCode = postalCode; + return this; + } + + public CreditCardVerificationBillingAddressRequest region(String region) { + this.region = region; + return this; + } + + public CreditCardVerificationBillingAddressRequest streetAddress(String streetAddress) { + this.streetAddress = streetAddress; + return this; + } + + public CreditCardVerificationCreditCardRequest done() { + return parent; + } + + @Override + public String toXML() { + return buildRequest("billingAddress").toXML(); + } + + protected RequestBuilder buildRequest(String root) { + RequestBuilder builder = new RequestBuilder(root). + addElement("company", company). + addElement("countryCodeAlpha2", countryCodeAlpha2). + addElement("countryCodeAlpha3", countryCodeAlpha3). + addElement("countryCodeNumeric", countryCodeNumeric). + addElement("countryName", countryName). + addElement("extendedAddress", extendedAddress). + addElement("firstName", firstName). + addElement("lastName", lastName). + addElement("locality", locality). + addElement("postalCode", postalCode). + addElement("region", region). + addElement("streetAddress", streetAddress); + return builder; + } +} diff --git a/src/main/java/com/braintreegateway/CreditCardVerificationCreditCardRequest.java b/src/main/java/com/braintreegateway/CreditCardVerificationCreditCardRequest.java new file mode 100644 index 00000000..98002988 --- /dev/null +++ b/src/main/java/com/braintreegateway/CreditCardVerificationCreditCardRequest.java @@ -0,0 +1,71 @@ +package com.braintreegateway; + +public class CreditCardVerificationCreditCardRequest extends Request { + private CreditCardVerificationRequest parent; + private String cardholderName; + private String cvv; + private String expirationDate; + private String expirationMonth; + private String expirationYear; + private String number; + private CreditCardVerificationBillingAddressRequest billingAddress; + + public CreditCardVerificationCreditCardRequest(CreditCardVerificationRequest parent) { + this.parent = parent; + } + + public CreditCardVerificationRequest done() { + return parent; + } + + public CreditCardVerificationCreditCardRequest cardholderName(String cardholderName) { + this.cardholderName = cardholderName; + return this; + } + + public CreditCardVerificationCreditCardRequest cvv(String cvv) { + this.cvv = cvv; + return this; + } + + public CreditCardVerificationCreditCardRequest expirationDate(String expirationDate) { + this.expirationDate = expirationDate; + return this; + } + + public CreditCardVerificationCreditCardRequest expirationMonth(String expirationMonth) { + this.expirationMonth = expirationMonth; + return this; + } + + public CreditCardVerificationCreditCardRequest expirationYear(String expirationYear) { + this.expirationYear = expirationYear; + return this; + } + + public CreditCardVerificationCreditCardRequest number(String number) { + this.number = number; + return this; + } + + public CreditCardVerificationBillingAddressRequest billingAddress() { + billingAddress = new CreditCardVerificationBillingAddressRequest(this); + return billingAddress; + } + + @Override + public String toXML() { + return buildRequest("creditCard").toXML(); + } + + protected RequestBuilder buildRequest(String root) { + return new RequestBuilder(root). + addElement("cardholderName", cardholderName). + addElement("cvv", cvv). + addElement("number", number). + addElement("expirationDate", expirationDate). + addElement("expirationMonth", expirationMonth). + addElement("expirationYear", expirationYear). + addElement("billingAddress", billingAddress); + } +} diff --git a/src/main/java/com/braintreegateway/CreditCardVerificationGateway.java b/src/main/java/com/braintreegateway/CreditCardVerificationGateway.java index d65cd1f7..5b3477a2 100644 --- a/src/main/java/com/braintreegateway/CreditCardVerificationGateway.java +++ b/src/main/java/com/braintreegateway/CreditCardVerificationGateway.java @@ -39,4 +39,9 @@ public ResourceCollection search(CreditCardVerificationS NodeWrapper node = http.post(configuration.getMerchantPath() + "/verifications/advanced_search_ids", query); return new ResourceCollection(new CreditCardVerificationPager(this, query), node); } + + public Result create(CreditCardVerificationRequest request) { + NodeWrapper response = http.post(configuration.getMerchantPath() + "/verifications", request); + return new Result(response, CreditCardVerification.class); + } } diff --git a/src/main/java/com/braintreegateway/CreditCardVerificationOptionsRequest.java b/src/main/java/com/braintreegateway/CreditCardVerificationOptionsRequest.java new file mode 100644 index 00000000..61096bbb --- /dev/null +++ b/src/main/java/com/braintreegateway/CreditCardVerificationOptionsRequest.java @@ -0,0 +1,37 @@ +package com.braintreegateway; + +public class CreditCardVerificationOptionsRequest extends Request { + private CreditCardVerificationRequest parent; + private String merchantAccountId; + private String amount; + + public CreditCardVerificationOptionsRequest(CreditCardVerificationRequest parent) { + this.parent = parent; + } + + public CreditCardVerificationOptionsRequest merchantAccountId(String merchantAccountId) { + this.merchantAccountId = merchantAccountId; + return this; + } + + public CreditCardVerificationOptionsRequest amount(String amount) { + this.amount = amount; + return this; + } + + public CreditCardVerificationRequest done() { + return parent; + } + + @Override + public String toXML() { + return buildRequest("options").toXML(); + } + + protected RequestBuilder buildRequest(String root) { + RequestBuilder builder = new RequestBuilder(root). + addElement("merchantAccountId", merchantAccountId). + addElement("amount", amount); + return builder; + } +} diff --git a/src/main/java/com/braintreegateway/CreditCardVerificationRequest.java b/src/main/java/com/braintreegateway/CreditCardVerificationRequest.java new file mode 100644 index 00000000..393e4296 --- /dev/null +++ b/src/main/java/com/braintreegateway/CreditCardVerificationRequest.java @@ -0,0 +1,32 @@ +package com.braintreegateway; + +public class CreditCardVerificationRequest extends Request { + + private CreditCardVerificationCreditCardRequest creditCardRequest; + private CreditCardVerificationOptionsRequest optionsRequest; + + public CreditCardVerificationRequest() { + } + + public CreditCardVerificationCreditCardRequest creditCard() { + creditCardRequest = new CreditCardVerificationCreditCardRequest(this); + return creditCardRequest; + } + + public CreditCardVerificationOptionsRequest options() { + optionsRequest = new CreditCardVerificationOptionsRequest(this); + return optionsRequest; + } + + @Override + public String toXML() { + return buildRequest("verification").toXML(); + } + + protected RequestBuilder buildRequest(String root) { + RequestBuilder builder = new RequestBuilder(root). + addElement("creditCard", creditCardRequest). + addElement("options", optionsRequest); + return builder; + } +} diff --git a/src/main/java/com/braintreegateway/Environment.java b/src/main/java/com/braintreegateway/Environment.java index 12c02ecb..0ff918f1 100644 --- a/src/main/java/com/braintreegateway/Environment.java +++ b/src/main/java/com/braintreegateway/Environment.java @@ -28,6 +28,18 @@ public Environment(String baseURL, String authURL, String[] certificateFilenames this.environmentName = environmentName; } + public static Environment parseEnvironment(String environment) { + if (environment.equals("development") || environment.equals("integration")) { + return DEVELOPMENT; + } else if (environment.equals("sandbox")) { + return SANDBOX; + } else if (environment.equals("production")) { + return PRODUCTION; + } else { + throw new IllegalArgumentException("Unknown environment: " + environment); + } + } + private static String developmentBaseURL() { if (System.getenv().get("GATEWAY_BASE_URL") != null) { return System.getenv().get("GATEWAY_BASE_URL"); @@ -47,4 +59,8 @@ public static String developmentPort() { public String getEnvironmentName() { return this.environmentName; } + + public String toString() { + return getEnvironmentName(); + } } diff --git a/src/main/java/com/braintreegateway/TransactionCreditCardRequest.java b/src/main/java/com/braintreegateway/TransactionCreditCardRequest.java index e5654de7..22f38ae6 100644 --- a/src/main/java/com/braintreegateway/TransactionCreditCardRequest.java +++ b/src/main/java/com/braintreegateway/TransactionCreditCardRequest.java @@ -71,7 +71,7 @@ public String toQueryString(String root) { public String toQueryString() { return toQueryString("creditCard"); } - + protected RequestBuilder buildRequest(String root) { return new RequestBuilder(root). addElement("cardholderName", cardholderName). diff --git a/src/main/java/com/braintreegateway/TransactionGateway.java b/src/main/java/com/braintreegateway/TransactionGateway.java index 18368121..3b3be371 100644 --- a/src/main/java/com/braintreegateway/TransactionGateway.java +++ b/src/main/java/com/braintreegateway/TransactionGateway.java @@ -233,7 +233,18 @@ public Result voidTransaction(String id) { */ public Result submitForPartialSettlement(String id, BigDecimal amount) { TransactionRequest request = new TransactionRequest().amount(amount); + return submitForPartialSettlement(id, request); + } + + /** + * Submits a partial settlement transaction for the given id. + * @param id of the transaction to add the partial settlement transaction for. + * @param request the request. + * @return {@link Result}. + */ + public Result submitForPartialSettlement(String id, TransactionRequest request) { NodeWrapper response = http.post(configuration.getMerchantPath() + "/transactions/" + id + "/submit_for_partial_settlement", request); return new Result(response, Transaction.class); } + } diff --git a/src/main/java/com/braintreegateway/ValidationErrorCode.java b/src/main/java/com/braintreegateway/ValidationErrorCode.java index 09c8f97f..781b91be 100644 --- a/src/main/java/com/braintreegateway/ValidationErrorCode.java +++ b/src/main/java/com/braintreegateway/ValidationErrorCode.java @@ -95,6 +95,7 @@ public enum ValidationErrorCode { CREDIT_CARD_INVALID_VENMO_SDK_PAYMENT_METHOD_CODE("91727"), CREDIT_CARD_NUMBER_HAS_INVALID_LENGTH("81716"), CREDIT_CARD_NUMBER_IS_INVALID("81715"), + CREDIT_CARD_NUMBER_IS_PROHIBITED("81750"), CREDIT_CARD_NUMBER_IS_REQUIRED("81714"), CREDIT_CARD_NUMBER_LENGTH_IS_INVALID("81716"), CREDIT_CARD_NUMBER_MUST_BE_TEST_NUMBER("81717"), @@ -382,6 +383,13 @@ public enum ValidationErrorCode { TRANSACTION_CANNOT_SIMULATE_SETTLEMENT("91575"), + VERIFICATION_OPTIONS_AMOUNT_CANNOT_BE_NEGATIVE("94201"), + VERIFICATION_OPTIONS_AMOUNT_FORMAT_IS_INVALID("94202"), + VERIFICATION_OPTIONS_AMOUNT_NOT_SUPPORTED_BY_PROCESSOR("94203"), + VERIFICATION_OPTIONS_MERCHANT_ACCOUNT_ID_IS_INVALID("94204"), + VERIFICATION_OPTIONS_MERCHANT_ACCOUNT_IS_SUSPENDED("94205"), + VERIFICATION_OPTIONS_MERCHANT_ACCOUNT_IS_FORBIDDEN("94206"), + MERCHANT_ACCOUNT_CANNOT_BE_UPDATED("82674"), MERCHANT_ACCOUNT_DECLINED("82626"), MERCHANT_ACCOUNT_DECLINED_FAILED_KYC("82623"), diff --git a/src/main/resources/ssl/api_braintreegateway_com.ca.crt b/src/main/resources/ssl/api_braintreegateway_com.ca.crt index e1423180..2d90f19b 100644 --- a/src/main/resources/ssl/api_braintreegateway_com.ca.crt +++ b/src/main/resources/ssl/api_braintreegateway_com.ca.crt @@ -1,68 +1,4 @@ -----BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 -pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 -13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk -U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i -F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY -oJ2daZH9 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp -U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg -SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln -biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm -GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve -fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ -aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj -aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW -kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC -4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga -FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp @@ -91,20 +27,6 @@ WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G -CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i -2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ -2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz @@ -150,35 +72,71 @@ LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI 4uJEvlz36hz1 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy -c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD -VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 -c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 -WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG -FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq -XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL -se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb -KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd -IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 -y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt -hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc -QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 -Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV -HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ -KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ -L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr -Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo -ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY -T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz -GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m -1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV -OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH -6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX -QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW @@ -212,27 +170,6 @@ DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs -IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg -R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A -PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8 -Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL -TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL -5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7 -S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe -2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap -EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td -EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv -/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN -A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0 -abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF -I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz -4iIprn2DQKi6bA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG @@ -252,100 +189,3 @@ PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp -IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi -BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw -MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig -YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v -dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ -BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 -papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K -DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 -KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox -XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB -qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV -BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw -NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j -LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG -A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs -W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta -3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk -6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 -Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J -NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP -r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU -DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz -YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 -/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ -LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 -jVaMaA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp -IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi -BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw -MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig -YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v -dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ -BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 -papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K -DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 -KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox -XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd ------END CERTIFICATE----- diff --git a/src/test/java/com/braintreegateway/integrationtest/CreditCardVerificationIT.java b/src/test/java/com/braintreegateway/integrationtest/CreditCardVerificationIT.java index 436e7675..ad0620d3 100644 --- a/src/test/java/com/braintreegateway/integrationtest/CreditCardVerificationIT.java +++ b/src/test/java/com/braintreegateway/integrationtest/CreditCardVerificationIT.java @@ -2,6 +2,7 @@ import com.braintreegateway.*; import com.braintreegateway.testhelpers.TestHelper; +import com.braintreegateway.SandboxValues.CreditCardNumber; import com.braintreegateway.util.NodeWrapper; import com.braintreegateway.util.NodeWrapperFactory; import org.junit.Before; @@ -23,6 +24,75 @@ public void createGateway() { this.gateway = new BraintreeGateway(Environment.DEVELOPMENT, "integration_merchant_id", "integration_public_key", "integration_private_key"); } + @Test + public void createVerification() { + CreditCardVerificationRequest request = new CreditCardVerificationRequest(). + creditCard(). + number(CreditCardNumber.VISA.number). + expirationDate("05/2009"). + cvv("123"). + billingAddress(). + company("Braintree"). + countryCodeAlpha2("US"). + countryCodeAlpha3("USA"). + countryCodeNumeric("840"). + countryName("United States of America"). + extendedAddress("Unit B"). + firstName("John"). + lastName("Smith"). + locality("San Francisco"). + postalCode("60606"). + region("CA"). + streetAddress("123 Townsend St"). + done(). + done(). + options(). + amount("5.00"). + done(); + + Result result = gateway.creditCardVerification().create(request); + assertTrue(result.isSuccess()); + CreditCardVerification verification = result.getTarget(); + assertEquals(verification.getBillingAddress().getPostalCode(), "60606"); + } + + @Test + public void createVerificationFailsForInvalidOptions() { + CreditCardVerificationRequest request = new CreditCardVerificationRequest(). + creditCard(). + number(CreditCardNumber.VISA.number). + expirationDate("05/2009"). + cvv("123"). + billingAddress(). + company("Braintree"). + countryCodeAlpha2("US"). + countryCodeAlpha3("USA"). + countryCodeNumeric("840"). + countryName("United States of America"). + extendedAddress("Unit B"). + firstName("John"). + lastName("Smith"). + locality("San Francisco"). + postalCode("60606"). + region("CA"). + streetAddress("123 Townsend St"). + done(). + done(). + options(). + amount("-5.00"). + done(); + + Result result = gateway.creditCardVerification().create(request); + assertFalse(result.isSuccess()); + assertEquals(ValidationErrorCode.VERIFICATION_OPTIONS_AMOUNT_CANNOT_BE_NEGATIVE, + result.getErrors(). + forObject("verification"). + forObject("options"). + onField("amount"). + get(0). + getCode()); + } + @Test public void constructFromResponse() { StringBuilder builder = new StringBuilder(); diff --git a/src/test/java/com/braintreegateway/integrationtest/TransactionIT.java b/src/test/java/com/braintreegateway/integrationtest/TransactionIT.java index 10a460d4..0246d7d4 100644 --- a/src/test/java/com/braintreegateway/integrationtest/TransactionIT.java +++ b/src/test/java/com/braintreegateway/integrationtest/TransactionIT.java @@ -2003,54 +2003,6 @@ public void submitForSettlementWithDescriptors() { assertEquals("ebay.com", result.getTarget().getDescriptor().getUrl()); } - @Test - public void submitForSettlementWithOrderIdOnUnsupportedProcessor() { - TransactionRequest request = new TransactionRequest(). - merchantAccountId(FAKE_AMEX_DIRECT_MERCHANT_ACCOUNT_ID). - amount(new BigDecimal("100.00")). - creditCard(). - number(CreditCardNumber.AmexPayWithPoints.SUCCESS.number). - expirationDate("12/2020"). - done(); - - Transaction transaction = gateway.transaction().sale(request).getTarget(); - - TransactionRequest submitForSettlementRequest = new TransactionRequest(). - orderId("1234"); - - Result result = gateway.transaction().submitForSettlement(transaction.getId(), submitForSettlementRequest); - - assertFalse(result.isSuccess()); - assertEquals(ValidationErrorCode.TRANSACTION_PROCESSOR_DOES_NOT_SUPPORT_UPDATING_ORDER_ID, - result.getErrors().forObject("transaction").onField("base").get(0).getCode()); - } - - @Test - public void submitForSettlementWithDescriptorsOnUnsupportedProcessor() { - TransactionRequest request = new TransactionRequest(). - merchantAccountId(FAKE_AMEX_DIRECT_MERCHANT_ACCOUNT_ID). - amount(new BigDecimal("100.00")). - creditCard(). - number(CreditCardNumber.AmexPayWithPoints.SUCCESS.number). - expirationDate("12/2020"). - done(); - - Transaction transaction = gateway.transaction().sale(request).getTarget(); - - TransactionRequest submitForSettlementRequest = new TransactionRequest(). - descriptor(). - name("123*123456789012345678"). - phone("3334445555"). - url("ebay.com"). - done(); - - Result result = gateway.transaction().submitForSettlement(transaction.getId(), submitForSettlementRequest); - - assertFalse(result.isSuccess()); - assertEquals(ValidationErrorCode.TRANSACTION_PROCESSOR_DOES_NOT_SUPPORT_UPDATING_DESCRIPTOR, - result.getErrors().forObject("transaction").onField("base").get(0).getCode()); - } - @Test public void submitForSettlementWithBadStatus() { TransactionRequest request = new TransactionRequest(). @@ -4299,6 +4251,57 @@ public void successfulPartialSettlementSale() assertEquals(2, refreshedAuthorizedTransaction.getPartialSettlementTransactionIds().size()); } + @Test + public void submitForPartialSettlementWithOrderId() { + TransactionRequest request = new TransactionRequest(). + amount(TransactionAmount.AUTHORIZE.amount). + creditCard(). + number(CreditCardNumber.VISA.number). + expirationDate("05/2008"). + done(); + Transaction transaction = gateway.transaction().sale(request).getTarget(); + + BigDecimal amount = new BigDecimal("400.00"); + TransactionRequest submitForPartialSettlementRequest = new TransactionRequest(). + amount(amount). + orderId("1234"); + + Result result = gateway.transaction().submitForPartialSettlement(transaction.getId(), submitForPartialSettlementRequest); + + assertTrue(result.isSuccess()); + assertEquals(Transaction.Status.SUBMITTED_FOR_SETTLEMENT, result.getTarget().getStatus()); + assertEquals("1234", result.getTarget().getOrderId()); + } + + @Test + public void submitForPartialSettlementWithDescriptors() + { + TransactionRequest request = new TransactionRequest(). + amount(TransactionAmount.AUTHORIZE.amount). + creditCard(). + number(CreditCardNumber.VISA.number). + expirationDate("05/2008"). + done(); + Transaction authorizedTransaction = gateway.transaction().sale(request).getTarget(); + + BigDecimal amount = new BigDecimal("400.00"); + TransactionRequest submitForPartialSettlementRequest = new TransactionRequest(). + amount(amount). + descriptor(). + name("123*123456789012345678"). + phone("3334445555"). + url("ebay.com"). + done(); + + Result result = gateway.transaction().submitForPartialSettlement(authorizedTransaction.getId(), submitForPartialSettlementRequest); + + assertTrue(result.isSuccess()); + assertEquals(Transaction.Status.SUBMITTED_FOR_SETTLEMENT, result.getTarget().getStatus()); + assertEquals("123*123456789012345678", result.getTarget().getDescriptor().getName()); + assertEquals("3334445555", result.getTarget().getDescriptor().getPhone()); + assertEquals("ebay.com", result.getTarget().getDescriptor().getUrl()); + } + @Test public void cannotCreatePartialSettlementTransactionsOnPartialSettlementTransactions() { TransactionRequest request = new TransactionRequest(). diff --git a/src/test/java/com/braintreegateway/unittest/BraintreeGatewayTest.java b/src/test/java/com/braintreegateway/unittest/BraintreeGatewayTest.java new file mode 100644 index 00000000..89f92347 --- /dev/null +++ b/src/test/java/com/braintreegateway/unittest/BraintreeGatewayTest.java @@ -0,0 +1,19 @@ +package com.braintreegateway.unittest; + +import com.braintreegateway.*; +import com.braintreegateway.testhelpers.TestHelper; +import org.junit.Before; +import org.junit.Test; + +import java.util.*; + +import static org.junit.Assert.*; + +public class BraintreeGatewayTest { + + @Test + public void testStringEnvironmentConstructor() { + BraintreeGateway gateway = new BraintreeGateway("development", "merchant_id", "public_key", "private_key"); + assertEquals(Environment.DEVELOPMENT, gateway.getConfiguration().getEnvironment()); + } +} diff --git a/src/test/java/com/braintreegateway/unittest/ConfigurationTest.java b/src/test/java/com/braintreegateway/unittest/ConfigurationTest.java index 8c3b5381..96acf8e7 100644 --- a/src/test/java/com/braintreegateway/unittest/ConfigurationTest.java +++ b/src/test/java/com/braintreegateway/unittest/ConfigurationTest.java @@ -12,6 +12,12 @@ public class ConfigurationTest { + @Test + public void testStringEnvironmentConstructor() { + Configuration configuration = new Configuration("development", "merchant_id", "public_key", "private_key"); + assertEquals(Environment.DEVELOPMENT, configuration.getEnvironment()); + } + @Test public void configurationUsesNoProxyIfNotSpecified() { Configuration configuration = new Configuration(Environment.DEVELOPMENT, "merchant_id", "integration_public_key", "integration_private_key"); diff --git a/src/test/java/com/braintreegateway/unittest/EnvironmentTest.java b/src/test/java/com/braintreegateway/unittest/EnvironmentTest.java new file mode 100644 index 00000000..e0b9ce2d --- /dev/null +++ b/src/test/java/com/braintreegateway/unittest/EnvironmentTest.java @@ -0,0 +1,38 @@ +package com.braintreegateway.unittest; + +import com.braintreegateway.*; +import com.braintreegateway.testhelpers.TestHelper; +import org.junit.Before; +import org.junit.Test; + +import java.util.*; + +import static org.junit.Assert.*; + +public class EnvironmentTest { + + @Test + public void testParseEnvironmentReturnsDevelopment() { + assertEquals(Environment.DEVELOPMENT, Environment.parseEnvironment("development")); + } + + @Test + public void testParseEnvironmentReturnsDevelopmentForIntegration() { + assertEquals(Environment.DEVELOPMENT, Environment.parseEnvironment("integration")); + } + + @Test + public void testParseEnvironmentReturnsSandbox() { + assertEquals(Environment.SANDBOX, Environment.parseEnvironment("sandbox")); + } + + @Test + public void testParseEnvironmentReturnsProduction() { + assertEquals(Environment.PRODUCTION, Environment.parseEnvironment("production")); + } + + @Test(expected=IllegalArgumentException.class) + public void testParseEnvironmentThrowsError() { + Environment.parseEnvironment("Development_2"); + } +}