# Protéger une application

## Présentation

Une application peut connaître l'utilisateur connecté en utilisant :

- la variable d'environnement REMOTE_USER (avec un agent local ou une conversion SetEnvIf)
- HTTP header (in all cases)

Pour obtenir plus d'information sur l'utilisateur (nom, adresse de courriel, etc...), il faut lire les en-têtes HTTP.

If your application is based on Perl CGI package, you can simply replace CGI by Lemonldap::NG::Handler::CGI

## Exemple de code

Exemples avec un en-tête configuré nommé 'Auth-User':

### Perl

    print "Connected user: ".$ENV{HTTP_AUTH_USER};

### PHP

    print "Connected user: ".$_SERVER["HTTP_AUTH_USER"];

## CGI aito-protégée Perl

Using this feature, you don't have to use virtual host protection: protection is embedded in Lemonldap::NG::Handler::CGI.

The protection parameter must be set when calling the new() method:

- `none`: no protection
- `authenticate`: check authentication but do not manage authorization
- `manager`: rely on virtual host configuration in Manager
- `rule: xxx`: apply a specific rule

Exemple :

- Code à remplacer :

    my $cgi = new CGI;
    ...

- Nouveau code:

    my $cgi = Lemonldap::NG::Handler::CGI->new ({ protection => 'authenticate' });

    print $cgi->header;
    print $cgi->start_html;
    ...

On peut ensuite accéder aux données de l'utilisateur

    # Obtenir des attributs (ou macros)
    my $cn = $cgi->user->{cn}

    # Tester si l'utilisateur est membre d'un groupe Lemonldap::NG (ou d'un groupe LDAP translaté)
    if( $cgi->group('admin') ) {
      # code html spécial pour les administrateurs
    }
    else {
      # autre code HTML
    }