Espaces réservés avancés

Les espaces réservés tels que ${user.email} ou ${device.model} sont utilisés à plusieurs endroits dans Relution, notamment pour les noms d’appareils, les certificats, les comptes Exchange ou les configurations d’applications. Le moteur de modèles sous-jacent FreeMarker met à disposition des fonctions supplémentaires permettant d’adapter davantage les espaces réservés.

À partir de Relution 26.5.3, les expressions d’espaces réservés ne peuvent plus lire que les valeurs prévues comme espaces réservés, c’est-à-dire celles proposées dans le portail sous Espaces réservés disponibles. Les autres propriétés restent vides et l’appel d’autres méthodes fait échouer l’évaluation (voir Remarques →). Les expressions personnalisées qui vont au-delà des espaces réservés proposés doivent être vérifiées après la mise à jour. ${device.rooted} et ${device.jailbroken} sont évalués depuis : pour un appareil rooté ou jailbreaké, true est inséré ; sinon, l’espace réservé reste vide.


Sous-chaînes (substring)

La notation [début..*longueur] permet de n’utiliser qu’un extrait d’une valeur : au plus longueur caractères à partir de la position début. Le décompte commence à 0. Si la valeur est plus courte, moins de caractères sont insérés ; si elle est vide, aucun. Cela suppose que début ne se situe pas au-delà de la fin de la valeur ; sinon, la substitution échoue comme avec [début..fin] (voir la remarque ci-dessous).

  • ${user.givenName[0..*1]} → première lettre du prénom
  • ${device.model[0..*2]} → deux premiers caractères du modèle d’appareil

Exemple : ${user.givenName[0..*1]}${user.surname[0..*1]}-${device.model[0..*2]}-${(device.custom1)!"00000"} donne, pour un compte utilisateur « Max Mustermann » avec une valeur custom1 de 00042 sur un iPad12,1, le résultat MM-iP-00042.


Valeur par défaut pour un champ non défini

Si un champ n’est pas défini, l’opérateur ! permet de définir une valeur par défaut : ${(device.custom1)!"00000"}. Si le champ personnalisé custom1 n’est pas défini, 00000 est utilisé à la place, au lieu que l’espace réservé reste vide. Une valeur définie mais vide est en revanche considérée comme présente : la valeur par défaut ne s’applique pas et l’espace réservé reste vide.


Casse et remplacement de caractères

?lower_case et ?upper_case convertissent intégralement une valeur en minuscules ou en majuscules. ?replace("ancien", "nouveau") permet de remplacer des caractères ou des chaînes de caractères, par exemple pour convertir les trémas destinés à des systèmes qui n’acceptent pas de caractères spéciaux dans le nom d’utilisateur :

${user.surname?lower_case?replace("ä","ae")?replace("ö","oe")?replace("ü","ue")?replace("ß","ss")}


Utiliser la partie locale d’une adresse e-mail

Pour n’utiliser que la partie située avant le caractère @ de ${user.name} (ou ${user.email}), plusieurs variantes sont disponibles :

  • ${user.name?keep_before("@")}
  • ${user.name?split("@")[0]}
  • ${user.name[0..user.name?index_of("@")-1]}

Si la valeur ne contient pas de @, les deux premières variantes renvoient la valeur complète, tandis que la troisième échoue. ?keep_before est donc recommandé.


Certificats utilisateur

Nouveau dans 26.5

Les espaces réservés de la forme ${user.certificate.…} insèrent les certificats enregistrés dans le profil utilisateur (section Certificats utilisateur) dans une configuration, sous forme de chaîne encodée en base64 — par exemple dans une configuration d’application gérée dont les champs attendent un certificat en base64. L’espace réservé est résolu lors de la transmission de la configuration, à partir de l’utilisateur affecté à l’appareil concerné.

Trois formes de sélection sont disponibles :

Espace réservéRésolution
${user.certificate.EXCHANGE}certificat du sous-type ayant la durée de validité restante la plus longue
${user.certificate.EXCHANGE["mon-certificat"]}certificat portant exactement ce nom (sensible à la casse) ; s’il y en a plusieurs du même nom, celui ayant la durée de validité restante la plus longue
${user.certificate.EXCHANGE[device.serialnumber]}le nom du certificat est calculé à partir d’un autre espace réservé

Le sous-type correspond à la Catégorie sélectionnée pour le certificat dans le profil utilisateur. Le sous-type n’est pas sensible à la casse.

