From d90cefcbaac8961ba8c53979c263edccf6dd9e33 Mon Sep 17 00:00:00 2001 From: Sefa Ilkimen Date: Wed, 7 Dec 2016 15:29:54 +0100 Subject: [PATCH] fixed handling of multiple cookies --- .../synconset/cordovahttp/CordovaHttp.java | 11 ++++-- www/advanced-http.js | 4 +- www/cookie-handler.js | 37 ++++++++++++++++--- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/android/com/synconset/cordovahttp/CordovaHttp.java b/src/android/com/synconset/cordovahttp/CordovaHttp.java index 0303f51..8ff2079 100644 --- a/src/android/com/synconset/cordovahttp/CordovaHttp.java +++ b/src/android/com/synconset/cordovahttp/CordovaHttp.java @@ -14,6 +14,8 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import java.util.Iterator; +import android.text.TextUtils; + import com.github.kevinsawicki.http.HttpRequest; abstract class CordovaHttp { @@ -122,15 +124,18 @@ abstract class CordovaHttp { protected void addResponseHeaders(HttpRequest request, JSONObject response) throws JSONException { Map> headers = request.headers(); - Map parsed_headers = new HashMap(); + Map filteredHeaders = 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)); + filteredHeaders.put(key, TextUtils.join(", ", value)); } } - response.put("headers", new JSONObject(parsed_headers)); + + response.put("headers", new JSONObject(filteredHeaders)); } protected HashMap getStringMapFromJSONObject(JSONObject object) throws JSONException { diff --git a/www/advanced-http.js b/www/advanced-http.js index 54e5026..d6c3de7 100644 --- a/www/advanced-http.js +++ b/www/advanced-http.js @@ -83,13 +83,13 @@ function resolveCookieString(headers) { function getSuccessHandler(url, cb) { return function(response) { - cookieHandler.setCookie(url, resolveCookieString(response.headers)); + cookieHandler.setCookieFromString(url, resolveCookieString(response.headers)); cb(response); } } function getCookieHeader(url) { - return { Cookie: cookieHandler.getCookie(url) }; + return { Cookie: cookieHandler.getCookieString(url) }; } var http = { diff --git a/www/cookie-handler.js b/www/cookie-handler.js index 5aa0dc1..c350d0e 100644 --- a/www/cookie-handler.js +++ b/www/cookie-handler.js @@ -9,17 +9,42 @@ var store = new WebStorageCookieStore(storage, storeKey); var cookieJar = new ToughCookie.CookieJar(store); module.exports = { - setCookie: setCookie, - getCookie: getCookie, + setCookieFromString: setCookieFromString, + getCookieString: getCookieString, clearCookies: clearCookies } -function setCookie(url, cookieStr) { - if (!cookieStr) return; - cookieJar.setCookieSync(cookieStr, url); +function splitCookieString(cookieStr) { + var cookieParts = cookieStr.split(','); + var splitCookies = []; + var processedCookie = null; + + for (var i = 0; i < cookieParts.length; ++i) { + if (cookieParts[i].substr(-11, 8) === 'expires=') { + processedCookie = cookieParts[i] + ',' + cookieParts[i + 1]; + i++; + } else { + processedCookie = cookieParts[i]; + } + + processedCookie = processedCookie.trim(); + splitCookies.push(processedCookie); + } + + return splitCookies; } -function getCookie(url) { +function setCookieFromString(url, cookieStr) { + if (!cookieStr) return; + + var cookies = splitCookieString(cookieStr); + + for (var i = 0; i < cookies.length; ++i) { + cookieJar.setCookieSync(cookies[i], url); + } +} + +function getCookieString(url) { return cookieJar.getCookieStringSync(url); }