LSldapObject : fix foreach error in getObjectKeyValueInRelation() if attribute is...
[ldapsaisie.git] / public_html / includes / addons / LSaddons.asterisk.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 // Error messages
24
25 // Support
26 LSerror :: defineError('ASTERISK_SUPPORT_01',
27   _("Asterisk Support : The constant %{const} is not defined.")
28 );
29 LSerror :: defineError('ASTERISK_01',
30   _("Asterisk : The function %{function} only work with %{objectName}.")
31 );
32 LSerror :: defineError('ASTERISK_02',
33   _("Asterisk : The attribute %{dependency} is missing. Unable to generate MD5 hashed password.")
34 );
35 LSerror :: defineError('ASTERISK_03',
36   _("Asterisk : Clear password not availlable. Unable to generate MD5 hashed password.")
37 );
38
39  /**
40   * Check support of Asterisk by LdapSaisie
41   * 
42   * @author Benjamin Renard <brenard@easter-eggs.com>
43   *
44   * @retval boolean true if Asterisk is totally supported, false in other case
45   */
46   function LSaddon_asterisk_support() {
47     $retval=true;
48
49     $MUST_DEFINE_CONST= array(
50       'LS_ASTERISK_HASH_PWD_FORMAT',
51       'LS_ASTERISK_USERPASSWORD_ATTR',
52     );
53
54     foreach($MUST_DEFINE_CONST as $const) {
55       if ( (!defined($const)) || (constant($const) == "")) {
56         LSerror :: addErrorCode('ASTERISK_SUPPORT_01',$const);
57         $retval=false;
58       }
59     }
60
61     return $retval;
62   }
63
64
65
66  /**
67   * Make asterisk password hash
68   * 
69   * @author Benjamin Renard <brenard@easter-eggs.com>
70   * 
71   * Hash password in MD5 respecting the LSformat LS_ASTERISK_HASH_PWD_FORMAT.
72   *
73   * This function can be used as encode_function of LSattr_ldap :: password.
74   * 
75   * @param[in] $ldapObject LSldapObject The LSldapObject use to build the hashed password
76   * @param[in] $clearPassword string The password in clear text
77   *
78   * @retval string The hashed password
79   */
80   function hashAsteriskPassword($ldapObject,$clearPassword) {
81     if (!is_a($ldapObject,'LSldapObject')) {
82       LSerror :: addErrorCode('ASTERISK_01',array('function' => 'hashAsteriskPassword', 'objectName' => 'LSldapObject'));
83       return;
84     }
85     if (!is_string($clearPassword)) {
86       return;
87     }
88     $ldapObject -> registerOtherValue('clearPassword',$clearPassword);
89     return md5($ldapObject->getFData(LS_ASTERISK_HASH_PWD_FORMAT));
90  }
91
92  /**
93   * Generate asterisk MD5 hashed password
94   *
95   * @author Benjamin Renard <brenard@easter-eggs.com>
96   *
97   * @param[in] $ldapObject The LSldapObject
98   *
99   * @retval string asterisk MD5 hashed password or False
100   */
101   function generate_asteriskMD5HashedPassword($ldapObject) {
102     if ( get_class($ldapObject -> attrs[ LS_ASTERISK_USERPASSWORD_ATTR ]) != 'LSattribute' ) {
103       LSerror :: addErrorCode('ASTERISK_02',array(LS_ASTERISK_USERPASSWORD_ATTR));
104       return;
105     }
106
107     $password = $ldapObject -> attrs[ LS_ASTERISK_USERPASSWORD_ATTR ] -> ldap -> getClearPassword();
108     if (!$password or empty($password)) {
109       LSerror :: addErrorCode('ASTERISK_03');
110       return;
111     }
112     return hashAsteriskPassword($ldapObject,(string)$password);
113   }
114   
115