]> git.basschouten.com Git - openhab-addons.git/commitdiff
[tr064] Fix clearing of auth (results) (#15415)
authorJ-N-K <github@klug.nrw>
Sun, 13 Aug 2023 16:55:13 +0000 (18:55 +0200)
committerGitHub <noreply@github.com>
Sun, 13 Aug 2023 16:55:13 +0000 (18:55 +0200)
* [tr064] Fix clearing of auth (results)

In case of multiple root things the auth store (results and digests) was cleared for all clients instead of only removing the failed auth result or old authentication.

* fix TAM request

Signed-off-by: Jan N. Klug <github@klug.nrw>
bundles/org.openhab.binding.tr064/src/main/java/org/openhab/binding/tr064/internal/Tr064RootHandler.java
bundles/org.openhab.binding.tr064/src/main/java/org/openhab/binding/tr064/internal/soap/SOAPConnector.java
bundles/org.openhab.binding.tr064/src/main/java/org/openhab/binding/tr064/internal/soap/SOAPValueConverter.java

index a80dd8e6ec768fe9d089904355403cd8502b0737..17c42a2f2206c771632abcf342f0c18642523a4e 100644 (file)
@@ -207,8 +207,6 @@ public class Tr064RootHandler extends BaseBridgeHandler implements PhonebookProv
         uninstallPolling();
         stateCache.clear();
         scpdUtil = null;
-
-        super.dispose();
     }
 
     /**
@@ -267,8 +265,16 @@ public class Tr064RootHandler extends BaseBridgeHandler implements PhonebookProv
 
                 // clear auth cache and force re-auth
                 AuthenticationStore authStore = httpClient.getAuthenticationStore();
-                authStore.clearAuthentications();
-                authStore.clearAuthenticationResults();
+                URI endpointUri = URI.create(endpointBaseURL);
+                Authentication authentication = authStore.findAuthentication("Digest", endpointUri,
+                        Authentication.ANY_REALM);
+                if (authentication != null) {
+                    authStore.removeAuthentication(authentication);
+                }
+                Authentication.Result authResult = authStore.findAuthenticationResult(endpointUri);
+                if (authResult != null) {
+                    authStore.removeAuthenticationResult(authResult);
+                }
                 authStore.addAuthentication(new DigestAuthentication(new URI(endpointBaseURL), Authentication.ANY_REALM,
                         config.user, config.password));
 
index 3aa372d58f28a79cff691ad3c04d56e479dc45a6..7c6c72b2818f3ecc8f79946109ec608d50831e26 100644 (file)
@@ -17,6 +17,7 @@ import static org.openhab.binding.tr064.internal.util.Util.getSOAPElement;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.net.URI;
 import java.time.Duration;
 import java.util.HashMap;
 import java.util.Map;
@@ -37,6 +38,7 @@ import javax.xml.soap.SOAPPart;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.client.api.Authentication;
 import org.eclipse.jetty.client.api.ContentResponse;
 import org.eclipse.jetty.client.api.Request;
 import org.eclipse.jetty.client.util.BytesContentProvider;
@@ -177,7 +179,11 @@ public class SOAPConnector {
             if (response.getStatus() == HttpStatus.UNAUTHORIZED_401) {
                 // retry once if authentication expired
                 logger.trace("Re-Auth needed.");
-                httpClient.getAuthenticationStore().clearAuthenticationResults();
+                Authentication.Result authResult = httpClient.getAuthenticationStore()
+                        .findAuthenticationResult(URI.create(endpointBaseURL));
+                if (authResult != null) {
+                    httpClient.getAuthenticationStore().removeAuthenticationResult(authResult);
+                }
                 request = prepareSOAPRequest(soapRequest).timeout(timeout, TimeUnit.SECONDS);
                 response = request.send();
             }
index 7324ccf838ce7f73273afa73aac577a4bdd3b4fc..5f90f4d7f72037307f55821d59be43847fe14a40 100644 (file)
@@ -244,7 +244,7 @@ public class SOAPValueConverter {
     @SuppressWarnings("unused")
     private State processTamListURL(State state, Tr064ChannelConfig channelConfig) throws PostProcessingException {
         try {
-            ContentResponse response = httpClient.newRequest(state.toString()).timeout(timeout, TimeUnit.MILLISECONDS)
+            ContentResponse response = httpClient.newRequest(state.toString()).timeout(timeout, TimeUnit.SECONDS)
                     .send();
             String responseContent = response.getContentAsString();
             int messageCount = responseContent.split("<New>1</New>").length - 1;