diff --git a/samples/client/wordnik-api/android/pom.xml b/samples/client/wordnik-api/android/pom.xml index 674f50f0109..03fdf69754e 100644 --- a/samples/client/wordnik-api/android/pom.xml +++ b/samples/client/wordnik-api/android/pom.xml @@ -5,7 +5,7 @@ wordnik-android-client jar wordnik-android-client - 1.0.0 + 4.0 scm:git:git@github.com:wordnik/swagger-mustache.git scm:git:git@github.com:wordnik/swagger-codegen.git @@ -207,7 +207,7 @@ 1.0.0 4.8.1 1.6.1 - 4.2.3 + 4.0 3.1.5 diff --git a/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/AccountApi.java b/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/AccountApi.java index 69a503efddf..5b334fa1e4f 100644 --- a/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/AccountApi.java +++ b/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/AccountApi.java @@ -19,11 +19,11 @@ public class AccountApi { public ApiInvoker getInvoker() { return apiInvoker; } - + public void setBasePath(String basePath) { this.basePath = basePath; } - + public String getBasePath() { return basePath; } diff --git a/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordApi.java b/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordApi.java index b52be2e1e4e..003a88caf0e 100644 --- a/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordApi.java +++ b/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordApi.java @@ -26,11 +26,11 @@ public class WordApi { public ApiInvoker getInvoker() { return apiInvoker; } - + public void setBasePath(String basePath) { this.basePath = basePath; } - + public String getBasePath() { return basePath; } diff --git a/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordListApi.java b/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordListApi.java index 3afae241b72..e017c466636 100644 --- a/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordListApi.java +++ b/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordListApi.java @@ -18,11 +18,11 @@ public class WordListApi { public ApiInvoker getInvoker() { return apiInvoker; } - + public void setBasePath(String basePath) { this.basePath = basePath; } - + public String getBasePath() { return basePath; } diff --git a/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordListsApi.java b/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordListsApi.java index 1f9dae7abf5..c97ab75e597 100644 --- a/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordListsApi.java +++ b/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordListsApi.java @@ -16,11 +16,11 @@ public class WordListsApi { public ApiInvoker getInvoker() { return apiInvoker; } - + public void setBasePath(String basePath) { this.basePath = basePath; } - + public String getBasePath() { return basePath; } diff --git a/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordsApi.java b/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordsApi.java index 3674fb6ee3d..c1c8a81efa0 100644 --- a/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordsApi.java +++ b/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/api/WordsApi.java @@ -19,11 +19,11 @@ public class WordsApi { public ApiInvoker getInvoker() { return apiInvoker; } - + public void setBasePath(String basePath) { this.basePath = basePath; } - + public String getBasePath() { return basePath; } diff --git a/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/common/ApiInvoker.java b/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/common/ApiInvoker.java index 107a7aa77b8..fb2ba7f8ce5 100644 --- a/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/common/ApiInvoker.java +++ b/samples/client/wordnik-api/android/src/main/java/com/wordnik/client/common/ApiInvoker.java @@ -9,11 +9,18 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.apache.http.*; import org.apache.http.client.*; import org.apache.http.client.methods.*; +import org.apache.http.conn.*; +import org.apache.http.conn.scheme.*; +import org.apache.http.conn.ssl.*; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.*; +import org.apache.http.impl.conn.*; +import org.apache.http.params.*; import org.apache.http.util.EntityUtils; import java.io.File; +import java.net.Socket; +import java.net.UnknownHostException; import java.net.URLEncoder; import java.util.Map; @@ -22,15 +29,50 @@ import java.util.List; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.security.GeneralSecurityException; +import java.security.KeyManagementException; +import java.security.KeyStore; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.cert.*; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; + +import java.util.Date; +import java.util.Random; +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + public class ApiInvoker { private static ApiInvoker INSTANCE = new ApiInvoker(); private Map defaultHeaderMap = new HashMap(); private HttpClient client = null; + + private boolean ignoreSSLCertificates = false; + + private ClientConnectionManager ignoreSSLConnectionManager; + + public ApiInvoker() { + initConnectionManager(); + } + public static ApiInvoker getInstance() { return INSTANCE; } + public void ignoreSSLCertificates(boolean ignoreSSLCertificates) { + this.ignoreSSLCertificates = ignoreSSLCertificates; + } + public void addDefaultHeader(String key, String value) { defaultHeaderMap.put(key, value); } @@ -114,8 +156,11 @@ public class ApiInvoker { } else if ("POST".equals(method)) { HttpPost post = new HttpPost(url); - post.setHeader("Content-Type", contentType); - post.setEntity(new StringEntity(serialize(body), "UTF-8")); + + if (body != null) { + post.setHeader("Content-Type", contentType); + post.setEntity(new StringEntity(serialize(body), "UTF-8")); + } for(String key : headers.keySet()) { post.setHeader(key, headers.get(key)); } @@ -167,8 +212,61 @@ public class ApiInvoker { } private HttpClient getClient(String host) { - if(client == null) - client = new DefaultHttpClient(); + if (client == null) { + if (ignoreSSLCertificates && ignoreSSLConnectionManager != null) { + // Trust self signed certificates + client = new DefaultHttpClient(ignoreSSLConnectionManager, new BasicHttpParams()); + } else { + client = new DefaultHttpClient(); + } + } return client; } + + private void initConnectionManager() { + try { + final SSLContext sslContext = SSLContext.getInstance("SSL"); + + // set up a TrustManager that trusts everything + TrustManager[] trustManagers = new TrustManager[] { + new X509TrustManager() { + public X509Certificate[] getAcceptedIssuers() { + return null; + } + public void checkClientTrusted(X509Certificate[] certs, String authType) {} + public void checkServerTrusted(X509Certificate[] certs, String authType) {} + }}; + + sslContext.init(null, trustManagers, new SecureRandom()); + + SSLSocketFactory sf = new SSLSocketFactory((KeyStore)null) { + private javax.net.ssl.SSLSocketFactory sslFactory = sslContext.getSocketFactory(); + + public Socket createSocket(Socket socket, String host, int port, boolean autoClose) + throws IOException, UnknownHostException { + return sslFactory.createSocket(socket, host, port, autoClose); + } + + public Socket createSocket() throws IOException { + return sslFactory.createSocket(); + } + }; + + sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + Scheme httpsScheme = new Scheme("https", sf, 443); + SchemeRegistry schemeRegistry = new SchemeRegistry(); + schemeRegistry.register(httpsScheme); + schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); + + ignoreSSLConnectionManager = new SingleClientConnManager(new BasicHttpParams(), schemeRegistry); + } catch (NoSuchAlgorithmException e) { + // This will only be thrown if SSL isn't available for some reason. + } catch (KeyManagementException e) { + // This might be thrown when passing a key into init(), but no key is being passed. + } catch (GeneralSecurityException e) { + // This catches anything else that might go wrong. + // If anything goes wrong we default to the standard connection manager. + } + } } +