Erweiterung: get_user_by_phonenumber
Ich wünsche mir, dass man in der Ldap Klasse einen Nutzer auch per TelefonNummer abrufen kann.
Use Case:
attrs = l.get_user_by_phonenumber('36266', attributes=['givenName', 'sn'])
print(attrs['givenName'][0], attrs['sn'][0])
Am liebsten hätte ich auch die Funktion get_attributes_by_phonenumber
aber der Kommentar sagt ja "Do not use it.", daher habe ich es so hässlich gemacht. :)
Hier eine Beispiellösung, die sicher mit weniger kopiertem Code geht, z.B. indem die search_kwargs als Parameter möglich sind.
def get_user_by_phonenumber(self, phonenumber, attributes=ldap3.ALL_ATTRIBUTES):
"""
Returns the specified user from LDAP, without doing any conversion.
:rtype: dict
"""
cleaned_phonenumber = escape_filter_chars(phonenumber)
search_kwargs = {
'search_base': self.LDAP_PARAMS['base'],
'search_filter': '(telephoneNumber=%s)' % cleaned_phonenumber,
'attributes': attributes,
}
conn = self.connection
if not conn:
return {}
try:
result = conn.search(**search_kwargs)
except LDAPException:
# Try one more time before raising the exception
# @TODO: Catch exception in User.pre_save()
try:
conn.unbind()
except:
pass
conn.bind()
result = conn.search(**search_kwargs)
if not result:
return {}
else:
return conn.response[0]['attributes']