Hide navigation sidebar
Hide table of contents sidebar
Skip to content
Quickstart Official documentation Setuphelpers Changelog FAQ
Back to top
View this page
Toggle table of contents sidebar

# 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`

Objectif: Test si une chaîne de caractères correspond à une expression régulière (sensible à la casse).

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`

Objectif: Récupère le contenu JSON pour l’utiliser à l’intérieur d’une URL. Il encode les caractères spéciaux en pourcentage.

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`

Objectif: Variante de bas niveau de HttpPost avec vérification optionnelle du certificat.

Résultat:

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

Modèle :

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

Résultat

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