59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
from urllib.parse import parse_qs
|
|
|
|
from wptserve.utils import isomorphic_encode
|
|
|
|
def setNoCacheAndCORSHeaders(request, response):
|
|
"""Set Cache-Control, CORS and Content-Type headers appropriate for the cookie tests."""
|
|
headers = [(b"Content-Type", b"application/json"),
|
|
(b"Access-Control-Allow-Credentials", b"true")]
|
|
|
|
origin = b"*"
|
|
if b"origin" in request.headers:
|
|
origin = request.headers[b"origin"]
|
|
|
|
headers.append((b"Access-Control-Allow-Origin", origin))
|
|
#headers.append(("Access-Control-Allow-Credentials", "true"))
|
|
headers.append((b"Cache-Control", b"no-cache"))
|
|
headers.append((b"Expires", b"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 b"" == v:
|
|
return a
|
|
if isinstance(v, int):
|
|
return b"%s=%i" % (a, v)
|
|
else:
|
|
return b"%s=%s" % (a, v)
|
|
|
|
# ensure cookie name is always first
|
|
attrs = [b"%s=%s" % (name, value)]
|
|
attrs.extend(makeAV(a, v) for (a, v) in otherAttrs.items())
|
|
return (b"Set-Cookie", b"; ".join((attrs)))
|
|
|
|
def makeDropCookie(name, secure):
|
|
attrs = {b"max-age": 0, b"path": b"/"}
|
|
if secure:
|
|
attrs[b"secure"] = b""
|
|
return makeCookieHeader(name, b"", 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 = parse_qs(request.url_parts.query)
|
|
param = params[paramName][0].strip()
|
|
if len(param) == 0:
|
|
raise Exception(u"Empty or missing name parameter.")
|
|
return isomorphic_encode(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
|