package Lemonldap::NG::Manager::Help; use AutoLoader qw(AUTOLOAD); use UNIVERSAL qw(can); our $VERSION = '0.3'; 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 authParams cookieName domain)) { *{"${caller_package}::help_$h"} = \&{"help_${h}_$l"}; } } # TODO: Help in English 1; __END__ =pod =cut sub help_groups_en { print <User Groups

Groups are not required but accelerate the treatment of the requests. For example, if a virtual host is granted only for 3 users, the rule is :

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

The problem is that this rule is calculated for each HTTP request. Other example, if 2 sites have the same rules, any modification on one has to be write in the second. The 'groups' system solve this : groups are evaluated one time in the authentication phase, and the result is stored in the \$groups variable. The rule abode becomes :

    # Group declaration
    group1 => \$uid eq "user1" or \$uid eq "user2" or \$uid eq "user3"

    # Use of the group :
    # test.example.com - Rules
    default => \$groups =~ /\\bgroup1\\b/

The last rule is a Perl regular expression (PCRE) that means 'search the word "group1" in the string "groups"'.

The \$groups string joins all the groups where the user matchs the expression. The groups are separated by a space in the \$groups string. 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
    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_vars_en { print <Variables (LDAP attributes)

Set here the LDAP attributes you need in your configuration or in exported headers.

Declare as the following :

  <MyName> => <real LDAP attribute name>

Examples :

  uid   => uid
  unit  => ou
Declared names can be used in rules, groups, macros and HTTP headers by using them with '\$'. Example :
  group1 => \$uid eq 'user1' or \$uid eq 'user2'
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 macros, les règles d'accès aux 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, les macros 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_authParams_en { print <Authentication Parameters This help chapter does not exist in english. If you want to help us, you can edit lib/Lemonldap/NG/Manager/Help.pm in lemonldap-ng source tree and send us your contribution.
Thanks. EOT } sub help_authParams_fr { print <Paramètres d'authentification
Type d'authentfication
Le schéma classique d'authentification Lemonldap consiste à utiliser une authentification par LDAP. Vous pouvez changer ceci en ssl par exemple.
Portail
Indiquez ici l'URL ou seront renvoyés les utilisateurs non authentifiés. Cette URL doit bien sur correspondre à un portail utilisant Lemonldap::NG::Portal::SharedConf.
Cookie sécurisé (SSL)
Une fois authentifié, l'utilisateur est reconnu par son cookie. Si tous les hôtes virtuels de votre domaine son protégés par SSL, mettez cette option à 1, ainsi le cookie ne sera présenté par le navigateur qu'aux sites protégés, ce qui évite un vol de session.
EOT } sub help_domain_en { print <Protected domain This help chapter does not exist in english. If you want to help us, you can edit lib/Lemonldap/NG/Manager/Help.pm in lemonldap-ng source tree and send us your contribution.
Thanks. EOT } sub help_domain_fr { print <Domaine protégé

Indiquez ici le nom du domaine (ou du sous-domaine) contenant vos applications à protéger.
ATTENTION : tous les hôtes virtuels protégés ainsi que le portail d'authentification doivent se trouver dans ce domaine. EOT } sub help_virtualHosts_en { print <Virtual Hosts

A virtual host configuration is cutted in 2 pieces : the rules and the HTTP headers.

Note : If portal and handlers are not in the same domain than declared in "General Parameters" menu, you have to use CDA modules. Else, session cookie is not seen by handlers.

Rules

A rule associates a regular expression with a perl boolean expression. When a user tries to access to an URL that match with the regular expression, access is granted or not depending on the boolean expression result :

  # Virtual host test.example.com - rules
  ^/protected => \$groups =~ /\\bgroup1\\b/

This rule means that all URL starting with '/protected', are reserved to users member of 'group1'. You can also use 'accept' and 'deny' keywords. 'accept' keyword means that all authenticated users are granted.

If URL doesn't match any regular expression, 'default' rule is called to grant or not.

Headers

Headers are used to inform the remote application on the connected user. They are declared as : <Header Name> => <Perl expression>.

Examples :

  Auth-User => \$uid
  Unite     => \$departmentUID
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.

Note : pour que le mécanisme d'authentification fonctionne, tous les hôtes virtuels et le portail doivent se trouver dans le domaine déclaré dans les paramètres généraux ou utiliser les modules CDA (Cross-Domain-Authentication) qui gère la transmission de l'identifiant.

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_en { print <Macros

Macros are used to add new variables to user variables attributes). Those new variables are calculated from other variables issued from LDAP attributes. This mechanism avoid to do more than one time the same operation in the authentication phase. Example :

    # macros
    long_name => \$givenname . " " . \$surname
    admin     => \$uid eq "foo" or \$uid eq "bar"
    
    # test.example.com - Headers
    Name      => \$long_name
    
    # test.example.com - Rules
    ^/admin/ => \$admin
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 phase d'authentification. 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_ldap_en {
    print <LDAP Parameters
This help chapter does not exist in english. If you want to help us, you can
edit lib/Lemonldap/NG/Manager/Help.pm in lemonldap-ng source tree and send us
your contribution.
Thanks. 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_storage_en { print <Sessions Storage This help chapter does not exist in english. If you want to help us, you can edit lib/Lemonldap/NG/Manager/Help.pm in lemonldap-ng source tree and send us your contribution.
Thanks. 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 } sub help_cookieName_en { print <Cookie Name This help chapter does not exist in english. If you want to help us, you can edit lib/Lemonldap/NG/Manager/Help.pm in lemonldap-ng source tree and send us your contribution.
Thanks. EOT } sub help_cookieName_fr { print <Nom de cookie

Indiquez ici le nom du cookie ('lemonldap' par défaut).
ATTENTION, tout changement nécessite le redémarrage de tous les serveurs Apache hébergeant des agents de protection Lemonldap::NG::Handler.

EOT }