# documentation:2.0:selfmadeapplication
Keywords: documentation,2.0,selfmadeapplication

# 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.

Lemonldap::NG::Handler::CGI adds some functions to CGI:

- authenticate : vérifie que l'utilisateur est authentifié ; sinon, il est redirigé vers le portail
- authorize : vérifie si l'utilisateur est autorisé à accèder à cette URL

Exemple :

- Code à remplacer :

    my $cgi = new CGI;
    ...

- Nouveau code:

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

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
    }

On peut tester toute URL pour voir si elle est protégée en utilisant testUri(). Elle retourne :

- 1 si l'utilisateur est autorisé à y accéder
- 0 sinon
- -1 si cette URL n'est pas connue de la configuration de LL::NG

    if($cgi->testUri('http://test3.example.com/') {
      print '<a href="http://test3.example.com/">click here</a>';
    }