From 0b40a7badf82c53c8a23b3a03273619f8440855d Mon Sep 17 00:00:00 2001 From: Tushar Chandra Date: Mon, 10 Dec 2018 02:15:57 -0600 Subject: [PATCH] Add CORS support to blackd (#627) See issue #622. Use aiohttp-cors to allow cross-origin requests to blackd, and add a dependency on it to the pipfile. --- Pipfile | 1 + blackd.py | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/Pipfile b/Pipfile index 8e9ad1e..ffb31aa 100644 --- a/Pipfile +++ b/Pipfile @@ -10,6 +10,7 @@ click = ">=6.5" appdirs = "*" toml = ">=0.9.4" black = {editable = true, path = ".", extras = ["d"]} +aiohttp-cors = "*" [dev-packages] pre-commit = "*" diff --git a/blackd.py b/blackd.py index e1006a1..c5aa29c 100644 --- a/blackd.py +++ b/blackd.py @@ -4,6 +4,7 @@ from functools import partial import logging from aiohttp import web +import aiohttp_cors import black import click @@ -17,6 +18,15 @@ SKIP_STRING_NORMALIZATION_HEADER = "X-Skip-String-Normalization" SKIP_NUMERIC_UNDERSCORE_NORMALIZATION_HEADER = "X-Skip-Numeric-Underscore-Normalization" FAST_OR_SAFE_HEADER = "X-Fast-Or-Safe" +BLACK_HEADERS = [ + VERSION_HEADER, + LINE_LENGTH_HEADER, + PYTHON_VARIANT_HEADER, + SKIP_STRING_NORMALIZATION_HEADER, + SKIP_NUMERIC_UNDERSCORE_NORMALIZATION_HEADER, + FAST_OR_SAFE_HEADER, +] + @click.command(context_settings={"help_option_names": ["-h", "--help"]}) @click.option( @@ -35,7 +45,18 @@ def main(bind_host: str, bind_port: int) -> None: def make_app() -> web.Application: app = web.Application() executor = ProcessPoolExecutor() - app.add_routes([web.post("/", partial(handle, executor=executor))]) + + cors = aiohttp_cors.setup(app) + resource = cors.add(app.router.add_resource("/")) + cors.add( + resource.add_route("POST", partial(handle, executor=executor)), + { + "*": aiohttp_cors.ResourceOptions( + allow_headers=(*BLACK_HEADERS, "Content-Type"), expose_headers="*" + ) + }, + ) + return app -- 2.39.5