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.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<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()) {
String key = entry.getKey();
List<String> 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<String, String> getStringMapFromJSONObject(JSONObject object) throws JSONException {

View File

@ -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 = {

View File

@ -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);
}