diff --git a/plugin.xml b/plugin.xml index 0eb7c5f..609f08d 100644 --- a/plugin.xml +++ b/plugin.xml @@ -62,7 +62,7 @@ - + @@ -70,14 +70,14 @@ - - - - - - - - - + + + + + + + + + diff --git a/src/android/com/synconset/CordovaHTTP/HttpRequest.java b/src/android/com/github/kevinsawicki/http/HttpRequest.java similarity index 99% rename from src/android/com/synconset/CordovaHTTP/HttpRequest.java rename to src/android/com/github/kevinsawicki/http/HttpRequest.java index 8016504..ab63820 100644 --- a/src/android/com/synconset/CordovaHTTP/HttpRequest.java +++ b/src/android/com/github/kevinsawicki/http/HttpRequest.java @@ -259,11 +259,11 @@ public class HttpRequest { private static final String CRLF = "\r\n"; private static final String[] EMPTY_STRINGS = new String[0]; - + private static SSLSocketFactory PINNED_FACTORY; private static SSLSocketFactory TRUSTED_FACTORY; - + private static ArrayList PINNED_CERTS; private static HostnameVerifier TRUSTED_VERIFIER; @@ -274,7 +274,7 @@ public class HttpRequest { else return CHARSET_UTF8; } - + private static SSLSocketFactory getPinnedFactory() throws HttpRequestException { if (PINNED_FACTORY != null) { @@ -305,7 +305,7 @@ public class HttpRequest { try { SSLContext context = SSLContext.getInstance("TLS"); context.init(null, trustAllCerts, new SecureRandom()); - + if (android.os.Build.VERSION.SDK_INT < 20) { TRUSTED_FACTORY = new TLSSocketFactory(context); } else { @@ -429,8 +429,8 @@ public class HttpRequest { else CONNECTION_FACTORY = connectionFactory; } - - + + /** * Add a certificate to test against when using ssl pinning. * @@ -447,27 +447,27 @@ public class HttpRequest { String keyStoreType = KeyStore.getDefaultType(); KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(null, null); - + for (int i = 0; i < PINNED_CERTS.size(); i++) { keyStore.setCertificateEntry("CA" + i, PINNED_CERTS.get(i)); } - + // Create a TrustManager that trusts the CAs in our KeyStore String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(keyStore); - + // Create an SSLContext that uses our TrustManager SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, tmf.getTrustManagers(), null); - + if (android.os.Build.VERSION.SDK_INT < 20) { PINNED_FACTORY = new TLSSocketFactory(sslContext); } else { PINNED_FACTORY = sslContext.getSocketFactory(); } } - + /** * Add a certificate to test against when using ssl pinning. * @@ -3256,7 +3256,7 @@ public class HttpRequest { form(entry, charset); return this; } - + /** * Configure HTTPS connection to trust only certain certificates *

@@ -3275,7 +3275,7 @@ public class HttpRequest { } return this; } - + /** * Configure HTTPS connection to trust all certificates *

diff --git a/src/android/com/synconset/CordovaHTTP/TLSSocketFactory.java b/src/android/com/github/kevinsawicki/http/TLSSocketFactory.java similarity index 95% rename from src/android/com/synconset/CordovaHTTP/TLSSocketFactory.java rename to src/android/com/github/kevinsawicki/http/TLSSocketFactory.java index 8d3170f..e39df61 100644 --- a/src/android/com/synconset/CordovaHTTP/TLSSocketFactory.java +++ b/src/android/com/github/kevinsawicki/http/TLSSocketFactory.java @@ -4,8 +4,6 @@ import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocket; @@ -60,4 +58,4 @@ public class TLSSocketFactory extends SSLSocketFactory { } return socket; } -} \ No newline at end of file +} diff --git a/src/android/com/synconset/CordovaHTTP/CordovaHttp.java b/src/android/com/synconset/cordovahttp/CordovaHttp.java similarity index 61% rename from src/android/com/synconset/CordovaHTTP/CordovaHttp.java rename to src/android/com/synconset/cordovahttp/CordovaHttp.java index 71b4709..0303f51 100644 --- a/src/android/com/synconset/CordovaHTTP/CordovaHttp.java +++ b/src/android/com/synconset/cordovahttp/CordovaHttp.java @@ -1,63 +1,58 @@ /** * A HTTP plugin for Cordova / Phonegap */ -package com.synconset; +package com.synconset.cordovahttp; 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 { + +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 JSONObject params; + private String serializerName; + private JSONObject headers; private CallbackContext callbackContext; - - public CordovaHttp(String urlString, Map params, Map headers, CallbackContext callbackContext) { + + public CordovaHttp(String urlString, JSONObject params, JSONObject headers, CallbackContext callbackContext) { this.urlString = urlString; this.params = params; + this.serializerName = "default"; this.headers = headers; this.callbackContext = callbackContext; } - + + public CordovaHttp(String urlString, JSONObject params, String serializerName, JSONObject headers, CallbackContext callbackContext) { + this.urlString = urlString; + this.params = params; + this.serializerName = serializerName; + 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) { @@ -72,19 +67,31 @@ public abstract class CordovaHttp { protected String getUrlString() { return this.urlString; } - - protected Map getParams() { + + protected JSONObject getParamsObject() { return this.params; } - - protected Map getHeaders() { + + protected String getSerializerName() { + return this.serializerName; + } + + protected HashMap getParamsMap() throws JSONException { + return this.getMapFromJSONObject(this.params); + } + + protected JSONObject getHeadersObject() { return this.headers; } - + + protected HashMap getHeadersMap() throws JSONException { + return this.getStringMapFromJSONObject(this.headers); + } + protected CallbackContext getCallbackContext() { return this.callbackContext; } - + protected HttpRequest setupSecurity(HttpRequest request) { if (acceptAllCerts.get()) { request.trustAllCerts(); @@ -97,7 +104,7 @@ public abstract class CordovaHttp { } return request; } - + protected void respondWithError(int status, String msg) { try { JSONObject response = new JSONObject(); @@ -108,7 +115,7 @@ public abstract class CordovaHttp { this.callbackContext.error(msg); } } - + protected void respondWithError(String msg) { this.respondWithError(500, msg); } @@ -125,4 +132,26 @@ public abstract class CordovaHttp { } response.put("headers", new JSONObject(parsed_headers)); } + + protected HashMap getStringMapFromJSONObject(JSONObject object) throws JSONException { + HashMap map = new HashMap(); + Iterator i = object.keys(); + + while (i.hasNext()) { + String key = (String)i.next(); + map.put(key, object.getString(key)); + } + return map; + } + + protected HashMap getMapFromJSONObject(JSONObject object) throws JSONException { + HashMap map = new HashMap(); + Iterator i = object.keys(); + + while(i.hasNext()) { + String key = (String)i.next(); + map.put(key, object.get(key)); + } + return map; + } } diff --git a/src/android/com/synconset/CordovaHTTP/CordovaHttpDownload.java b/src/android/com/synconset/cordovahttp/CordovaHttpDownload.java similarity index 84% rename from src/android/com/synconset/CordovaHTTP/CordovaHttpDownload.java rename to src/android/com/synconset/cordovahttp/CordovaHttpDownload.java index cd0a9d5..b5c213c 100644 --- a/src/android/com/synconset/CordovaHTTP/CordovaHttpDownload.java +++ b/src/android/com/synconset/cordovahttp/CordovaHttpDownload.java @@ -1,9 +1,7 @@ /** * A HTTP plugin for Cordova / Phonegap */ -package com.synconset; - -import android.util.Log; +package com.synconset.cordovahttp; import com.github.kevinsawicki.http.HttpRequest; import com.github.kevinsawicki.http.HttpRequest.HttpRequestException; @@ -12,7 +10,6 @@ import java.io.File; import java.net.UnknownHostException; import java.net.URI; import java.net.URISyntaxException; -import java.util.Map; import javax.net.ssl.SSLHandshakeException; @@ -22,23 +19,23 @@ import org.apache.cordova.file.FileUtils; import org.json.JSONException; import org.json.JSONObject; -public class CordovaHttpDownload extends CordovaHttp implements Runnable { +class CordovaHttpDownload extends CordovaHttp implements Runnable { private String filePath; - - public CordovaHttpDownload(String urlString, Map params, Map headers, CallbackContext callbackContext, String filePath) { + + public CordovaHttpDownload(String urlString, JSONObject params, JSONObject headers, CallbackContext callbackContext, String filePath) { super(urlString, params, headers, callbackContext); this.filePath = filePath; } - + @Override public void run() { try { - HttpRequest request = HttpRequest.get(this.getUrlString(), this.getParams(), true); + HttpRequest request = HttpRequest.get(this.getUrlString(), this.getParamsMap(), true); this.setupSecurity(request); request.acceptCharset(CHARSET); - request.headers(this.getHeaders()); + request.headers(this.getHeadersMap()); int code = request.code(); - + JSONObject response = new JSONObject(); this.addResponseHeaders(request, response); response.put("status", code); diff --git a/src/android/com/synconset/CordovaHTTP/CordovaHttpPost.java b/src/android/com/synconset/cordovahttp/CordovaHttpGet.java similarity index 76% rename from src/android/com/synconset/CordovaHTTP/CordovaHttpPost.java rename to src/android/com/synconset/cordovahttp/CordovaHttpGet.java index 2b8e227..dc10242 100644 --- a/src/android/com/synconset/CordovaHTTP/CordovaHttpPost.java +++ b/src/android/com/synconset/cordovahttp/CordovaHttpGet.java @@ -1,40 +1,41 @@ /** * A HTTP plugin for Cordova / Phonegap */ -package com.synconset; +package com.synconset.cordovahttp; import java.net.UnknownHostException; -import java.util.Map; - -import org.apache.cordova.CallbackContext; -import org.json.JSONException; -import org.json.JSONObject; import javax.net.ssl.SSLHandshakeException; -import android.util.Log; +import org.apache.cordova.CallbackContext; + +import org.json.JSONException; +import org.json.JSONObject; import com.github.kevinsawicki.http.HttpRequest; import com.github.kevinsawicki.http.HttpRequest.HttpRequestException; - -public class CordovaHttpPost extends CordovaHttp implements Runnable { - public CordovaHttpPost(String urlString, Map params, Map headers, CallbackContext callbackContext) { + +class CordovaHttpGet extends CordovaHttp implements Runnable { + public CordovaHttpGet(String urlString, JSONObject params, JSONObject headers, CallbackContext callbackContext) { super(urlString, params, headers, callbackContext); } - + @Override public void run() { try { - HttpRequest request = HttpRequest.post(this.getUrlString()); + HttpRequest request = HttpRequest.get(this.getUrlString(), this.getParamsMap(), false); + this.setupSecurity(request); request.acceptCharset(CHARSET); - request.headers(this.getHeaders()); - request.form(this.getParams()); + request.headers(this.getHeadersMap()); + int code = request.code(); String body = request.body(CHARSET); JSONObject response = new JSONObject(); + this.addResponseHeaders(request, response); response.put("status", code); + if (code >= 200 && code < 300) { response.put("data", body); this.getCallbackContext().success(response); @@ -44,7 +45,7 @@ public class CordovaHttpPost extends CordovaHttp implements Runnable { } } catch (JSONException e) { this.respondWithError("There was an error generating the response"); - } catch (HttpRequestException e) { + } catch (HttpRequestException e) { if (e.getCause() instanceof UnknownHostException) { this.respondWithError(0, "The host could not be resolved"); } else if (e.getCause() instanceof SSLHandshakeException) { diff --git a/src/android/com/synconset/CordovaHTTP/CordovaHttpHead.java b/src/android/com/synconset/cordovahttp/CordovaHttpHead.java similarity index 74% rename from src/android/com/synconset/CordovaHTTP/CordovaHttpHead.java rename to src/android/com/synconset/cordovahttp/CordovaHttpHead.java index 9be50b7..bafa3b5 100644 --- a/src/android/com/synconset/CordovaHTTP/CordovaHttpHead.java +++ b/src/android/com/synconset/cordovahttp/CordovaHttpHead.java @@ -1,18 +1,9 @@ /** * A HTTP plugin for Cordova / Phonegap */ -package com.synconset; +package com.synconset.cordovahttp; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; import java.net.UnknownHostException; -import java.util.Map; - -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLHandshakeException; @@ -20,27 +11,29 @@ import org.apache.cordova.CallbackContext; import org.json.JSONException; import org.json.JSONObject; -import android.util.Log; - import com.github.kevinsawicki.http.HttpRequest; import com.github.kevinsawicki.http.HttpRequest.HttpRequestException; - -public class CordovaHttpHead extends CordovaHttp implements Runnable { - public CordovaHttpHead(String urlString, Map params, Map headers, CallbackContext callbackContext) { + +class CordovaHttpHead extends CordovaHttp implements Runnable { + public CordovaHttpHead(String urlString, JSONObject params, JSONObject headers, CallbackContext callbackContext) { super(urlString, params, headers, callbackContext); } - + @Override public void run() { try { - HttpRequest request = HttpRequest.head(this.getUrlString(), this.getParams(), true); + HttpRequest request = HttpRequest.head(this.getUrlString(), this.getParamsMap(), true); + this.setupSecurity(request); request.acceptCharset(CHARSET); - request.headers(this.getHeaders()); + request.headers(this.getHeadersMap()); + int code = request.code(); JSONObject response = new JSONObject(); + this.addResponseHeaders(request, response); response.put("status", code); + if (code >= 200 && code < 300) { // no 'body' to return for HEAD request this.getCallbackContext().success(response); @@ -61,4 +54,4 @@ public class CordovaHttpHead extends CordovaHttp implements Runnable { } } } -} \ No newline at end of file +} diff --git a/src/android/com/synconset/CordovaHTTP/CordovaHttpPlugin.java b/src/android/com/synconset/cordovahttp/CordovaHttpPlugin.java similarity index 67% rename from src/android/com/synconset/CordovaHTTP/CordovaHttpPlugin.java rename to src/android/com/synconset/cordovahttp/CordovaHttpPlugin.java index 7efcae9..c39693e 100644 --- a/src/android/com/synconset/CordovaHTTP/CordovaHttpPlugin.java +++ b/src/android/com/synconset/cordovahttp/CordovaHttpPlugin.java @@ -1,39 +1,26 @@ /** * A HTTP plugin for Cordova / Phonegap */ -package com.synconset; +package com.synconset.cordovahttp; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; -import java.net.HttpURLConnection; -import java.security.GeneralSecurityException; -import java.security.KeyStore; -import java.security.cert.Certificate; -import java.security.cert.CertificateException; -import java.security.cert.CertificateFactory; -import java.security.cert.X509Certificate; -import java.util.Iterator; -import java.util.ArrayList; -import java.util.HashMap; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManagerFactory; -import javax.net.ssl.TrustManager; -import javax.net.ssl.HostnameVerifier; +import java.security.GeneralSecurityException; + +import java.util.ArrayList; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaInterface; import org.apache.cordova.CordovaPlugin; import org.apache.cordova.CordovaWebView; + import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.content.res.AssetManager; -import android.util.Base64; -import android.util.Log; import com.github.kevinsawicki.http.HttpRequest; @@ -51,25 +38,23 @@ public class CordovaHttpPlugin extends CordovaPlugin { String urlString = args.getString(0); JSONObject params = args.getJSONObject(1); JSONObject headers = args.getJSONObject(2); - HashMap paramsMap = this.getMapFromJSONObject(params); - HashMap headersMap = this.getStringMapFromJSONObject(headers); - CordovaHttpGet get = new CordovaHttpGet(urlString, paramsMap, headersMap, callbackContext); + CordovaHttpGet get = new CordovaHttpGet(urlString, params, headers, callbackContext); + cordova.getThreadPool().execute(get); } else if (action.equals("head")) { String urlString = args.getString(0); JSONObject params = args.getJSONObject(1); JSONObject headers = args.getJSONObject(2); - HashMap paramsMap = this.getMapFromJSONObject(params); - HashMap headersMap = this.getStringMapFromJSONObject(headers); - CordovaHttpHead head = new CordovaHttpHead(urlString, paramsMap, headersMap, callbackContext); + CordovaHttpHead head = new CordovaHttpHead(urlString, params, headers, callbackContext); + cordova.getThreadPool().execute(head); } else if (action.equals("post")) { String urlString = args.getString(0); JSONObject params = args.getJSONObject(1); - JSONObject headers = args.getJSONObject(2); - HashMap paramsMap = this.getMapFromJSONObject(params); - HashMap headersMap = this.getStringMapFromJSONObject(headers); - CordovaHttpPost post = new CordovaHttpPost(urlString, paramsMap, headersMap, callbackContext); + String serializerName = args.getString(2); + JSONObject headers = args.getJSONObject(3); + CordovaHttpPost post = new CordovaHttpPost(urlString, params, serializerName, headers, callbackContext); + cordova.getThreadPool().execute(post); } else if (action.equals("enableSSLPinning")) { try { @@ -82,30 +67,30 @@ public class CordovaHttpPlugin extends CordovaPlugin { } } else if (action.equals("acceptAllCerts")) { boolean accept = args.getBoolean(0); + CordovaHttp.acceptAllCerts(accept); callbackContext.success(); } else if (action.equals("validateDomainName")) { boolean accept = args.getBoolean(0); + CordovaHttp.validateDomainName(accept); callbackContext.success(); } else if (action.equals("uploadFile")) { String urlString = args.getString(0); JSONObject params = args.getJSONObject(1); JSONObject headers = args.getJSONObject(2); - HashMap paramsMap = this.getMapFromJSONObject(params); - HashMap headersMap = this.getStringMapFromJSONObject(headers); String filePath = args.getString(3); String name = args.getString(4); - CordovaHttpUpload upload = new CordovaHttpUpload(urlString, paramsMap, headersMap, callbackContext, filePath, name); + CordovaHttpUpload upload = new CordovaHttpUpload(urlString, params, headers, callbackContext, filePath, name); + cordova.getThreadPool().execute(upload); } else if (action.equals("downloadFile")) { String urlString = args.getString(0); JSONObject params = args.getJSONObject(1); JSONObject headers = args.getJSONObject(2); - HashMap paramsMap = this.getMapFromJSONObject(params); - HashMap headersMap = this.getStringMapFromJSONObject(headers); String filePath = args.getString(3); - CordovaHttpDownload download = new CordovaHttpDownload(urlString, paramsMap, headersMap, callbackContext, filePath); + CordovaHttpDownload download = new CordovaHttpDownload(urlString, params, headers, callbackContext, filePath); + cordova.getThreadPool().execute(download); } else { return false; @@ -149,26 +134,4 @@ public class CordovaHttpPlugin extends CordovaPlugin { CordovaHttp.enableSSLPinning(false); } } - - private HashMap getStringMapFromJSONObject(JSONObject object) throws JSONException { - HashMap map = new HashMap(); - Iterator i = object.keys(); - - while (i.hasNext()) { - String key = (String)i.next(); - map.put(key, object.getString(key)); - } - return map; - } - - private HashMap getMapFromJSONObject(JSONObject object) throws JSONException { - HashMap map = new HashMap(); - Iterator i = object.keys(); - - while(i.hasNext()) { - String key = (String)i.next(); - map.put(key, object.get(key)); - } - return map; - } } diff --git a/src/android/com/synconset/CordovaHTTP/CordovaHttpGet.java b/src/android/com/synconset/cordovahttp/CordovaHttpPost.java similarity index 65% rename from src/android/com/synconset/CordovaHTTP/CordovaHttpGet.java rename to src/android/com/synconset/cordovahttp/CordovaHttpPost.java index 32ec56a..af9c25a 100644 --- a/src/android/com/synconset/CordovaHTTP/CordovaHttpGet.java +++ b/src/android/com/synconset/cordovahttp/CordovaHttpPost.java @@ -1,47 +1,47 @@ /** * A HTTP plugin for Cordova / Phonegap */ -package com.synconset; +package com.synconset.cordovahttp; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; import java.net.UnknownHostException; -import java.util.Map; - -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.HostnameVerifier; - -import javax.net.ssl.SSLHandshakeException; import org.apache.cordova.CallbackContext; import org.json.JSONException; import org.json.JSONObject; -import android.util.Log; +import javax.net.ssl.SSLHandshakeException; import com.github.kevinsawicki.http.HttpRequest; import com.github.kevinsawicki.http.HttpRequest.HttpRequestException; - -public class CordovaHttpGet extends CordovaHttp implements Runnable { - public CordovaHttpGet(String urlString, Map params, Map headers, CallbackContext callbackContext) { - super(urlString, params, headers, callbackContext); + +class CordovaHttpPost extends CordovaHttp implements Runnable { + public CordovaHttpPost(String urlString, JSONObject params, String serializerName, JSONObject headers, CallbackContext callbackContext) { + super(urlString, params, serializerName, headers, callbackContext); } - + @Override public void run() { try { - HttpRequest request = HttpRequest.get(this.getUrlString(), this.getParams(), false); + HttpRequest request = HttpRequest.post(this.getUrlString()); + this.setupSecurity(request); request.acceptCharset(CHARSET); - request.headers(this.getHeaders()); + request.headers(this.getHeadersMap()); + + if (new String("json").equals(this.getSerializerName())) { + request.contentType(request.CONTENT_TYPE_JSON, request.CHARSET_UTF8); + request.send(this.getParamsObject().toString()); + } else { + request.form(this.getParamsMap()); + } + int code = request.code(); String body = request.body(CHARSET); JSONObject response = new JSONObject(); + this.addResponseHeaders(request, response); response.put("status", code); + if (code >= 200 && code < 300) { response.put("data", body); this.getCallbackContext().success(response); @@ -51,7 +51,7 @@ public class CordovaHttpGet extends CordovaHttp implements Runnable { } } catch (JSONException e) { this.respondWithError("There was an error generating the response"); - } catch (HttpRequestException e) { + } catch (HttpRequestException e) { if (e.getCause() instanceof UnknownHostException) { this.respondWithError(0, "The host could not be resolved"); } else if (e.getCause() instanceof SSLHandshakeException) { @@ -61,4 +61,4 @@ public class CordovaHttpGet extends CordovaHttp implements Runnable { } } } -} \ No newline at end of file +} diff --git a/src/android/com/synconset/CordovaHTTP/CordovaHttpUpload.java b/src/android/com/synconset/cordovahttp/CordovaHttpUpload.java similarity index 81% rename from src/android/com/synconset/CordovaHTTP/CordovaHttpUpload.java rename to src/android/com/synconset/cordovahttp/CordovaHttpUpload.java index 2e89558..1ad144e 100644 --- a/src/android/com/synconset/CordovaHTTP/CordovaHttpUpload.java +++ b/src/android/com/synconset/cordovahttp/CordovaHttpUpload.java @@ -1,57 +1,65 @@ /** * A HTTP plugin for Cordova / Phonegap */ -package com.synconset; +package com.synconset.cordovahttp; import java.io.File; + import java.net.UnknownHostException; import java.net.URI; import java.net.URISyntaxException; + import java.util.Iterator; -import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.apache.cordova.CallbackContext; + import org.json.JSONException; import org.json.JSONObject; import javax.net.ssl.SSLHandshakeException; -import android.util.Log; import android.webkit.MimeTypeMap; import com.github.kevinsawicki.http.HttpRequest; import com.github.kevinsawicki.http.HttpRequest.HttpRequestException; - -public class CordovaHttpUpload extends CordovaHttp implements Runnable { + +class CordovaHttpUpload extends CordovaHttp implements Runnable { private String filePath; private String name; - - public CordovaHttpUpload(String urlString, Map params, Map headers, CallbackContext callbackContext, String filePath, String name) { + + public CordovaHttpUpload(String urlString, JSONObject params, JSONObject headers, CallbackContext callbackContext, String filePath, String name) { super(urlString, params, headers, callbackContext); this.filePath = filePath; this.name = name; } - + @Override public void run() { try { HttpRequest request = HttpRequest.post(this.getUrlString()); + this.setupSecurity(request); request.acceptCharset(CHARSET); - request.headers(this.getHeaders()); + request.headers(this.getHeadersMap()); + URI uri = new URI(filePath); - int index = filePath.lastIndexOf('/'); - String filename = filePath.substring(index + 1); - index = filePath.lastIndexOf('.'); - String ext = filePath.substring(index + 1); + + int filenameIndex = filePath.lastIndexOf('/'); + String filename = filePath.substring(filenameIndex + 1); + + int extIndex = filePath.lastIndexOf('.'); + String ext = filePath.substring(extIndex + 1); + MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); String mimeType = mimeTypeMap.getMimeTypeFromExtension(ext); + request.part(this.name, filename, mimeType, new File(uri)); - - Set set = (Set)this.getParams().entrySet(); + + Set set = (Set)this.getParamsMap().entrySet(); Iterator i = set.iterator(); + while (i.hasNext()) { Entry e = (Entry)i.next(); String key = (String)e.getKey(); @@ -65,13 +73,15 @@ public class CordovaHttpUpload extends CordovaHttp implements Runnable { return; } } - + int code = request.code(); String body = request.body(CHARSET); - + JSONObject response = new JSONObject(); + this.addResponseHeaders(request, response); response.put("status", code); + if (code >= 200 && code < 300) { response.put("data", body); this.getCallbackContext().success(response);