# Fonctions étendues

## Présentation

En écrivant des règles et en-têtes, on peut utiliser des expressions Perl qui seront évaluées dans une cage pour prévenir les codes malveillants.

C'est disponible pour :

- les règles d'activation des modules du menu
- les données à rejouer dans les formulaires
- Macros
- les règles d'utilisation des bases de données des fournisseur d'identité
- etc...

Dans cette cage, on peut accéder aux éléments suivants :

- Fonctions standards de Perl (split, pop, map, etc...)
- Fonctions personnalisées
- The encode_base64 subroutine (be careful with it: you must add an empty string as second argument to avoid inserting “newline” codes)
- Variables d'environnement, dans certains cas (via %ENV)
- Information about current request
- Fonctions étendues
  - date
  - checkLogonHours
  - checkDate
  - basic
  - unicode2iso
  - iso2unicode
  - groupMatch

Pour en savoir plus sur la cage, consulter la documentation du module Safe.

## Request information

Les données suivantes concernant la requête courante sont disponibles via les fonctions :

- hostname
- remote_ip : l'adresse IP cliente
- uri : l'URL
- uri_with_args : l'URL complète (y compris les arguments GET)
- unparsed_uri : l'URL avant décodage
- args : la chaîne de requête
- method : la méthode de la requête (GET, POST, etc…)
- header_in(“Your-Request-Header”) : n'importe quel en-tête de la requête

## Liste des fonctions étendues

### date

Retourne la date au format AAAAMMJJHHMMSS, heure locale par défaut, GMT si demandé

    date(1)

### checkLogonHours

Cette fonction examine le jour et l'heure de la requête courante et la compare aux jours et heures autorisés. Elle retourne 1 si c'est bon, 0 sinon. Par défaut, les jours et heures autorisés sont des valeurs hexadécimales, représentant chaque heure de la semaine. Un jour a 24 heures et une semaine 7 jours, donc la valeur contient 168 bits, convertie en 42 caractères hexadécimaux. Dimanche est le premier jour.

Par exemple, pour un accès total excepté le week-end:

    000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000

L'extension de schéma LDAP peut être utilisée pour stocker cette valeur. La valeur binaire de l'attribut logonHours d'Active Directory peut également être utilisée

Paramètres de la fonction :

- logon_hours : chaîne représentant les heures autorisées (GMT)
- syntax (optionnel) : `hexadecimal` (défaut) ou `octetstring`
- time_correction (optionnel) : heures à ajouter ou soustraire
- default_access (optionnel) : resultat à retourner si logon_hours est vide

Exemple d'usage simple :

    checkLogonHours($ssoLogonHours)

Si une valeur binaire est utilisée (Active Directory) :

    All e
    checkLogonHours($ssoLogonHours, 'octetstring')

On peut aussi configurer jetlag (si tous les utilisateurs utilisent le même fuseau):

    checkLogonHours($ssoLogonHours, '', '+2')

Si plusieurs fuseaux sont utilisés, le jetlag doit être introduit dans le compte dans la valeur ssoLogonHours, ou utiliser le paramètre $_timezone. Ce paramètre est géré par le portail et utilise javascript pour obtenir le fuseau de l'utilisateur connecté. Ça doit marcher avec tous les navigateurs :

    checkLogonHours($ssoLogonHours, '', $_timezone)

Il est possible de modifier le comportement par défaut pour les utilisateurs ne disposant pas d'une valeur ssoLogonHours. Sinon, par défaut, les utilisateurs sans créneau horaire de connexion sont rejetés. On peut autoriser ces utilisateurs au lieu de les rejeter :

    checkLogonHours($ssoLogonHours, '', '', '1')

### checkDate

Cette fonction examine la date de la requête en cours et la compare avec une date de début et de fin. Elle retourne 1 si c'est bon, 0 sinon.

L'extension de schéma LDAP peut être utilisée pour stocker ces valeurs.

Le format de date est celui de la syntaxe des dates LDAP, par exemple pour le 1er Mars 2009 :

    20090301000000Z

Paramètres de la fonction :

- start : date de début (GMT)
- end: date de fin (GMT)
- default_access (optionnel) : resultat à retourner si start et end sont vides

Exemple d'usage simple :

    checkDate($ssoStartDate, $ssoEndDate)

### basic

Cette fonction n'est pas compatible avec la cage saine, il faut désactiver la mise en cage.

Cette fonction contruit l'en-tête HTTP `Authorization` utiisée dans le schéma d'authentification basique HTTP. Elle force la conversion de UTF-8 en ISO-8859-1 du nom de compte et du mot-de-passe.

Paramètres de la fonction :

- user
- password

Exemple d'usage simple :

    basic($uid,$_password)

### unicode2iso

Cette fonction n'est pas compatible avec la cage saine, il faut désactiver la mise en cage.

Cette fonction convertit une chaine UTF-8 en ISO-8859-1.

Paramètres de la fonction :

- chaîne

Exemple d'usage simple :

    unicode2iso($nom)

### iso2unicode

Cette fonction n'est pas compatible avec la cage saine, il faut désactiver la mise en cage.

Cette fonction convertit une chaîne ISO-8859-1 en UTF-8.

Paramètres de la fonction :

- chaîne

Exemple d'usage simple :

    iso2unicode($name)

### groupMatch

this function allows one to parse the `$hGroups` variable to check if a value is present inside a group attribute.

Paramètres de la fonction :

- groups : variable `$hGroups`
- attribute : Nom de l'attribut du groupe
- value : Valeur à chercher

Exemple d'usage simple :

    groupMatch($hGroups, 'description', 'Service 1')