Expressions
Calculer les valeurs des champs en JavaScript, dans le navigateur ou sur le serveur
Pour les auteurs de formulaires : remplissez des champs dynamiquement en JavaScript, calculés dans le navigateur ou récupérés sur le serveur.
L’attribut expression d’un champ de formulaire vous permet de créer des formulaires dynamiques avec des expressions JavaScript.
Introduction
L’attribut expression est disponible sur plusieurs types de champ :
- champ
enum: pour remplir dynamiquement les options d’une liste déroulante - champ
expression: pour récupérer ou générer n’importe quel type de données - champ
html: pour construire son contenu HTML - champs
yamletlist: pour remplir leurs données
Les expressions JavaScript sont évaluées soit côté serveur (par défaut), soit côté client, selon la propriété runLocal du champ. Un champ html, ainsi que les types de champ local, local_out et credential, exécutent toujours leur expression dans le navigateur, quelle que soit la valeur de runLocal.
- Côté serveur (
runLocal: false, la valeur par défaut) : des fonctions prédéfinies qui récupèrent des données depuis des API, des fichiers et des bases de données. - Côté client (
runLocal: true) : le code exploite tout le moteur JavaScript dans le bac à sable du navigateur pour les calculs, transformations et manipulations.
Questions de sécurité
Comme les expressions sont évaluées avec la fonction JavaScript eval, l’injection de code est un risque potentiel :
- Les expressions côté serveur passent d’abord par un filtre : chaque appel doit être une fonction
fn.oufnc., et les lignes multiples,;, les template literals,process.envet les moyens de sortir d’eval(import,require,constructor, …) sont refusés. - Les expressions côté client sont évaluées dans le bac à sable du navigateur et peuvent être considérées comme sûres.
La sévérité du filtre dépend de EXPRESSION_SANITIZER :
| Valeur | Expressions côté serveur |
|---|---|
strict (par défaut) | appels fn. et fnc., et méthodes sur leur résultat, comme fn.fnTime().format('YYYY') |
paranoid | uniquement des appels directs fn. et fnc., sans méthode sur leur résultat |
off | toute expression côté serveur est refusée ; seules les expressions runLocal fonctionnent |
legacy | les règles de la 6.2.1, qui permettaient à tout utilisateur authentifié d’exécuter du code sur le serveur ; uniquement pour une mise à niveau, et uniquement dans l’environnement réel (pas depuis la page des paramètres) |
Une valeur vide ou inconnue équivaut à strict. Un changement s’applique à l’expression suivante, sans redémarrage.
Dans cette section
Chaque sujet a sa propre page :
| Page | Contenu |
|---|---|
| Espaces réservés | Faire référence à un autre champ, une constante ou l’utilisateur avec $(...) |
| Expressions locales | Du JavaScript exécuté dans le bac à sable du navigateur |
| Expressions distantes | Fonctions côté serveur pour les dates, réseaux, fichiers, SSH et noms numérotés |
| API REST | Appeler des API REST avec une authentification basique, par jeton ou personnalisée |
| Identifiants | Lire un identifiant enregistré |
| Tri | Trier des tableaux avec un objet de tri |
| Requêtes jq | Remodeler des données avec jq |