diff --git a/aikido_zen/context/__init__.py b/aikido_zen/context/__init__.py index 296bc68e5..e6f51f10a 100644 --- a/aikido_zen/context/__init__.py +++ b/aikido_zen/context/__init__.py @@ -113,7 +113,7 @@ def set_body_internal(self, body): self.body = self.body.decode("utf-8") # Decode byte input to string. if not isinstance(self.body, str): return - if self.body.strip()[0] in ["{", "["]: + if self.body.strip()[0] in ["{", "[", '"']: # Might be JSON, but might not have been parsed correctly by server because of wrong headers parsed_body = json.loads(self.body) if parsed_body: diff --git a/aikido_zen/context/init_test.py b/aikido_zen/context/init_test.py index d227d1d2d..4769167ba 100644 --- a/aikido_zen/context/init_test.py +++ b/aikido_zen/context/init_test.py @@ -208,6 +208,20 @@ def test_set_valid_json_with_spaces(): assert context.body == {"key": [1, 2, 3]} +def test_valid_json_string_with_newlines(): + context = Context(req=basic_wsgi_req, body=None, source="flask") + + context.set_body('\r\n\r\n"hello"\r\n\r\n') + assert context.body == "hello" + + +def test_valid_json_string_with_spaces(): + context = Context(req=basic_wsgi_req, body=None, source="flask") + + context.set_body('" hello "') + assert context.body == " hello " + + def test_set_valid_json_with_newlines(): context = Context(req=basic_wsgi_req, body=None, source="flask")