Fonctionnalité #14635
ouvertAuthentification LemonLDAP des utilisateurs
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 ?