import urlparse def setNoCacheAndCORSHeaders(request, response): """Set Cache-Control, CORS and Content-Type headers appropriate for the cookie tests.""" headers = [("Content-Type", "application/json"), ("Access-Control-Allow-Credentials", "true")] origin = "*" if "origin" in request.headers: origin = request.headers["origin"] headers.append(("Access-Control-Allow-Origin", origin)) #headers.append(("Access-Control-Allow-Credentials", "true")) headers.append(("Cache-Control", "no-cache")) headers.append(("Expires", "Fri, 01 Jan 1990 00:00:00 GMT")) return headers def makeCookieHeader(name, value, otherAttrs): """Make a Set-Cookie header for a cookie with the name, value and attributes provided.""" def makeAV(a, v): if None == v or "" == v: return a return "%s=%s" % (a, v) # ensure cookie name is always first attrs = ["%s=%s" % (name, value)] attrs.extend(makeAV(a, v) for (a,v) in otherAttrs.iteritems()) return ("Set-Cookie", "; ".join(attrs)) def makeDropCookie(name, secure): attrs = {"MaxAge": 0, "path": "/"} if secure: attrs["secure"] = "" return makeCookieHeader(name, "", attrs) def readParameter(request, paramName, requireValue): """Read a parameter from the request. Raise if requireValue is set and the parameter has an empty value or is not present.""" params = urlparse.parse_qs(request.url_parts.query) param = params[paramName][0].strip() if len(param) == 0: raise Exception("Empty or missing name parameter.") return param def readCookies(request): """Read the cookies from the client present in the request.""" cookies = {} for key in request.cookies: for cookie in request.cookies.get_list(key): # do we care we'll clobber cookies here? If so, do we # need to modify the test to take cookie names and value lists? cookies[key] = cookie.value return cookies