Catégorie dans le profil utilisateurSous-type
Certificat généralGENERAL_CERTIFICATE
Wi-FiWIFI
ExchangeEXCHANGE
VPN et applicationsVPN
Cryptage S/MIMESMIME_ENCRYPTION
Signature S/MIMESMIME_SIGNING

Nom de certificat entre crochets

Pour les noms calculés, l’espace réservé interne s’écrit sans ${…} englobant, donc [device.serialnumber] et non [${device.serialnumber}] — les expressions ${…} imbriquées ne sont pas prises en charge. Pour les noms composés uniquement de lettres, de chiffres et de tirets bas, la forme pointée ${user.certificate.EXCHANGE.iPhone} fonctionne également.

Mot de passe des certificats PKCS#12

Pour les certificats PKCS#12 protégés par mot de passe (par exemple une identité S/MIME), le mot de passe d’importation est fourni via la clé réservée password :

  • ${user.certificate.SMIME_SIGNING.password}
  • ${user.certificate.SMIME_SIGNING["mon-certificat"].password}

Pour les certificats qui ne sont pas des conteneurs PKCS#12, la valeur reste vide. password étant une clé réservée, un certificat portant lui-même le nom password ne peut pas être sélectionné via un espace réservé — dans ce cas, la forme pointée comme la forme à crochets renvoient le mot de passe. Il convient d’utiliser un autre nom pour de tels certificats.

Format de sortie

Indépendamment du format de fichier téléversé (PEM ou DER), l’espace réservé renvoie toujours la forme DER du certificat encodée en base64. Les conteneurs PKCS#12 sont livrés encodés en base64 sans modification, afin de pouvoir être importés directement par l’application destinataire avec le mot de passe. Les autres types de certificats sont également livrés tels qu’ils sont enregistrés.

Exemple d’une configuration d’application gérée pour un client de messagerie avec signature S/MIME :

<key>SMIMECertificate</key>
<string>${user.certificate.SMIME_SIGNING}</string>
<key>SMIMECertificatePassword</key>
<string>${user.certificate.SMIME_SIGNING.password}</string>

Disponibilité

Les espaces réservés de certificat utilisateur sont prévus pour les configurations dont le contenu est transmis à l’appareil de l’utilisateur affecté, en particulier les configurations d’applications gérées (iOS/macOS, Android Enterprise), les configurations Knox (Android Enterprise, Samsung KNS), les profils de configuration personnalisés (.mobileconfig) et Windows Custom CSP. Dans ces configurations, le portail les affiche également sous Espaces réservés disponibles. Ils ne sont pas résolus (l’espace réservé reste vide) dans les noms d’appareils, c’est-à-dire lors du renommage d’appareils et dans les configurations de nom d’appareil Apple et Windows, dans les messages d’écran de verrouillage et d’assistance, la configuration du compte professionnel et les actions de configuration Android Enterprise, dans les variables d’environnement des scripts ainsi que dans les actions webhook des groupes d’appareils. Ils ne sont pas pris en charge pour les configurations Linux. Dans les profils de configuration personnalisés (.mobileconfig), l’espace réservé n’est possible que dans les champs de type string, et non dans les champs de type data ; dans les configurations d’applications gérées, les deux fonctionnent.

Si aucun certificat ne peut être déterminé — par exemple en cas de sous-type inconnu, de nom inexistant ou d’absence d’affectation d’utilisateur —, l’espace réservé reste vide et la configuration est tout de même livrée. Les détails sur la cause sont consignés dans le journal du serveur.


Remarques

Les espaces réservés de base disponibles dans une configuration donnée (par exemple ${user.email}, ${device.serialnumber}) sont affichés dans le formulaire de configuration ou dans la boîte de dialogue concernée, dans la section Espaces réservés disponibles. Un clic sur une entrée la copie dans le presse-papiers.

Les valeurs non définies sont insérées sous forme de chaîne vide. En revanche, si l’évaluation d’une expression échoue — par exemple un extrait [0..0] d’une valeur définie mais vide ou un nom de fonction inconnu —, cela ne concerne pas seulement l’espace réservé en question : l’ensemble du texte du champ ou de la configuration est livré tel quel, c’est-à-dire avec toutes les expressions ${…} non remplacées. La cause est consignée dans le journal du serveur.

Top