From 836a67086436baa9f6c3c02ccd025932fa6d2ba6 Mon Sep 17 00:00:00 2001 From: Xiaobin Wu Date: Thu, 20 Aug 2015 00:09:58 -0700 Subject: [PATCH 1/3] enable proxy w/ auth for Stripe http connection --- src/main/java/com/stripe/Stripe.java | 35 +++++++++++++++++++ .../stripe/net/LiveStripeResponseGetter.java | 22 +++++++++--- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/stripe/Stripe.java b/src/main/java/com/stripe/Stripe.java index 049f6befef1..56e5931246b 100644 --- a/src/main/java/com/stripe/Stripe.java +++ b/src/main/java/com/stripe/Stripe.java @@ -1,5 +1,8 @@ package com.stripe; +import java.net.PasswordAuthentication; +import java.net.Proxy; + public abstract class Stripe { public static final String UPLOAD_API_BASE = "https://uploads.stripe.com"; public static final String LIVE_API_BASE = "https://api.stripe.com"; @@ -8,6 +11,8 @@ public abstract class Stripe { public static volatile String apiVersion; private static volatile String apiBase = LIVE_API_BASE; + private static volatile Proxy connectionProxy = null; + private static volatile PasswordAuthentication proxyCredential = null; /** @@ -21,4 +26,34 @@ public static void overrideApiBase(final String overriddenApiBase) { public static String getApiBase() { return apiBase; } + + /** + * Set proxy to tunnel all Stripe connections + * + * @param proxy proxy host and port setting + */ + public static void setConnectionProxy(final Proxy proxy) { + if (proxy != null) { + connectionProxy = new Proxy(proxy.type(), proxy.address()); + } + } + + public static Proxy getConnectionProxy() { + return connectionProxy; + } + + /** + * Provide credential for proxy authorization if required + * + * @param auth proxy required userName and password + */ + public static void setProxyCredential(final PasswordAuthentication auth) { + if (auth != null) { + proxyCredential = new PasswordAuthentication(auth.getUserName(), auth.getPassword()); + } + } + + public static PasswordAuthentication getProxyCredential() { + return proxyCredential; + } } diff --git a/src/main/java/com/stripe/net/LiveStripeResponseGetter.java b/src/main/java/com/stripe/net/LiveStripeResponseGetter.java index 66dfcbc4ce1..9d290a2f862 100644 --- a/src/main/java/com/stripe/net/LiveStripeResponseGetter.java +++ b/src/main/java/com/stripe/net/LiveStripeResponseGetter.java @@ -15,11 +15,12 @@ import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.net.Authenticator; +import java.net.HttpURLConnection; import java.net.MalformedURLException; +import java.net.PasswordAuthentication; import java.net.URL; -import java.net.URLEncoder; import java.net.URLStreamHandler; -import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -118,7 +119,20 @@ private static java.net.HttpURLConnection createStripeConnection( } else { stripeURL = new URL(url); } - java.net.HttpURLConnection conn = (java.net.HttpURLConnection) stripeURL.openConnection(); + HttpURLConnection conn; + if (Stripe.getConnectionProxy() != null) { + conn = (HttpURLConnection) stripeURL.openConnection(Stripe.getConnectionProxy()); + if (Stripe.getProxyCredential() != null) { + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return Stripe.getProxyCredential(); + } + }); + } + } else { + conn = (HttpURLConnection) stripeURL.openConnection(); + } conn.setConnectTimeout(30 * 1000); conn.setReadTimeout(80 * 1000); conn.setUseCaches(false); @@ -140,7 +154,7 @@ private static String formatURL(String url, String query) { } private static java.net.HttpURLConnection createGetConnection( - String url, String query, RequestOptions options) throws IOException { + String url, String query, RequestOptions options) throws IOException { String getURL = formatURL(url, query); java.net.HttpURLConnection conn = createStripeConnection(getURL, options); conn.setRequestMethod("GET"); From 66394efda60f4d6e2b68864f14985a0868bd46a0 Mon Sep 17 00:00:00 2001 From: Xiaobin Wu Date: Thu, 20 Aug 2015 00:15:22 -0700 Subject: [PATCH 2/3] allow reset porxy and auth config by setting them to null --- src/main/java/com/stripe/Stripe.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/stripe/Stripe.java b/src/main/java/com/stripe/Stripe.java index 56e5931246b..931fb77f846 100644 --- a/src/main/java/com/stripe/Stripe.java +++ b/src/main/java/com/stripe/Stripe.java @@ -33,9 +33,7 @@ public static String getApiBase() { * @param proxy proxy host and port setting */ public static void setConnectionProxy(final Proxy proxy) { - if (proxy != null) { - connectionProxy = new Proxy(proxy.type(), proxy.address()); - } + connectionProxy = proxy == null ? null : new Proxy(proxy.type(), proxy.address()); } public static Proxy getConnectionProxy() { @@ -48,9 +46,8 @@ public static Proxy getConnectionProxy() { * @param auth proxy required userName and password */ public static void setProxyCredential(final PasswordAuthentication auth) { - if (auth != null) { - proxyCredential = new PasswordAuthentication(auth.getUserName(), auth.getPassword()); - } + proxyCredential = auth == null ? null + : new PasswordAuthentication(auth.getUserName(), auth.getPassword()); } public static PasswordAuthentication getProxyCredential() { From bcda00d4b66dad40d59c00e51dce03bb70ad65b7 Mon Sep 17 00:00:00 2001 From: Xiaobin Wu Date: Thu, 20 Aug 2015 09:42:27 -0700 Subject: [PATCH 3/3] do not need to copy Proxy and PasswordAuthentication given they are immutable --- src/main/java/com/stripe/Stripe.java | 5 ++--- .../com/stripe/net/LiveStripeResponseGetter.java | 14 ++++++-------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/stripe/Stripe.java b/src/main/java/com/stripe/Stripe.java index 931fb77f846..35e1355ef6e 100644 --- a/src/main/java/com/stripe/Stripe.java +++ b/src/main/java/com/stripe/Stripe.java @@ -33,7 +33,7 @@ public static String getApiBase() { * @param proxy proxy host and port setting */ public static void setConnectionProxy(final Proxy proxy) { - connectionProxy = proxy == null ? null : new Proxy(proxy.type(), proxy.address()); + connectionProxy = proxy; } public static Proxy getConnectionProxy() { @@ -46,8 +46,7 @@ public static Proxy getConnectionProxy() { * @param auth proxy required userName and password */ public static void setProxyCredential(final PasswordAuthentication auth) { - proxyCredential = auth == null ? null - : new PasswordAuthentication(auth.getUserName(), auth.getPassword()); + proxyCredential = auth; } public static PasswordAuthentication getProxyCredential() { diff --git a/src/main/java/com/stripe/net/LiveStripeResponseGetter.java b/src/main/java/com/stripe/net/LiveStripeResponseGetter.java index 9d290a2f862..3797732888a 100644 --- a/src/main/java/com/stripe/net/LiveStripeResponseGetter.java +++ b/src/main/java/com/stripe/net/LiveStripeResponseGetter.java @@ -122,14 +122,12 @@ private static java.net.HttpURLConnection createStripeConnection( HttpURLConnection conn; if (Stripe.getConnectionProxy() != null) { conn = (HttpURLConnection) stripeURL.openConnection(Stripe.getConnectionProxy()); - if (Stripe.getProxyCredential() != null) { - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return Stripe.getProxyCredential(); - } - }); - } + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return Stripe.getProxyCredential(); + } + }); } else { conn = (HttpURLConnection) stripeURL.openConnection(); }