<h1class="sectionedit1"id="writing_rules_and_headers">Écrire les règles et en-têtes</h1>
<divclass="level1">
<p>
Lemonldap::NG gère les applications par leurs noms d'hôtes(hôtes virtuels d'Apache). Rules are used to protect applications, headers are HTTP headers added to the request to give datas to the application (for logs, profiles,…).
</p>
<divclass="noteimportant">Noter que les variables designées par $xx correspondent au nom de <ahref="exportedvars.html"class="wikilink1"title="documentation:2.0:exportedvars">variables exportées</a> ou de <ahref="performances.html#macros_and_groups"class="wikilink1"title="documentation:2.0:performances">noms de macro</a>.
</div>
<p>
See also <ahref="extendedfunctions.html"class="wikilink1"title="documentation:2.0:extendedfunctions">extended functions</a>.
</p>
</div><!-- EDIT1 SECTION "Writing rules and headers" [1-492] -->
<h2class="sectionedit2"id="rules">Règles</h2>
<divclass="level2">
<p>
A rule associates a <ahref="http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions"class="urlextern"title="http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions"rel="nofollow">regular expression</a> to a Perl boolean expression or a keyword.
<tdclass="col0 leftalign"> Ne pas restreindre /public/ </td><tdclass="col1 centeralign"> ^/public/ </td><tdclass="col2 centeralign"> skip </td>
</tr>
<trclass="row5 rowodd">
<tdclass="col0 leftalign"> Makes authentication optional, but authenticated users are seen as such (that is, user data are sent to the app through HTTP headers) </td><tdclass="col1 centeralign"> ^/forum/ </td><tdclass="col2 centeralign"> unprotect </td>
</tr>
<trclass="row6 roweven">
<tdclass="col0 leftalign"> Restrict access to the whole site to users that have the LDAP description field set to “LDAP administrator” (must be set in exported variables) </td><tdclass="col1 centeralign"> default </td><tdclass="col2 centeralign"> $description eq "LDAP administrator" </td>
</tr>
</table></div><!-- EDIT3 TABLE [715-1558] -->
<p>
La règle d'accès “<strong>default</strong>” est utilisée si aucune règle ne correspond à l'<abbrtitle="Uniform Resource Locator">URL</abbr> courante.
</p>
<divclass="notetip"><ul>
<liclass="level1"><divclass="li"> Les commentaires peuvent être utilisés pour ordonner les règles : elles sont appliquées dans l'ordre alphabétique des commentaires (ou des expressions régulières à défaut de commentaire). Voir le <strong><ahref="security.html#write_good_rules"class="wikilink1"title="documentation:2.0:security">chapître sécurité</a></strong> pour apprendre comment écrire de bonnes règles.</div>
</li>
<liclass="level1"><divclass="li"> Voir <ahref="performances.html#handler_performance"class="wikilink1"title="documentation:2.0:performances">performances</a> pour comprendre l'intérêt des macros et groupes dans les règles.</div>
</li>
</ul>
</div>
<p>
Les règles peuvent également être utilisées pour intercepter les <abbrtitle="Uniform Resource Locator">URL</abbr> de déconnexion :
<tdclass="col0 leftalign"> Déconnecte l'utilisateur de Lemonldap::NG le redirige vers http://intranet/ </td><tdclass="col1 centeralign"> ^/index.php\?logout </td><tdclass="col2 centeralign"> logout_sso http://intranet/ </td>
</tr>
<trclass="row2 roweven">
<tdclass="col0 leftalign"> Déconnecte l'utilisateur de l'application courante et le redirige vers le menu </td><tdclass="col1 centeralign"> ^/index.php\?logout </td><tdclass="col2 centeralign"> logout_app https://auth.example.com/ </td>
</tr>
<trclass="row3 rowodd">
<tdclass="col0 leftalign"> Déconnecte l'utilisateur de l'application courante et de Lemonldap::NG le redirige vers http://intranet/ </td><tdclass="col1 centeralign"> ^/index.php\?logout </td><tdclass="col2 centeralign"> logout_app_sso http://intranet/ </td>
</tr>
</table></div><!-- EDIT4 TABLE [2052-2657] -->
<divclass="notetip">Par défaut, l'utilisateur est redirigé vers le portail si aucune <abbrtitle="Uniform Resource Locator">URL</abbr> n'est définie ou vers l'<abbrtitle="Uniform Resource Locator">URL</abbr> indiquée sinon.
</div><divclass="noteimportant">Seule l'application est concernée par les cibles logout_app*. Faire attention avec certaines applications qui ne vérifient pas les en-têtes Lemonldap::NG après avoir créé leurs propres cookies. Dans ce cas, il faut rediriger les utilisateurs vers une page <abbrtitle="HyperText Markup Language">HTML</abbr> qui explique qu'il est préférable de clore son navigateur après déconnexion.
</div>
</div><!-- EDIT2 SECTION "Rules" [493-3085] -->
<h2class="sectionedit5"id="headers">En-têtes</h2>
<divclass="level2">
<p>
Les en-têtes sont des associations entre un nom d'en-tête et une expression perl qui retourne une chaîne. Les en-têtes sont utilisés pour donner aux applications les données utilisateurs.
<thclass="col0 centeralign"> But </th><thclass="col1 centeralign"> Nom d'en-tête </th><thclass="col2 centeralign"> Valeur d'en-tête </th>
</tr>
</thead>
<trclass="row1 rowodd">
<tdclass="col0 leftalign"> Donne l'uid (pour la traçabilité) </td><tdclass="col1 centeralign"> Auth-User </td><tdclass="col2 centeralign"> $uid </td>
</tr>
<trclass="row2 roweven">
<tdclass="col0 leftalign"> Donne une valeur statique </td><tdclass="col1 centeralign"> Some-Thing </td><tdclass="col2 centeralign"> “static-value” </td>
</tr>
<trclass="row3 rowodd">
<tdclass="col0 leftalign"> Donne le nom à afficher </td><tdclass="col1 centeralign"> Display-Name </td><tdclass="col2 centeralign"> $givenName.“ ”.$surName </td>
Comme indiqué au <ahref="performances.html#handler_performance"class="wikilink1"title="documentation:2.0:performances">chapître performances</a>, on peut utiliser des macros, macros locales,…
</p>
<divclass="noteimportant"><ul>
<liclass="level1"><divclass="li"> Since many HTTP servers refuse non ascii headers, it is recommended to use encode_base64() function to transmit those headers</div>
</li>
<liclass="level1"><divclass="li"> Header names must contain only letters and “-” character</div>
</li>
</ul>
</div><divclass="notetip">Par défaut, le cookie <abbrtitle="Authentification unique (Single Sign On)">SSO</abbr> est masqué, ainsi les applications protégées ne peuvent accéder à la clef de session <abbrtitle="Authentification unique (Single Sign On)">SSO</abbr>. Mais on peut le transmettre tout de même si nécessaire :