package edu.purdue.app.schedule; import java.util.*; /** *Dumb cookie manager */ public class Cookies { private Map<String, String> cookies; private String[] okCookies; public Cookies(String[] okCookies) { this.okCookies = okCookies; cookies = new HashMap<String, String>(); } public Cookies(String[] okCookies, Map<String, List<String>> headers) { this(okCookies); setCookies(headers); } /** *Set a cookie * @param key Cookie name * @param val Cookie value */ public void setCookie(String key, String val) { cookies.put(key, val); } /** * *Clear a cookie * @param key cookie name */ public void clearCookie(String key) { cookies.remove(key); } /** * * Set cookies * @param headers headers from a response */ public void setCookies(Map<String, List<String>> headers) { setCookies(headers.get("Set-Cookie")); } /** * Set cookies * @param list raw cookies in format from "Set-Cookie" header */ public void setCookies(List<String> rawCookies) { //for every cookie in the list for(String cookie : rawCookies) { //split it up, making sure we are setting the cookie to something String[] fields = cookie.split(";"); String[] keyVal = fields[0].split("="); if(keyVal.length != 2) { continue; } //check if this cookie is valid String key = keyVal[0].trim(); for(String validCookie : okCookies) { //if so, put it in our list if(key.equals(validCookie)) { cookies.put(key, keyVal[1].trim()); } } } } @Override public String toString() { //convert cookie map into Cookie header for requests StringBuilder cookieStr = new StringBuilder(); boolean prev = false; for(Map.Entry<String, String> cookie : cookies.entrySet()) { if(prev) { cookieStr.append("; "); } prev = true; cookieStr.append(cookie.getKey() + "=" + cookie.getValue()); } return cookieStr.toString(); } }