Custom functions allow one to extend <abbrtitle="LemonLDAP::NG">LL::NG</abbr>, they can be used in <ahref="writingrulesand_headers.html#headers"class="wikilink1"title="documentation:2.0:writingrulesand_headers">headers</a>, <ahref="writingrulesand_headers.html#rules"class="wikilink1"title="documentation:2.0:writingrulesand_headers">rules</a> or <ahref="formreplay.html"class="wikilink1"title="documentation:2.0:formreplay">form replay data</a>.
<h2class="sectionedit2"id="write_custom_functions_library">Écrire une librairie de fonctions personnalisées</h2>
<divclass="level2">
<p>
Créer un module Perl avec des fonctions personnalisées. Le module peut être appelé à la diligence du rédacteur, par exemple <code>SSOExtensions.pm</code> :
<divclass="notetip">Le premier paramètre passé à la fonction personnalisée est l'<abbrtitle="Uniform Resource Locator">URL</abbr> demandée, c'est à dire<ul>
<liclass="level1"><divclass="li"><strong>l'<abbrtitle="Uniform Resource Locator">URL</abbr> complète du portail</strong> si la fonction personnalisée est appelée par le portail (i.e. <ahref="https://auth.example.com/"class="urlextern"title="https://auth.example.com/"rel="nofollow">https://auth.example.com/</a>)</div>
</li>
<liclass="level1"><divclass="li"><strong>l'<abbrtitle="Uniform Resource Locator">URL</abbr> absolue</strong> si elle est appelée par un agent (e.g. /admin/index.php?param=foo).</div>
Il faut indiquer au <ahref="fastcgiserver.html"class="wikilink1"title="documentation:2.0:fastcgiserver">serveur FastCGI de LLNG</a> le fichier à lire en utilisant l'option <code>-f</code> ou la variable d'environnement <code>CUSTOM_FUNCTIONS_FILE</code>. En utilisant les packages, il suffit de modifier le fichier <code>/etc/default/llng-fastcgi-server</code> (ou <code>/etc/default/lemonldap-ng-fastcgi-server</code>) :
</p>
<preclass="code file sh"># Nombre de processus (défaut : 7)
<h3class="sectionedit5"id="declare_custom_functions">Declarer les fonctions personnalisées</h3>
<divclass="level3">
<p>
Aller dans le manager, <code>Paramètres généraux</code> » <code>Paramètres avancés</code> » <code>Fonctions personnalisées</code> et indiquer :
</p>
<preclass="code">SSOExtensions::function1</pre>
<divclass="noteimportant">Si la fonction n'est pas compatible avec la <ahref="safejail.html"class="wikilink1"title="documentation:2.0:safejail">cage saine</a>, il faut désactiver la mise en cage.