diff --git a/app/middleware.py b/app/middleware.py index 7e3d20d..998474b 100644 --- a/app/middleware.py +++ b/app/middleware.py @@ -27,15 +27,17 @@ class PatchMalformedJsonMiddleware(BaseHTTPMiddleware): json.loads(body) except json.decoder.JSONDecodeError: logger.warning(f'Malformed json received! Try to fix it, "PatchMalformedJsonMiddleware" is enabled.') - body = body.replace('\t', '') - body = body.replace('\n', '') - - s = re.sub(PatchMalformedJsonMiddleware.REGEX, r'\1"\2', body) + s = PatchMalformedJsonMiddleware.fix_json(body) logger.debug(f'Fixed JSON: "{s}"') s = json.loads(s) # ensure json is now valid - # set new body request._body = json.dumps(s).encode('utf-8') response = await call_next(request) return response + + @staticmethod + def fix_json(s: str) -> str: + s = s.replace('\t', '') + s = s.replace('\n', '') + return re.sub(PatchMalformedJsonMiddleware.REGEX, r'\1"\2', s) diff --git a/test/main.py b/test/main.py index 2cfacf4..8f2e2c7 100644 --- a/test/main.py +++ b/test/main.py @@ -17,9 +17,8 @@ sys.path.append('../app') from app import main from app.util import load_key -from middleware import PatchMalformedJsonMiddleware -main.app.add_middleware(PatchMalformedJsonMiddleware, enabled=True) +# main.app.add_middleware(PatchMalformedJsonMiddleware, enabled=True) client = TestClient(main.app) ORIGIN_REF, ALLOTMENT_REF, SECRET = str(uuid4()), '20000000-0000-0000-0000-000000000001', 'HelloWorld' @@ -109,12 +108,11 @@ def test_auth_v1_origin(): def test_auth_v1_origin_malformed_json(): # see oscar.krause/fastapi-dls#1 - import re from middleware import PatchMalformedJsonMiddleware # test regex (temporary, until this section is merged into main.py - body = '{"environment": {"fingerprint": {"mac_address_list": [ff:ff:ff:ff:ff:ff"]}}' - replaced = re.sub(PatchMalformedJsonMiddleware.REGEX, r'\1"\2', body) + s = '{"environment": {"fingerprint": {"mac_address_list": [ff:ff:ff:ff:ff:ff"]}}' + replaced = PatchMalformedJsonMiddleware.fix_json(s) assert replaced == '{"environment": {"fingerprint": {"mac_address_list": ["ff:ff:ff:ff:ff:ff"]}}'