mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 05:07:41 +00:00
GUACAMOLE-1081: Implement token modifiers for upper and lower case.
This commit is contained in:
@@ -39,7 +39,7 @@ public class TokenFilter {
|
|||||||
* escape character preceding the token, the name of the token, and the
|
* escape character preceding the token, the name of the token, and the
|
||||||
* entire token itself.
|
* entire token itself.
|
||||||
*/
|
*/
|
||||||
private final Pattern tokenPattern = Pattern.compile("(.*?)(^|.)(\\$\\{([A-Za-z0-9_]*)\\})");
|
private final Pattern tokenPattern = Pattern.compile("(.*?)(^|.)(\\$\\{([A-Za-z0-9_]*)(\\:(.*))?\\})");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The index of the capturing group within tokenPattern which matches
|
* The index of the capturing group within tokenPattern which matches
|
||||||
@@ -66,6 +66,12 @@ public class TokenFilter {
|
|||||||
*/
|
*/
|
||||||
private static final int TOKEN_NAME_GROUP = 4;
|
private static final int TOKEN_NAME_GROUP = 4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The index of the capturing group within tokenPattern which matches the
|
||||||
|
* string of the actual modifier for the token.
|
||||||
|
*/
|
||||||
|
private static final int TOKEN_MODIFIER = 6;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The values of all known tokens.
|
* The values of all known tokens.
|
||||||
*/
|
*/
|
||||||
@@ -182,6 +188,7 @@ public class TokenFilter {
|
|||||||
// Pull possible leading text and first char before possible token
|
// Pull possible leading text and first char before possible token
|
||||||
String literal = tokenMatcher.group(LEADING_TEXT_GROUP);
|
String literal = tokenMatcher.group(LEADING_TEXT_GROUP);
|
||||||
String escape = tokenMatcher.group(ESCAPE_CHAR_GROUP);
|
String escape = tokenMatcher.group(ESCAPE_CHAR_GROUP);
|
||||||
|
String modifier = tokenMatcher.group(TOKEN_MODIFIER);
|
||||||
|
|
||||||
// Append leading non-token text
|
// Append leading non-token text
|
||||||
output.append(literal);
|
output.append(literal);
|
||||||
@@ -208,9 +215,33 @@ public class TokenFilter {
|
|||||||
output.append(notToken);
|
output.append(notToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, substitute value
|
// Otherwise, check for modifiers and substitute value appropriately
|
||||||
else
|
else {
|
||||||
output.append(tokenValue);
|
|
||||||
|
// If a modifier is present, try to use it.
|
||||||
|
if (modifier != null && !modifier.isEmpty()) {
|
||||||
|
switch (modifier) {
|
||||||
|
// Switch token to upper-case
|
||||||
|
case "upper":
|
||||||
|
output.append(tokenValue.toUpperCase());
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Switch token to lower case
|
||||||
|
case "lower":
|
||||||
|
output.append(tokenValue.toLowerCase());
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Just append the token value
|
||||||
|
default:
|
||||||
|
output.append(tokenValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// No modifier present, so just append token value.
|
||||||
|
else
|
||||||
|
output.append(tokenValue);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -39,6 +39,7 @@ public class TokenFilterTest {
|
|||||||
TokenFilter tokenFilter = new TokenFilter();
|
TokenFilter tokenFilter = new TokenFilter();
|
||||||
tokenFilter.setToken("TOKEN_A", "value-of-a");
|
tokenFilter.setToken("TOKEN_A", "value-of-a");
|
||||||
tokenFilter.setToken("TOKEN_B", "value-of-b");
|
tokenFilter.setToken("TOKEN_B", "value-of-b");
|
||||||
|
tokenFilter.setToken("TOKEN_C", "Value-of-C");
|
||||||
|
|
||||||
// Test basic substitution and escaping
|
// Test basic substitution and escaping
|
||||||
assertEquals(
|
assertEquals(
|
||||||
@@ -48,8 +49,23 @@ public class TokenFilterTest {
|
|||||||
|
|
||||||
// Unknown tokens must be interpreted as literals
|
// Unknown tokens must be interpreted as literals
|
||||||
assertEquals(
|
assertEquals(
|
||||||
"${NOPE}hellovalue-of-aworld${TOKEN_C}",
|
"${NOPE}hellovalue-of-aworld${TOKEN_D}",
|
||||||
tokenFilter.filter("${NOPE}hello${TOKEN_A}world${TOKEN_C}")
|
tokenFilter.filter("${NOPE}hello${TOKEN_A}world${TOKEN_D}")
|
||||||
|
);
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
"Value-of-C",
|
||||||
|
tokenFilter.filter("${TOKEN_C}")
|
||||||
|
);
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
"value-of-c",
|
||||||
|
tokenFilter.filter("${TOKEN_C:lower}")
|
||||||
|
);
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
"VALUE-OF-C",
|
||||||
|
tokenFilter.filter("${TOKEN_C:upper}")
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user