diff --git a/iFindFriendsMini.indigoPlugin/Contents/Info.plist b/iFindFriendsMini.indigoPlugin/Contents/Info.plist index 85780a0..f89bdd7 100755 --- a/iFindFriendsMini.indigoPlugin/Contents/Info.plist +++ b/iFindFriendsMini.indigoPlugin/Contents/Info.plist @@ -3,7 +3,7 @@ PluginVersion - 1.2.6 + 1.2.7 ServerApiVersion 2.0 CFBundleDisplayName diff --git a/iFindFriendsMini.indigoPlugin/Contents/Server Plugin/pyicloud/base.py b/iFindFriendsMini.indigoPlugin/Contents/Server Plugin/pyicloud/base.py index e2a1eed..0aff5e0 100644 --- a/iFindFriendsMini.indigoPlugin/Contents/Server Plugin/pyicloud/base.py +++ b/iFindFriendsMini.indigoPlugin/Contents/Server Plugin/pyicloud/base.py @@ -103,11 +103,25 @@ def request(self, method, url, **kwargs): # pylint: disable=arguments-differ if not response.ok and (content_type not in json_mimetypes or response.status_code in [421, 450, 500]): + try: + if has_retried is None and response.status_code == 450: + # Handle re-authentication for Find My iPhone + LOGGER.debug("Re-authenticating Find My iPhone service") + try: + self.service.authenticate(True) + except PyiCloudAPIResponseException: + LOGGER.debug("Re-authentication failed") + kwargs["retried"] = True + return self.request(method, url, **kwargs) + except Exception: + pass + if has_retried is None and response.status_code in [421, 450, 500]: api_error = PyiCloudAPIResponseException( response.reason, response.status_code, retry=True ) request_logger.debug(api_error) kwargs["retried"] = True return self.request(method, url, **kwargs) + self._raise_error(response.status_code, response.reason) if content_type not in json_mimetypes: