Handle incomplete values from the LDAP

Sometime `uid` is not set in the objects fetched from the LDAP. This
case has to be handled. Also, the `.uid` and `.cn` attributes of these
objects in the python abstractions have a `.value` method which we
should use.
This commit is contained in:
Martin Pépin 2017-04-01 21:45:05 +01:00
parent 2d22c202e9
commit c3d740ade0
2 changed files with 40 additions and 24 deletions

View file

@ -14,6 +14,10 @@ from gestioncof.decorators import buro_required
class Clipper(object): class Clipper(object):
def __init__(self, clipper, fullname): def __init__(self, clipper, fullname):
if fullname is None:
fullname = ""
assert isinstance(clipper, str)
assert isinstance(fullname, str)
self.clipper = clipper self.clipper = clipper
self.fullname = fullname self.fullname = fullname
@ -60,18 +64,22 @@ def autocomplete(request):
['(cn=*{bit:s}*)(uid=*{bit:s}*)'.format(**{"bit": bit}) ['(cn=*{bit:s}*)(uid=*{bit:s}*)'.format(**{"bit": bit})
for bit in bits] for bit in bits]
)) ))
with Connection(settings.LDAP_SERVER_URL) as conn: if ldap_query != "(&)":
conn.search( # If none of the bits were legal, we do not perform the query
'dc=spi,dc=ens,dc=fr', ldap_query, entries = None
attributes=['uid', 'cn'] with Connection(settings.LDAP_SERVER_URL) as conn:
) conn.search(
queries['clippers'] = conn.entries 'dc=spi,dc=ens,dc=fr', ldap_query,
# Clearing redundancies attributes=['uid', 'cn']
queries['clippers'] = [ )
Clipper(clipper.uid, clipper.cn) entries = conn.entries
for clipper in queries['clippers'] # Clearing redundancies
if str(clipper.uid) not in usernames queries['clippers'] = [
] Clipper(entry.uid.value, entry.cn.value)
for entry in entries
if entry.uid.value is not None
and entry.uid.value not in usernames
]
# Resulting data # Resulting data
data.update(queries) data.update(queries)

View file

@ -14,6 +14,10 @@ from kfet.models import Account
class Clipper(object): class Clipper(object):
def __init__(self, clipper, fullname): def __init__(self, clipper, fullname):
if fullname is None:
fullname = ""
assert isinstance(clipper, str)
assert isinstance(fullname, str)
self.clipper = clipper self.clipper = clipper
self.fullname = fullname self.fullname = fullname
@ -79,18 +83,22 @@ def account_create(request):
['(cn=*{bit:s}*)(uid=*{bit:s}*)'.format(bit=word) ['(cn=*{bit:s}*)(uid=*{bit:s}*)'.format(bit=word)
for word in search_words] for word in search_words]
)) ))
with Connection(settings.LDAP_SERVER_URL) as conn: if ldap_query != "(&)":
conn.search( # If none of the bits were legal, we do not perform the query
'dc=spi,dc=ens,dc=fr', ldap_query, entries = None
attributes=['uid', 'cn'] with Connection(settings.LDAP_SERVER_URL) as conn:
) conn.search(
queries['clippers'] = conn.entries 'dc=spi,dc=ens,dc=fr', ldap_query,
# Clearing redundancies attributes=['uid', 'cn']
queries['clippers'] = [ )
Clipper(clipper.uid, clipper.cn) entries = conn.entries
for clipper in queries['clippers'] # Clearing redundancies
if str(clipper.uid) not in usernames queries['clippers'] = [
] Clipper(entry.uid.value, entry.cn.value)
for entry in entries
if entry.uid.value is not None
and entry.uid.value not in usernames
]
# Resulting data # Resulting data
data.update(queries) data.update(queries)