diff --git a/js/ui/cordova/plugins/cordova-plugin-http/src/android/com/synconset/CordovaHTTP/CordovaHttp.java b/js/ui/cordova/plugins/cordova-plugin-http/src/android/com/synconset/CordovaHTTP/CordovaHttp.java new file mode 100644 index 0000000..71b4709 --- /dev/null +++ b/js/ui/cordova/plugins/cordova-plugin-http/src/android/com/synconset/CordovaHTTP/CordovaHttp.java @@ -0,0 +1,128 @@ +/** + * A HTTP plugin for Cordova / Phonegap + */ +package com.synconset; + +import org.apache.cordova.CallbackContext; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.BufferedReader; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; + +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; + +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.HostnameVerifier; + +import java.util.Iterator; + +import android.util.Log; + +import com.github.kevinsawicki.http.HttpRequest; + +public abstract class CordovaHttp { + protected static final String TAG = "CordovaHTTP"; + protected static final String CHARSET = "UTF-8"; + + private static AtomicBoolean sslPinning = new AtomicBoolean(false); + private static AtomicBoolean acceptAllCerts = new AtomicBoolean(false); + private static AtomicBoolean validateDomainName = new AtomicBoolean(true); + + private String urlString; + private Map params; + private Map headers; + private CallbackContext callbackContext; + + public CordovaHttp(String urlString, Map params, Map headers, CallbackContext callbackContext) { + this.urlString = urlString; + this.params = params; + this.headers = headers; + this.callbackContext = callbackContext; + } + + public static void enableSSLPinning(boolean enable) { + sslPinning.set(enable); + if (enable) { + acceptAllCerts.set(false); + } + } + + public static void acceptAllCerts(boolean accept) { + acceptAllCerts.set(accept); + if (accept) { + sslPinning.set(false); + } + } + + public static void validateDomainName(boolean accept) { + validateDomainName.set(accept); + } + + protected String getUrlString() { + return this.urlString; + } + + protected Map getParams() { + return this.params; + } + + protected Map getHeaders() { + return this.headers; + } + + protected CallbackContext getCallbackContext() { + return this.callbackContext; + } + + protected HttpRequest setupSecurity(HttpRequest request) { + if (acceptAllCerts.get()) { + request.trustAllCerts(); + } + if (!validateDomainName.get()) { + request.trustAllHosts(); + } + if (sslPinning.get()) { + request.pinToCerts(); + } + return request; + } + + protected void respondWithError(int status, String msg) { + try { + JSONObject response = new JSONObject(); + response.put("status", status); + response.put("error", msg); + this.callbackContext.error(response); + } catch (JSONException e) { + this.callbackContext.error(msg); + } + } + + protected void respondWithError(String msg) { + this.respondWithError(500, msg); + } + + protected void addResponseHeaders(HttpRequest request, JSONObject response) throws JSONException { + Map> headers = request.headers(); + Map parsed_headers = new HashMap(); + for (Map.Entry> entry : headers.entrySet()) { + String key = entry.getKey(); + List value = entry.getValue(); + if ((key != null) && (!value.isEmpty())) { + parsed_headers.put(key, value.get(0)); + } + } + response.put("headers", new JSONObject(parsed_headers)); + } +}