Helpers de Musctahe disponibles

Comparaison et logique

Ces helpers vous permettent d’afficher des données de manière conditionnelle, de comparer des valeurs ou d’appliquer une logique à l’intérieur des modèles. Ils sont particulièrement utiles pour rendre des valeurs basées sur des états, des signaux ou des modèles.

Helper: IIf

But: Conditionnel en ligne : si la condition est vraie, renvoyer le deuxième argument ; sinon, renvoyer le troisième.

Syntax: {{ IIf condition, value_if_true, value_if_false }}

Résultat:

{
  "is_admin": true
}

Modèle :

<p>Access: {{ IIf is_admin, "Administrator", "Standard user" }}</p>

Résultat

<p>Access: Administrator</p>

Si is_admin était false, le résultat serait Standard user.

Vous pouvez également utiliser directement des constantes ou des chaînes de caractères :

{{ IIf true, "✓", "✗" }} → ✓

Helper: If_

Objectif : expression conditionnelle avancée. Prend trois arguments : If_(condition, then_value, else_value)

Il est similaire à IIf, mais supporte des comparaisons plus flexibles lorsqu’il est combiné avec Equals_, Match, etc.

Résultat:

{
  "os": "Windows"
}

Modèle :

<p>{{ If_(Equals_ os "Windows"), "🪟 Windows detected", "Other OS" }}</p>

Résultat

<p>🪟 Windows detected</p>

Helper: Equals_

Objectif: Compare deux valeurs pour vérifier leur égalité. Souvent utilisé dans If_ ou IIf.

Résultat:

{
  "status": "running"
}

Modèle :

