# Écrire les règles et en-têtes

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,…).

Noter que les variables designées par $xx correspondent au nom de variables exportées ou de noms de macro.

## Règles

A rule associates a regular expression to a Perl boolean expression or a keyword.

Exemples :

But | Expression régulière | Règle
--- | --- | ---
Restreindre le répertoire /admin/ à l'utilisateur bart.simpson | ^/admin/ | $uid eq "bart.simpson"
Restreindre les répertoires /js/ et /css/ aux utilisateurs authentifiés | ^/(css|js)/ | accept
Interdire l'accès au répertoire /config/ | ^/config/ | deny
Ne pas restreindre /public/ | ^/public/ | skip
Makes authentication optional, but authenticated users are seen as such (that is, user data are sent to the app through HTTP headers) | ^/forum/ | unprotect
Restrict access to the whole site to users that have the LDAP description field set to “LDAP administrator” (must be set in exported variables) | default | $description eq "LDAP administrator"

La règle d'accès “default” est utilisée si aucune règle ne correspond à l'URL courante.

- 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 chapître sécurité pour apprendre comment écrire de bonnes règles.
- Voir performances pour comprendre l'intérêt des macros et groupes dans les règles.

Les règles peuvent également être utilisées pour intercepter les URL de déconnexion :

But | Expression régulière | Règle
--- | --- | ---
Déconnecte l'utilisateur de Lemonldap::NG le redirige vers http://intranet/ | ^/index.php\?logout | logout_sso http://intranet/
Déconnecte l'utilisateur de l'application courante et le redirige vers le menu | ^/index.php\?logout | logout_app https://auth.example.com/
Déconnecte l'utilisateur de l'application courante et de Lemonldap::NG le redirige vers http://intranet/ | ^/index.php\?logout | logout_app_sso http://intranet/

`logout_app` and `logout_app_sso` rules are not available on Nginx, only on Apache.
Par défaut, l'utilisateur est redirigé vers le portail si aucune URL n'est définie ou vers l'URL indiquée sinon.
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 HTML qui explique qu'il est préférable de clore son navigateur après déconnexion.

## En-têtes

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.

Exemples :

But | Nom d'en-tête | Valeur d'en-tête
--- | --- | ---
Donne l'uid (pour la traçabilité) | Auth-User | $uid
Donne une valeur statique | Some-Thing | “static-value”
Donne le nom à afficher | Display-Name | $givenName.“ ”.$surName
Done une valeur non-ascii | Display-Name | encode_base64($givenName." ".$surName, '')

Comme indiqué au chapître performances, on peut utiliser des macros, macros locales,…

- Since many HTTP servers refuse non ascii headers, it is recommended to use encode_base64() function to transmit those headers
- Don't forget to add an empty string as second argument of encode_base64 to avoid insert of “newline” characters in result
- Header names must contain only letters and “-” character

Par défaut, le cookie SSO est masqué, ainsi les applications protégées ne peuvent accéder à la clef de session SSO. Mais on peut le transmettre tout de même si nécessaire :

    Session-ID => $_session_id