]> git.basschouten.com Git - openhab-addons.git/commitdiff
[ecobee] Improve handling of invalid_grant error (#8857)
authorMark Hilbush <mark@hilbush.com>
Tue, 27 Oct 2020 15:10:03 +0000 (11:10 -0400)
committerGitHub <noreply@github.com>
Tue, 27 Oct 2020 15:10:03 +0000 (16:10 +0100)
Signed-off-by: Mark Hilbush <mark@hilbush.com>
bundles/org.openhab.binding.ecobee/src/main/java/org/openhab/binding/ecobee/internal/api/EcobeeApi.java

index 18e1375e8165975d2a470b4da6943a50896e11af..e39607c1e2c08e55c1a45a7a493c3966920f487a 100644 (file)
@@ -170,13 +170,24 @@ public class EcobeeApi implements AccessTokenRefreshListener {
             logger.info("API: The Ecobee authorization process threw an exception", e);
             ecobeeAuth.setState(EcobeeAuthState.NEED_PIN);
         } catch (OAuthResponseException e) {
-            logger.info("API: Exception getting access token: error='{}', description='{}'", e.getError(),
-                    e.getErrorDescription());
-            // How to handle the possible error codes?
+            handleOAuthException(e);
         }
         return isAuthorized;
     }
 
+    private void handleOAuthException(OAuthResponseException e) {
+        if ("invalid_grant".equalsIgnoreCase(e.getError())) {
+            // Usually indicates that the refresh token is no longer valid and will require reauthorization
+            logger.warn("API: Received 'invalid_grant' error response. Please reauthorize application with Ecobee");
+            deleteOAuthClientService();
+            createOAuthClientService();
+        } else {
+            // Other errors may not require reauthorization and/or may not apply
+            logger.warn("API: Exception getting access token: error='{}', description='{}'", e.getError(),
+                    e.getErrorDescription());
+        }
+    }
+
     @Override
     public void onAccessTokenResponse(AccessTokenResponse accessTokenResponse) {
     }