You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@guacamole.apache.org by mj...@apache.org on 2018/06/03 19:06:44 UTC
[28/50] guacamole-client git commit: GUACAMOLE-38: Break userInfo
parsing into its own function, and properly decode username and password.
GUACAMOLE-38: Break userInfo parsing into its own function, and properly decode 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/aafc4359
Tree: http://git-wip-us.apache.org/repos/asf/guacamole-client/tree/aafc4359
Diff: http://git-wip-us.apache.org/repos/asf/guacamole-client/diff/aafc4359
Branch: refs/heads/master
Commit: aafc4359c812c1cf90b4c5d373c56cd4ceb2e5f6
Parents: 6dad254
Author: Nick Couchman <vn...@apache.org>
Authored: Mon May 14 10:12:17 2018 -0400
Committer: Nick Couchman <vn...@apache.org>
Committed: Fri Jun 1 13:40:52 2018 -0400
----------------------------------------------------------------------
.../auth/quickconnect/utility/QCParser.java | 55 ++++++++++++++++----
1 file changed, 46 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/aafc4359/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 9601e1c..2c0b6dc 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
@@ -136,18 +136,18 @@ public class QCParser {
// Look for the username and password and parse them out.
if (userInfo != null && !userInfo.isEmpty()) {
- Matcher userinfoMatcher = userinfoPattern.matcher(userInfo);
- if (userinfoMatcher.matches()) {
- String username = userinfoMatcher.group(USERNAME_GROUP);
- String password = userinfoMatcher.group(PASSWORD_GROUP);
+ try {
+ Map<String, String> userInfoParams = parseUserInfo(userInfo);
- if (username != null && !username.isEmpty())
- qcConfig.setParameter("username", username);
+ if (userInfoParams.containsKey("username"))
+ qcConfig.setParameter("username", userInfoParams.get("username"));
- if (password != null && !password.isEmpty())
- qcConfig.setParameter("password", password);
+ if (userInfoParams.containsKey("password"))
+ qcConfig.setParameter("password", userInfoParams.get("password"));
+ }
+ catch (UnsupportedEncodingException e) {
+ throw new GuacamoleServerException("Unexpected lack of UTF-8 encoding support.", e);
}
-
}
return qcConfig;
@@ -185,6 +185,43 @@ public class QCParser {
}
/**
+ * Parse the given string for username and password values,
+ * and return a map containing the username, password
+ * or both.
+ *
+ * @param userInfo
+ * The string to parse for username/password values.
+ *
+ * @return
+ * A map with the username, password, or both.
+ *
+ * @throws UnsupportedEncodingException
+ * If Java lacks UTF-8 support.
+ */
+ public static Map<String, String> parseUserInfo(String userInfo)
+ throws UnsupportedEncodingException {
+
+ Map<String, String> userInfoMap = new HashMap<String, String>();
+ Matcher userinfoMatcher = userinfoPattern.matcher(userInfo);
+
+ if (userinfoMatcher.matches()) {
+ String username = URLDecoder.decode(
+ userinfoMatcher.group(USERNAME_GROUP), "UTF-8");
+ String password = URLDecoder.decode(
+ userinfoMatcher.group(PASSWORD_GROUP), "UTF-8");
+
+ if (username != null && !username.isEmpty())
+ userInfoMap.put("username", username);
+
+ if (password != null && !password.isEmpty())
+ userInfoMap.put("password", password);
+ }
+
+ return userInfoMap;
+
+ }
+
+ /**
* Given a GuacamoleConfiguration object, generate a name
* for the configuration based on the protocol, host, user
* and port in the configuration, and return the string value.