diff --git a/homeassistant/components/api.py b/homeassistant/components/api.py index a81c0f3227f..1e6e66baee0 100644 --- a/homeassistant/components/api.py +++ b/homeassistant/components/api.py @@ -106,6 +106,7 @@ def _handle_get_api_stream(handler, path_match, data): wfile = handler.wfile write_lock = threading.Lock() block = threading.Event() + session_id = None restrict = data.get('restrict') if restrict: @@ -119,6 +120,7 @@ def _handle_get_api_stream(handler, path_match, data): try: wfile.write(msg.encode("UTF-8")) wfile.flush() + handler.server.sessions.extend_validation(session_id) except IOError: block.set() @@ -138,6 +140,7 @@ def _handle_get_api_stream(handler, path_match, data): handler.send_response(HTTP_OK) handler.send_header('Content-type', 'text/event-stream') + session_id = handler.set_session_cookie_header() handler.end_headers() hass.bus.listen(MATCH_ALL, forward_events) diff --git a/homeassistant/components/http.py b/homeassistant/components/http.py index 5e8332e283a..81965179afe 100644 --- a/homeassistant/components/http.py +++ b/homeassistant/components/http.py @@ -337,26 +337,28 @@ class RequestHandler(SimpleHTTPRequestHandler): def set_cache_header(self): """ Add cache headers if not in development """ - if not self.server.development: - # 1 year in seconds - cache_time = 365 * 86400 + if self.server.development: + return - self.send_header( - HTTP_HEADER_CACHE_CONTROL, - "public, max-age={}".format(cache_time)) - self.send_header( - HTTP_HEADER_EXPIRES, - self.date_time_string(time.time()+cache_time)) + # 1 year in seconds + cache_time = 365 * 86400 + + self.send_header( + HTTP_HEADER_CACHE_CONTROL, + "public, max-age={}".format(cache_time)) + self.send_header( + HTTP_HEADER_EXPIRES, + self.date_time_string(time.time()+cache_time)) def set_session_cookie_header(self): - """ Add the header for the session cookie. """ + """ Add the header for the session cookie and return session id. """ if not self.authenticated: return - current = self.get_cookie_session_id() + session_id = self.get_cookie_session_id() - if current is not None: - self.server.sessions.extend_validation(current) + if session_id is not None: + self.server.sessions.extend_validation(session_id) return self.send_header( @@ -364,6 +366,8 @@ class RequestHandler(SimpleHTTPRequestHandler): '{}={}'.format(SESSION_KEY, self.server.sessions.create()) ) + return session_id + def verify_session(self): """ Verify that we are in a valid session. """ return self.get_cookie_session_id() is not None @@ -387,19 +391,22 @@ class RequestHandler(SimpleHTTPRequestHandler): if morsel is None: return None - current = cookie[SESSION_KEY].value + session_id = cookie[SESSION_KEY].value - return current if self.server.sessions.is_valid(current) else None + if self.server.sessions.is_valid(session_id): + return session_id + + return None def destroy_session(self): """ Destroys session. """ - current = self.get_cookie_session_id() + session_id = self.get_cookie_session_id() - if current is None: + if session_id is None: return self.send_header('Set-Cookie', '') - self.server.sessions.destroy(current) + self.server.sessions.destroy(session_id) def session_valid_time():