Allow special characters with their literal form in StyleBook
In StyleBook definition, you can use verbatim strings when special characters in a string have to take their literal form. These strings can contain escape characters, backslash, quotes, parentheses, whitespaces, brackets, and so on.
In StyleBooks, you can include Citrix ADC Policy Expressions in their literal form using verbatim strings. The Policy Expressions typically contain special characters. Without verbatim strings, you have to escape special characters by breaking strings into substrings.
To create a verbatim string, encapsulate a string between special characters as follows:
~{string}~
You can use verbatim strings in the StyleBook expressions.
Note
Do not use the sequence of characters }~ in an input string because this sequence indicates the end of a verbatim string.
Example:
---
name: test-deny-url
namespace: citrix.adc.stylebooks
version: "6.2"
display-name: StyleBook for creating an AppFw profile
description: This Stylebook configures an AppFw config.
schema-version: "1.0"
import-stylebooks:
-
namespace: netscaler.nitro.config
prefix: ns
version: "13.0"
parameters:
-
name: name
type: string
required: true
substitutions:
default-deny-urls-regex:
"Command_injection_attack": str("([ /=]|\\t|\\n)(ls|cat)([ ;'" + "\\\"&].*)?$")
"Command_injection_attack2": ~{([ /=]|\t|\n)(ls|rm|cat)([ ;'\"&].*)?$}~
components:
-
name: appfw-profile-comp
type: ns::appfwprofile
properties:
name: $parameters.name
type: ["XML"]
components:
-
name: appfw-profile-denyurl-default-binding-subcomp-all
type: ns::appfwprofile_denyurl_binding
properties:
name: $parent.properties.name
denyurl?: $substitutions.default-deny-urls-regex["Command_injection_attack"]
state?: "ENABLED"
-
name: appfw-profile-denyurl-default-binding-subcomp-all2
type: ns::appfwprofile_denyurl_binding
properties:
name: $parent.properties.name
denyurl?: $substitutions.default-deny-urls-regex["Command_injection_attack2"]
state?: "ENABLED"
<!--NeedCopy-->
In this example, the default-deny-urls-regex
substitutions have a verbatim expression.
-
"Command_injection_attack": str("([ /=]|\\t|\\n)(ls|cat)([ ;'" + "\\\"&].*)?$")
: StyleBook processes it as a regular expression. -
"Command_injection_attack2": ~{([ /=]|\t|\n)(ls|rm|cat)([ ;'\"&].*)?$}~
: StyleBook processes it as a verbatim expression. The special characters in this string take the literal form.
Concatenate multiple verbatim strings
You can concatenate verbatim strings with the regular strings or strings with interpolations. When you do so, the StyleBook skips the interpretation only for the verbatim strings. Use the plus (+) operator between the strings to concatenate.
Example:
value: "~{\"id\": \"}~ + %{$atom.key}% + ~{\", \"value\": \"}~ + %{$atom.value}% + ~{\"}~"
<!--NeedCopy-->
In this example, %{$atom.key}%
and %{$atom.value}%
are interpreted. And, the interpretation is skipped for the rest.