package com.koushikdutta.ion.cookie; import android.content.Context; import android.content.SharedPreferences; import android.text.TextUtils; import android.util.Log; import com.koushikdutta.async.http.SimpleMiddleware; import com.koushikdutta.async.http.libcore.RawHeaders; import java.net.CookieManager; import java.net.CookieStore; import java.net.HttpCookie; import java.net.URI; import java.util.List; import java.util.Map; import java.util.Set; /** * Created by koush on 5/29/13. */ public class CookieMiddleware extends SimpleMiddleware { CookieManager manager; SharedPreferences preferences; public CookieStore getCookieStore() { return manager.getCookieStore(); } public void clear() { getCookieStore().removeAll(); preferences.edit().clear().commit(); } public CookieManager getCookieManager() { return manager; } public CookieMiddleware(Context context, String name) { manager = new CookieManager(null, null); preferences = context.getSharedPreferences(name + "-cookies", Context.MODE_PRIVATE); Map<String, ?> allPrefs = preferences.getAll(); for (String key: allPrefs.keySet()) { try { String value = preferences.getString(key, null); RawHeaders headers = new RawHeaders(); String[] lines = value.split("\n"); boolean first = true; for (String line: lines) { if (first) { first = false; headers.setStatusLine(line); } else if (!TextUtils.isEmpty(line)) { headers.addLine(line); } } manager.put(URI.create(key), headers.toMultimap()); } catch (Exception e) { Log.e("Ion", "unable to load cookies", e); } } } @Override public void onSocket(OnSocketData data) { try { Map<String, List<String>> cookies = manager.get (data.request.getUri(), data.request.getHeaders().getHeaders().toMultimap()); data.request.getHeaders().addCookies(cookies); } catch (Exception e) { } } @Override public void onHeadersReceived(OnHeadersReceivedData data) { try { manager.put(data.request.getUri(), data.headers.getHeaders().toMultimap()); // no cookies to persist. if (data.headers.getHeaders().get("Set-Cookie") == null) return; URI uri = data.request.getUri(); String key = uri.getScheme() + "://" + uri.getAuthority(); preferences.edit().putString(key, data.headers.getHeaders().toHeaderString()).commit(); } catch (Exception e) { } } }