zulip/zerver/lib/dev_ldap_directory.py

66 lines
2.5 KiB
Python

import glob
import os
from typing import Any, Dict
from django.conf import settings
# See https://jackstromberg.com/2013/01/useraccountcontrol-attributeflag-values/
# for docs on what these values mean.
LDAP_USER_ACCOUNT_CONTROL_NORMAL = '512'
LDAP_USER_ACCOUNT_CONTROL_DISABLED = '514'
def generate_dev_ldap_dir(mode: str, num_users: int=8) -> Dict[str, Dict[str, Any]]:
mode = mode.lower()
names = []
for i in range(1, num_users+1):
names.append(('LDAP User %d' % (i,), 'ldapuser%d@zulip.com' % (i,)))
profile_images = [open(path, "rb").read() for path in
glob.glob(os.path.join(settings.STATIC_ROOT, "images/team/*"))]
ldap_dir = {}
for i, name in enumerate(names):
if mode == 'a':
email = name[1].lower()
email_username = email.split('@')[0]
ldap_dir['uid=' + email + ',ou=users,dc=zulip,dc=com'] = {
'cn': [name[0], ],
'userPassword': email_username,
'thumbnailPhoto': [profile_images[i % len(profile_images)], ],
'userAccountControl': [LDAP_USER_ACCOUNT_CONTROL_NORMAL, ],
}
elif mode == 'b':
email = name[1].lower()
email_username = email.split('@')[0]
ldap_dir['uid=' + email_username + ',ou=users,dc=zulip,dc=com'] = {
'cn': [name[0], ],
'userPassword': email_username,
'jpegPhoto': [profile_images[i % len(profile_images)], ],
}
elif mode == 'c':
email = name[1].lower()
email_username = email.split('@')[0]
ldap_dir['uid=' + email_username + ',ou=users,dc=zulip,dc=com'] = {
'cn': [name[0], ],
'userPassword': email_username + '_test',
'email': email,
}
return ldap_dir
def init_fakeldap() -> None: # nocoverage
# We only use this in development. Importing mock inside
# this function is an import time optimization, which
# avoids the expensive import of the mock module (slow
# because its dependency pbr uses pkgresources, which is
# really slow to import.)
import mock
from fakeldap import MockLDAP
ldap_patcher = mock.patch('django_auth_ldap.config.ldap.initialize')
mock_initialize = ldap_patcher.start()
mock_ldap = MockLDAP()
mock_initialize.return_value = mock_ldap
mock_ldap.directory = generate_dev_ldap_dir(settings.FAKE_LDAP_MODE,
settings.FAKE_LDAP_NUM_USERS)