From 9f62d5e3cfa6aee33b877076031c045f83389571 Mon Sep 17 00:00:00 2001 From: Alan Fischer Date: Sun, 22 Oct 2017 01:44:46 -0600 Subject: [PATCH] Json api fix (#10017) * Dont let json parsing errors result in a 500 * Fixed error description --- homeassistant/components/api.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/api.py b/homeassistant/components/api.py index 3b905ab0420..ecdc31c8bd7 100644 --- a/homeassistant/components/api.py +++ b/homeassistant/components/api.py @@ -262,7 +262,11 @@ class APIEventView(HomeAssistantView): def post(self, request, event_type): """Fire events.""" body = yield from request.text() - event_data = json.loads(body) if body else None + try: + event_data = json.loads(body) if body else None + except ValueError: + return self.json_message('Event data should be valid JSON', + HTTP_BAD_REQUEST) if event_data is not None and not isinstance(event_data, dict): return self.json_message('Event data should be a JSON object', @@ -309,7 +313,11 @@ class APIDomainServicesView(HomeAssistantView): """ hass = request.app['hass'] body = yield from request.text() - data = json.loads(body) if body else None + try: + data = json.loads(body) if body else None + except ValueError: + return self.json_message('Data should be valid JSON', + HTTP_BAD_REQUEST) with AsyncTrackStates(hass) as changed_states: yield from hass.services.async_call(domain, service, data, True)