Projet

Général

Profil

Actions

Fonctionnalité #14635

ouvert

Authentification LemonLDAP des utilisateurs

Ajouté par Quentin RIBAC il y a plus de 4 ans. Mis à jour il y a environ un mois.

Statut:
R&D - A étudier
Priorité:
2-Sérieux
Assigné à:
-
Version cible:
-
Début:
19/08/2020
Echéance:

Description

Client : TCO

LemonLDAP fournit dans l’entête HTTP lors de la connexion à MaarchCourrier un header REMOTE_USER avec pour valeur le nom d’utilisateur.

Une légère adaptation du code a été nécessaire pour faire fonctionner cette connexion.

Les modifications effectuées :

fichier custom/cs_maarch/apps/maarch_entreprise/xml/login_method.xml : ajout de la section suivante, pour toutes autres méthodes, ENABLED est à false.

<METHOD>
  <ID>lemonldap</ID>
  <NAME>LemonLDAP</NAME>
  <SCRIPT>lemonLDAPConnect.php</SCRIPT>
  <ENABLED>true</ENABLED>
</METHOD>

nouveau fichier custom/cs_maarch/apps/maarch_entreprise/lemonLDAPConnect.php :

<?php

$login = getallheaders()['REMOTE_USER'];

if (!empty($login)) {
    $password = 'aFakePass';

    require_once('core/class/class_core_tools.php');
    require_once 'core/class/class_security.php';
    require_once 'core/class/class_db_pdo.php';
    $core = new core_tools();
    $sec = new security();

    $database = new Database();
    $stmt = $database->query("SELECT 1 FROM users WHERE user_id ILIKE ?", array($login));
    $result = $stmt->fetch();

    if ($result) {
        $_SESSION['error'] = '';

        $res = $sec->login($login, $password, 'shibboleth');

        $_SESSION['user'] = $res['user'];

        if (empty($_SESSION['error'])) {
            $_SESSION['error'] = $res['error'];
    }

    if ($res['error'] == '') {
            \SrcCore\models\AuthenticationModel::setCookieAuth(['userId' => $login]);
            //login OK
            $trace = new history();
            header('location: ' . $_SESSION['config']['businessappurl']. $res['url']);
            exit();
        } else {
            $_SESSION['error'] = $res['error'];
            echo $_SESSION['error'];
            exit;
        }
    } else {
        $_SESSION['error'] = _USER_NOT_EXIST . ' ' . $login;
        echo $_SESSION['error'];
        exit;
    }
}

Ce fichier est une copie légèrement modifiée de shibbolethConnect.php, simplement en mettant $login = getallheaders()['REMOTE_USER']; au lieu de $login = $_SERVER['REMOTE_USER']; et en supprimant la vérification $_SERVER['AUTH_TYPE'] = 'shibboleth'

D’ailleurs ici pourquoi n’avoir pas mis $_SERVER['AUTH_TYPE'] == 'shibboleth' avec double égal ? C’est le cas dans le fichier shibbolethConnect.php sur la forge, est-ce une faute de frappe ?

Est-il possible d’intégrer ce code à Maarch Courrier ?

Actions

Formats disponibles : Atom PDF