75 lines
1.8 KiB
Python
75 lines
1.8 KiB
Python
from ldap3 import ALL_ATTRIBUTES
|
|
from phi.ldap.utils import get_response, make_user_dict, add_entry, delete_entry
|
|
from phi.logging import get_logger
|
|
|
|
log = get_logger(__name__)
|
|
|
|
|
|
def get_user_by_uid(client, uid):
|
|
log.info("Searching entry with identifier: {}".format(uid))
|
|
|
|
filter_ = "({}={})".format('uid', uid)
|
|
log.debug("Search filter: {}".format(filter_))
|
|
|
|
response_id = client.connection.search(
|
|
client.base_dn, filter_,
|
|
search_scope='SUBTREE',
|
|
attributes=[ALL_ATTRIBUTES]
|
|
)
|
|
|
|
response = get_response(client, response_id)
|
|
|
|
if not response:
|
|
return None
|
|
|
|
if len(response) > 1:
|
|
log.error("Looking for exactly one result but server gave {}. "
|
|
"Taking the first and ignoring the rest."
|
|
.format(len(response)))
|
|
|
|
return make_user_dict(client, response[0])
|
|
|
|
|
|
def get_all_users(client):
|
|
log.info("Searching all the users")
|
|
|
|
dn = 'ou=Hackers,{}'.format(client.base_dn)
|
|
log.debug("Search dn: {}".format(dn))
|
|
|
|
response_id = client.connection.search(
|
|
dn, '(objectclass=person)',
|
|
search_scope='SUBTREE',
|
|
attributes=[ALL_ATTRIBUTES]
|
|
)
|
|
|
|
response = get_response(client, response_id)
|
|
|
|
users = [make_user_dict(client, entry) for entry in response]
|
|
return users
|
|
|
|
|
|
def add_user(client, uid, cn, sn, mail):
|
|
dn = 'uid={},ou=Hackers,{}'.format(uid, client.base_dn)
|
|
|
|
attributes={
|
|
'objectClass': [
|
|
'inetOrgPerson',
|
|
'organizationalPerson',
|
|
'person', 'top'
|
|
],
|
|
'cn': cn,
|
|
'sn': sn,
|
|
'mail': mail
|
|
}
|
|
|
|
add_entry(client, dn, attributes)
|
|
|
|
|
|
def delete_user(client, user):
|
|
delete_entry(client, user['dn'])
|
|
|
|
|
|
def delete_user_by_uid(client, uid):
|
|
dn = 'uid={},ou=Hackers,{}'.format(uid, client.base_dn)
|
|
delete_entry(client, dn)
|