e83085bd332ffbbb8acdd70141043aab8db32eb0
[ldapsaisie.git] / public_html / includes / class / class.LSauth.php
1 <?php
2 /*******************************************************************************
3  * Copyright (C) 2007 Easter-eggs
4  * http://ldapsaisie.labs.libre-entreprise.org
5  *
6  * Author: See AUTHORS file in top-level directory.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License version 2
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20
21 ******************************************************************************/
22
23 /**
24  * Gestion de l'authentification d'un utilisateur
25  *
26  * Cette classe gere l'authentification des utilisateurs à l'interface
27  *
28  * @author Benjamin Renard <brenard@easter-eggs.com>
29  */
30 class LSauth {
31   
32   static private $authData=NULL;
33   
34   var $params = array (
35     'displayLoginForm' => true,
36     'displayLogoutBtn' => true
37   );
38   
39   /**
40    * Check Post Data
41    * 
42    * @retval boolean True if post data permit the authentification or False
43    **/
44   public function getPostData() {
45     if (isset($_POST['LSsession_user']) && !empty($_POST['LSsession_user'])) {
46       $this -> authData = array(
47         'username' => $_POST['LSsession_user'],
48         'password' => $_POST['LSsession_pwd'],
49         'ldapserver' => $_POST['LSsession_ldapserver'],
50         'topDn' => $_POST['LSsession_topDn']
51       );
52       return true;
53     }
54     return;
55   }
56   
57   /**
58    * Check user login
59    *
60    * @param[in] $username The username
61    * @param[in] $password The password
62    *
63    * @retval LSldapObject|false The LSldapObject of the user authificated or false 
64    */
65   public function authenticate() {
66     if (LSsession :: loadLSobject(LSsession :: $ldapServer['authObjectType'])) {
67       $authobject = new LSsession :: $ldapServer['authObjectType']();
68       $result = $authobject -> searchObject(
69         $this -> authData['username'],
70         LSsession :: getTopDn(),
71         LSsession :: $ldapServer['authObjectFilter']
72       );
73       $nbresult=count($result);
74       
75       if ($nbresult==0) {
76         // identifiant incorrect
77         LSdebug('identifiant incorrect');
78         LSerror :: addErrorCode('LSauth_01');
79       }
80       else if ($nbresult>1) {
81         // duplication d'authentité
82         LSerror :: addErrorCode('LSauth_02');
83       }
84       elseif ( $this -> checkUserPwd($result[0],$this -> authData['password']) ) {
85         // Authentication succeeded
86         return $result[0];
87       }
88       else {
89         LSerror :: addErrorCode('LSauth_01');
90         LSdebug('mdp incorrect');
91       }
92     }
93     else {
94       LSerror :: addErrorCode('LSauth_03');
95     }
96     return;
97   }
98   
99  /**
100   * Test un couple LSobject/pwd
101   *
102   * Test un bind sur le serveur avec le dn de l'objet et le mot de passe fourni.
103   *
104   * @param[in] LSobject L'object "user" pour l'authentification
105   * @param[in] string Le mot de passe à tester
106   *
107   * @retval boolean True si l'authentification à réussi, false sinon.
108   */
109   public static function checkUserPwd($object,$pwd) {
110     return LSldap :: checkBind($object -> getValue('dn'),$pwd);
111   }
112   
113   /**
114    * Define if login form can be displayed or not
115    * 
116    * @retval boolean
117    **/
118   public function __get($key) {
119     if ($key=='params') {
120       return $this -> params;
121     }
122     return;
123   }
124   
125  /**
126   * Logout
127   * 
128   * @retval void
129   **/
130   public function logout() {
131      // Do nothing in the standard LSauth class
132   }
133   
134 }
135
136 /*
137  * Error Codes
138  */
139 LSerror :: defineError('LSauth_01',
140 _("LSauth : Login or password incorrect.")
141 );
142 LSerror :: defineError('LSauth_02',
143 _("LSauth : Impossible to identify you : Duplication of identities.")
144 );
145 LSerror :: defineError('LSauth_03',
146 _("LSsession : Could not load type of identifiable objects.")
147 );
148 ?>