From 77b1df59022f7f84c8894c0330aa176eb45d5da2 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Wed, 15 Dec 2021 05:17:09 -0700 Subject: [PATCH] Ensure SimpliSafe websocket reconnects upon new token (#61835) --- homeassistant/components/simplisafe/__init__.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/simplisafe/__init__.py b/homeassistant/components/simplisafe/__init__.py index cd04de5d34c..dd3ff717e28 100644 --- a/homeassistant/components/simplisafe/__init__.py +++ b/homeassistant/components/simplisafe/__init__.py @@ -612,10 +612,24 @@ class SimpliSafe: data={**self.entry.data, CONF_TOKEN: token}, ) + @callback + def async_handle_refresh_token(token: str) -> None: + """Handle a new refresh token.""" + async_save_refresh_token(token) + + if TYPE_CHECKING: + assert self._api.websocket + + if self._api.websocket.connected: + # If a websocket connection is open, reconnect it to use the + # new access token: + asyncio.create_task(self._api.websocket.async_reconnect()) + self.entry.async_on_unload( - self._api.add_refresh_token_callback(async_save_refresh_token) + self._api.add_refresh_token_callback(async_handle_refresh_token) ) + # Save the refresh token we got on entry setup: async_save_refresh_token(self._api.refresh_token) async def async_update(self) -> None: