StyleBook configuration

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 NetScaler 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.

Allow special characters with their literal form in StyleBook