mirror of
https://github.com/servo/servo.git
synced 2025-07-11 17:33:47 +01:00
47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
def main(request, response):
|
|
def fail(message):
|
|
response.content = "FAIL " + request.method + ": " + str(message)
|
|
response.status = 400
|
|
|
|
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-Max-Age", 10)
|
|
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 == "PUT":
|
|
response.content = "PASS: Second PUT request. Preflight worked."
|
|
elif request.method == "OPTIONS":
|
|
response.headers.set("Access-Control-Allow-Methods", "PUT")
|
|
setState("FAILSecondOPTIONSSent", token)
|
|
else:
|
|
fail(state)
|
|
elif state == "FAILSecondOPTIONSSent":
|
|
if request.method == "PUT":
|
|
fail("Second OPTIONS request was sent. Preflight failed.")
|
|
else:
|
|
fail(state)
|
|
else:
|
|
fail(state)
|