mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-30 00:23:21 +00:00 
			
		
		
		
	GUACAMOLE-1081: Merge support for parameter token modifiers.
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,12 +215,36 @@ public class TokenFilter { | |||||||
|                     output.append(notToken); |                     output.append(notToken); | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 // Otherwise, substitute value |                 // Otherwise, check for modifiers and substitute value appropriately | ||||||
|  |                 else { | ||||||
|  |                      | ||||||
|  |                     // 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 |                     else | ||||||
|                         output.append(tokenValue); |                         output.append(tokenValue); | ||||||
|                      |                      | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|  |             } | ||||||
|  |  | ||||||
|             // Update last regex match |             // Update last regex match | ||||||
|             endOfLastMatch = tokenMatcher.end(); |             endOfLastMatch = tokenMatcher.end(); | ||||||
|              |              | ||||||
|   | |||||||
| @@ -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