phi/src/phi/async_ldap/new_model.py

80 lines
2.2 KiB
Python

# -*- encoding: utf-8 -*-
from bonsai import LDAPEntry
from multidict import MultiDict
from phi.async_ldap import mixins
class User(mixins.Singleton, mixins.Entry, mixins.Member):
object_class = [
"inetOrgPerson",
"simpleSecurityObject",
"organizationalPerson",
"person",
"top",
]
_instances = dict() # type: ignore
id_tag = "uid"
ou = "Hackers"
ldap_attributes = ["uid", "ou", "cn", "sn", "mail", "userPassword"]
class Hackers(mixins.Singleton, mixins.Entry, mixins.OrganizationalUnit):
_instances = dict() # type: ignore
ou = "Hackers"
child_class = User
class Service(mixins.Singleton, mixins.Entry, mixins.Member):
object_class = ["simpleSecurityObject", "account", "top"]
_instances = dict() # type: ignore
id_tag = "uid"
ou = "Robots"
ldap_attributes = ["uid", "ou", "userPassword"]
class Robots(mixins.Singleton, mixins.Entry, mixins.OrganizationalUnit):
_instances = dict() # type: ignore
ou = "Robots"
child_class = Service
class Group(mixins.Singleton, mixins.Entry, mixins.Member):
object_class = ["groupOfNames", "top"]
_instances = dict() # type: ignore
id_tag = "cn"
ou = "Congregations"
ldap_attributes = ["cn", "ou", "member"]
memeber_classes = {"Hackers": User, "Robots": Service}
async def add_member(self, member):
self._entry["member"].append(get_dn(member))
await self.modify()
async def remove_member(self, member):
self._entry["member"] = [get_dn(m) for m in self.get_members() if member != m]
await self.modify()
def get_members(self):
for member in self._entry.get("member", []):
dn = MultiDict(e.split("=") for e in member.split(","))
yield self.memeber_classes.get(dn["ou"])(self.client, dn["uid"])
class Congregations(mixins.Singleton, mixins.Entry, mixins.OrganizationalUnit):
_instances = dict() # type: ignore
ou = "Congregations"
child_class = Group
def get_dn(obj):
if isinstance(obj, mixins.Entry):
return obj.dn
elif isinstance(obj, LDAPEntry):
return obj["dn"]
elif isinstance(obj, str):
return obj
else:
raise ValueError(f"Unacceptable input: {obj}")