Handle preflight
This commit is contained in:
32
slow/slow.py
32
slow/slow.py
@@ -204,14 +204,38 @@ class App:
|
|||||||
content_length = int(headers.get("Content-Length", 0))
|
content_length = int(headers.get("Content-Length", 0))
|
||||||
body = await reader.read(content_length) if content_length else b""
|
body = await reader.read(content_length) if content_length else b""
|
||||||
|
|
||||||
|
if method == "OPTIONS":
|
||||||
|
if "origin" in headers and headers.get("origin") in self.CORS.Origins:
|
||||||
|
origin = headers.get("origin")
|
||||||
|
response = "HTTP/1.1 200 OK\r\n"
|
||||||
|
response += "Content-Type: text/plain\r\n"
|
||||||
|
response += "Content-Length: 0\r\n"
|
||||||
|
response += f"Access-Control-Allow-Origin: {origin}\r\n"
|
||||||
|
response += f"Access-Control-Allow-Methods: {','.join(self.CORS.Methods)}\r\n"
|
||||||
|
response += "Access-Control-Allow-Headers: Content-Type,Authorization\r\n" # CORS
|
||||||
|
response += "Vary: Origin\r\n"
|
||||||
|
response += "\r\n"
|
||||||
|
|
||||||
|
writer.write(response.encode(encoding="utf-8"))
|
||||||
|
|
||||||
|
await writer.drain()
|
||||||
|
|
||||||
|
else:
|
||||||
|
response = "HTTP/1.1 403 Forbidden\r\n"
|
||||||
|
response += "Content-Length: 0\r\n"
|
||||||
|
response += "Vary: Origin\r\n"
|
||||||
|
response += "\r\n"
|
||||||
|
|
||||||
|
writer.write(response.encode(encoding="utf-8"))
|
||||||
|
|
||||||
|
await writer.drain()
|
||||||
|
|
||||||
|
else:
|
||||||
route, kwargs = self.resolve(path, method)
|
route, kwargs = self.resolve(path, method)
|
||||||
|
|
||||||
response = await route(
|
response = await route(
|
||||||
request=Request(
|
request=Request(
|
||||||
method=method,
|
method=method, path=path, headers=headers, body=body, app=self
|
||||||
path=path,
|
|
||||||
headers=headers,
|
|
||||||
body=body,
|
|
||||||
),
|
),
|
||||||
**kwargs,
|
**kwargs,
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user