package org.rackspace.stingray.client.util;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.client.filter.LoggingFilter;
import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.client.urlconnection.HTTPSProperties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import org.rackspace.stingray.client.pool.Pool;
import javax.net.ssl.*;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
public class StingrayRestClientUtil {
private static final Log LOG = LogFactory.getLog(StingrayRestClientUtil.class);
public static class ClientHelper {
public static ClientConfig configureClient(boolean isDebugging) {
TrustManager[] certs = new TrustManager[]{
new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
}
};
SSLContext ctx = null;
try {
ctx = SSLContext.getInstance("TLS");
ctx.init(null, certs, new SecureRandom());
} catch (java.security.GeneralSecurityException ex) {
}
HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
ClientConfig config = new DefaultClientConfig();
config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
config.getClasses().add(JacksonJsonProvider.class);
try {
config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, new HTTPSProperties(
new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
},
ctx
));
} catch (Exception e) {
}
return config;
}
public static Client createClient(boolean isDebugging) {
Client client = Client.create(ClientHelper.configureClient(isDebugging));
if (isDebugging) client.addFilter(new LoggingFilter());
return client;
}
public static List<Pool> parsePools(String poolsString) {
List<Pool> pools = new ArrayList<Pool>();
String[] parsedPools = poolsString.split("[\":{}\\[\\] ]+");
for (String vals : parsedPools) {
Pool pool = new Pool();
pools.add(pool);
}
return new ArrayList<Pool>();
}
}
}