def sync(): ldap_connector = ldap.initialize(f"{config['LDAP_URI']}") ldap_connector.set_option(ldap.OPT_REFERRALS, 0) ldap_connector.simple_bind_s(config['LDAP_BIND_DN'], config['LDAP_BIND_DN_PASSWORD']) ldap_results = ldap_connector.search_s( config['LDAP_BASE_DN'], ldap.SCOPE_SUBTREE, config['LDAP_FILTER'], [config['USER_ATTR'], 'cn', 'userAccountControl']) ldap_results = map( lambda x: (x[1][config['USER_ATTR']][0].decode(), x[1]['cn'][0].decode(), False if int(x[1]['userAccountControl'][0].decode()) & 0b10 else True), ldap_results) filedb.session_time = datetime.datetime.now() if 'REPLACE_DOMAIN' in config: replaceDomain = config['REPLACE_DOMAIN'] else: replaceDomain = None for (email, ldap_name, ldap_active) in ldap_results: (db_user_exists, db_user_active) = filedb.check_user(email) (api_user_exists, api_user_active, api_name) = api.check_user(email, replaceDomain) unchanged = True if not db_user_exists: filedb.add_user(email, ldap_active) (db_user_exists, db_user_active) = (True, ldap_active) logging.info(f"Added filedb user: {email} (Active: {ldap_active})") unchanged = False if not api_user_exists: api.add_user(email, ldap_name, ldap_active, replaceDomain) (api_user_exists, api_user_active, api_name) = (True, ldap_active, ldap_name) logging.info( f"Added Mailcow user: {email} (Active: {ldap_active})") unchanged = False if db_user_active != ldap_active: filedb.user_set_active_to(email, ldap_active) logging.info( f"{'Activated' if ldap_active else 'Deactived'} {email} in filedb" ) unchanged = False if api_user_active != ldap_active: api.edit_user(email, replaceDomain, active=ldap_active) logging.info( f"{'Activated' if ldap_active else 'Deactived'} {email} in Mailcow" ) unchanged = False if api_name != ldap_name: api.edit_user(email, replaceDomain, name=ldap_name) logging.info(f"Changed name of {email} in Mailcow to {ldap_name}") unchanged = False if unchanged: logging.info(f"Checked user {email}, unchanged") for email in filedb.get_unchecked_active_users(): (api_user_exists, api_user_active, _) = api.check_user(email, replaceDomain) if (api_user_active and api_user_active): api.edit_user(email, replaceDomain, active=False) logging.info( f"Deactivated user {email} in Mailcow, not found in LDAP") filedb.user_set_active_to(email, False) logging.info(f"Deactivated user {email} in filedb, not found in LDAP")
def sync(): logging.info(config_file.keys()) ldap_connector = ldap.initialize(f"{config_file['HostName']}") ldap_connector.set_option(ldap.OPT_REFERRALS, 0) ldap_connector.simple_bind_s(config_file['BindUser'], config_file['BindPassword']) ldap_results = ldap_connector.search_s( config_file['BaseDN'], ldap.SCOPE_SUBTREE, '(objectClass=gosaMailAccount)', [ config_file['Username'], config_file['Fullname'], config_file['Active User'] ]) logging.info(ldap_results) ldap_results = map( lambda x: (x[1][config_file['Username']][0].decode(), x[1][config_file[ 'Fullname']][0].decode(), False if int(x[1][config_file[ 'Active User']][0].decode()) & 0b10 else True), ldap_results) filedb.session_time = datetime.datetime.now() for (email, ldap_name, ldap_active) in ldap_results: (db_user_exists, db_user_active) = filedb.check_user(email) (api_user_exists, api_user_active, api_name) = api.check_user(email) unchanged = True if not db_user_exists: filedb.add_user(email, ldap_active) (db_user_exists, db_user_active) = (True, ldap_active) logging.info(f"Added filedb user: {email} (Active: {ldap_active})") unchanged = False if not api_user_exists: api.add_user(email, ldap_name, ldap_active) (api_user_exists, api_user_active, api_name) = (True, ldap_active, ldap_name) logging.info( f"Added Mailcow user: {email} (Active: {ldap_active})") unchanged = False if db_user_active != ldap_active: filedb.user_set_active_to(email, ldap_active) logging.info( f"{'Activated' if ldap_active else 'Deactived'} {email} in filedb" ) unchanged = False if api_user_active != ldap_active: api.edit_user(email, active=ldap_active) logging.info( f"{'Activated' if ldap_active else 'Deactived'} {email} in Mailcow" ) unchanged = False if api_name != ldap_name: api.edit_user(email, name=ldap_name) logging.info(f"Changed name of {email} in Mailcow to {ldap_name}") unchanged = False if unchanged: logging.info(f"Checked user {email}, unchanged") for email in filedb.get_unchecked_active_users(): (api_user_exists, api_user_active, _) = api.check_user(email) if (api_user_active and api_user_active): api.edit_user(email, active=False) logging.info( f"Deactivated user {email} in Mailcow, not found in LDAP") filedb.user_set_active_to(email, False) logging.info(f"Deactivated user {email} in filedb, not found in LDAP")
def sync(): ldap_connector = ldap.initialize(f"{config['LDAP_URI']}") ldap_connector.set_option(ldap.OPT_REFERRALS, 0) ldap_connector.simple_bind_s(config['LDAP_BIND_DN'], config['LDAP_BIND_DN_PASSWORD']) ldap_results = ldap_connector.search_s( config['LDAP_BASE_DN'], ldap.SCOPE_SUBTREE, config['LDAP_FILTER'], ['mail', 'displayName', 'userAccountControl']) filedb.session_time = datetime.datetime.now() for x in ldap_results: try: logging.info("Working on " + x[1]['sAMAccountName']) email = x[1]['mail'][0].decode() ldap_name = x[1]['displayName'][0].decode() ldap_active = False if int( x[1]['userAccountControl'][0].decode()) & 0b10 else True (db_user_exists, db_user_active) = filedb.check_user(email) (api_user_exists, api_user_active, api_name) = api.check_user(email) unchanged = True if not db_user_exists: filedb.add_user(email, ldap_active) (db_user_exists, db_user_active) = (True, ldap_active) logging.info( f"Added filedb user: {email} (Active: {ldap_active})") unchanged = False if not api_user_exists: api.add_user(email, ldap_name, ldap_active, 256) (api_user_exists, api_user_active, api_name) = (True, ldap_active, ldap_name) logging.info( f"Added Mailcow user: {email} (Active: {ldap_active})") unchanged = False if db_user_active != ldap_active: filedb.user_set_active_to(email, ldap_active) logging.info( f"{'Activated' if ldap_active else 'Deactived'} {email} in filedb" ) unchanged = False if api_user_active != ldap_active: api.edit_user(email, active=ldap_active) logging.info( f"{'Activated' if ldap_active else 'Deactived'} {email} in Mailcow" ) unchanged = False if api_name != ldap_name: api.edit_user(email, name=ldap_name) logging.info( f"Changed name of {email} in Mailcow to {ldap_name}") unchanged = False if unchanged: logging.info(f"Checked user {email}, unchanged") except Exception: logging.info(f"Exception during something. See above") pass for email in filedb.get_unchecked_active_users(): (api_user_exists, api_user_active, _) = api.check_user(email) if (api_user_active and api_user_active): api.edit_user(email, active=False) logging.info( f"Deactivated user {email} in Mailcow, not found in LDAP") filedb.user_set_active_to(email, False) logging.info(f"Deactivated user {email} in filedb, not found in LDAP")
def sync(): ldap_connector = ldap.initialize(f"{config['LDAP_HOST']}") ldap_connector.set_option(ldap.OPT_REFERRALS, 0) ldap_connector.simple_bind_s(config['LDAP_BIND_DN'], config['LDAP_BIND_DN_PASSWORD']) #ldap_results = ldap_connector.search_s(config['LDAP_BASE_DN'], ldap.SCOPE_SUBTREE, # '(&(objectClass=user)(objectCategory=person))', # ['userPrincipalName', 'cn', 'userAccountControl']) ldap_results = ldap_connector.search_s( config['LDAP_BASE_DN'], ldap.SCOPE_SUBTREE, config['LDAP_FILTER'], [config['LDAP_FIELDS_MAIL'], config['LDAP_FIELDS_NAME'], 'True']) ldap_results = map( lambda x: ( [i.decode() for i in x[1][config['LDAP_FIELDS_MAIL']]], x[1][config['LDAP_FIELDS_NAME']][0].decode(), #False if int(x[1]['userAccountControl'][0].decode()) & 0b10 else True), ldap_results) True), ldap_results) filedb.session_time = datetime.datetime.now() for (ldap_email, ldap_name, ldap_active) in ldap_results: for email in ldap_email: if email.split('@')[1] not in config['EMAIL_DOMAINS']: continue (db_user_exists, db_user_active) = filedb.check_user(email) (api_user_exists, api_user_active, api_name) = api.check_user(email) unchanged = True if not db_user_exists: filedb.add_user(email, ldap_active) (db_user_exists, db_user_active) = (True, ldap_active) logging.info( f"Added filedb user: {email} (Active: {ldap_active})") unchanged = False if not api_user_exists: api.add_user(email, ldap_name, ldap_active) (api_user_exists, api_user_active, api_name) = (True, ldap_active, ldap_name) logging.info( f"Added Mailcow user: {email} (Active: {ldap_active})") unchanged = False if db_user_active != ldap_active: filedb.user_set_active_to(email, ldap_active) logging.info( f"{'Activated' if ldap_active else 'Deactived'} {email} in filedb" ) unchanged = False if api_user_active != ldap_active: api.edit_user(email, active=ldap_active) logging.info( f"{'Activated' if ldap_active else 'Deactived'} {email} in Mailcow" ) unchanged = False if api_name != ldap_name: api.edit_user(email, name=ldap_name) logging.info( f"Changed name of {email} in Mailcow to {ldap_name}") unchanged = False if unchanged: logging.info(f"Checked user {email}, unchanged") for email in filedb.get_unchecked_active_users(): (api_user_exists, api_user_active, _) = api.check_user(email) if (api_user_active and api_user_active): api.edit_user(email, active=False) logging.info( f"Deactivated user {email} in Mailcow, not found in LDAP") filedb.user_set_active_to(email, False) logging.info(f"Deactivated user {email} in filedb, not found in LDAP")