package Lemonldap::NG::Manager::Help; use AutoLoader qw(AUTOLOAD); use UNIVERSAL qw(can); our $VERSION = '0.21'; sub import { my ($caller_package) = caller; my $lang = shift; $lang = lc($lang); foreach ( split( /[,;]/, $lang ) ) { next if /=/; s/fr-fr/fr/; s/en-us/en/; if ( __PACKAGE__->can("help_groups_$_") ) { $l = $_; last; } } $l ||= "en"; foreach $h (qw(virtualHosts groups ldap vars storage macros)) { *{"${caller_package}::help_$h"} = \&{"help_${h}_$l"}; } } 1; __END__ =pod =cut sub help_virtualHosts_en { print <Virtual Hosts EOT } sub help_macros_en { print <User Groups EOT } sub help_groups_en { print <User Groups EOT } sub help_ldap_en { print <LDAP Parameters EOT } sub help_vars_en { print <Variables (LDAP attributes) EOT } sub help_storage_en { print <Sessions Storage EOT } sub help_virtualHosts_fr { print <Hôtes virtuels

La configuration d'un hôte virtuel est divisée en 2 parties : les règles et les en-têtes HTTP exportés.

Règles

Une règle associe une expression régulière perl à une expression booléenne. Lors de l'accès d'un utilisateur, si l'URL demandée correspond à la règle, le droit d'accès est calculé par l'expression booléenne. Exemple :

  # Hôte virtuel test.example.com - règles
  ^/protected => \$groups =~ /\\bgroup1\\b/

La règle ci-dessus signifie que pour les URL commençant par '/protected', les utilisateurs doivent appartenir au groupe 'group1'. Vous pouvez également utiliser les mots-clefs 'accept' et 'deny'. Attention, 'accept' signifie que tous les utilisateurs authentifiés peuvent accéder.

Si l'URL demandée ne correspond à aucune des expressions régulières, le droit d'accès est calculé à partir de l'expression booléenne définie dans la règle par défaut (default).

En-têtes

Les en-têtes servant à l'application à savoir qui est connecté se déclarent comme suit : <nom de l'en-tête> => <expression Perl>.

Exemples :

  Auth-User => \$uid
  Unite     => \$departmentUID
EOT } sub help_macros_fr { print <Macros

Les macros permettent d'ajouter des variables calculées à partir des attributs LDAP (variables exportées). Elles évitent de répéter le même calcul plusieurs fois dans la configuration. Exemple :

    # macros
    nom_complet => \$givenname . " " . \$surname
    admin => \$uid eq "foo" or \$uid eq "bar"
    
    # test.example.com - En-têtes
    Nom => \$nom_complet
    
    # test.example.com - Règles
    ^/admin/ => \$admin
EOT
}

sub help_groups_fr {
    print <Groupes d'utilisateurs

Les groupes ne sont pas indispensables mais accélèrent le traitement des requêtes. Par exemple, si un hôte virtuel est autorisé nominativement à user, user2 et user3, la règle d'accès s'écrira :

    # test.example.com - Règles
    default => \$uid eq "user1" or \$uid eq "user2" or \$uid eq "user3"

Le problème est que cette expression sera calculée à chaque requête HTTP. D'autre part, si 2 hôtes virtuels ont la même règle d'accès, toute modification doit être répercutée sur les deux hôtes virtuels. Le système des groupes permet de résoudre ces deux problèmes : lors de la connexion au portail, les expressions complexes sont calculées une fois pour toute la session et le résultat est stocké dans la chaîne \$groups. L'exemple précédent devient alors :

    # Déclaration d'un groupe (on suppose ici que ou est un champ mono-valué)
    group1 => \$uid eq "user1" or \$uid eq "user2" or \$uid eq "user3"

    # Utilisation :
    # test.example.com - Règles
    default => \$groups =~ /\\bgroup1\\b/

Cette dernière expression est une expression régulière Perl (PCRE) qui correspond à la recherche du mot group1 dans la chaîne \$groups (\\b signifie début ou fin de mot).

La variable exportée \$groups est une chaîne de caractères composés de tous les noms de groupes auquel l'utilisateur connecté appartient (c'est à dire les noms de groupe pour lesquels l'expression est vraie.

EOT } sub help_ldap_fr { print <Paramètres LDAP

Le paramètres LDAP servent à identifier les utilisateurs. Ils doivent être renseignés même si l'authentification est réalisée par un autre moyen (SSL par exemple).

  • Base de recherche LDAP : obligatoire (à moins que votre serveur LDAP accepte les requêtes sans base) ; exemple :
       dc=example, dc=com 
  • Port du serveur LDAP : 389 par défaut ;
  • Serveur LDAP : Nom (ou adresse IP) du serveur LDAP ;
  • Compte de connexion LDAP : optionnel, à renseigner si les attributs LDAP utilisés ne sont pas accessibles par une session anonyme. Ce compte est utilisé avant l'authentification pour trouver le dn de l'utilisateur ;
  • Mot de passe LDAP : mot de passe correspondant au compte ci-dessus.
EOT } sub help_vars_fr { print <Variables (attributs LDAP)

Indiquez ici tous les attributs LDAP dont vous avez besoin dans votre configuration (pour définir les groupes, les règles d'accès au hôtes virtuels ou encore les en-têtes HTTP).

La déclaration d'une variable se fait sous la forme :

  <nom declare> => <nom de l'attribut LDAP>

Exemples :

  uid  => uid
  unite  => ou
Les noms déclarés s'utilisent ensuite dans les règles, les groupes ou les en-têtes HTTP en les faisant précéder du signe '\$'. Exemple :
  group1 => \$uid eq 'user1' or \$uid eq 'user2'
EOT
}

sub help_storage_fr {
    print <Stockage des sessions

Le stockage des sessions Lemonldap::NG est réalisé au travers des modules hérités de Apache::Session. Vous devez indiquer ici le module choisi et indiquer les paramètres correspondants à ce module :

Exemples :

  • Module => Apache::Session::File,
    options :
    • Directory => /var/cache/lemonldap
  • Module => Apache::Session::MySQL,
    options :
    • DataSource => DBI:mysql:database=lemon;host=1.2.3.4
    • UserName => Lemonldap
    • Password => mypass
EOT }