mirror of
https://github.com/servo/servo.git
synced 2025-07-11 17:33:47 +01:00
48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
def main(request, response):
|
|
def fail(message):
|
|
response.content = "FAIL " + request.method + ": " + str(message)
|
|
|
|
def getState(token):
|
|
server_state = request.server.stash.take(token)
|
|
if not server_state:
|
|
return "Uninitialized"
|
|
return server_state
|
|
|
|
def setState(state, token):
|
|
request.server.stash.put(token, state)
|
|
|
|
response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin"))
|
|
response.headers.set("Access-Control-Allow-Credentials", "true")
|
|
token = request.GET.first("token", None)
|
|
state = getState(token)
|
|
|
|
if state == "Uninitialized":
|
|
if request.method == "OPTIONS":
|
|
response.headers.set("Access-Control-Allow-Methods", "PUT")
|
|
response.headers.set("Access-Control-Allow-Headers", "x-test")
|
|
response.headers.set("Access-Control-Max-Age", 1)
|
|
setState("OPTIONSSent", token)
|
|
else:
|
|
fail(state)
|
|
elif state == "OPTIONSSent":
|
|
if request.method == "PUT":
|
|
response.content = "PASS: First PUT request."
|
|
setState("FirstPUTSent", token)
|
|
else:
|
|
fail(state)
|
|
elif state == "FirstPUTSent":
|
|
if request.method == "OPTIONS":
|
|
response.headers.set("Access-Control-Allow-Methods", "PUT")
|
|
response.headers.set("Access-Control-Allow-Headers", "x-test")
|
|
setState("SecondOPTIONSSent", token)
|
|
elif request.method == "PUT":
|
|
fail("Second PUT request sent without preflight")
|
|
else:
|
|
fail(state)
|
|
elif state == "SecondOPTIONSSent":
|
|
if request.method == "PUT":
|
|
response.content = "PASS: Second OPTIONS request was sent."
|
|
else:
|
|
fail(state)
|
|
else:
|
|
fail(state)
|