diff --git a/matrix_webhook/utils.py b/matrix_webhook/utils.py index 339472b..4c7917a 100644 --- a/matrix_webhook/utils.py +++ b/matrix_webhook/utils.py @@ -15,6 +15,13 @@ LOGGER = logging.getLogger("matrix_webhook.utils") CLIENT = AsyncClient(conf.MATRIX_URL, conf.MATRIX_ID) +def error_map(resp): + """Map response errors to HTTP status.""" + if resp.status_code == "M_UNKNOWN": + return resp.transport_response.status + return ERROR_MAP[resp.status_code] + + def create_json_response(status, ret): """Create a JSON response.""" LOGGER.debug(f"Creating json response: {status=}, {ret=}") @@ -34,9 +41,7 @@ async def join_room(room_id): LOGGER.warning("Reconnecting") await CLIENT.login(conf.MATRIX_PW) else: - return create_json_response( - ERROR_MAP[resp.status_code], resp.message - ) + return create_json_response(error_map(resp), resp.message) else: return None except LocalProtocolError as e: @@ -59,9 +64,7 @@ async def send_room_message(room_id, content): LOGGER.warning("Reconnecting") await CLIENT.login(conf.MATRIX_PW) else: - return create_json_response( - ERROR_MAP[resp.status_code], resp.message - ) + return create_json_response(error_map(resp), resp.message) else: return create_json_response(HTTPStatus.OK, "OK") except LocalProtocolError as e: diff --git a/tests/tests.py b/tests/tests.py index aa5991c..7d44d7e 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -33,11 +33,11 @@ class BotTest(unittest.IsolatedAsyncioTestCase): # this won't be a 403 from synapse, but a LocalProtocolError from matrix_webhook self.assertEqual( bot_req({"body": 3}, KEY, "wrong_room"), - {"status": 403, "ret": "Unknown room"}, + {"status": 400, "ret": "wrong_room was not legal room ID or room alias"}, ) self.assertEqual( bot_req({"body": 3}, KEY, "wrong_room", key_as_param=True), - {"status": 403, "ret": "Unknown room"}, + {"status": 400, "ret": "wrong_room was not legal room ID or room alias"}, ) async def test_message(self):