forked from Github-Mirrors/canaille
LDAPObject.get uses LDAPObject.filter
This commit is contained in:
parent
85dde6ba79
commit
5d9f15486a
1 changed files with 13 additions and 22 deletions
|
@ -196,35 +196,24 @@ class LDAPObject:
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get(cls, dn=None, filter=None, conn=None):
|
def get(cls, dn=None, filter=None, conn=None):
|
||||||
conn = conn or cls.ldap()
|
|
||||||
|
|
||||||
if dn is None:
|
|
||||||
dn = f"{cls.base},{cls.root_dn}"
|
|
||||||
elif "=" not in dn:
|
|
||||||
dn = f"{cls.id}={dn},{cls.base},{cls.root_dn}"
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = conn.search_s(dn, ldap.SCOPE_SUBTREE, filter)
|
return cls.filter(dn, filter, conn)[0]
|
||||||
except ldap.LDAPError:
|
except (IndexError, ldap.NO_SUCH_OBJECT):
|
||||||
result = None
|
|
||||||
|
|
||||||
if not result:
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
o = cls(
|
|
||||||
**{k: [elt.decode("utf-8") for elt in v] for k, v in result[0][1].items()}
|
|
||||||
)
|
|
||||||
o.update_ldap_attributes()
|
|
||||||
|
|
||||||
return o
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def filter(cls, base=None, conn=None, **kwargs):
|
def filter(cls, base=None, filter=None, conn=None, **kwargs):
|
||||||
conn = conn or cls.ldap()
|
conn = conn or cls.ldap()
|
||||||
|
|
||||||
|
if base is None:
|
||||||
|
base = f"{cls.base},{cls.root_dn}"
|
||||||
|
elif "=" not in base:
|
||||||
|
base = f"{cls.id}={base},{cls.base},{cls.root_dn}"
|
||||||
|
|
||||||
class_filter = (
|
class_filter = (
|
||||||
"".join([f"(objectClass={oc})" for oc in cls.object_class])
|
"".join([f"(objectClass={oc})" for oc in cls.object_class])
|
||||||
if hasattr(cls, "object_class")
|
if hasattr(cls, "object_class")
|
||||||
else None
|
else ""
|
||||||
)
|
)
|
||||||
arg_filter = ""
|
arg_filter = ""
|
||||||
for k, v in kwargs.items():
|
for k, v in kwargs.items():
|
||||||
|
@ -234,7 +223,9 @@ class LDAPObject:
|
||||||
arg_filter += f"({k}={v[0]})"
|
arg_filter += f"({k}={v[0]})"
|
||||||
else:
|
else:
|
||||||
arg_filter += "(|" + "".join([f"({k}={_v})" for _v in v]) + ")"
|
arg_filter += "(|" + "".join([f"({k}={_v})" for _v in v]) + ")"
|
||||||
ldapfilter = f"(&{class_filter}{arg_filter})" if class_filter else arg_filter
|
|
||||||
|
filter = filter or ""
|
||||||
|
ldapfilter = f"(&{class_filter}{arg_filter}{filter})"
|
||||||
base = base or f"{cls.base},{cls.root_dn}"
|
base = base or f"{cls.base},{cls.root_dn}"
|
||||||
result = conn.search_s(base, ldap.SCOPE_SUBTREE, ldapfilter or None)
|
result = conn.search_s(base, ldap.SCOPE_SUBTREE, ldapfilter or None)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue