[
https://issues.apache.org/jira/browse/CAMEL-8272?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Julian Cable updated CAMEL-8272:
--------------------------------
Comment: was deleted
(was: {quote}
Index:
src/main/java/org/apache/camel/component/box/internal/BoxClientHelper.java
===================================================================
--- src/main/java/org/apache/camel/component/box/internal/BoxClientHelper.java
(revision 1598081)
+++ src/main/java/org/apache/camel/component/box/internal/BoxClientHelper.java
(working copy)
@@ -36,12 +36,19 @@
import org.apache.camel.component.box.BoxConfiguration;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.jsse.SSLContextParameters;
+import org.apache.http.HttpHost;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.params.HttpParams;
+import org.apache.http.protocol.HttpContext;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.Proxy;
+import javax.net.ssl.SSLContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -66,7 +73,7 @@
final String userPassword = configuration.getUserPassword();
if ((authSecureStorage == null && ObjectHelper.isEmpty(userPassword))
- || ObjectHelper.isEmpty(userName) ||
ObjectHelper.isEmpty(clientId) || ObjectHelper.isEmpty(clientSecret)) {
+ || ObjectHelper.isEmpty(userName) ||
ObjectHelper.isEmpty(clientId) || ObjectHelper.isEmpty(clientSecret)) {
throw new IllegalArgumentException(
"Missing one or more required properties "
+ "clientId, clientSecret, userName and either
authSecureStorage or userPassword");
@@ -76,13 +83,13 @@
// if set, use configured connection manager builder
final BoxConnectionManagerBuilder connectionManagerBuilder =
configuration.getConnectionManagerBuilder();
final BoxConnectionManagerBuilder connectionManager =
connectionManagerBuilder != null
- ? connectionManagerBuilder : new BoxConnectionManagerBuilder();
+ ? connectionManagerBuilder : new BoxConnectionManagerBuilder();
// create REST client for BoxClient
final ClientConnectionManager[] clientConnectionManager = new
ClientConnectionManager[1];
final IBoxRESTClient restClient = new
BoxRESTClient(connectionManager.build()) {
- @SuppressWarnings("deprecation")
- @Override
+ @SuppressWarnings("deprecation")
+ @Override
public HttpClient getRawHttpClient() {
final HttpClient httpClient = super.getRawHttpClient();
clientConnectionManager[0] = httpClient.getConnectionManager();
@@ -91,33 +98,48 @@
if (sslContextParameters == null) {
sslContextParameters = new SSLContextParameters();
}
- try {
- final SSLSocketFactory socketFactory = new
SSLSocketFactory(
- sslContextParameters.createSSLContext(),
- SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
- schemeRegistry.register(new Scheme("https", socketFactory,
443));
- } catch (GeneralSecurityException e) {
- throw ObjectHelper.wrapRuntimeCamelException(e);
- } catch (IOException e) {
- throw ObjectHelper.wrapRuntimeCamelException(e);
- }
-
- // set custom HTTP params
final Map<String, Object> configParams =
configuration.getHttpParams();
+ boolean useSocksProxy = false;
+ HttpHost proxyHost = null;
if (configParams != null && !configParams.isEmpty()) {
+ final Boolean socksProxy = (Boolean)
configParams.get("http.route.socks-proxy");
+ if(socksProxy!=null && socksProxy) {
+ useSocksProxy = true;
+ proxyHost = (HttpHost)
configParams.get(ConnRoutePNames.DEFAULT_PROXY);
+ }
+ // set custom HTTP params
LOG.debug("Setting {} HTTP Params", configParams.size());
final HttpParams httpParams = httpClient.getParams();
for (Map.Entry<String, Object> param :
configParams.entrySet()) {
- httpParams.setParameter(param.getKey(),
param.getValue());
+ // don't add proxy params if socks
+ if(!(useSocksProxy &&
(param.getKey().equals("http.route.socks-proxy") ||
param.getKey().equals(ConnRoutePNames.DEFAULT_PROXY)))) {
+ httpParams.setParameter(param.getKey(),
param.getValue());
+ }
}
+
}
+ SSLContext sslContext = null;
+ try {
+ sslContext = sslContextParameters.createSSLContext();
+ } catch (IOException e) {
+ throw ObjectHelper.wrapRuntimeCamelException(e);
+ } catch (GeneralSecurityException e) {
+ throw ObjectHelper.wrapRuntimeCamelException(e);
+ }
+ final SSLSocketFactory socketFactory = useSocksProxy?
+ new SocksSSLSocketFactory(sslContext, proxyHost)
+ :
+ new SSLSocketFactory(
+ sslContext,
+ SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
+ schemeRegistry.register(new Scheme("https", socketFactory,
443));
return httpClient;
}
};
final BoxClient boxClient = new BoxClient(clientId, clientSecret,
null, null,
- restClient, configuration.getBoxConfig());
+ restClient, configuration.getBoxConfig());
// enable OAuth auto-refresh
boxClient.setAutoRefreshOAuth(true);
@@ -135,7 +157,7 @@
}
public static void getOAuthToken(BoxConfiguration configuration,
CachedBoxClient cachedBoxClient)
- throws AuthFatalFailureException, BoxRestException,
BoxServerException, InterruptedException {
+ throws AuthFatalFailureException, BoxRestException, BoxServerException,
InterruptedException {
final BoxClient boxClient = cachedBoxClient.getBoxClient();
synchronized (boxClient) {
@@ -169,7 +191,7 @@
final Exception ex = listener.getException();
if (ex != null) {
throw new RuntimeCamelException(String.format("Login error
for %s: %s",
- cachedBoxClient, ex.getMessage()), ex);
+ cachedBoxClient,
ex.getMessage()), ex);
}
}
@@ -188,7 +210,7 @@
}
public static void shutdownBoxClient(BoxConfiguration configuration,
CachedBoxClient cachedBoxClient)
- throws BoxServerException, BoxRestException, AuthFatalFailureException
{
+ throws BoxServerException, BoxRestException, AuthFatalFailureException {
final BoxClient boxClient = cachedBoxClient.getBoxClient();
synchronized (boxClient) {
@@ -217,7 +239,7 @@
}
private static void revokeOAuthToken(BoxConfiguration configuration,
CachedBoxClient cachedBoxClient)
- throws BoxServerException, BoxRestException, AuthFatalFailureException
{
+ throws BoxServerException, BoxRestException, AuthFatalFailureException {
final BoxClient boxClient = cachedBoxClient.getBoxClient();
synchronized (boxClient) {
@@ -228,7 +250,7 @@
// revoke OAuth token
boxClient.getOAuthManager().revokeOAuth(boxClient.getAuthData().getAccessToken(),
- configuration.getClientId(),
configuration.getClientSecret());
+
configuration.getClientId(), configuration.getClientSecret());
// notify the OAuthListener of revoked token
cachedBoxClient.getListener().onRefresh(null);
@@ -237,4 +259,20 @@
}
}
}
+ static class SocksSSLSocketFactory extends SSLSocketFactory {
+ HttpHost proxyHost;
+
+ public SocksSSLSocketFactory(SSLContext sslContext, HttpHost
proxyHost) {
+ super(sslContext,
SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
+ this.proxyHost = proxyHost;
+ }
+
+ @Override
+ public Socket createSocket(final HttpContext context) throws
IOException {
+ InetSocketAddress socksaddr = new
InetSocketAddress(proxyHost.getHostName(), proxyHost.getPort());
+ Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr);
+ return new Socket(proxy);
+ }
+
+ }
}
{quote}
)
> Camel-box socks proxy implementation is incomplete
> --------------------------------------------------
>
> Key: CAMEL-8272
> URL: https://issues.apache.org/jira/browse/CAMEL-8272
> Project: Camel
> Issue Type: Bug
> Affects Versions: 2.14.1
> Environment: any
> Reporter: Julian Cable
>
> org.apache.camel.component.box.internal.LoginAuthFlowUI looks for
> http.route.socks-proxy and sets up a socks proxy for the webClient
> org.apache.camel.component.box.internal.BoxClientHelper just passes the
> httpParams on to the underlying HttpClient but the box api uses a vanilla
> DefaultHttpClient which doesn't talk SOCKS.
> The attached patch adds socks proxy support to the main restful box
> transactions.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)