pyceo/ceo/urwid/ldapfilter.py

41 lines
1.5 KiB
Python

import ldap
class LdapFilter:
def __init__(self, widget):
self.widget = widget
def set_ldap_filter(self, ldap_uri, ldap_base, ldap_attr, ldap_map):
try:
self.ldap = ldap.initialize(ldap_uri)
self.ldap.simple_bind_s("", "")
except ldap.LDAPError:
return
self.base = ldap_base
self.attr = ldap_attr
self.map = ldap_map
def keypress(self, size, key):
if self.ldap != None:
if key == 'enter' or key == 'down' or key == 'up':
attr = self.escape(self.attr)
search = self.escape(self.widget.get_edit_text(self))
filter = '(%s=%s)' % (attr, search)
try:
matches = self.ldap.search_s(self.base,
ldap.SCOPE_SUBTREE, filter)
if len(matches) > 0:
(_, attrs) = matches[0]
for (k, v) in self.map.items():
if attrs.has_key(k) and len(attrs[k]) > 0:
v.set_edit_text(attrs[k][0])
except ldap.LDAPError:
pass
return self.widget.keypress(self, size, key)
def escape(self, value):
value = str(value)
value = value.replace('\\', '\\5c').replace('*', '\\2a')
value = value.replace('(', '\\28').replace(')', '\\29')
value = value.replace('\x00', '\\00')
return value