]> git.basschouten.com Git - openhab-addons.git/commitdiff
[digitalstrom] Fix StringIndexOutOfBoundsException (#15318) while keeping removal...
authorAlexander Friese <alexf2015@users.noreply.github.com>
Sat, 29 Jul 2023 09:17:58 +0000 (11:17 +0200)
committerGitHub <noreply@github.com>
Sat, 29 Jul 2023 09:17:58 +0000 (11:17 +0200)
Signed-off-by: Alexander Friese <af944580@googlemail.com>
bundles/org.openhab.binding.digitalstrom/src/main/java/org/openhab/binding/digitalstrom/internal/lib/serverconnection/impl/HttpTransportImpl.java

index ff8adab9bef9dd07e3268a373a3e8c2ae6d616c1..306853e73ff32ef8f79885c72a69496b3ff6690c 100644 (file)
@@ -43,7 +43,6 @@ import javax.net.ssl.SSLSocketFactory;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
 
-import org.apache.commons.lang3.StringUtils;
 import org.openhab.binding.digitalstrom.internal.lib.config.Config;
 import org.openhab.binding.digitalstrom.internal.lib.manager.ConnectionManager;
 import org.openhab.binding.digitalstrom.internal.lib.serverconnection.HttpTransport;
@@ -334,7 +333,12 @@ public class HttpTransportImpl implements HttpTransport {
     }
 
     private boolean checkNeededSessionToken(String request) {
-        String functionName = StringUtils.substringAfterLast(StringUtils.substringBefore(request, "?"), "/");
+        String requestFirstPart = request;
+        int indexOfSeparator = request.indexOf("?");
+        if (indexOfSeparator >= 0) {
+            requestFirstPart = request.substring(0, request.indexOf("?"));
+        }
+        String functionName = requestFirstPart.substring(requestFirstPart.lastIndexOf("/") + 1);
         return !DsAPIImpl.METHODS_MUST_NOT_BE_LOGGED_IN.contains(functionName);
     }
 
@@ -347,8 +351,13 @@ public class HttpTransportImpl implements HttpTransport {
                 correctedRequest = correctedRequest + "?" + ParameterKeys.TOKEN + "=" + sessionToken;
             }
         } else {
-            correctedRequest = StringUtils.replaceOnce(correctedRequest, StringUtils.substringBefore(
-                    StringUtils.substringAfter(correctedRequest, ParameterKeys.TOKEN + "="), "&"), sessionToken);
+            String strippedRequest = correctedRequest
+                    .substring(correctedRequest.indexOf(ParameterKeys.TOKEN + "=") + ParameterKeys.TOKEN.length() + 1);
+            int indexOfSeparator = strippedRequest.indexOf("&");
+            if (indexOfSeparator >= 0) {
+                strippedRequest = strippedRequest.substring(0, indexOfSeparator);
+            }
+            correctedRequest = correctedRequest.replaceFirst(strippedRequest, sessionToken);
         }
         return correctedRequest;
     }