]> git.basschouten.com Git - openhab-addons.git/commitdiff
[nest] Remove the access token when the thing is removed (#14940)
authorlolodomo <lg.hc@free.fr>
Sat, 13 May 2023 17:06:41 +0000 (19:06 +0200)
committerGitHub <noreply@github.com>
Sat, 13 May 2023 17:06:41 +0000 (19:06 +0200)
Related to #14818

Signed-off-by: Laurent Garnier <lg.hc@free.fr>
bundles/org.openhab.binding.nest/src/main/java/org/openhab/binding/nest/internal/sdm/api/PubSubAPI.java
bundles/org.openhab.binding.nest/src/main/java/org/openhab/binding/nest/internal/sdm/api/SDMAPI.java
bundles/org.openhab.binding.nest/src/main/java/org/openhab/binding/nest/internal/sdm/handler/SDMAccountHandler.java

index d41022652970645742882136290d72bddea303c1..8dbda72da43949e0b9106b405707122d1ecf8c7d 100644 (file)
@@ -144,7 +144,9 @@ public class PubSubAPI {
     private final Logger logger = LoggerFactory.getLogger(PubSubAPI.class);
 
     private final HttpClient httpClient;
+    private final OAuthFactory oAuthFactory;
     private final OAuthClientService oAuthService;
+    private final String oAuthServiceHandleId;
     private final String projectId;
     private final ScheduledThreadPoolExecutor scheduler;
     private final Map<String, Set<PubSubSubscriptionListener>> subscriptionListeners = new HashMap<>();
@@ -153,14 +155,21 @@ public class PubSubAPI {
             String clientId, String clientSecret) {
         this.httpClient = httpClientFactory.getCommonHttpClient();
         this.projectId = projectId;
-        this.oAuthService = oAuthFactory.createOAuthClientService(String.format(PUBSUB_HANDLE_FORMAT, ownerId),
-                TOKEN_URL, AUTH_URL, clientId, clientSecret, PUBSUB_SCOPE, false);
+        this.oAuthFactory = oAuthFactory;
+        this.oAuthServiceHandleId = String.format(PUBSUB_HANDLE_FORMAT, ownerId);
+        this.oAuthService = oAuthFactory.createOAuthClientService(oAuthServiceHandleId, TOKEN_URL, AUTH_URL, clientId,
+                clientSecret, PUBSUB_SCOPE, false);
         scheduler = new ScheduledThreadPoolExecutor(3, new NamedThreadFactory(ownerId, true));
     }
 
     public void dispose() {
         subscriptionListeners.clear();
         scheduler.shutdownNow();
+        oAuthFactory.ungetOAuthService(oAuthServiceHandleId);
+    }
+
+    public void deleteOAuthServiceAndAccessToken() {
+        oAuthFactory.deleteServiceAndAccessToken(oAuthServiceHandleId);
     }
 
     public void authorizeClient(String authorizationCode) throws InvalidPubSubAuthorizationCodeException, IOException {
index 9e2d3a6b3cd9378ef384bc6678bba4c4fb7e737a..46deb27c9596e00526d52a2620db9e86ef7c518c 100644 (file)
@@ -84,7 +84,9 @@ public class SDMAPI {
     private final Logger logger = LoggerFactory.getLogger(SDMAPI.class);
 
     private final HttpClient httpClient;
+    private final OAuthFactory oAuthFactory;
     private final OAuthClientService oAuthService;
+    private final String oAuthServiceHandleId;
     private final String projectId;
 
     private final Set<SDMAPIRequestListener> requestListeners = ConcurrentHashMap.newKeySet();
@@ -92,13 +94,20 @@ public class SDMAPI {
     public SDMAPI(HttpClientFactory httpClientFactory, OAuthFactory oAuthFactory, String ownerId, String projectId,
             String clientId, String clientSecret) {
         this.httpClient = httpClientFactory.getCommonHttpClient();
-        this.oAuthService = oAuthFactory.createOAuthClientService(String.format(SDM_HANDLE_FORMAT, ownerId), TOKEN_URL,
-                AUTH_URL, clientId, clientSecret, SDM_SCOPE, false);
+        this.oAuthFactory = oAuthFactory;
+        this.oAuthServiceHandleId = String.format(SDM_HANDLE_FORMAT, ownerId);
+        this.oAuthService = oAuthFactory.createOAuthClientService(oAuthServiceHandleId, TOKEN_URL, AUTH_URL, clientId,
+                clientSecret, SDM_SCOPE, false);
         this.projectId = projectId;
     }
 
     public void dispose() {
         requestListeners.clear();
+        oAuthFactory.ungetOAuthService(oAuthServiceHandleId);
+    }
+
+    public void deleteOAuthServiceAndAccessToken() {
+        oAuthFactory.deleteServiceAndAccessToken(oAuthServiceHandleId);
     }
 
     public void authorizeClient(String authorizationCode) throws InvalidSDMAuthorizationCodeException, IOException {
index 7fb14e4dfa5e6d9c7d1799e78c4b6a1e4344e73b..b61097b4b11acee3a492bd057f1591481d6483d3 100644 (file)
@@ -263,6 +263,19 @@ public class SDMAccountHandler extends BaseBridgeHandler {
         }
     }
 
+    @Override
+    public void handleRemoval() {
+        PubSubAPI localPubSubAPI = pubSubAPI;
+        if (localPubSubAPI != null) {
+            localPubSubAPI.deleteOAuthServiceAndAccessToken();
+        }
+        SDMAPI localSDMAPI = sdmAPI;
+        if (localSDMAPI != null) {
+            localSDMAPI.deleteOAuthServiceAndAccessToken();
+        }
+        super.handleRemoval();
+    }
+
     @Override
     public Collection<Class<? extends ThingHandlerService>> getServices() {
         return List.of(SDMDiscoveryService.class);