{{#Equals_ status "running"}}
  <p>Service is active</p>
{{/Equals_}}

Résultat

<p>Service is active</p>

Helper: Match

Purpose: Tests if a string matches a regular expression (case sensitive).

Résultat:

{
  "version": "v1.2.3"
}

Modèle :

{{#Match version "=v1\\."}}
  <p>Version 1.x detected</p>
{{/Match}}

Résultat

<p>Version 1.x detected</p>

Si le motif ne correspond pas (par exemple, la version est « v2.0 »), rien n’est affiché.

Helper: MatchI

Objectif: Identique à Match, mais insensible à la casse.

Résultat:

{
  "env": "Production"
}

Modèle :

{{#MatchI env "production"}}
  <p>Production environment</p>
{{/MatchI}}

Résultat

<p>Production environment</p>

Opérations de liste et d’objet

Ces helpers sont utiles lorsque l’on travaille avec des listes ou des dictionnaires (objets). Ils permettent l’itération, l’extraction et la transformation de données structurées dans les modèles Mustache.

Helper: Items

Objectif: Convertit un dictionnaire en une liste de paires clé*valeur afin qu’il puisse être itéré dans Mustache.

Résultat:

{
  "services": {
    "WAPT": "running",
    "Antivirus": "stopped"
  }
}

Modèle :

<ul>
  {{#Items services}}
    <li>{{key}}: {{value}}</li>
  {{/Items}}
</ul>

Résultat

<ul>
  <li>WAPT: running</li>
  <li>Antivirus: stopped</li>
</ul>

Helper: Get

Objectif: Récupère une valeur d’un dictionnaire par clé, avec une valeur par défaut facultative si la clé est manquante.

Résultat:

{
  "settings": {
    "theme": "dark"
  }
}

Modèle :

<p>Theme: {{ Get settings, "theme", "light" }}</p>
<p>Language: {{ Get settings, "lang", "en" }}</p>

Résultat

<p>Theme: dark</p>
<p>Language: en</p>

Helper: Count

Objectif: Compte le nombre d’éléments dans une liste ou le nombre de clés dans un dictionnaire.

Résultat:

{
  "disks": ["C:", "D:", "E:"]
}

Modèle :

<p>Number of disks: {{ Count disks }}</p>

Résultat

<p>Number of disks: 3</p>

Helper: Values

Objectif: Extrait les valeurs d’un dictionnaire sous forme de liste.

Résultat:

{
  "apps": {
    "firefox": "browser",
    "vlc": "media"
  }
}

Modèle :

<ul>
  {{#Values apps}}
    <li>{{.}}</li>
  {{/Values}}
</ul>

Résultat

<ul>
  <li>browser</li>
  <li>media</li>
</ul>

Helper: Keys

Objectif: Extrait les clés d’un dictionnaire sous forme de liste.

Résultat:

{
  "apps": {
    "firefox": "browser",
    "vlc": "media"
  }
}

Modèle :

<ul>
  {{#Keys apps}}
    <li>{{.}}</li>
  {{/Keys}}
</ul>

Résultat

<ul>
  <li>firefox</li>
  <li>vlc</li>
</ul>

Helper: First

Objectif: Extrait les n premiers éléments d’une liste.

Résultat:

{
  "users": ["alice", "bob", "carol"]
}

Modèle :

<ul>
  {{#First users, 2}}
    <li>{{.}}</li>
  {{/First}}
</ul>

Résultat

<ul>
  <li>alice</li>
  <li>bob</li>
</ul>

Helper: Last

Objectif: Extrait les n derniers éléments d’une liste.

Résultat:

{
  "logs": ["log1", "log2", "log3", "log4"]
}

Modèle :

<ul>
  {{#Last logs, 2}}
    <li>{{.}}</li>
  {{/Last}}
</ul>

Résultat

<ul>
  <li>log3</li>
  <li>log4</li>
</ul>

Helper: Slice

Objectif: Extrait une sous-liste d’une liste en utilisant les indices start et end.

Résultat:

{
  "items": ["A", "B", "C", "D", "E"]
}

Modèle :

<ul>
  {{#Slice items, 1, 4}}
    <li>{{.}}</li>
  {{/Slice}}
</ul>

Résultat

<ul>
  <li>B</li>
  <li>C</li>
  <li>D</li>
</ul>

Formatage des données

Ces aides sont utilisées pour convertir des valeurs numériques brutes ou structurées en formats plus lisibles, tels que des tailles de fichiers lisibles par l’homme ou des tableaux CSV.

Helper: HumanBytes

Objectif: Convertit la taille d’un octet (entier) en un format lisible par l’homme avec des unités (par exemple KB, MB, GB, etc.).

Cette aide est extrêmement utile pour afficher la taille des disques, l’utilisation de la mémoire, la taille des fichiers, etc.

Résultat:

{
  "disk_size": 1073741824
}

Modèle :

<p>Total size: {{ HumanBytes disk_size }}</p>

Résultat

<p>Total size: 1.00 GiB</p>

Vous pouvez également l’utiliser directement dans des boucles :

{{#disks}}
  <li>{{mountpoint}} * {{ HumanBytes size }}</li>
{{/disks}}

Helper: CSV

Objectif: Convertit une liste de dictionnaires en un texte séparé par des virgules* ou des points-virgules* (format CSV).

Cette fonction est utile pour exporter des lignes de données d’audit telles que des listes de logiciels, d’utilisateurs, etc.

Syntaxe: Liste CSV, séparateur, colonne1, colonne2, ...

Résultat:

{
  "users": [
    {"name": "Alice", "email": "alice@example.com"},
    {"name": "Bob", "email": "bob@example.com"}
  ]
}

Modèle :

<pre>{{ CSV users, ";", "name", "email" }}</pre>

Résultat

<pre>
  name;email
  Alice;alice@example.com
  Bob;bob@example.com
</pre>

Vous pouvez également utiliser une virgule ou une tabulation comme séparateur :

{{ CSV users, ",", "name", "email" }}

Manipulation de chaînes de caractères et de textes

Ces helpers vous permettent de transformer ou de reformater des valeurs de texte avant de les afficher. Ils sont utiles pour nettoyer les valeurs brutes, formater les étiquettes ou ajuster l’alignement.

Helper: Lower

Objectif: Convertit une chaîne de caractères en minuscules.

Résultat:

{
  "username": "AdminUser"
}

Modèle :

<p>Login (lowercase): {{ Lower username }}</p>

Résultat

<p>Login (lowercase): adminuser</p>

Helper: Upper

Objectif: Convertit une chaîne de caractères en majuscules.

Résultat:

{
  "department": "it support"
}

Modèle :

<p>DEPARTMENT: {{ Upper department }}</p>

Résultat

<p>DEPARTMENT: IT SUPPORT</p>

Helper: Pad

Objectif: Remplit une chaîne de caractères sur la droite afin d’atteindre une largeur donnée. Le troisième argument facultatif définit le caractère de remplissage.

Résultat:

{
  "value": "WAPT"
}

Modèle :

<pre>{{ Pad value, 10, "." }}</pre>

Résultat

<pre>WAPT......</pre>

Helper: PadLeft

Objectif: Complète une chaîne par la gauche jusqu’à atteindre une largeur donnée. Utile pour aligner des nombres.

Résultat:

{
  "id": "42"
}

Modèle :

<pre>{{ PadLeft id, 5, "0" }}</pre>

Résultat

<pre>00042</pre>

Helper: Sub

Objectif: Extrait une sous-chaîne d’une chaîne de caractères. Arguments : string, start, et optionnellement length.

Résultat:

{
  "serial": "ABC123456789"
}

Modèle :

<p>Short serial: {{ Sub serial, 3, 6 }}</p>

Résultat

<p>Short serial: 123456</p>

Helper: CamelCase

Objectif: Convertit une chaîne de caractères en camelCase. Utile pour le nommage des variables ou la standardisation de l’affichage.

Résultat:

{
  "title": "system audit summary"
}

Modèle :

<p>Var: {{ CamelCase title }}</p>

Résultat

<p>Var: systemAuditSummary</p>

Helper: SnakeCase

Objectif: Convertit une chaîne de caractères en snake_case (minuscules + underscores).

Résultat:

{
  "title": "System Audit Summary"
}

Modèle :

<p>Key: {{ SnakeCase title }}</p>

Résultat

<p>Key: system_audit_summary</p>

Helper: EnumTrim

Objectif: Nettoie les chaînes énumérées comme [0] Active, en supprimant le préfixe entre crochets.

Résultat:

{
  "status": "[1] Enabled"
}

Modèle :

<p>Status: {{ EnumTrim status }}</p>

Résultat

<p>Status: Enabled</p>

Helper: EnumTrimRight

Objectif: Comme EnumTrim, mais réduit les valeurs entre crochets uniquement du côté droit de la chaîne.

Résultat:

{
  "label": "Mode [2]"
}

Modèle :

<p>Mode: {{ EnumTrimRight label }}</p>

Résultat

<p>Mode: Mode</p>

Formatage de la date et de l’heure

Ces helpers sont utilisées pour formater les dates, les heures ou les durées. Elles sont particulièrement utiles pour rendre les champs d’audit tels que les dates d’installation, les heures de démarrage ou les durées de mise à jour.

Helper: LocalTime

Objectif: Convertit une heure UTC ou une date en heure localisée uniquement, sans la partie date.

Cette option est utile lorsque vous souhaitez afficher l’heure d’un événement (par exemple, l’heure de démarrage, l’heure de connexion de l’utilisateur), indépendamment de la date.

Résultat:

{
  "last_logon": "2024*04*15T06:45:00Z"
}

Modèle :

<p>Last logon time: {{ LocalTime last_logon }}</p>

Résultat

<p>Last logon time: 08:45:00</p>

(en supposant que l’heure locale est UTC+2)

Si l’entrée est une chaîne de date sans composante temporelle, le résultat sera par défaut 00:00:00 (minuit).

Helper: LocalDate

Objectif: Convertit une date UTC ou une date en une date locale uniquement, au format YYYY*MM*DD.

Résultat:

{
  "install_date": "2023*12*15T14:50:00Z"
}

Modèle :

<p>Installed on: {{ LocalDate install_date }}</p>

Résultat

<p>Installed on: 2023*12*15</p>

Helper: DateFmt

Objectif:**Forme une date en utilisant un **modèle personnalisé, similaire à strftime. L’entrée peut être une chaîne UTC ou un timestamp, et vous passez la chaîne de format comme second argument.

Résultat:

{
  "build_time": "2024*04*12T11:00:00Z"
}

Modèle :

<p>Build date: {{ DateFmt build_time, "%d/%m/%Y" }}</p>

Résultat

<p>Build date: 12/04/2024</p>

Helper: DateTimeToText

Objectif:**Convertit une date complète en une chaîne **lisible par l’homme (par exemple, « Friday 5 April 2024, 08:35 »).

Résultat:

{
  "last_check": "2024*04*05T08:35:00Z"
}

Modèle :

<p>Last check: {{ DateTimeToText last_check }}</p>

Résultat

<p>Last check: Friday 5 April 2024, 08:35</p>

(Le formatage dépend de la langue locale utilisée)

Helper: DateToText

Objectif: Convertit une chaîne de date en un format texte lisible (variante plus simple de DateTimeToText, style ancien).

Résultat:

{
  "release_date": "2024*02*01"
}

Modèle :

<p>Release: {{ DateToText release_date }}</p>

Résultat

<p>Release: Thursday 1 February 2024</p>

Helper: TimeLogToText

Objectif: Analyse une chaîne de temps delta (par exemple « 00:04:32 ») et la convertit dans un format lisible par l’homme.

Résultat:

{
  "uptime": "00:04:32"
}

Modèle :

<p>System uptime: {{ TimeLogToText uptime }}</p>

Résultat

<p>System uptime: 4 minutes, 32 seconds</p>

HTML et rendu

Ces aides vous permettent d’afficher en toute sécurité des données structurées, de les échapper ou de convertir des formats de balisage (Markdown, Wiki, etc.) en HTML pour les afficher dans des modèles.

Helper: {{> file.ext }}

Objectif: Inclut un fichier partiel (tel que HTML, CSS, TXT, PNG, JPG) dans la sortie du modèle.

Cela permet de partager des fragments réutilisables entre plusieurs modèles, comme des styles ou des en-têtes communs. Les partiels doivent être placés dans le répertoire templates/partials/ et peuvent être remplacés dans le dossier de modèles AppData de l’utilisateur.

Exemple de partial (``style.css``):

body {
  background: #f0f0f0;
}

Modèle :

{{> style.css }}

Résultat

<style>
body {
  background: #f0f0f0;
}
</style>

Helper: ToJson2

Objectif: Convertit une valeur (généralement un dictionnaire ou une liste) en JSON joliment imprimé pour l’afficher.

Il ajoute l’indentation et l’espacement pour la lisibilité - très utile pour le débogage ou l’affichage de données structurées.

Résultat:

{
  "network": {
    "ip": "192.168.1.10",
    "mask": "255.255.255.0"
  }
}

Modèle :

<pre>{{ ToJson2 network }}</pre>

Résultat

  <pre>{
"ip": "192.168.1.10",
"mask": "255.255.255.0"
  }
</pre>

Helper: ToJson

Objectif: Convertit une valeur en JSON compact (sans formatage). Utilisez-le pour incorporer JSON dans des attributs JavaScript ou HTML.

Résultat:

{
  "cpu": {
    "cores": 4,
    "model": "Intel"
  }
}

Modèle :

<code>{{ ToJson cpu }}</code>

Résultat

<code>{"cores":4,"model":"Intel"}</code>

Helper: JsonQuote

Objectif: Récupère le contenu JSON pour l’inclure en toute sécurité dans une chaîne HTML ou JavaScript. Récupère les guillemets, les barres obliques inverses, etc.

Résultat:

{
  "path": "C:\\Program Files\\WAPT"
}

Modèle :

<script>
    var path = "{{ JsonQuote path }}";
</script>

Résultat

<script>
    var path = "C:\\\\Program Files\\\\WAPT";
</script>

Helper: JsonQuoteUri

Purpose: Escapes JSON content for use inside a URL. It percent encodes special characters.

Résultat:

{
  "search": "disk space (C:)"
}

Modèle :

<a href="/search?q={{ JsonQuoteUri search }}">Search</a>

Résultat

<a href="/search?q=disk%20space%20%28C%3A%29">Search</a>

Helper: SimpleToHtml

Objectif: Convertit du texte brut avec des sauts de ligne en HTML de base (balises <br>, pas de support Markdown).

Utile pour afficher les journaux d’audit ou la sortie brute des commandes.

Résultat:

{
  "log": "Update started\nSuccess\nReboot required"
}

Modèle :

<div>{{ SimpleToHtml log }}</div>

Résultat

<div>Update started<br>Success<br>Reboot required</div>

Helper: MarkdownToHtml

Objectif: Analyse une chaîne Markdown et la rend au format HTML. Prend en charge les en-têtes, les listes, les caractères gras, etc.

Résultat:

{
  "note": "# Status\n* OK\n* Warning\n* Error"
}

Modèle :

<div class="markdown">{{ MarkdownToHtml note }}</div>

Résultat

<div class="markdown">
    <h1>Status</h1>
    <ul>
        <li>OK</li>
        <li>Warning</li>
        <li>Error</li>
    </ul>
</div>

Helper: WikiToHtml

Objectif: Analyse une chaîne de style Wiki* (similaire à la syntaxe de DokuWiki ou de MediaWiki) et la rend au format HTML.

Résultat:

{
  "doc": "== Info ==\nThis **device** is _critical_!"
}

Modèle :

<div class="wiki">{{ WikiToHtml doc }}</div>

Résultat

<div class="wiki">
    <h2>Info</h2>
    <p>This <strong>device</strong> is <em>critical</em>!</p>
</div>

Autres services

Ces helpers fournissent des fonctions d’usage général utiles pour le formatage ou la génération de valeurs dynamiques.

Helper: JoinValues

Objectif: Réunit les valeurs d’une liste (ou d’un dictionnaire) en une seule chaîne à l’aide d’un séparateur personnalisé.

Résultat:

{
  "packages": ["firefox", "vlc", "notepad++"]
}

Modèle :

<p>Installed: {{ JoinValues packages, ", " }}</p>

Résultat

<p>Installed: firefox, vlc, notepad++</p>

Fonctionne également avec les valeurs d’un dictionnaire :

{
  "apps": {
    "1": "WAPT",
    "2": "Chrome"
  }
}

Modèle :

<p>Apps: {{ JoinValues apps, " | " }}</p>

Résultat

<p>Apps: WAPT | Chrome</p>

Helper: Join

Objectif:**Joint les **éléments d’une liste ou les clés d’un dictionnaire à l’aide d’un séparateur.

Résultat:

{
  "groups": ["admins", "users", "guests"]
}

Modèle :

<p>Groups: {{ Join groups, " * " }}</p>

Résultat

<p>Groups: admins * users * guests</p>

Avec un dictionnaire :

{
  "users": {
    "u1": "Alice",
    "u2": "Bob"
  }
}

Modèle :

<p>User IDs: {{ Join users, ", " }}</p>

Résultat

<p>User IDs: u1, u2</p>

Helper: NewGuid

Objectif: Génère un UUID (Universally Unique Identifier) aléatoire. Utile pour marquer des données ou des tests.

Modèle :

<p>Generated ID: {{ NewGuid }}</p>

Résultat

<p>Generated ID: a8f9e870*3d3c*4a71*91e9*52a4572282e9</p>

Helper: ExtractFileName

Objectif: Extrait le nom du fichier d’un chemin complet.

Résultat:

{
  "filepath": "C:/Program Files/WAPT/wapt.exe"
}

Modèle :

<p>File: {{ ExtractFileName filepath }}</p>

Résultat

<p>File: wapt.exe</p>

Encodage et hachage

Ces helpers vous permettent de coder/décoder des chaînes, du contenu binaire ou de générer des hachages. Ils sont particulièrement utiles pour travailler avec des journaux, des identifiants, des images ou des URL dans des rapports d’audit.

Helper: b64encode

Objectif: Encode une chaîne de caractères simple au format base64.

Résultat:

{
  "password": "secret123"
}

Modèle :

<p>Encoded password: {{ b64encode password }}</p>

Résultat

<p>Encoded password: c2VjcmV0MTIz</p>

Helper: sha256

Objectif: Calcule le hachage SHA*256 d’une chaîne de caractères. Couramment utilisé pour les contrôles d’intégrité ou l’anonymisation.

Résultat:

{
  "serial": "ABC123456"
}

Modèle :

<p>SHA256: {{ sha256 serial }}</p>

Résultat

<p>SHA256: b7f51c2... (64 characters)</p>

Helper: sha1

Objectif: Calcule le hachage SHA*1 d’une chaîne de caractères (utilisation ancienne).

Résultat:

{
  "username": "admin"
}

Modèle :

<p>SHA1: {{ sha1 username }}</p>

Résultat

<p>SHA1: d033e22ae348aeb5660fc2140aec35850c4da997</p>

Helper: md5

Objectif: Génère le hachage MD5 d’une chaîne de caractères.

Résultat:

{
  "filename": "report.pdf"
}

Modèle :

<p>MD5: {{ md5 filename }}</p>

Résultat

<p>MD5: 76c7f3b9d5f43a86ad6f9e1a4567ebc3</p>

Helper: BlobToBase64

Objectif: Encode le contenu binaire (par exemple, les journaux, les images, les pièces jointes) en base64.

Utilisé en interne lors de l’intégration de données binaires dans HTML ou JavaScript.

Résultat:

{
  "log_data": "binary_content"
}

Modèle :

<pre>{{ BlobToBase64 log_data }}</pre>

Résultat

<pre>YmFzZTY0IGVuY29kZWQgbG9n...</pre>

Helper: b64decode

Objectif: Décode une chaîne encodée en base64*.

Résultat:

{
  "encoded": "SGVsbG8gd29ybGQh"
}

Modèle :

<p>Decoded: {{ b64decode encoded }}</p>

Résultat

<p>Decoded: Hello world!</p>

Helper: _chr

Objectif: Convertit un entier ou une liste d’entiers en caractères ASCII correspondants.

Ceci peut être utilisé pour créer des séquences de contrôle comme le retour chariot (13), la nouvelle ligne (10), ou même des emojis (valeurs Unicode).

Résultat:

{
  "newline": [13, 10]
}

Modèle :

<pre>{{ _chr newline }}</pre>

Résultat

<pre>↵ (carriage return + line feed)</pre>

Autre exemple :

<p>{{ _chr 65 }}</p>

Résultat

<p>A</p>

Réseau et HTTP

Ces helpers exécutent des requêtes HTTP directement à partir du modèle. Ils permettent de récupérer des données dynamiques à partir d’URL ou d’API (internes ou externes).

⚠️ Avertissement: Ces helpers peuvent avoir un impact sur les performances et doivent être utilisées avec prudence dans les modèles de production. Préférez les variantes Safe lorsque vous exposez des données aux utilisateurs.

Helper: HttpGet

Objectif: Envoie une requête HTTP GET de base à l’URL donnée.

Résultat:

{
  "url": "https://api.example.com/status"
}

Modèle :

<p>Status: {{ HttpGet url }}</p>

Résultat

<p>Status: {"status":"ok"}</p>

Si la réponse est JSON, elle sera retournée sous forme de chaîne de caractères (non analysée). Utilisez ToJson2 si nécessaire.

Helper: HttpGetSafe

Objectifs : Comme HttpGet, mais avec une validation interne. Assure que l’URL est sûre et que l’accès est autorisé. Préférable dans les modèles qui font face au public.

Résultat:

{
  "url": "https://example.com/uptime.txt"
}

Modèle :

<p>Uptime: {{ HttpGetSafe url }}</p>

Résultat

<p>Uptime: 3 days, 6 hours</p>

Helper: DoHttpGet

Objectif: Version de bas niveau de HttpGet, avec validation optionnelle du certificat. Cette version n’est pas recommandée dans les modèles - elle est utilisée en interne.

Résultat:

{
  "url": "https://internal.local/api",
  "verify": "0"
}

Modèle :

<p>{{ DoHttpGet url, verify }}</p>

Résultat

<p>{"message": "OK"}</p>

Helper: HttpPost

Objectif: Envoie une requête HTTP POST avec une charge utile. Les données doivent être un tableau : [url, payload].

Résultat:

{
  "post_data": ["https://api.example.com/send", "msg=hello"]
}

Modèle :

<p>Response: {{ HttpPost post_data }}</p>

Résultat

<p>Response: {"status":"received"}</p>

Helper: HttpPostSafe

Objectif: Variante sûre de HttpPost, appliquant des restrictions de domaine ou de contenu.

Résultat:

{
  "post_data": ["https://trusted.example.com/api", "data=123"]
}

Modèle :

<p>{{ HttpPostSafe post_data }}</p>

Résultat

<p>{"status":"ok"}</p>

Helper: DoHttpPost

Purpose: Low level variant of HttpPost with optional certificate check.

Résultat:

{
  "args": ["https://local/api", "ping=1"],
  "verify": "0"
}

Modèle :

<p>{{ DoHttpPost args, verify }}</p>

Résultat

<p>{"ping":"ok"}</p>