# LimeSurvey

## Présentation

LimeSurvey est un logiciel de sondage écrit en PHP. LimeSurvey has a webserver authentication mode that allows one to integrate it directly into LemonLDAP::NG.

Pour une meilleure integration, LimeSurvey doit être configuré pour créer automatiquement les utilisateurs inconnus et utiliser les en-têtes HTTP pour remplir le nom, le mail et les rôles. Par exemple, en utilisant 3 rôles :

- User : peut répondre aux surveillances
- Admin : peut créer des surveillances
- Superadmin : personne ne peut l'arrêter !

## Configuration

On suppose que LimeSurvey est installé dans /var/www/html/limesurvey

### Configuration de LimeSurvey

La configuration est effectuée via config.php:

    vi /var/www/html/limesurvey/config.php

    //==================================
    // WebSSO
    //==================================

    $useWebserverAuth = true;
    $WebserverAuth_autocreateUser = true;
    $WebserverAuth_autouserprofile = Array(
     'full_name' => $_SERVER['HTTP_AUTH_CN'],
     'email' => $_SERVER['HTTP_AUTH_MAIL'],
     'lang' => 'en',
     'htmleditormode' => 'inline',
     'templatelist' => 'default,basic,MyOrgTemplate',
     'create_survey' => $_SERVER['HTTP_AUTH_ADMIN'] || $_SERVER['HTTP_AUTH_SUPERADMIN'],
     'create_user' =>  $_SERVER['HTTP_AUTH_SUPERADMIN'],
     'delete_user' =>  $_SERVER['HTTP_AUTH_SUPERADMIN'],
     'superadmin' => $_SERVER['HTTP_AUTH_SUPERADMIN'],
     'configurator' =>  $_SERVER['HTTP_AUTH_SUPERADMIN'],
     'manage_template' =>  $_SERVER['HTTP_AUTH_SUPERADMIN'],
     'manage_label' =>  $_SERVER['HTTP_AUTH_SUPERADMIN']
    );

On utilise les en-têtes HTTP pour trouver le profil utilisateur par défaut.

### Hôte virtuel LimeSurvey

Configurer l'hôte virtuel LimeSurvey comme n'importe quel autre hôte virtuel protégé.

- Pour Apache:

    <VirtualHost *:80>
           ServerName limesurvey.example.com

           PerlHeaderParserHandler Lemonldap::NG::Handler

           SetEnvIfNoCase Auth-User "(.*)" PHP_AUTH_USER=$1

           Alias /limesurvey /var/www/html/limesurvey
          DocumentRoot /var/www/html/limesurvey

    </VirtualHost>

Il faut renseigner la variable PHP_AUTH_USER pour faire fonctionner le mode d'authentification par serveur web.

- Pour Nginx:

    server {
      listen 80;
      server_name limesurvey.example.com;
      root /path/to/application;
      # Requête interne d'authentification
      location = /lmauth {
        internal;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/llng-fastcgi-server/llng-fastcgi.sock;
        # Ignorer les données postées
        fastcgi_pass_request_body  off;
        fastcgi_param CONTENT_LENGTH "";
        # Conserver le nom d'hôte original
        fastcgi_param HOST $http_host;
        # Conserver la requête originale (le serveur LLNG va recevoir /llauth)
        fastcgi_param X_ORIGINAL_URI  $request_uri;
      }

      # Requêtes clients
      location / {
        auth_request /lmauth;
        auth_request_set $lmremote_user $upstream_http_lm_remote_user;
        auth_request_set $lmlocation $upstream_http_location;
        error_page 401 $lmlocation;
        try_files $uri $uri/ =404;

        ...

        include /etc/lemonldap-ng/nginx-lua-headers.conf;
      }
      location / {
        try_files $uri $uri/ =404;
      }
    }

### Hôte virtuel LimeSurvey dans le manager

Aller dans le manager et créer un nouvel hôte virtuel pour LimeSurvey.

#### En-têtes

Nom d'en-tête | Description
--- | ---
Auth-User | nom de connexion
Auth-Cn | Nom complet de l'utilisateur
Auth-Mail | Email de l'utilisateur
Auth-Admin | 1 si l'utilisateur est administrateur
Auth-SuperAdmin | 1 si l'utilisateur est super-administrateur

On peut gérer les rôles avec le modèle RBAC ou en utilisant les groupes.

#### Règles

Nom de la règle | Expression | Description
--- | --- | ---
Déconnexion | action=logout$ | Règle de déconnexion (par exemple logout_app_sso)
Admin | ^/limesurvey/admin/ | Autorisé seulement pour les rôles admin et superadmin
Défaut | default | Autorise seulement les utilisateurs avec un rôle LimeSurvey

Il est possible de mettre l'accès par défaut à :

- accept : tous les utilisateurs authentifiés peuvent accéder aux surveillances
- unprotect : aucune authentification n'est nécessaire pour accéder aux surveillances