diff --git a/doc/conf/LSauthMethod/LSauthMethod_HTTP.docbook b/doc/conf/LSauthMethod/LSauthMethod_HTTP.docbook index a924dbb0..513374d6 100644 --- a/doc/conf/LSauthMethod/LSauthMethod_HTTP.docbook +++ b/doc/conf/LSauthMethod/LSauthMethod_HTTP.docbook @@ -46,5 +46,59 @@ + + LSAUTHMETHOD_HTTP_METHOD + + Permet de définir la méthode utilisée par le serveur HTTP pour + passer à PHP l'identifiant de l'utilisateur connecté et son mot de passe. + Cette constance peut pendre les valeurs suivantes : + + + + PHP_PASS + + Dans cette méthode, le serveur HTTP défini les variables + d'environnement PHP_AUTH_USER et + PHP_AUTH_PW. Cette méthode est la méthode par défaut et + convient en cas d'utilisation de mod_php. + + + + + REMOTE_USER + + Dans cette méthode, le serveur HTTP défini la variable + d'environnement REMOTE_USER. Cette variable ne contient + que l'identifiant de l'utilisateur connecté. Cette méthode ne peut donc + être utilisée que conjointement avec l'activation du paramètre + LSAUTHMETHOD_HTTP_TRUST_WITHOUT_PASSWORD_CHALLENGE. + + + + + + AUTHORIZATION + + Dans cette méthode, le serveur HTTP passe le contenu de l'entête + HTTP Authorization dans la variable d'environnement + HTTP_AUTHORIZATION. Cette méthode convient en cas d' + utilisation de PHP en mode CGI ou encore via PHP-FPM. Pour utiliser cette + méthode, il faudra adapter la configuration du serveur HTTP. Par exemple, + pour Apache HTTPd, vous pouvez utiliser le module rewrite + et la règle de réécriture suivante : + + + + + + + + + + + + + + diff --git a/public_html/conf/LSauth/config.LSauthMethod_HTTP.php b/public_html/conf/LSauth/config.LSauthMethod_HTTP.php index 8166b1c0..815647b6 100644 --- a/public_html/conf/LSauth/config.LSauthMethod_HTTP.php +++ b/public_html/conf/LSauth/config.LSauthMethod_HTTP.php @@ -28,3 +28,21 @@ // Don't check HTTP server's login/password by LDAP authentication challenge //define('LSAUTHMETHOD_HTTP_TRUST_WITHOUT_PASSWORD_CHALLENGE',true); + +/* + * Set the HTTP server's method to pass authentifcated user/password informations + * to PHP : + * - PHP_PASS : server define the PHP_AUTH_USER and PHP_AUTH_PW environnement + * variables. This is the default way using mod_php. + * - REMOTE_USER : server define the REMOTE_USER environnement variable. By using + * this method, only the user is pass by HTTP server to PHP and it + * could be only used if you enable the "don't check HTTP server's + * login/password by LDAP authentication challenge" option. + * - AUTHORIZATION : server pass HTTP Authorization header value to PHP by setting + * the HTTP_AUTHORIZATION environnement variable. This way could + * be use when using PHP in CGI-mode or with PHP-FPM. When using + * Apache, you could pass this information by using the rewrite module + * and setting the following rewrite rule : + * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + */ +//define('LSAUTHMETHOD_HTTP_METHOD', 'PHP_PASS'); diff --git a/public_html/includes/class/class.LSauthMethod_HTTP.php b/public_html/includes/class/class.LSauthMethod_HTTP.php index 5f0be440..9d73ee77 100644 --- a/public_html/includes/class/class.LSauthMethod_HTTP.php +++ b/public_html/includes/class/class.LSauthMethod_HTTP.php @@ -43,12 +43,46 @@ class LSauthMethod_HTTP extends LSauthMethod_basic { * @retval Array|false Array of authentication data or False **/ public function getAuthData() { - if (isset($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_USER'])) { - $this -> authData = array( - 'username' => $_SERVER['PHP_AUTH_USER'], - 'password' => $_SERVER['PHP_AUTH_PW'] - ); - return $this -> authData; + if (!defined('LSAUTHMETHOD_HTTP_METHOD')) + define('LSAUTHMETHOD_HTTP_METHOD', 'PHP_AUTH'); + + switch(constant('LSAUTHMETHOD_HTTP_METHOD')) { + case 'AUTHORIZATION': + if (isset($_SERVER['HTTP_AUTHORIZATION']) && !empty($_SERVER['HTTP_AUTHORIZATION'])) { + $authData = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6))); + if (is_array($authData) && count($authData) == 2) { + $this -> authData = array( + 'username' => $authData[0], + 'password' => $authData[1], + ); + } + return $this -> authData; + } + else + LSerror :: addErrorCode('LSauthMethod_HTTP_01', 'HTTP_AUTHORIZATION'); + break; + case 'REMOTE_USER': + if (isset($_SERVER['REMOTE_USER']) && !empty($_SERVER['REMOTE_USER'])) { + $this -> authData = array( + 'username' => $_SERVER['REMOTE_USER'], + 'password' => false, + ); + return $this -> authData; + } + else + LSerror :: addErrorCode('LSauthMethod_HTTP_01', 'REMOTE_USER'); + break; + case 'PHP_AUTH': + default: + if (isset($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_USER'])) { + $this -> authData = array( + 'username' => $_SERVER['PHP_AUTH_USER'], + 'password' => $_SERVER['PHP_AUTH_PW'], + ); + return $this -> authData; + } + else + LSerror :: addErrorCode('LSauthMethod_HTTP_01', 'PHP_AUTH_USER'); } return; } @@ -69,3 +103,10 @@ class LSauthMethod_HTTP extends LSauthMethod_basic { } } + +/* + * Error Codes + */ +LSerror :: defineError('LSauthMethod_HTTP_01', +_("LSauthMethod_HTTP : the %{var} environnement variable is missing.") +); diff --git a/public_html/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo b/public_html/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo index 4341af97..4ec632f5 100644 Binary files a/public_html/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo and b/public_html/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo differ diff --git a/public_html/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po b/public_html/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po index 0eda1293..dcaeb4d9 100644 --- a/public_html/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po +++ b/public_html/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: LdapSaisie\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-08-31 17:08+0200\n" -"PO-Revision-Date: 2018-08-31 17:10+0200\n" +"POT-Creation-Date: 2018-09-07 18:40+0200\n" +"PO-Revision-Date: 2018-09-07 18:41+0200\n" "Last-Translator: Benjamin Renard \n" "Language-Team: LdapSaisie \n" @@ -1426,6 +1426,10 @@ msgstr "Afficher la fenêtre de recherche et de sélection étendue." msgid "Invalid value" msgstr "Valeur invalide" +#: includes/class/class.LSauthMethod_HTTP.php:111 +msgid "LSauthMethod_HTTP : the %{var} environnement variable is missing." +msgstr "LSauthMethod_HTTP : la variable d'environnement %{var} est manquante." + #: includes/class/class.LSformElement_mail.php:51 msgid "Send a mail from here." msgstr "Envoyer un mail depuis l'interface." diff --git a/public_html/lang/ldapsaisie.pot b/public_html/lang/ldapsaisie.pot index 15754197..e5b1870d 100644 --- a/public_html/lang/ldapsaisie.pot +++ b/public_html/lang/ldapsaisie.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-08-31 17:07+0200\n" +"POT-Creation-Date: 2018-09-07 18:40+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1215,6 +1215,10 @@ msgstr "" msgid "Invalid value" msgstr "" +#: includes/class/class.LSauthMethod_HTTP.php:111 +msgid "LSauthMethod_HTTP : the %{var} environnement variable is missing." +msgstr "" + #: includes/class/class.LSformElement_mail.php:51 msgid "Send a mail from here." msgstr ""