GUACAMOLE-38: Switch to regex for parsing username and password.

Project: http://git-wip-us.apache.org/repos/asf/guacamole-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/guacamole-client/commit/16130b32
Tree: http://git-wip-us.apache.org/repos/asf/guacamole-client/tree/16130b32
Diff: http://git-wip-us.apache.org/repos/asf/guacamole-client/diff/16130b32

Branch: refs/heads/master
Commit: 16130b32fef8a26a54af2d02015bf843a1b6266e
Parents: 9ab50a2
Author: Nick Couchman <vn...@apache.org>
Authored: Sun Mar 25 09:09:34 2018 -0400
Committer: Nick Couchman <vn...@apache.org>
Committed: Fri Jun 1 13:40:51 2018 -0400

----------------------------------------------------------------------
 .../auth/quickconnect/utility/QCParser.java     | 31 +++++++++++++++-----
 1 file changed, 24 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/16130b32/extensions/guacamole-auth-quickconnect/src/main/java/org/apache/guacamole/auth/quickconnect/utility/QCParser.java
----------------------------------------------------------------------
diff --git 
a/extensions/guacamole-auth-quickconnect/src/main/java/org/apache/guacamole/auth/quickconnect/utility/QCParser.java
 
b/extensions/guacamole-auth-quickconnect/src/main/java/org/apache/guacamole/auth/quickconnect/utility/QCParser.java
index 30121df..6bd0435 100644
--- 
a/extensions/guacamole-auth-quickconnect/src/main/java/org/apache/guacamole/auth/quickconnect/utility/QCParser.java
+++ 
b/extensions/guacamole-auth-quickconnect/src/main/java/org/apache/guacamole/auth/quickconnect/utility/QCParser.java
@@ -23,6 +23,8 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Arrays;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import org.apache.guacamole.GuacamoleClientException;
 import org.apache.guacamole.GuacamoleException;
 import org.apache.guacamole.protocol.GuacamoleConfiguration;
@@ -45,6 +47,21 @@ public class QCParser {
     public static final String DEFAULT_URI_HOST = "localhost";
 
     /**
+     * The regex to use to split username and password.
+     */
+    private static final Pattern userinfoPattern = 
Pattern.compile("(^[^:]+):(.*)");
+
+    /**
+     * The regex group of the username.
+     */
+    private static final int USERNAME_GROUP = 1;
+
+    /**
+     * THe regex group of the password.
+     */
+    private static final int PASSWORD_GROUP = 2;
+
+    /**
      * Parse out a URI string and get a connection from that string,
      * or an exception if the parsing fails.
      *
@@ -88,11 +105,11 @@ public class QCParser {
             paramList = Arrays.asList(query.split("&"));
 
         if (userInfo != null && !userInfo.equals("")) {
-            String[] authenticators = userInfo.split(":");
-            if (authenticators.length > 0 && authenticators[0] != null)
-                username = authenticators[0];
-            if (authenticators.length > 1 && authenticators[1] != null)
-                password = authenticators[1];
+
+            Matcher userinfoMatcher = userinfoPattern.matcher(userInfo);
+            username = userinfoMatcher.group(USERNAME_GROUP);
+            password = userinfoMatcher.group(PASSWORD_GROUP);
+
         }
 
         GuacamoleConfiguration qcConfig = new GuacamoleConfiguration();
@@ -102,10 +119,10 @@ public class QCParser {
         if (port > 0)
             qcConfig.setParameter("port", Integer.toString(port));
 
-        if (username != null)
+        if (username != null && username.length() > 0)
             qcConfig.setParameter("username", username);
 
-        if (password != null)
+        if (password != null && password.length() > 0)
             qcConfig.setParameter("password", password);
 
         if (paramList != null) {

Reply via email to