fixed handling of multiple cookies

This commit is contained in:
Sefa Ilkimen 2016-12-07 15:29:54 +01:00
parent b3118d5ccd
commit d90cefcbaa
3 changed files with 41 additions and 11 deletions

View File

@ -14,6 +14,8 @@ import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.Iterator; import java.util.Iterator;
import android.text.TextUtils;
import com.github.kevinsawicki.http.HttpRequest; import com.github.kevinsawicki.http.HttpRequest;
abstract class CordovaHttp { abstract class CordovaHttp {
@ -122,15 +124,18 @@ abstract class CordovaHttp {
protected void addResponseHeaders(HttpRequest request, JSONObject response) throws JSONException { protected void addResponseHeaders(HttpRequest request, JSONObject response) throws JSONException {
Map<String, List<String>> headers = request.headers(); Map<String, List<String>> headers = request.headers();
Map<String, String> parsed_headers = new HashMap<String, String>(); Map<String, String> filteredHeaders = new HashMap<String, String>();
for (Map.Entry<String, List<String>> entry : headers.entrySet()) { for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
String key = entry.getKey(); String key = entry.getKey();
List<String> value = entry.getValue(); List<String> value = entry.getValue();
if ((key != null) && (!value.isEmpty())) { 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<String, String> getStringMapFromJSONObject(JSONObject object) throws JSONException { protected HashMap<String, String> getStringMapFromJSONObject(JSONObject object) throws JSONException {

View File

@ -83,13 +83,13 @@ function resolveCookieString(headers) {
function getSuccessHandler(url, cb) { function getSuccessHandler(url, cb) {
return function(response) { return function(response) {
cookieHandler.setCookie(url, resolveCookieString(response.headers)); cookieHandler.setCookieFromString(url, resolveCookieString(response.headers));
cb(response); cb(response);
} }
} }
function getCookieHeader(url) { function getCookieHeader(url) {
return { Cookie: cookieHandler.getCookie(url) }; return { Cookie: cookieHandler.getCookieString(url) };
} }
var http = { var http = {

View File

@ -9,17 +9,42 @@ var store = new WebStorageCookieStore(storage, storeKey);
var cookieJar = new ToughCookie.CookieJar(store); var cookieJar = new ToughCookie.CookieJar(store);
module.exports = { module.exports = {
setCookie: setCookie, setCookieFromString: setCookieFromString,
getCookie: getCookie, getCookieString: getCookieString,
clearCookies: clearCookies clearCookies: clearCookies
} }
function setCookie(url, cookieStr) { function splitCookieString(cookieStr) {
if (!cookieStr) return; var cookieParts = cookieStr.split(',');
cookieJar.setCookieSync(cookieStr, url); 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); return cookieJar.getCookieStringSync(url);
} }